Change one import, change the engine
macOS 26 and iOS 26 introduced SpeechAnalyzer, Apple's new speech-to-text API. It is well designed, but Apple's engine is the only one behind it. AnySpeechRecognizer, which Hugging Face released on October 29, mirrors that API (SpeechAnalyzer, SpeechTranscriber, AssetInventory and so on) and still defaults to Apple's engine; code that sticks to the shared API only needs import Speech changed to import AnySpeechRecognizer, and switching engines means changing the one line that creates the transcriber.
The alternative engines are published on the Hub as Core ML conversions: NVIDIA's Parakeet TDT 0.6B v3 (25 European languages, detected automatically), Moondream's post-trained Parakeet Ultra, the English-only Parakeet Unified, and Alibaba's Qwen3-ASR in 0.6B and 1.7B sizes. Qwen3-ASR covers 30 languages and 22 Chinese dialects, including Mandarin, Cantonese, Japanese and Korean, which Parakeet doesn't, but it returns one final result per segment of up to 40 seconds and runs more slowly on the GPU, so it suits files better than live input. Apple's API has no speaker diarization, so the package adds a module based on NVIDIA's Streaming Sortformer that tracks up to four speakers and attributes each timed word to one of them. Models download only when the app asks: about 600 MB per Parakeet, 0.9 to 2.4 GB for Qwen3-ASR and about 250 MB for Sortformer.
The author measured LibriSpeech recordings of 3 to 8 minutes on an M4 Max Mac Studio. Transcribing from files on test-clean, Parakeet Unified had a 1.43% word error rate and Parakeet v3 1.55%, against 2.12% for Apple's transcriber; Parakeet transcribes an hour of audio in about 20 to 40 seconds, using about 100 MB of memory once compiled. The limits are stated just as plainly: on AMI meeting recordings, where people talk over each other, every engine was above 23%, and so far it has been tested only on macOS 27, not on an iPhone.
Multiple choice instead of an essay
AnyDecisionModel handles a different everyday need: is this message urgent, which team should take this ticket, how frustrated is this customer. The usual approach is to have a language model generate text and parse it, which yields a single answer. This package reads the probability of each allowed answer instead: a yes-or-no question returns a probability, and a multiple-choice question returns the selected option, a probability for every option and a confidence value, with options that can be a Swift enum. It has six backends: small local models on MLX, models with a trained decision head (such as Cloudflare's Clef-Flash, a 6.2 GB download in 4-bit, recommended for Macs with at least 16 GB of memory), Core AI on macOS 27 and iOS 27, llama.cpp, TypeSafe's hosted Jev, and a local Ollama server.
The sample app Emoji Magnet asks one "does this fit the description" question for each of 343 emoji. Running Qwen3 4B with MLX on an M4 Max, it answers 16 questions per forward pass in about 0.45 seconds, and a full pass takes about 10 seconds. The documentation also warns that raw language-model probabilities tend to be overconfident, and the package offers calibration and option-rotation debiasing; the confidence value measures how concentrated the probabilities are, not whether the answer is right, so error rates need checking on your own data before going live.
For developers building Mac and iPhone apps, the value is wiring open speech and classification models into Apple's native patterns without sending recordings to the cloud. Both repositories are Apache-2.0 licensed, while the converted models on the Hub keep their original licenses, with some, such as Parakeet Unified, under NVIDIA's Open Model License.
via: Hugging Face Blog: Introducing AnySpeechRecognizer and AnyDecisionModel, GitHub: mattt/AnySpeechRecognizer, GitHub: mattt/AnyDecisionModel