🔓 Open Source
Whistle: STT de 16,9 MB que corre entero en CPU sin nube
Hay una obsesión en la industria del reconocimiento de voz: meter todo en la nube, cobrar por minuto y devolverte un texto con tres segundos de retraso. Esta semana alguien decidió que no. Whistle, el nuevo modelo de Cactus Compute, es un speech-to-text de apenas 16,9 MB que corre entero en tu CPU.
Sin GPU. Sin API. Sin enviar ni un solo byte a un servidor ajeno. Si alguna vez dudaste de mandar tus grabaciones a la nube, este modelo es tu respuesta.
Qué es Whistle y por qué importa
Whistle es un modelo de reconocimiento de voz abierto, disponible en GitHub y Hugging Face, que transcribe audio en 7 idiomas (ingl, español, francés, alemán, italiano, holandés y polaco) directamente en el dispositivo.
El modelo devuelve tres cosas en una sola pasada:
- La transcripción de hasta 30 segundos de audio.
- Timestamps por palabra con probabilidad estimada.
- Embeddings de audio listos para clasificar o buscar.
La detección de idioma es automática: solo dí la frase y el motor adivina el idioma. También puedes forzarlo con language='es'.
Los números hablan solos
En benchmarks publicados por el equipo, Whistle compite cara a cara con Whisper base (145,3 MB) y Moonshine tiny v2 (41,9 MB):
| Modelo | Tamaño | Tiempo a primer token | Decode |
|---|---|---|---|
| Whistle | 16,9 MB | 11,1 ms | 1.319 tok/s |
| Whisper base | 145,3 MB | 73,2 ms | 266 tok/s |
| Moonshine tiny v2 | 41,9 MB | 22,8 ms | 262 tok/s |
En algunos conjuntos de prueba (LibriSpeech, SPGISpeech, FLEURS) Whistle supera a Whisper base incluso en tasa de error de palabra. En otros (TED-LIUM, AMI) Whisper mantiene la ventaja, pero a un costo de 8,6x más tamaño y 7x más latencia.
Medido en un Apple M4 Pro con audio de 10 segundos, Whistle entrega el primer token en 11,1 ms frente a los 73,2 ms de Whisper.
Un solo binario: STT + llamadas a herramientas
Aquí viene la parte interesante para desarrolladores. Whistle comparte bloques de arquitectura con Needle, el modelo de propósito general de la misma empresa. Puedes combinarlos en un solo binario:
needle --model needle3.cact --model whistle.cact --tools tools.json --audio clip.wav
El motor transcribe el audio, lo interpreta y devuelve JSON con las llamadas a funciones correspondientes. Dictas "apaga las luces de la cocina" y recibes:
{
"function_calls": [{"name": "set_lights", "arguments": {"room": "kitchen", "on": false}}],
"confidence": 0.94,
"audio_text": "turn off the kitchen lights",
"audio_language": "en"
}
Cero pipeline de tres pasos. Cero API intermedia. Todo local.
API en Python: 3 líneas
pip install cactus-needle
import needle
print(needle.transcribe("clip.wav")["text"])
La instalación base trae todo lo necesario para WAV a 16 kHz. Para otros rates o captura de micrófono, añade el extra [mic].
Privacidad primero
Whistle no lee variables de entorno. No envía telemetría. No necesita conexión. Los binarios precompilados cubren 17 plataformas: macOS, Linux, Android, iOS, watchOS, Windows sobre ARM, RISC-V, MIPS, WASI y el propio navegador.
Para usuarios en LATAM con conexión limitada o preocupados por la privacidad, esto es un cambio real: dictado y transcripción sin depender de un plan de datos o de los términos de servicio de una big tech.
Cómo probarlo ahora mismo
- Visita cactuscompute.com/blog/whistle y prueba el demo en el navegador (el modelo se descarga una sola vez, 16,9 MB).
- Para uso local:
pip install cactus-needley llama aneedle.transcribe(). - Pesos en Hugging Face, código en GitHub.
Veredicto
Whistle demuestra que la transcripción local ya no es un experimento de laboratorio. Es un binario de 16,9 MB con benchmarks publicados, API limpia y cobertura multiplataforma.
La pregunta ya no es si puedes permitirte la nube. La pregunta es por qué seguir mandando tu voz a un servidor cuando cabe en tu CPU.
Comparte esto con quien todavía cree que transcribir audio exige una API de pago.