A 7B model listens while it speaks
PersonaPlex is a 7B speech-to-speech model built on Moshi. Full duplex means incoming audio and generated speech can overlap, so a user can interrupt and the model can produce short acknowledgements without waiting for a strict turn boundary. A text prompt supplies role and scenario details, while an audio prompt conditions the voice. That direct audio loop is the reason to consider PersonaPlex instead of chaining speech recognition, a text model, and speech synthesis.
The repository includes 18 named voice prompts split between natural and varied groups, with female and male options. Training covers a fixed assistant role, synthetic customer-service conversations, and real conversations from the Fisher English Corpus. The README gives prompt examples for restaurant, waste collection, and equipment-rental calls, plus casual discussion. It encourages experiments outside those patterns, but describes the resulting behavior as generalization rather than a contract an application can depend on.
Python 3.12, Opus, and gated weights come before the demo
The included Dockerfile creates a Python 3.12 environment, installs the Opus development library, and starts the Moshi server on port 8998. A manual setup installs libopus-dev, then the local moshi package. Model weights live behind an accepted NVIDIA license on Hugging Face, so the server also needs an authenticated HF_TOKEN. Blackwell systems have a separate PyTorch command using the CUDA 13.0 package index.
CPU offload is available through accelerate when GPU memory is short. Issue 105 reports that path crashing during warmup on an 8 GB RTX 3070 once layers were placed on the CPU. The reporter supplied a diagnosis and local patch, but the issue remained open when checked. Pure CPU is mentioned for offline evaluation; the README does not claim that route can sustain a live, overlapping conversation.
What happened when we ran it
Our run used a fresh Node 22 container with 3 CPUs and 8 GB of RAM, and it exercised only the web client under client/. Npm installed 385 packages in 38 seconds, leaving 248 MB on disk. The client build succeeded in 10 seconds. Those results say the browser interface compiles at commit 3428dfd; they say nothing about Python installation, model downloads, GPU compatibility, speech quality, or response latency.
There was no test script or target, so the harness skipped tests. Npm audit found 23 known vulnerabilities in the client dependency tree: 0 critical, 15 high, 7 moderate, and 1 low. The report supplied no exploitability analysis, so those counts do not prove the application is compromised. They do create a specific triage job before the web UI is exposed beyond a controlled lab.
The checkout contained 109 files, about 11,343 lines of source, and occupied 4.4 MB before installation. Our scan found 0 CI workflow files, a Dockerfile, and no tests directory. The Dockerfile covers the Python server while the successful lab build covers the separate TypeScript client. That split matters: a green 10-second client build cannot validate the CUDA runtime or the gated model weights.
Zero of 12 verbatim attempts is a warning for scripted calls
Issue 107 reports 0 exact outputs across 12 attempts to force one fixed phone announcement. The model repeatedly produced its own greeting instead, even with low text temperature and several prompt forms. The same report says a supplied business name appeared in 11 of 12 runs, which suggests the prompt influenced content without controlling the full sentence. Legally required notices need a separate deterministic playback or synthesis path unless this behavior changes.
Role control also needs scenario-specific tests. Issue 97 shows a user asking the model to call a restaurant on someone else's behalf, then receiving a reply in the restaurant-assistant role. That single report does not establish a general failure rate. It does match the README's own scope: much of the synthetic training uses assistant and customer-service roles. Put representative role reversals, names, prices, and interruptions into an acceptance set before building a product around prompt adherence.
An 8 GB offload crash and 128 GB audio reports make hardware testing mandatory
Issue 105 covers an 8 GB card, while issue 3 collects choppy-audio reports on GB10 systems with 128 GB of unified memory. NVIDIA collaborators joined that thread, and community forks later posted hardware-specific changes. Results varied across PyTorch, CUDA, and device combinations. The useful conclusion is limited: GPU capacity by itself does not guarantee stable real-time audio, and the stock path must be tested on the deployment machine.
Offline evaluation is easier to reason about. The supplied command streams an input WAV and records output audio plus JSON text, with output audio matching the input duration. A fixed seed is shown in the examples. That gives researchers a repeatable file-based route for listening tests and transcript checks before opening a microphone. It still needs licensed weights and the model runtime, neither of which our 248 MB client installation exercised.
March source and August questions show interest without a release cadence
GitHub records 10,432 stars and 71 combined issues and pull requests. The last source push was March 2, 2026, while issue 107 opened on August 22. The latest-release endpoint returned no tagged release. This is mixed health evidence: people are still trying the model and documenting specific failures, but adopters cannot point to a recent version tag or a main-branch update that answers the newest reports.
PersonaPlex is most convincing as a research checkout for people who specifically need overlapping speech. The 38-second client install is easy, yet it is the least demanding part of the system. Gated weights, CUDA-specific setup, 23 audit findings, absent client tests, and open hardware reports make production adoption a larger engineering project. Validate exact wording, role direction, interruption behavior, and sustained audio on your own calls before choosing it over a modular voice-agent framework.

