In this article
Apple’s macOS 26 and iOS 26 introduced a new speech-to-text API called SpeechAnalyzer. While the framework is well-designed, it currently relies solely on Apple’s internal engine. Hugging Face is releasing AnySpeechRecognizer and AnyDecisionModel to add choice and flexibility to these local workflows.
AnySpeechRecognizer
The new package wraps Apple’s SpeechAnalyzer API while letting developers swap the underlying recognition engine. This means you keep the same Swift code structure but can choose between Apple’s default model, NVIDIA’s Parakeet, or Alibaba’s Qwen3-ASR.
Engine options
Three NVIDIA Parakeet variants are available via Core ML:
- Parakeet v3 supports 25 European languages and auto-detects the spoken language.
- Parakeet Ultra is a post-trained version that showed higher accuracy in testing.
- Parakeet Unified focuses on English only.
All three run on the package’s own Core ML runtime and support file input, live streams, word timing, and confidence scores.
Alibaba’s Qwen3-ASR covers 30 languages and 22 Chinese dialects, including Cantonese and Japanese, which Parakeet does not handle. It comes in 0.6B and 1.7B sizes. Unlike the Parakeet models, Qwen3-ASR provides a single final result per segment and does not offer word timing or confidence metrics. It runs on the GPU and is slower, making it better suited for file transcription than live audio.
Developers can add new engines by implementing the
SpeechRecognitionModel
protocol for configuration and
SpeechRecognitionExecutor
for session management.
Speaker diarization
Apple’s framework lacks a module to identify who is speaking. AnySpeechRecognizer adds a
SpeakerDiarizer
component that runs NVIDIA’s Streaming Sortformer on Core ML alongside a transcriber. It tracks up to four speakers, even during overlapping speech, and attributes timed words to specific speakers.
The package defaults to Sortformer v2. Version 2.1 is also available and performed better on meeting recordings in internal tests.
Performance and size
Testing on an M4 Max Mac Studio with macOS 27.0.1 showed the following word error rates on LibriSpeech files between three and eight minutes long:
| Transcriber | test-clean | test-other |
|---|---|---|
| Parakeet v3, file | 1.55% | 2.78% |
| Parakeet v3, live | 4.73% | 4.29% |
| Parakeet Ultra, file | 1.66% | 2.55% |
| Parakeet Ultra, live | 2.65% | 3.28% |
| Parakeet Unified, file | 1.43% | 2.19% |
| Parakeet Unified, live | 1.45% | 2.42% |
| Apple’s transcriber, file | 2.12% | 3.97% |
Parakeet transcribes an hour of audio from a file in roughly 20 to 40 seconds, or 1.5 to 2.5 minutes for live input. It uses about 100 MB of memory after compilation. Qwen3-ASR requires several gigabytes of memory and is much slower. On AMI recordings where speakers overlap, every engine tested exceeded a 23% word error rate.
Downloads occur only when requested. Parakeet models take about 600 MB each, plus 590 MB for the live encoder. Qwen3-ASR ranges from 0.9 to 2.4 GB. Files cache in the standard Hugging Face location, allowing Mac apps outside the sandbox to share them with Python tools.
Next steps include adding Core AI support for macOS 27 and iOS 27.
AnyDecisionModel
AnyDecisionModel addresses a different need. It provides a Swift API for models trained to make decisions rather than generate text. Apps often ask language models to classify messages, route tickets, or gauge customer frustration. The standard approach involves prompting a model and parsing the resulting text. This method yields one answer but hides the probabilities behind the choice.
The new package returns typed results with probabilities and confidence values directly.
It’s only a decision model if it comes from the Décision region of France; otherwise, it’s sparkling zero-shot classification.
Developers define an enum conforming to
Choosable
, such as a list of departments. A
DecisionSession
holds the state, which can be text or JSON. Questions are then answered via
probability
,
choice
, or
score
methods.
For example, a session can return a
Double
for urgency, a
Choice
object containing a selected department along with its probability, or a
Score
for frustration levels. The selected value can be used directly in a
switch
statement.
The model-and-session pattern mirrors that of AnyLanguageModel, allowing developers to move beyond text generation for classification tasks.
What it means
Developers on Apple platforms now have a choice of speech engines without rewriting their code. They can also access decision models that return structured data and probabilities, removing the need to parse generated text for classification tasks. Both packages run locally on device using Core ML or MLX.



