13 pontos por GN⁺ 2026-02-12 | 1 comentários | Compartilhar no WhatsApp
  • Mistral Voxtral Realtime 4B com um pipeline de inferência implementado apenas em C, em uma estrutura autônoma sem qualquer dependência externa
  • Suporta os backends Metal GPU acceleration (MPS) e BLAS (OpenBLAS/Accelerate), e processa entrada de voz em tempo real e saída de tokens por meio de uma API de streaming
  • Mantém o uso de memória constante mesmo com entradas de áudio longas usando pesos BF16 mapeados em memória, encoder baseado em sliding window e rolling KV cache
  • Suporta vários modos de entrada de áudio via microfone, pipe pelo stdin e conversão com ffmpeg, além de oferecer exibição de tokens alternativos e opção de ajuste de latência (-I)
  • Publicado sob a licença MIT, alcança cerca de 2,5x a velocidade de tempo real em um Apple M3 Max, permitindo uma implementação leve de reconhecimento de voz local

Visão geral do Voxtral.c

  • Motor de inferência em C puro para o modelo Voxtral Realtime 4B da Mistral AI, sem dependências além da biblioteca padrão de C
    • O backend MPS oferece inferência rápida, enquanto o BLAS (OpenBLAS/Accelerate) roda em ambientes baseados em CPU
    • Inferência totalmente local sem runtime Python, CUDA ou vLLM
  • Também inclui uma implementação de referência em Python simples no arquivo python_simple_implementation.py
    • Requer apenas PyTorch, safetensors, soundfile e soxr

Principais recursos

  • Zero dependencies: executa apenas com C, sem bibliotecas externas
  • Aceleração com Metal GPU: ativada automaticamente em Apple Silicon, com fusão de operações na GPU e atenção em lote
  • Saída em streaming: os tokens gerados são enviados imediatamente para o stdout
  • Streaming C API: envia áudio sequencialmente e recebe strings de tokens em tempo real
  • Pesos mapeados em memória: carrega arquivos safetensors diretamente com mmap, prontos para uso imediato
  • Suporte a entrada por microfone (macOS): inclui detecção automática de silêncio
  • Chunked Encoder: processa áudio em chunks sobrepostos para manter o uso de memória constante
  • Rolling KV Cache: comprime automaticamente o cache com uma sliding window de 8192 posições, permitindo áudio de comprimento ilimitado

Como usar

  • Comandos básicos
    • ./voxtral -d voxtral-model -i audio.wav : reconhecimento de voz a partir de arquivo
    • ./voxtral -d voxtral-model --from-mic : reconhecimento em tempo real via microfone (macOS)
    • É possível fornecer vários formatos de áudio por meio de pipe com ffmpeg
  • Exibição de tokens alternativos
    • Use a opção --alt <cutoff> para mostrar também candidatos com pronúncia semelhante
    • Quanto maior o valor de cutoff, mais candidatos serão exibidos
  • Ajuste de latência (opção -I)
    • Define em segundos o intervalo de chamada do encoder
    • Valores baixos (ex.: 0,5 s) significam menor latência e maior carga na GPU / valores altos (ex.: 5 s) tornam o processamento mais eficiente
    • O padrão é 2,0 s; para streaming em tempo real, recomenda-se 1,0~2,0 s

Estrutura da C API

  • Fornece uma API de streaming baseada em vox_stream_t
    • feed() : entrada de áudio
    • get() : recebimento de tokens
    • finish() : processa o áudio restante
    • flush() : força o processamento do buffer
  • vox_stream_set_alt() permite definir a quantidade de tokens alternativos
  • A função vox_transcribe() permite processamento em lote de um único arquivo

Download e configuração do modelo

  • Download de aproximadamente 8,9 GB de pesos do modelo no HuggingFace
    • consolidated.safetensors (pesos BF16)
    • tekken.json (vocabulário do tokenizador)
    • params.json (configuração do modelo)
  • Modelo sob licença Apache-2.0 e código sob licença MIT

Benchmark de desempenho

  • Com base em um Apple M3 Max (GPU de 40 núcleos, 128 GB de RAM)
    • Backend MPS: encoder 284 ms, decoder 23,5 ms/passo
    • Backend BLAS: encoder cerca de 8 s, decoder 335 ms/passo
  • Média de 31,6 ms/passo com áudio de 60 segundos, cerca de 2,5x mais rápido que tempo real
  • O decoder executa toda a computação por token com uma única chamada de command buffer do Metal

Arquitetura do modelo

  • Modelo de voz para texto com streaming de 4 bilhões de parâmetros (4B)
    • Audio encoder: transformer causal de 32 camadas, 1280 dimensões, 32 heads, janela 750
    • Adapter: Linear(5120→3072) → GELU → Linear(3072→3072)
    • LLM decoder: transformer de 26 camadas (baseado em Ministral-3), 3072 dimensões, GQA (32 heads/8KV)
  • Tokenizador Tekken, vocabulário de 131.072 itens
  • Idiomas suportados: inglês, espanhol, francês, português, hindi, alemão, neerlandês, italiano, árabe, russo, chinês, japonês, coreano

