13 puntos por GN⁺ 2026-02-12 | 1 comentarios | Compartir por WhatsApp
  • Canal de inferencia implementado solo en lenguaje C para el modelo Mistral Voxtral Realtime 4B, con una estructura autónoma sin ninguna dependencia externa
  • Compatible con los backends de aceleración GPU Metal (MPS) y BLAS (OpenBLAS/Accelerate), y procesa entrada de voz en tiempo real y salida de tokens mediante una API de streaming
  • Con pesos BF16 mapeados en memoria, encoder basado en ventana deslizante y rolling KV cache, mantiene constante el uso de memoria incluso con entradas de audio largas
  • Admite varios métodos de entrada de audio mediante micrófono, pipe por stdin y conversión con ffmpeg, además de ofrecer visualización de tokens alternativos y la opción de control de latencia (-I)
  • Publicado bajo licencia MIT, y logra una velocidad de aproximadamente 2.5 veces más rápida que el tiempo real en un Apple M3 Max, lo que permite una implementación ligera de reconocimiento de voz local

Resumen de Voxtral.c

  • Motor de inferencia en C puro para el modelo Voxtral Realtime 4B de Mistral AI, sin dependencias aparte de la biblioteca estándar de C
    • El backend MPS ofrece inferencia rápida, mientras que BLAS (OpenBLAS/Accelerate) funciona en entornos basados en CPU
    • Permite inferencia completamente local sin runtime de Python, CUDA ni vLLM
  • También incluye una implementación de referencia simple en Python mediante el archivo python_simple_implementation.py
    • Solo requiere PyTorch, safetensors, soundfile y soxr

Funciones principales

  • Zero dependencies: puede ejecutarse solo con C, sin bibliotecas externas
  • Aceleración GPU con Metal: se activa automáticamente en entornos Apple Silicon, con fusión de operaciones GPU y atención por lotes
  • Salida en streaming: los tokens generados se imprimen de inmediato en stdout
  • Streaming C API: permite ingresar audio secuencialmente y recibir cadenas de tokens en tiempo real
  • Pesos mapeados en memoria: carga directamente archivos safetensors con mmap para uso inmediato
  • Soporte de entrada por micrófono (macOS): incluye detección automática de silencio
  • Chunked Encoder: procesa el audio en chunks superpuestos para mantener estable el uso de memoria
  • Rolling KV Cache: comprime automáticamente la caché con una ventana deslizante de 8192 posiciones, lo que permite procesar audio de longitud ilimitada

Cómo usarlo

  • Comandos básicos
    • ./voxtral -d voxtral-model -i audio.wav : reconocimiento de voz basado en archivo
    • ./voxtral -d voxtral-model --from-mic : reconocimiento en tiempo real con entrada por micrófono (macOS)
    • También es posible ingresar varios formatos de audio mediante un pipe de ffmpeg
  • Visualización de tokens alternativos
    • La opción --alt <cutoff> muestra también candidatos de pronunciación similar
    • Cuanto mayor sea el valor de cutoff, más candidatos se mostrarán
  • Control de latencia (opción -I)
    • Configura en segundos el intervalo de llamada al encoder
    • Un valor bajo (por ejemplo, 0.5 s) implica menor latencia pero mayor carga de GPU / un valor alto (por ejemplo, 5 s) permite un procesamiento más eficiente
    • El valor predeterminado es 2.0 s; para streaming en tiempo real se recomiendan entre 1.0 y 2.0 s

Estructura de la API en C

  • Ofrece una API de streaming basada en vox_stream_t
    • feed() : entrada de audio
    • get() : recepción de tokens
    • finish() : procesa el audio restante
    • flush() : fuerza el procesamiento del búfer
  • Con vox_stream_set_alt() se puede configurar la cantidad de tokens alternativos
  • La función vox_transcribe() permite procesar un archivo completo en lote

Descarga y configuración del modelo

  • Descarga de aproximadamente 8.9 GB de pesos del modelo desde HuggingFace
    • consolidated.safetensors (pesos BF16)
    • tekken.json (vocabulario del tokenizador)
    • params.json (configuración del modelo)
  • Modelo con licencia Apache-2.0 y código con licencia MIT

Benchmark de rendimiento

  • Basado en Apple M3 Max (GPU de 40 núcleos, 128 GB de RAM)
    • Backend MPS: encoder 284 ms, decoder 23.5 ms/paso
    • Backend BLAS: encoder ~8 s, decoder 335 ms/paso
  • Promedio de 31.6 ms/paso con audio de 60 segundos, aproximadamente 2.5 veces más rápido que el tiempo real
  • El decoder ejecuta todas las operaciones por token con una única llamada a un command buffer de Metal

