- O modelo PersonaPlex 7B, implementado com Swift/MLX no Apple Silicon, oferece suporte a conversa por voz bidirecional em tempo real
- Ele unifica o pipeline de voz tradicional de 3 etapas, ASR→LLM→TTS, em um único modelo, processando entrada e saída de áudio diretamente, sem conversão para texto
- Com quantização de 4 bits (quantization), o tamanho do modelo foi reduzido de 16,7 GB para 5,3 GB, alcançando 68 ms/step (RTF 0,87) e velocidade de processamento mais rápida que o tempo real
- Usa o codec de áudio Mimi e a arquitetura Depformer para implementar streaming eficiente sem perda de qualidade de voz
- Funciona de forma nativa em Swift, sem servidor, sendo uma tecnologia fundamental para o desenvolvimento de assistentes de voz e agentes conversacionais
Integração do qwen3-asr-swift com o PersonaPlex 7B
- A biblioteca qwen3-asr-swift integrou o NVIDIA PersonaPlex 7B no Apple Silicon, oferecendo suporte a conversa por voz bidirecional (full-duplex speech-to-speech)
- Processa o áudio de entrada em tempo real e, ao mesmo tempo, gera o áudio de resposta
- Foi expandida para uma biblioteca unificada de processamento de voz, incluindo ASR, TTS e síntese multilíngue
- O modelo é fornecido em uma versão quantizada de 4 bits com 5,3 GB no Hugging Face em
aufklarer/PersonaPlex-7B-MLX-4bit
Unificação do pipeline de voz tradicional
- Assistentes de voz tradicionais seguem uma estrutura de 3 etapas, ASR → LLM → TTS, em que há latência e perda de emoção em cada etapa
- O PersonaPlex integra isso em um único modelo, processando tokens de áudio (audio tokens) diretamente
- Converte áudio em tempo real com 17 fluxos paralelos (12,5 Hz)
- Baseado na arquitetura Moshi da Kyutai, oferece suporte a 18 presets de voz e prompts de sistema baseados em papéis
Estrutura e conversão do modelo
- O checkpoint original em PyTorch de 16,7 GB foi convertido para safetensors otimizados para MLX
- O script de conversão (
convert_personaplex.py) automatiza classificação de pesos, quantização em 4 bits, extração de presets e upload para o Hugging Face
- Tanto o Temporal Transformer (7B de parâmetros) quanto o Depformer foram comprimidos para 4 bits
- O Depformer usa uma estrutura de troca de pesos por etapa (MultiLinear) para reduzir de 2,4 GB para 650 MB
- Redução de tamanho de 3,7x sem perda de qualidade
Pipeline de processamento de voz
- Por meio do Mimi Encoder/Decoder, o áudio em 24 kHz é convertido em 16 tokens de codebook
- O Temporal Transformer processa de forma integrada os fluxos de áudio do usuário e do agente
- O Depformer gera os tokens de áudio do agente em 16 etapas
- O Mimi Decoder reconstrói isso novamente em áudio de 24 kHz
- Componentes de modelos TTS existentes, como codec Mimi, KV cache, RoPE, SwiGLU e RMSNorm, são reutilizados sem alterações
Prompt de sistema e controle da conversa
- O PersonaPlex controla o estilo da conversa com prompts de sistema baseados em texto
- Sem prompt, o modelo pode sair do tema ou responder de forma prolixa
- No CLI ou na API, é possível selecionar presets como assistant, customer service, teacher
- Mesmo para a mesma pergunta, a qualidade da resposta muda significativamente dependendo da presença do prompt
Desempenho e processamento em tempo real
- Em um ambiente M2 Max (64 GB), alcançou 68 ms/step, RTF 0,87, ficando mais rápido que o tempo real
- Opera de forma estável dentro do orçamento de 80 ms por frame (12,5 Hz)
- ASR, TTS e Speech-to-Speech podem ser testados de forma integrada em uma única biblioteca
- Na validação E2E, o áudio de resposta é convertido novamente em texto via ASR para verificar a consistência temática
Streaming e otimização
- A API
respondStream() gera chunks de áudio em intervalos de 2 segundos em tempo real
- Eles podem ser reproduzidos imediatamente no formato AsyncThrowingStream<AudioChunk>
- Quatro otimizações principais:
- Integração de eval() para reduzir sincronizações de GPU
- Bulk audio extraction para melhorar a eficiência de decodificação
- Prefill batching para processamento paralelo na etapa inicial
- Compilação do temporal transformer para otimizar mais de 450 chamadas de kernel Metal
- A fusão de kernels pode ser ativada com a flag
--compile ou com model.warmUp()
Execução e implantação
- Repositório no GitHub: ivan-digital/qwen3-asr-swift
- Após compilar com
swift build -c release, é possível executar ASR, TTS e Speech-to-Speech via comandos de CLI
- Na primeira execução, é necessário baixar cerca de 5,3 GB do modelo
- Baseado no framework MLX, funciona completamente em ambiente Swift nativo, sem Python nem servidor
Importância técnica
- Demonstra a execução on-device de modelos de voz de alto desempenho aproveitando a memória unificada do Apple Silicon e a aceleração via Metal
- Ao implementar conversa por voz em tempo real com base em um único modelo, amplia as possibilidades de aplicação em assistentes de IA, call centers e interfaces de voz para educação
- É avaliado como um resultado de integração entre vários ecossistemas open source, como NVIDIA, Kyutai, Alibaba Qwen, FunAudioLLM e Apple MLX
1 comentários
Comentários do Hacker News
Gostei muito deste projeto. Tentei rodar o PersonaPlex em um dispositivo Blackwell no passado e falhei; desta vez pretendo tentar no Mac
Como alguém que trabalha com agentes de voz há bastante tempo, há alguns pontos de atenção. Mesmo um pipeline VAD→ASR→LLM→TTS parece em tempo real se o RTT ficar abaixo de 1 segundo. Vale olhar exemplos como meu projeto ova, além de voice-agent e parakeet.cpp
Pelo que conversei com a comunidade do PersonaPlex, uma arquitetura full-duplex completa ainda é difícil em termos de precisão e desempenho, e também é complicada de treinar. Já a arquitetura ASR→LLM→TTS é modular, então oferece a flexibilidade de misturar livremente LLMs pequenos e grandes, endpoints locais e baseados em API
A arquitetura tradicional STT→LLM→TTS combina bem com chamadas de ferramentas, gerenciamento avançado de contexto, RAG etc. Separar o agente que conversa diretamente com a pessoa dos subagentes internos funciona bem para reduzir latência e carga de contexto
A estrutura full-duplex parece mais dinâmica, mas ainda não tenho muita clareza sobre como integrá-la de fato a um agente de voz. Queria trocar ideias no Discord
Como o qwen3-asr-swift reuniu ASR, TTS e PersonaPlex em um único pacote Swift, todos os componentes necessários já existem. O PersonaPlex cuida de backchanneling de baixa latência e de uma alternância de turnos natural, enquanto um LLM separado executa as chamadas de ferramentas
O problema é a orquestração entre os dois. Ainda não está resolvido quando o “cérebro” deve sobrescrever a “boca”, como evitar que o PersonaPlex fale com confiança respostas não verificadas e como lidar quando o resultado de uma ferramenta entra em conflito com a fala em andamento
O projeto é interessante, mas pessoalmente eu gostaria que um modelo local de 7B tivesse capacidade de chamada de ferramentas. A versão atual está mais no nível de proof of concept, recebendo apenas arquivos wav como entrada
O estilo de escrita de LLM do texto pareceu artificial demais, o que me fez duvidar da qualidade do projeto
Testei a demo em um MacBook M1 Max, mas a resposta levou mais de 10 segundos e ainda saiu algo sem sentido
Claro, talvez ainda seja útil em casos de uso específicos, mas eu gostaria de aprender mais sobre essa parte
Esta tecnologia parece bem perigosa. Matéria relacionada: reportagem do The Guardian
A melhor demo full-duplex que já vi foi a da Sesame. Fico curioso para saber como ela está hoje (link)
Sou fã do whisperKit. Recentemente ele ganhou recurso de TTS e ficou muito melhor. Também suporta diarização de locutores e dicionário personalizado
Há até um teste de carga rodando 4 modelos simultaneamente em tempo real em um único dispositivo:
Vídeo do teste
Quero criar um sistema em que meu celular encaminhe automaticamente chamadas de spam para este modelo, que então vai soltando dados pessoais falsos aos poucos enquanto mistura conversa sobre clima ou esportes
Estou tentando fazer fine-tuning do PersonaPlex para chamadas outbound. Apliquei a abordagem LoRA do Kyutai/moshi-finetune, mas ela só funciona quando aumento o fator de escala para 5, e isso quebra outras partes
O GPT-5.3 Codex apontou durante a revisão de código que os falantes A/B estavam invertidos, então estou gerando o dataset de novo.
No meu GitHub (runvnc) tenho versões do moshi-finetune e do personaplex, e dá para gerar dados e treinar com um app em Gradio. Ainda não obtive resultados realmente úteis
Eu uso bastante o MacWhisper, mas o modelo Whisper Large v3 Turbo é aceitável e ainda assim a latência vai se acumulando. Se eu fizer pós-processamento com um LLM online, a qualidade melhora, mas a velocidade cai
Link do modelo, FluidAudio GitHub
A comunidade no Discord é ativa e há bastante discussão sobre recursos recentes como VAD, TTS e EOU