openai/whisper-large-v3-turbo
(809M, MIT) — OpenAI’s multilingual speech-to-text: 100 languages, automatic language
detection, ≤30 s window per decode. Runs fully on device on the stock Core AI runtime
(no engine patch), token-for-token identical to the PyTorch greedy reference.
Bundle: 🤗 mlboydaisuke/whisper-large-v3-turbo-CoreAI-official
— macos/ and ios/ each hold the fp16 JIT .aimodel (~1.6 GB; every iPhone generation specializes it on its
first load: iPhone 18 Pro 4.37 s, first call 2.11 s, 0.26 s on relaunch, 2026-09-26), ios-h18p/ the bundle
compiled for the iPhone 17 Pro (~3.2 GB, that phone only; it sat in ios/ until Hub revision 171153c6,
2026-09-26, and comes from a separate export of 2026-06-28). Catalog id: whisper-large-v3-turbo (its
pin still points at the previous layout until the next kit release).
Whisper large-v3-turbo on iPhone 17 Pro — the zoo’s coreai-audio app, real speed.
New to Core AI? Start with CoreAIKit 0.7.3. Follow its requirements and first-run steps for qwen3-0.6b, then open the same release’s ChatDemo. The README records the tested OS/SDK and download size; model and device coverage is stated per example.
⚡ One line — this model is the default behind the kit’s task op
(import CoreAIOps; no session, no model plumbing, downloads on first use):
let text = try await CoreAI.transcribe(audioURL)
Every op, one shape — Cookbook.
▶️ Run it (source) — the Transcribe runner (GUI + CLI, one app for every speech-to-text model in the catalog):
git clone --branch 0.7.3 --depth 1 https://github.com/john-rocky/coreai-kit
export DEVELOPER_DIR=/Applications/Xcode-27.0.0-RC.app/Contents/Developer
open -a /Applications/Xcode-27.0.0-RC.app coreai-kit/Examples/Transcribe/Transcribe.xcodeproj
# → Run, then pick "Whisper large-v3-turbo" in the model picker
# agents / headless (macOS):
cd coreai-kit/Examples/Transcribe
swift run -c release transcribe-cli --model whisper-large-v3-turbo --audio sample.wav
Use Xcode build 27A266a from the release’s .xcode-pin; adjust the app path if your installation is named differently.
💻 Build with it — complete; the glue is kit API, copy-paste runs:
import CoreAIKit
let transcriber = try await KitTranscriber(catalog: "whisper-large-v3-turbo")
let samples = try AudioFile.pcm16kMono(url) // any wav/m4a/mp3 → 16 kHz mono Float
let result = try await transcriber.transcribe(samples: samples)
// result.text, result.language ("en", "ja", … auto-detected)
The take-home is Examples/Transcribe/Sources/QuickStart.swift
— this exact code as one typed function, no UI; both the runner’s GUI and its CLI call it.
Recording? MicRecorder (kit API) captures mic audio as 16 kHz mono [Float] — the record
button and permission prompt are your app’s own chrome.
Integration checklist
https://github.com/john-rocky/coreai-kit (exact 0.7.3) → product CoreAIKitNSMicrophoneUsageDescription — only if you recordcom.apple.developer.kernel.increased-memory-limitdownloadProgress callback)Greedy decode vs the HF PyTorch reference (generate, greedy):
| Metric | Value |
|---|---|
| Transcript | token-for-token identical to PyTorch greedy |
| First step (compile + warmup) | 0.68 s |
| Per token (steady state) | 0.18 s |
The fixed window caps one decode at 128 tokens — enough for a 30 s window; chunk longer audio
into 30 s segments (the runner and KitWhisperModel do this for you).
Apple’s official models/whisper/export.py traces a single decode step
(decoder_input_ids [1,1], no KV cache) — that graph can’t be driven autoregressively. This
bundle is the same recipe traced at a fixed 128-token decoder window: pad the buffer, read
the logits at the real last position (causal attention ignores the padding, so the read is
exact), constant shape so MPSGraph compiles once (a dynamic-length export recompiles every
step → ~15 s/token; this is 0.18 s/token). Full write-up:
knowledge/whisper-asr-fixed-decode.md · recipe:
conversion/export_whisper_fixed.py · hashes + export
environment: the HF card.
Driving the raw graph yourself (no kit)? apps/CoreAITranscribe
implements this exact decode loop + the log-mel frontend from scratch (macOS + iOS, file or mic)
— the reference if you’re porting to another language or runtime.
qwen3-asr.md (52 languages,
LLM-decoder ASR) · parakeet.md (fastest, 25 EU languages)official/