Arquitectura del modelo

  • Modelo de voz a texto en streaming de 4 mil millones de parámetros (4B)
    • Audio encoder: transformer causal de 32 capas, 1280 dimensiones, 32 heads, ventana de 750
    • Adapter: Linear(5120→3072) → GELU → Linear(3072→3072)
    • LLM decoder: transformer de 26 capas (basado en Ministral-3), 3072 dimensiones, GQA(32 heads/8KV)
  • Tokenizador Tekken, tamaño de vocabulario 131,072
  • Idiomas compatibles: inglés, español, francés, portugués, hindi, alemán, neerlandés, italiano, árabe, ruso, chino, japonés y coreano

Requisitos de memoria

  • Pesos del modelo: 8.9 GB (mmap bajo demanda)
  • Caché GPU: alrededor de 8.4 GB (tras conversión de BF16 a F16)
  • KV cache: hasta 1.8 GB (limitada por la ventana deslizante)
  • Búfer de trabajo: alrededor de 200 MB

Compilación y plataformas

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

Licencia

  • Código: MIT
  • Modelo: Apache-2.0
  • Como software de código abierto, cualquiera puede modificarlo y redistribuirlo

1 comentarios

 
GN⁺ 2026-02-12
Comentarios en Hacker News
  • Estoy usando STT (reconocimiento de voz) combinando la app open source Handy con Parakeet V3
    Todavía no he visto nada que supere esta combinación en velocidad y precisión. La transcripción es casi instantánea, y la ligera pérdida de precisión no importa gracias a la capacidad de la IA para entender el contexto
    Probé integrar la implementación en C de Voxtral en Handy, pero en una MacBook M1 Max (64GB) la transcripción era demasiado lenta. Planeo probar también otras implementaciones

    • Handy es excelente, pero es una lástima que el STT no sea en tiempo real sino por lotes
  • Soy fan de los proyectos voxtral.c y flux2.c de Salvatore
    Espero que sigan optimizándose como una opción ligera que funcione sin dependencias externas. Pero por ahora es demasiado lento para uso real (en un entorno AMD 7800X3D/Blas)
    Al agregar la función Voice Input de llms-py, el soporte para voxtype.io de Omarchy fue el mejor en términos de UX, y luego quedó Whisper.cpp
    OpenAI Whisper es lento, pero sigue siendo una opción confiable para transcripción local
    Además, la API de transcripción Voxtral de Mistral fue impresionante en velocidad y precio — es muy rápida y barata a $0.003 por minuto. Me parece la mejor opción en entornos con limitaciones de CPU o disco

    • El modelo en sí es excelente, pero es demasiado grande para inferencia local. Whisper medium tiene menor calidad, pero es mejor en términos de adecuación al entorno
      Ahora quiero probar el nuevo modelo de transcripción Qwen 0.6. Si los benchmarks son correctos, tiene mucho potencial para evolucionar como una cadena ligera considerando optimización solo para CPU y hasta cuantización de 8 bits
      Como también debe poder instalarse en entornos de renta de servidores como Hetzner, planeo intentar optimizaciones por separado para Intel, AMD y ARM
    • Necesito retroalimentación visual de la transcripción mientras hablo. Me pregunto si voxtype soporta eso
      Dicen que Handy tiene función de overlay, pero en mi sistema no funciona
    • Mi voto va para la combinación de voxtype con el modelo Whisper-base. Es bastante rápida y precisa
  • En Linux fue fácil de instalar, pero todavía no funciona la transcripción en tiempo real como en Whisper.cpp o Moonshine
    La opción --from-mic solo es compatible con Mac, así que intenté capturar audio con ffmpeg, pero no logré conectar la entrada del micrófono
    Parece que mi sistema no tiene especificaciones suficientes para ejecutar el modelo predeterminado.
    Quiero probar el modelo voxtral-q4.gguf

    • Lo probé en Linux y este modelo es demasiado lento para transcripción en tiempo real. Procesar un archivo de entrada de 12 minutos tomó medio día
    • Quiero capturar no solo el micrófono sino también el audio del puerto del monitor para hacer un pipeline de transcripción en tiempo real del audio web
      Como Audacity y OBS Studio sí pueden grabarlo, creo que en tiempo real también debería ser posible
    • Tal vez funcione si lees el audio desde un archivo con ffmpeg y se lo pasas a voxtral
      Personalmente, creo que probaría en este orden: file→ffmpeg→voxtral, luego mic→ffmpeg→file y finalmente mic→ffmpeg→voxtral
  • El título dice que es solo para CPU, pero en realidad también soporta aceleración por GPU. Eso está claramente indicado en la descripción del repositorio

  • Este proyecto y la implementación del runtime en Rust están al mismo tiempo en la portada de HN. Es una competencia interesante

  • También hay una implementación de la versión MLX → voxmlx

  • Tengo mucho interés en el área de voz a texto (STT)
    Quiero trabajar con datos que mezclen distintos acentos y terminología especializada, pero no sé por dónde empezar para entrenar un modelo con el gran volumen de muestras de voz que tengo. Busco consejos

  • Lo ejecuté en una MacBook Pro M3 de 16GB; carga, pero se cuelga o va demasiado lento

  • Se siente extraño que algo que hace 20 años podía hacerse con unos 200MB ahora requiera un modelo de 9GB