These are not PyTorch weights. The repository holds a single archive of
.aimodel assets that run through Apple's Core AI runtime on macOS 27 / iOS 27
and later. They will not load with transformers.
Contents
whisper-large-v3-turbo-kv_float16.zip (~1.49 GB) unpacks to a bundle directory:
File
Purpose
metadata.json
Bundle descriptor: architecture and model dimensions
That token is the decoder prefix's language slot. It matters more than it looks:
fed French audio, an <|en|> prefix does not fail, it transcribes the audio as
if it were English and returns a fluent English translation. Measured on a French
clip, that scores ~96% WER against a French reference while emitting a perfectly
readable English sentence — a wrong language is silent unless you check for it.
Upstream apple/coreai-models has no API for changing the prefix, so with
stock CoreAISpeech this bundle transcribes English only. The
bjnortier fork adds language selection, and with
it the same unmodified bundle handles every language Whisper knows:
swift
1// Detect the language from the audio (the default).2let(text,_)=tryawait model.transcribe(pcm: pcm, language:.detect)34// Or name it.5let(text,_)=tryawait model.transcribe(pcm: pcm, language:.code("fr"))67// Or keep the prefix this bundle shipped with.8let(text,_)=tryawait model.transcribe(pcm: pcm, language:.bundleDefault)
Detection costs one decoder step — Whisper's first prediction after
<|startoftranscript|>is the language token — which is ~110 ms on a 62 s clip.
For long-form audio the language is detected once, on the first window, and reused.
Verified on this bundle, unmodified, with --language auto:
audio
detected
output
French
fr
Malheureusement, l'étude du flux de circulation…
German
de
Leider ist die Untersuchung des Verkehrsflusses…
Spanish
es
Lamentablemente, el estudio del flujo de tráfico…
Italian
it
Sfortunatamente, lo studio del flusso di traffico…
No re-export is needed for other languages; the assets here already carry all 100
language tokens in added_tokens.json.
The prefix also pins <|notimestamps|>. Timestamps still require a different
generation_config.json.
1let model =tryawaitSpeechRecognitionModel(resourcesAt: bundleURL)2let(text, stats)=tryawait model.transcribe(audioURL: audioURL)
On the fork, CirceFileTranscriber passes its locale through as the decode
language, so the example above transcribes French simply by asking for a French
locale.
License and attribution
Released under the MIT licence, the
licence of the source model. The original Whisper large-v3-turbo is by OpenAI;
this repository only changes its serialization format. Refer to the
upstream model card for
training data, evaluation results, and intended use.