9 pontos por GN⁺ 2026-03-06 | 1 comentários | Compartilhar no WhatsApp
  • 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

 
GN⁺ 2026-03-06
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

    • Eu também estou construindo um agente de voz por conta própria, então adoraria conversar sobre isso. No momento estou pensando em como integrar um pipeline full-duplex a um framework agentic
      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
    • O ponto central desta thread parece ser o contraste entre full-duplex e pipeline composable, mas na prática as duas arquiteturas precisam operar ao mesmo tempo. Esta biblioteca já está mais ou menos na metade desse caminho
      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
    • Concordo totalmente com esse pipeline. Dá para gerar respostas imediatas com um modelo pequeno e, ao mesmo tempo, fazer chamadas de ferramentas ou acionar um modelo mais inteligente. Uma arquitetura que processa respostas assíncronas rápidas e chamadas de ferramentas em paralelo é excelente
    • Eu ainda prefiro uma arquitetura de composable pipeline. Em serviços de grande escala, a flexibilidade de trocar o LLM conforme custo ou qualidade é uma grande vantagem
  • 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

    • Eu fiz um fork e modifiquei para rodar outro LLM em paralelo, inferindo o momento de chamar ferramentas. Minha versão funciona bem para tarefas simples, como controle de iluminação. A atualização do código está aqui
    • A pasta /Examples/PersonaPlexDemo inclui uma demo de conversa por turnos. No entanto, a conversão em tempo real ainda não foi implementada
    • Dizer que ele só aceita arquivos wav é um pouco enganoso. Basta ter buffers de áudio, e já existe plano para suporte a streaming. Pelo histórico de evolução com ASR, TTS com streaming e síntese multilíngue, a direção do PersonaPlex é claramente processamento de voz em streaming
    • Idealmente, uma estrutura com PWA + WebRTC no celular conectando ao modelo no PC/Mac parece uma boa abordagem. Com Livekit, a maior parte das partes complicadas já fica resolvida
    • NVIDIA/personaplex de fato funciona de forma interativa
  • O estilo de escrita de LLM do texto pareceu artificial demais, o que me fez duvidar da qualidade do projeto

    • Mas é natural que pesquisadores de IA usem LLM para tudo. Se a pessoa é apaixonada por IA, isso é esperado
    • Fiquei curioso sobre o que exatamente fez parecer um texto escrito por LLM. Os diagramas tudo bem, mas queria saber que partes do texto passaram essa impressão
    • Eu, pelo contrário, achei o texto escrito por IA mais fácil de ler. As pessoas frequentemente escrevem de forma prolixa, enquanto a IA organiza a informação de um jeito mais fácil de digerir
    • Pessoalmente, o que eu gosto menos são gráficos ou tabelas feitos por IA
  • Testei a demo em um MacBook M1 Max, mas a resposta levou mais de 10 segundos e ainda saiu algo sem sentido

    • Na prática, a limitação é que um modelo full-duplex de nível 7B tem baixo nível de inteligência, então não consegue fazer chamadas de ferramentas. Também há o problema de apenas imitar recursos como busca na web ou leitura de links, como no modo de voz do ChatGPT
      Claro, talvez ainda seja útil em casos de uso específicos, mas eu gostaria de aprender mais sobre essa parte
    • Segundo o texto citado, o PersonaPlex permite controlar o estilo da conversa com um system prompt. Se você rodar sem prompt, ele se desvia do assunto; com prompt, as respostas ficam bem mais consistentes
    • Alguém sabe qual é o context size?
    • Em uma GPU como a RTX 5070, ele respondeu mais rápido que uma pessoa
  • Esta tecnologia parece bem perigosa. Matéria relacionada: reportagem do The Guardian

    • Quando se usa um LLM como se fosse conselheiro, basta alterar levemente uma entrada anterior e gerar a resposta de novo para perceber o quanto ele é tendencioso. Parece humano, mas na prática depende demais da entrada
    • Se os usuários forem educados de que LLM é apenas um document completer, a maioria dos problemas parece resolvida. Alguns produtos escondem esse fato para parecer mais humanos, mas isso acaba sendo contraproducente
    • A matéria resume bem os riscos. Houve um caso em que um chatbot chamou um usuário de “amor” enquanto o incentivava ao suicídio, e em um caso parecido o Google também acabou sendo processado
  • A melhor demo full-duplex que já vi foi a da Sesame. Fico curioso para saber como ela está hoje (link)

    • Eu também gostava bastante do unmute.sh
    • O nível de acabamento era realmente difícil de acreditar
  • 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:

    • Qwen3-TTS (texto→voz)
    • Parakeet v2 (voz→texto)
    • Canary v2 (STT/tradução multilíngue)
    • Sortformer (diarização de locutores)
      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

    • Seria divertido aplicar isso também a SMS de spam. Automatizar uma resposta nonsense como “Por causa do clima, minha lava-louças começou a dar problema. Tenho muitas bolsas de ioga de cloro, então os pratos desgastam rápido” seria o máximo
  • 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

    • O MacWhisper já suporta modelos 10x mais rápidos, como o Parakeet v2. Queria saber se você já testou
    • Eu estou satisfeito usando o Parakeet V2 como STT no Handy e o gpt-oss-120b da Cerebras para pós-processamento
    • Também vale testar os modelos suportados pelo Handy. A qualidade é inferior à do Whisper-large, mas a velocidade é muito alta
    • O modelo Parakeet TDT otimizado para CoreML da Fluid Audio é o mais rápido que já usei até agora. Isso graças ao offloading para a NPU
      Link do modelo, FluidAudio GitHub
      A comunidade no Discord é ativa e há bastante discussão sobre recursos recentes como VAD, TTS e EOU
    • A combinação Handy + Parakeet v2 é realmente excelente