- El modelo PersonaPlex 7B implementado con Swift/MLX en Apple Silicon admite conversación de voz bidireccional en tiempo real
- Integra en un solo modelo la canalización de voz de tres etapas ASR→LLM→TTS, procesando directamente entrada y salida de audio sin conversión a texto
- Con cuantización de 4 bits (quantization), redujo el tamaño del modelo de 16.7 GB a 5.3 GB y logró una velocidad de procesamiento más rápida que el tiempo real con 68 ms/paso (RTF 0.87)
- Usa el códec de audio Mimi y la arquitectura Depformer para implementar streaming eficiente sin degradar la calidad de voz
- Funciona de forma nativa en Swift sin servidor, y es una tecnología base importante para el desarrollo de asistentes de voz y agentes conversacionales
Integración de qwen3-asr-swift y PersonaPlex 7B
- La librería qwen3-asr-swift integra NVIDIA PersonaPlex 7B en Apple Silicon para ofrecer conversación de voz bidireccional (full-duplex speech-to-speech)
- Procesa audio de entrada en tiempo real y, al mismo tiempo, genera audio de respuesta
- Se amplió como una librería unificada de procesamiento de voz que incluye funciones de ASR, TTS y síntesis multilingüe
- El modelo se ofrece como una versión cuantizada de 4 bits de 5.3 GB en Hugging Face en
aufklarer/PersonaPlex-7B-MLX-4bit
Unificación de la canalización de voz tradicional
- Los asistentes de voz tradicionales usan una estructura de tres etapas: ASR → LLM → TTS, donde en cada fase se producen latencia y pérdida emocional
- PersonaPlex lo integra en un único modelo para procesar directamente tokens de audio (audio tokens)
- Convierte audio en tiempo real mediante 17 flujos paralelos (12.5 Hz)
- Basado en la arquitectura Moshi de Kyutai, admite 18 presets de voz y prompts de sistema basados en roles
Estructura y conversión del modelo
- El checkpoint original de PyTorch de 16.7 GB se convirtió a safetensors optimizados para MLX
- El script de conversión (
convert_personaplex.py) automatiza la clasificación de pesos, la cuantización de 4 bits, la extracción de presets y la subida a Hugging Face
- Tanto el Temporal Transformer (7B parámetros) como Depformer se comprimieron a 4 bits
- Depformer usa una estructura de cambio de pesos por etapa (MultiLinear) para reducirse de 2.4 GB a 650 MB
- 3.7 veces menos tamaño sin pérdida de calidad
Canalización de procesamiento de voz
- Mediante el Encoder/Decoder Mimi, el audio de 24 kHz se convierte en tokens de 16 codebooks
- El Temporal Transformer procesa de forma unificada los flujos de audio del usuario y del agente
- Depformer genera tokens de audio del agente en 16 etapas
- El Mimi Decoder los reconstruye de nuevo a audio de 24 kHz
- Se reutilizan sin cambios componentes de modelos TTS existentes, como códec Mimi, caché KV, RoPE, SwiGLU y RMSNorm
Prompt de sistema y control de conversación
- PersonaPlex controla el estilo de conversación con un prompt de sistema basado en texto
- Sin prompt, el modelo puede desviarse del tema o responder de forma demasiado extensa
- En CLI o API se pueden elegir presets como assistant, customer service, teacher
- Incluso con la misma pregunta, la calidad de la respuesta cambia mucho según haya o no prompt
Rendimiento y procesamiento en tiempo real
- En un entorno M2 Max (64 GB), logró una velocidad más rápida que el tiempo real con 68 ms/paso y RTF 0.87
- Opera de forma estable dentro del presupuesto de 80 ms por cuadro (12.5 Hz)
- ASR, TTS y Speech-to-Speech pueden probarse de forma integrada dentro de una sola librería
- La validación E2E vuelve a convertir a texto el audio de respuesta mediante ASR para verificar la coherencia temática
Streaming y optimización
- La API
respondStream() genera en tiempo real chunks de audio de 2 segundos
- Puede reproducirse de inmediato en forma de AsyncThrowingStream<AudioChunk>
- Cuatro optimizaciones principales:
- Integración de eval() para reducir la sincronización con GPU
- Bulk audio extraction para mejorar la eficiencia de decodificación
- Prefill batching para paralelizar la etapa inicial
- Compilación del temporal transformer para optimizar más de 450 llamadas a kernels de Metal
- Es posible activar kernel fusion con la bandera
--compile o con model.warmUp()
Ejecución y despliegue
- Repositorio de GitHub: ivan-digital/qwen3-asr-swift
- Tras compilar con
swift build -c release, se puede ejecutar ASR, TTS y Speech-to-Speech con comandos CLI
- En la primera ejecución se requiere descargar un modelo de aproximadamente 5.3 GB
- Basado en el framework MLX, funciona completamente en un entorno nativo de Swift sin Python ni servidor
Relevancia técnica
- Demuestra la ejecución on-device de modelos de voz de alto rendimiento aprovechando la memoria unificada de Apple Silicon y la aceleración con Metal
- Al implementar conversación de voz en tiempo real basada en un solo modelo, abre posibilidades para aplicaciones como asistentes de IA, call centers e interfaces de voz educativas
- Se valora como un logro de integración entre varios ecosistemas open source, incluidos NVIDIA, Kyutai, Alibaba Qwen, FunAudioLLM y Apple MLX
1 comentarios
Opiniones de Hacker News
Me gustó muchísimo este proyecto. Antes intenté ejecutar PersonaPlex en un dispositivo Blackwell y fallé; esta vez pienso probarlo en Mac
Desde la perspectiva de alguien que lleva bastante tiempo trabajando con agentes de voz, hay varios puntos a tener en cuenta. Incluso un pipeline VAD→ASR→LLM→TTS se siente en tiempo real si el RTT es menor a 1 segundo. Vale la pena revisar ejemplos como mi proyecto ova, además de voice-agent y parakeet.cpp
Hablando con la comunidad de PersonaPlex, parece que una arquitectura full-duplex completa sigue siendo difícil en términos de precisión y rendimiento, y además es complicada de entrenar. En cambio, la estructura ASR→LLM→TTS es modular, así que ofrece la flexibilidad de mezclar libremente LLM pequeños y grandes, y endpoints locales o basados en API
La estructura tradicional STT→LLM→TTS encaja bien con llamadas a herramientas, manejo avanzado de contexto, RAG, etc. Separar el agente que conversa directamente con la persona de los subagentes internos funciona bien para reducir la latencia y la carga de contexto
La estructura full-duplex se siente más dinámica, pero todavía no tengo claro cómo integrarla de forma práctica en un agente de voz. Me gustaría intercambiar ideas por Discord
Como qwen3-asr-swift agrupa ASR, TTS y PersonaPlex en un solo paquete de Swift, todos los componentes necesarios ya están ahí. PersonaPlex se encarga del backchanneling de baja latencia y de un turn-taking natural, mientras que un LLM aparte realiza las llamadas a herramientas
El problema es la orquestación entre ambos. Sigue sin resolverse cuándo el “cerebro” debe sobrescribir a la “boca”, cómo evitar que PersonaPlex diga con seguridad respuestas no verificadas, y qué hacer cuando el resultado de una herramienta entra en conflicto con una emisión previa
El proyecto me parece interesante, pero personalmente me gustaría que el modelo local de 7B tuviera funciones de llamada a herramientas. La versión actual está más en nivel de proof of concept, ya que simplemente recibe archivos wav
El estilo de redacción generado por LLM en el artículo se sentía demasiado artificial, y eso me hizo dudar de la calidad del proyecto
Probé la demo en una MacBook M1 Max, pero tardaba más de 10 segundos en responder y además decía cosas sin sentido
Claro, podría ser útil en ciertos casos de uso, pero me gustaría aprender más sobre esa parte
Esta tecnología se ve bastante peligrosa. Artículo relacionado: reporte de The Guardian
El mejor demo full-duplex que he visto fue Sesame. Me pregunto qué habrá pasado con eso ahora (enlace)
Soy fan de whisperKit. Hace poco le agregaron funciones de TTS y quedó muchísimo mejor. También soporta diarización de hablantes y diccionarios personalizados
Hay incluso una prueba de carga ejecutando 4 modelos al mismo tiempo en tiempo real en un solo dispositivo:
Video de prueba
Quiero construir un sistema donde mi teléfono reenvíe automáticamente las llamadas spam a este modelo, y que vaya soltando datos personales falsos lentamente mientras mezcla comentarios sobre el clima o deportes
Estoy intentando fine-tunear PersonaPlex para llamadas salientes. Apliqué el enfoque LoRA de Kyutai/moshi-finetune, pero solo funciona si subo el factor de escalado a 5, y eso rompe otras partes
GPT-5.3 Codex me señaló durante una revisión de código que los hablantes A/B estaban invertidos, así que estoy regenerando el dataset.
En mi GitHub (runvnc) tengo versiones de moshi-finetune y personaplex, y se puede generar datos y entrenar con una app de Gradio. Todavía no salen resultados realmente utilizables
Uso mucho MacWhisper, pero aunque el modelo Whisper Large v3 Turbo está bien, la latencia se va acumulando. Si haces posprocesamiento con un LLM online, la calidad mejora, pero se vuelve lento
Enlace del modelo, FluidAudio GitHub
La comunidad de Discord también es muy activa, y hay mucho debate sobre funciones recientes como VAD, TTS, EOU