FluidInference/parakeet-redux-coreml
parakeet-redux-coreml
Core ML build of moondream/parakeet-redux, the ternary (every encoder weight ∈ {-1, 0, +1}) re-training of nvidia/parakeet-tdt-0.6b-v3. Same 25 languages, tokenizer and output conventions as v3. Encoder is 183 MB (vs 445 MB for the 6-bit v3 encoder); whole model dir ~220 MB.
The encoder keeps the checkpoint's exact ternary weights: 2-bit palettized codes with the model's own per-row, per-128 fp16 scales (iOS 18 / macOS 15 constexpr_lut_to_dense + constexpr_blockwise_shift_scale), so no re-quantization noise is added. Decoder and JointDecision are re-exported from the redux checkpoint (its post-training recovery also touched the joint). Preprocessor and vocabulary are the v3 ones.
Usage (FluidAudio ≥ next release)
let models = try await AsrModels.downloadAndLoad(version: .redux) // iOS 18+ / macOS 15+
let asr = AsrManager()
try await asr.initialize(models: models)
let result = try await asr.transcribe(audioFileURL)swift run fluidaudiocli transcribe audio.wav --model-version redux
swift run fluidaudiocli asr-benchmark --subset test-clean --max-files 100 --model-version reduxFiles
Compute units
The encoder runs on the Neural Engine by default in FluidAudio, like v3, so iOS apps can keep transcribing in the background (iOS does not allow GPU work there). The first ANE load compiles the 2-bit weights for several minutes (~7 min measured on an M-series Mac); Core ML caches the result and later loads take seconds. Warm, it runs 45–52 ms per 15 s window.
Pass encoderComputeUnits: .cpuAndGPU to skip the long first compile when background execution does not matter: the GPU decompresses the 2-bit weights in-kernel, loads in about a second and runs ≈21 ms per window.
Requires iOS 18 / macOS 15 (the 2-bit encoding uses iOS 18 Core ML ops). On iOS 17 / macOS 14 FluidAudio refuses to load Redux and points to parakeet-ultra-coreml instead.
Accuracy
Full LibriSpeech, FluidAudio asr-benchmark, default compute units (ANE), both models back to back, M-series Mac. Corpus WER (total edit distance over total reference words); RTFx = total audio / total processing time.
On English this build is 0.44 (clean) and 1.00 (other) points behind v3 — the same gap the upstream card reports (+0.44 / +1.21). Absolute values are above the card's because FluidAudio decodes in 15 s windows and uses a simpler text normalizer than the Open ASR Leaderboard; both models are scored identically here.
The Core ML transcripts match a PyTorch fp32 decode of the redux checkpoint to 0.19 % WER, so this is the checkpoint's behaviour and not a conversion loss.
FLEURS, 24 languages, 100 samples each
(es_es is absent from FluidAudio's FLEURS set; both models are scored on the same 24.)
Redux wins the multilingual average by 1.74 points, taking the low-resource languages by wide margins — Latvian −11.1, Maltese −7.7, Slovene −7.2, Estonian −7.0, Greek −5.2, Lithuanian −5.1 — and conceding the high-resource ones: French +3.7, Russian +2.6, Dutch +1.9, English +1.9, Polish +1.7, Ukrainian +1.4. The per-language direction matches the upstream card in 23 of 24 languages.
Pick this model for multilingual work and for download size; pick [parakeet-tdt-0.6b-v3-coreml](https://huggingface.co/FluidInference/parakeet-tdt-0.6b-v3-coreml) for English.
License
CC-BY-4.0, same as the upstream checkpoint and nvidia/parakeet-tdt-0.6b-v3. Model by moondream (vik); Core ML conversion by Fluid Inference (conversion recipe: mobius/models/stt/parakeet-redux/coreml).
