@yibie: https://x.com/yibie/status/2109079699104399623
Summary
Cactus Compute releases Whistle: a 16.9 MB speech recognition model that runs on pure CPU, supporting seven European languages. Measured first-token latency of 5-8 ms and decoding speed of ~1300 tokens/sec. However, for unsupported languages (such as Chinese and Japanese), it does not throw errors — instead it silently outputs fake words, posing a risk of silent data corruption in production environments.
View Cached Full Text
Cached at: 10/11/26, 11:10 AM
16.9 MB Speech Recognition, and the Languages It Doesn’t Know
On October 2, Cactus Compute released Whistle: a 16.9 MB speech recognition model that runs on CPU with no dependencies and no GPU required. It shares the same C++ engine, the same .cact container, and the same quantization pipeline as the company’s other model, Needle. Any device already running Needle can pick up this speech model without adding another runtime.
We installed it and benchmarked it ourselves (M4 Max, pip install cactus-needle, Apache-2.0). All seven supported languages matched on a one-by-one check; feed it Chinese, and it outputs a string of French-looking gibberish.
It supports seven languages: English, German, French, Spanish, Italian, Dutch, and Polish. The language is specified directly as a CLI argument: --language {en,de,fr,es,it,nl,pl}.
What We Measured
We used text-to-speech to generate nine audio clips of 3.7–6.2 seconds each. Every clip was a sentence containing the two numbers “240” and “11%,” rendered as 16 kHz mono audio:
| Language | What it transcribed | Auto-detect | Verdict |
|---|---|---|---|
| en | The report says 240 users left, 11% in July. | en | Fully correct |
| de | Der Bericht sagt, 240 Nutzer, 11% im Juli. | de | Fully correct |
| fr | Le rapport dit 240 utilisateurs, 11% en juillet. | fr | Fully correct |
| es | El informe dice 240 usuarios, 11% en julio. | es | Fully correct |
| it | Il rapporto dice 240 utenti, 11% a luglio. | it | Fully correct |
| nl | Het rapport zegt 250 gebruikers, 11% in juli. | nl | 240 heard as 250 |
| pl | Report mówi 240 użytkowników, 11% w lipcu. | pl | “Raport” misspelled as “Report” |
| zh | Pour gauche, il y a un baisseau chez Goyoncou… | fr | Completely wrong |
| ja | Deportoni Orito, Uzawani Hakują Juni… | pl | Completely wrong |
Per-clip timing (same machine): time to first token 5–8 ms, decoding 1,236–1,340 tokens/sec, full clip processed in 21–51 ms. Numbers were normalized to “240” and “11%” rather than spelled out as English words, suggesting a post-processing layer.
The Most Important Thing: Unsupported Languages Don’t Error Out, They Hallucinate
For the Chinese clip, it classified it as French and emitted a string of French-shaped gibberish. The Japanese clip was classified as Polish, again producing gibberish. There is no “I don’t know” option.
This contradicts another part of its own design: the model first measures the loudness range of the entire audio clip and returns an empty transcription—skipping the search entirely—if it falls below a threshold. In other words, it knows how to handle “there’s no content.” But for “the content is in a language I don’t support,” it doesn’t return empty; it force-fits the audio into one of the seven languages.
In production, this isn’t a crash—it’s silent corruption. A Chinese audio clip gets written to your logs or database as French garbage, and it looks convincingly like legitimate output.
Their Numbers vs. What We Measured
Official figures (M4 Pro, 10-second audio): file size 16.9 MB vs. Whisper base 145.3 MB, Moonshine tiny v2 41.9 MB; time to first token 11.1 ms vs. 73.2 / 22.8; decoding 1,319 tokens/sec vs. 266 / 262. WER is ahead on LibriSpeech test-clean/test-other, SPGISpeech, Earnings-22, and the FLEURS average, but behind on TED-LIUM, AMI, and the MLS average.
We reproduced the speed part: on shorter clips we measured time to first token at 5–8 ms and decoding at 1,236–1,340 tokens/sec—consistent with their ballpark. They didn’t inflate this part.
The WER numbers should be taken with a grain of salt: Whistle’s figures are self-measured (86,174 samples), while Whisper’s and Moonshine’s come from their respective papers—self-measured vs. cited figures is never an apples-to-apples comparison, and the “9× smaller, 6× faster” claim is only against the 2022-era Whisper base. Their disclosures are cleaner than most vendors’ (they note they used the Whisper normalizer, clarify they compared against the multilingual checkpoint, and flag benchmarks whose original authors never published results), and they claim to have verified with audio checksums and speaker IDs that test audio wasn’t in the training set—this is a rare level of transparency.
What It’s Actually Trying to Get You to Do
The needle_complete interface takes audio directly and returns a single JSON in one call: function calls, audio_* fields, and confidence scores. That means there’s no intermediate “transcribe to text first, then let the application layer decide” step between speech and action. Combined with the silent-audio-returns-empty behavior, the intent behind this design becomes clear: the goal isn’t transcription itself. It’s designed as an on-device automation entry point—clean audio and standard Q&A stay local, while complex or noisy audio gets handed off to the cloud.
Two more things we found:
- The format is a proprietary
.cact, not GGUF; weights are 17 MB and are auto-fetched from Hugging Face on first run - Anonymous telemetry is on by default (reports function name, version, OS—no content); disable with
NEEDLE_TELEMETRY=0. We kept it off throughout our testing
One-Line Takeaway
16.9 MB, pure CPU, time to first token under ten milliseconds; works well for seven European languages. Don’t use it for Chinese—it won’t tell you it can’t. All of our tests used synthetic clean read speech; real-world meetings (multiple speakers, accents, background noise) will be noticeably harder, and we didn’t test that.
Links
Release notes: https://cactuscompute.com/blog/whistle
Best practices: https://cactuscompute.com/blog/whistle-best-practices
Weights: https://huggingface.co/Cactus-Compute/whistle
Engine source: https://github.com/cactus-compute/needle
#LocalAI #SpeechRecognition
Similar Articles
Cactus-Compute/whistle
Cactus-Compute 发布 Whistle,一个仅 16.9 MB 的端侧语音转文字模型,支持转录、词级时间戳和语音嵌入,可在手机、可穿戴设备、机器人及微控制器上无 GPU 运行,并在多项基准上与 Whisper 和 Moonshine 竞争。
Whistle: Speech to Text in 16.9 MB (6 minute read)
Cactus Compute releases Whistle, a 16.9 MB open speech recognition model running dependency-free on CPU across mobile, wearables, robotics, automotive and microcontrollers. It transcribes seven languages with word timestamps and speech embeddings, reaching first token in 11 ms, and shares Needle's C++ engine and quantisation.
@cactuscompute: We release Whistle: speech to text in a 16.9MB file, running on the CPU in the same engine as Needle. It mostly beats W…
Cactus Compute released Whistle, a 16.9 MB speech-to-text model running on CPU within the same engine as Needle, supporting seven languages and claiming mostly better accuracy than Whisper base at 9x smaller size and 6x speed.
@Honcia13: Open-source TTS is going crazy! New weapons for industrial park scams? Tsinghua OpenBMB just released VoxCPM2: 20 billion parameters + 2 million hours of multilingual data training, 48kHz studio-quality sound! The most intense part is—no Tokenizer needed at all, performing diffusion autoregression directly in continuous latent space, maximizing detail retention!
Tsinghua University's OpenBMB has released VoxCPM2, an open-source multilingual TTS model with 20 billion parameters. It supports continuous latent space diffusion autoregressive generation without a Tokenizer, offering 48kHz studio-quality audio and powerful voice cloning and design capabilities.
@Chenzeze777: Found an open-source voice synthesis model that I just had to share. 2 billion parameters, trained on 2 million hours of data, supports 30 languages plus 9 Chinese dialects—just input text and it synthesizes speech, including Sichuanese, Cantonese, and Northeastern dialects. The craziest part? Use natural language to describe a voice—like "young female, gentle and sweet"—and it creates a brand-new voice from scratch without needing any reference audio.
Introducing an open-source voice synthesis model with 2 billion parameters and 2 million hours of training. It supports 30 languages and 9 Chinese dialects, allows voice description via natural language, can clone voices from a 3-second recording, delivers 48kHz studio-quality audio, and is free for commercial use under the Apache-2.0 license.