Construye reconocimiento de voz en tiempo real en Rust con Voxtral Mini

Introducción

En 2026 el panorama de la IA seguía dominado por modelos en la nube grandes y opacos. Un puñado de proyectos impulsados por la comunidad comenzaron a cerrar la brecha proporcionando inferencia en tiempo real totalmente de código abierto que puede ejecutarse en una laptop o incluso en una pestaña del navegador. El proyecto Voxtral Mini 4B Realtime es el ejemplo más reciente. Implementa el modelo Voxtral Mini de Mistral completamente en Rust, usando el framework Burn ML, y expone tanto una interfaz de línea de comandos nativa (CLI) como un paquete WebAssembly (WASM) que funciona en WebGPU.

Este artículo te guía a través de los conceptos clave, la arquitectura, los benchmarks y los pasos para ejecutar el modelo localmente o en el navegador.

El motor: Voxtral Mini 4B Realtime

  • Tipo de modelo: Voz‑a‑texto, arquitectura de codificador / decodificador causal.
  • Pesos: 4‑B parámetros (~9 GB SafeTensors) o un fragmento cuantificado Q4‑GGUF de 2.5 GB.
  • Implementación: Solo Rust + Burn ML. La librería Burn proporciona operaciones tensores estilo JIT sobre CubeCL, que puede dirigirse a Vulkan, Metal o WebGPU.
  • Características:
  • Acelerado por GPU con wgpu (predeterminado)
  • Tokenizador nativo (Tekken) o compatible con WASM
  • CLI con barras de progreso clap / indicatif
  • Integración con HuggingFace Hub para descargar pesos
  • Compilación WASM con wasm‑pack, incluida una demo en vivo

Arquitectura en pocas palabras

Audio 16kHz mono → Mel‑spec (B,128,T)
    ↓
Codificador causal (32 capas, 1280 dim, ventana de 750 tokens)
    ↓
Conv‑downsample → Remodelar [B,T/16,5120]
    ↓
Adaptador (3072 dim)
    ↓
Decodificador autorregresivo (26 capas, 3072 dim, GQA)
    ↓
ID de tokens → Texto

El codificador produce bloques de 64 tokens de representación latente, mientras que el decodificador mantiene una caché KV y emite un token por paso de tiempo. Un shader de cómputo WGSL personalizado fusiona descuantización + multiplicación de matrices, dando un decodificado 4× más rápido en Q4‑GGUF comparado con una pasada f32 ingenua.

Instantánea de rendimiento

El repositorio incluye un harness de benchmarking interno, informando lo siguiente en una NVIDIA DGX‑Spark de 16 núcleos:

Camino Codificar ms Decodificar ms RTF Tokens/s Memoria
Q4 GGUF nativo 1 021 5 578 0.416 19.4 703 MB
F32 nativo 887 23 689 1.543 4.6 9.2 GB
Q4 GGUF WASM (navegador) ~14 ~0.5 (navegador)

RTF 0.416 significa que la transcripción se completa en menos de la mitad de la duración del audio—suficientemente rápido para chat en vivo o centros de llamadas. La ruta Q4 también es <3 GB, lo que lo hace viable para enviar modelos al cliente.

Inicio rápido – CLI nativa

  1. Instala Rust, Cargo y dependencias opcionales: ```bash curl https://sh.rustup.rs -sSf | sh # si Rust falta sudo apt-get install libgl1-mesa-dev libvulkan-dev # para wgpu
    2. **Descarga los pesos** (≈9 GB) vía el HuggingFace Hub:
       ```bash
    uv run --with huggingface_hub \
       hf download mistralai/Voxtral-Mini-4B-Realtime-2602 \
       --local-dir models/voxtral
    
  2. Ejecuta una transcripción: ```bash cargo run --release --features \"wgpu,cli,hub\" --bin voxtral-transcribe -- \ --audio audio.wav --model models/voxtral
    4. Para la ruta cuantizada Q4 (**≈2.5 GB**):
       ```bash
    cargo run --release --features \"wgpu,cli,hub\" --bin voxtral-transcribe -- \
       --audio audio.wav --gguf models/voxtral-q4.gguf --tokenizer models/voxtral/tekken.json
    

Inicio rápido – Demo de Navegador (WASM + WebGPU)

  1. Instala herramientas de compilación (rustup target add wasm32-unknown-unknown, npm i -g wasm-pack bun).
  2. Compila el paquete WASM: ```bash wasm-pack build --target web --no-default-features --features wasm
    3. **Genera un certificado HTTPS temporal** (WebGPU requiere un contexto seguro):
       ```bash
    openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \
       -keyout /tmp/voxtral-key.pem -out /tmp/voxtral-cert.pem \
       -days 7 -nodes -subj \"/CN=localhost\"
    
  3. Sirve localmente: bash bun serve.mjs
  4. Navega a https://localhost:8443, acepta el certificado y haz clic en Load from Server. Se cargará en la página las piezas del modelo de 2.5 GB, después podrás grabar mediante el micrófono o subir un archivo .wav.
  5. Opcionalmente, apunta un navegador al HuggingFace Space alojado (https://huggingface.co/spaces/TrevorJS/voxtral-mini-realtime) para saltarte la configuración manual.

Problemas comunes y soluciones

  • Problema de relleno izquierdo: El original mistral-common rellena los primeros 32 tokens de silencio que son insuficientes para el decodificador Q4. El proyecto aumenta el relleno a 76 tokens (38 posiciones del decodificador). El parche está en src/audio/pad.rs.
  • Presupuestos de memoria: Para navegadores, el límite de 2 GB de ArrayBuffer requiere fragmentar el archivo GGUF en trozos de 512 MB. Un sencillo guion split -b 512m genera los fragmentos.
  • Límite de grupos de trabajo: WebGPU limita 256 grupos de trabajo por despacho. El repositorio parchea cubecl-wgpu para limitar el tamaño del kernel de reduce.
  • Soporte de GPU: Tu sistema debe exponer Vulkan, Metal o un adaptador WebGPU. Sin ello, la CI omitirá pruebas intensivas de GPU.

Extiendo el proyecto

El repositorio está diseñado para experimentación:

Área Cómo empezar
Añadir un nuevo esquema de cuantización Fork del módulo gguf, implementar un nuevo trait Dequant
Reemplazar el codificador Modificar src/models/…/encoder.rs, re‑benchmarkear
Desplegar como servidor Envoltorio de la lógica CLI en Actix‑web o Axum, añadir endpoints HTTP
Integrar más tokenizadores Sustituir la extensión tekken C por un tokenizador puro Rust

Conclusión

Voxtral Mini 4B Realtime en Rust demuestra que el reconocimiento de voz de baja latencia y alta precisión puede entregarse completamente cliente‑side, incluso en navegador. Con un modelo cuantificado de 2.5 GB, obtienes un factor de tiempo real de 0.4, superando a la mayoría de las APIs comerciales y manteniéndose 100 % open source. Ya sea que estés construyendo un asistente de video‑chat, una herramienta de transcripción manos libres o una demo educativa, este proyecto te ofrece una base sólida y bien documentada para empezar.

¡Feliz hacking, y que tus tokens sigan siendo rápidos y tu audio limpio!

Artículo original: Ver original

Compartir este artículo