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
- 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 - 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)
- Instala herramientas de compilación (
rustup target add wasm32-unknown-unknown,npm i -g wasm-pack bun). - 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\" - Sirve localmente:
bash bun serve.mjs - 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. - 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-commonrellena 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á ensrc/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 512mgenera los fragmentos. - Límite de grupos de trabajo: WebGPU limita 256 grupos de trabajo por despacho. El repositorio parchea
cubecl-wgpupara 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!