Requisitos de memória

  • Pesos do modelo: 8,9 GB (mmap sob demanda)
  • Cache da GPU: cerca de 8,4 GB (após conversão de BF16 para F16)
  • KV cache: até 1,8 GB (limitado pela sliding window)
  • Buffer de trabalho: cerca de 200 MB

Build e plataformas

  • macOS Apple Silicon: make mps (mais rápido)
  • macOS Intel / Linux (OpenBLAS) : make blas
  • Ubuntu/Debian: sudo apt install libopenblas-dev
  • Fedora: sudo dnf install openblas-devel

Licença

  • Código: MIT
  • Modelo: Apache-2.0
  • Em formato open source, qualquer pessoa pode modificar e redistribuir

1 comentários

 
GN⁺ 2026-02-12
Comentários do Hacker News
  • Eu uso STT (reconhecimento de fala) com o app open source Handy combinado com o Parakeet V3
    Ainda não vi nada superar essa combinação em velocidade e precisão. A transcrição sai quase instantaneamente, e a pequena perda de precisão não chega a ser um problema graças à capacidade da IA de entender o contexto
    Tentei integrar a implementação em C do Voxtral ao Handy, mas a transcrição ficou lenta demais em um MacBook M1 Max (64 GB). Pretendo testar outras implementações também

    • O Handy é excelente, mas é uma pena que o STT não seja em tempo real e sim em lote
  • Sou fã dos projetos voxtral.c e flux2.c do Salvatore
    Espero que continuem sendo otimizados como opções leves, sem dependências externas. Mas, no estado atual, ainda são lentos demais para uso real (com AMD 7800X3D/Blas)
    Ao adicionar o recurso Voice Input ao llms-py, o suporte ao voxtype.io do Omarchy foi o melhor em termos de UX, seguido pelo Whisper.cpp
    O OpenAI Whisper é lento, mas ainda é uma opção confiável de transcrição local
    E a API Voxtral Transcription da Mistral foi impressionante em velocidade e preço — muito rápida e barata, a $0,003 por minuto. Acho que é a melhor escolha em ambientes com restrições de CPU ou disco

    • O modelo em si é excelente, mas grande demais para inferência local. O Whisper medium tem qualidade inferior, mas é melhor em termos de adequação ao ambiente
      Agora quero testar o novo modelo de transcrição Qwen 0.6. Se os benchmarks estiverem certos, ele tem grande potencial para evoluir como uma cadeia leve considerando otimização para CPU e até quantização em 8 bits
      Como também precisa ser instalável em ambientes de aluguel de servidor como a Hetzner, pretendo tentar otimizações por conjunto Intel, AMD e ARM
    • Eu preciso de feedback visual da transcrição acontecendo enquanto falo. Queria saber se o voxtype oferece isso
      Dizem que o Handy tem recurso de overlay, mas no meu sistema ele não funciona
    • Meu voto vai para a combinação de voxtype com o modelo Whisper-base. É bem rápida e precisa
  • No Linux a instalação foi fácil, mas ainda não faz transcrição em tempo real como o Whisper.cpp ou o Moonshine
    A opção --from-mic só funciona no Mac, então tentei capturar áudio com ffmpeg, mas não consegui conectar a entrada do microfone
    Parece que meu sistema não tem capacidade suficiente para rodar o modelo padrão.
    Quero testar o modelo voxtral-q4.gguf

    • Testando no Linux, esse modelo é lento demais para transcrição em tempo real. Levei metade de um dia para processar um arquivo de entrada de 12 minutos
    • Quero capturar não só o microfone, mas também o áudio da porta de monitor, para montar um pipeline de transcrição em tempo real de áudio da web
      Como consigo gravar com Audacity ou OBS Studio, acho que em tempo real também deve ser possível
    • Talvez funcione ler o áudio de um arquivo com ffmpeg e passar para o voxtral
      Pessoalmente, eu tentaria na ordem file→ffmpeg→voxtral, depois mic→ffmpeg→file e por fim mic→ffmpeg→voxtral
  • O título diz que é só CPU, mas na prática também há suporte a aceleração por GPU. Isso está claramente descrito no repositório

  • Este projeto e a implementação do runtime em Rust estão ao mesmo tempo na página principal do HN. Uma disputa interessante

  • Também existe uma implementação da versão MLX → voxmlx

  • Tenho bastante interesse na área de speech-to-text (STT)
    Quero lidar com dados que misturam vários sotaques e termos técnicos, mas não sei por onde começar para treinar um modelo com o grande volume de amostras de voz que tenho. Aceito conselhos

  • Testei em um MacBook Pro M3 com 16 GB, e até carrega, mas trava ou fica lento demais

  • Acho estranho que algo que dava para fazer com uns 200 MB há 20 anos agora exija um modelo de 9 GB