Whistle: STT de 16,9 MB que corre entero en CPU sin nube

Reconocimiento de voz en CPU sin nube
Whistle: 16,9 MB de reconocimiento de voz que corre entero en tu CPU.

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 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):

ModeloTamañoTiempo a primer tokenDecode
Whistle16,9 MB11,1 ms1.319 tok/s
Whisper base145,3 MB73,2 ms266 tok/s
Moonshine tiny v241,9 MB22,8 ms262 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

  1. Visita cactuscompute.com/blog/whistle y prueba el demo en el navegador (el modelo se descarga una sola vez, 16,9 MB).
  2. Para uso local: pip install cactus-needle y llama a needle.transcribe().
  3. 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.