--- language: - en license: cc-by-nc-4.0 tags: - speech-to-speech - full-duplex - mlx - apple-silicon - personaplex - moshi base_model: nvidia/personaplex-7b-v1 pipeline_tag: audio-to-audio --- > **Note**: For full-duplex (real-time) inference, use the [8-bit variant](https://huggingface.co/aufklarer/PersonaPlex-7B-MLX-8bit) instead. 4-bit quantization degrades PersonaPlex response quality significantly — INT8 is both 30% faster (112ms vs 158ms/step) and produces coherent responses where INT4 generates garbled output. # PersonaPlex-7B MLX 4-bit [PersonaPlex](https://arxiv.org/abs/2504.07966) 7B full-duplex speech-to-speech model converted to MLX safetensors with 4-bit quantization for Apple Silicon. Converted from [nvidia/personaplex-7b-v1](https://huggingface.co/nvidia/personaplex-7b-v1) (based on [Kyutai Moshi](https://kyutai.org/moshi/) architecture). **Swift inference**: [soniqo/speech-swift](https://github.com/soniqo/speech-swift) **Library Docs**: [soniqo.audio](https://soniqo.audio) **Blog**: [PersonaPlex on Apple Silicon — Full-Duplex Speech-to-Speech in Native Swift with MLX](https://blog.ivan.digital/nvidia-personaplex-7b-on-apple-silicon-full-duplex-speech-to-speech-in-native-swift-with-mlx-0aa5276f2e23) ## Model Details | Component | Architecture | Size | |-----------|-------------|------| | Temporal Transformer | 32-layer, 4096d, 32 heads (7B params) | ~3.5 GB (4-bit) | | Depformer | 6-layer, 1024d, 16 heads, per-codebook weights | ~50 MB (fp16) | | Mimi Codec | SEANet encoder/decoder + 8L transformer + 16 RVQ codebooks | ~370 MB (fp16) | | Embeddings | Text + 16 audio embeddings + output heads | ~940 MB (fp16) | | **Total** | | **~4.9 GB** | ## Architecture ``` [User Audio 24kHz] → [Mimi Encoder] → 16 codebook tokens @ 12.5Hz ↓ [Temporal Transformer: 32L, dim=4096, 7B params] 17 streams: text + 8 user audio + 8 agent audio ↓ [Depformer: 6L, dim=1024, per-codebook weights] 16 sequential steps → agent audio codebook tokens ↓ [Agent Audio 24kHz] ← [Mimi Decoder] ← codebook tokens @ 12.5Hz ``` ## Voices 18 voice presets available: | Category | Voices | |----------|--------| | Natural Female | NATF0, NATF1, NATF2, NATF3 | | Natural Male | NATM0, NATM1, NATM2, NATM3 | | Variety Female | VARF0, VARF1, VARF2, VARF3, VARF4 | | Variety Male | VARM0, VARM1, VARM2, VARM3, VARM4 | ## Files - `temporal.safetensors` — Temporal transformer (4-bit quantized, group_size=64) - `depformer.safetensors` — Depformer layers + input projections (fp16) - `embeddings.safetensors` — Text/audio embeddings + output heads (fp16) - `mimi.safetensors` — Mimi neural audio codec (fp16) - `voices/*.safetensors` — Voice preset embeddings - `tokenizer_spm_32k_3.model` — SentencePiece tokenizer - `config.json` — Model configuration ## Quantization - Temporal transformer attention (Q/K/V output projections) and FFN: 4-bit with group_size=64 - Attention input projection (`in_proj`): kept fp16 (packed Q+K+V format) - Depformer: kept fp16 (~50 MB, not worth quantizing) - Mimi codec: kept fp16 (audio quality sensitive) ## Usage ```swift import PersonaPlex let model = try await PersonaPlexModel.fromPretrained() let response = model.respond( userAudio: audioSamples, // [Float] 24kHz mono voice: .NATM0, maxSteps: 500 ) ``` ### CLI ```bash swift run personaplex-cli --input question.wav --output response.wav --voice NATM0 ``` See [soniqo/speech-swift](https://github.com/soniqo/speech-swift) for build instructions. ## License CC-BY-NC-4.0 (same as upstream PersonaPlex) ## Citation ```bibtex @article{nguyen2025personaplex, title={PersonaPlex: Enhancing Human-Centric AI Through Full-Duplex Multi-Turn Conversations With Persona-Conditioned Voice Responses}, author={Nguyen, Tu Anh and others}, journal={arXiv preprint arXiv:2504.07966}, year={2025} } ``` --- - **Guide**: [soniqo.audio/guides/respond](https://soniqo.audio/guides/respond) - **Docs**: [soniqo.audio](https://soniqo.audio) - **GitHub**: [soniqo/speech-swift](https://github.com/soniqo/speech-swift)