"The model wasn't bad at Korean. Nobody ever told it the audio was Korean."
The Bug Report
Early Firekeeper had a damning symptom: Korean dictation came out as garbage — English-ish word salad that had nothing to do with what was said. English dictation was fine. The obvious conclusion — "WhisperKit is bad at Korean" — was completely wrong, and chasing it would have wasted days. The real cause was a single default buried in the decoding options.
What the Default Actually Does
WhisperKit's default DecodingOptions are usePrefillPrompt: true, language: nil, and detectLanguage: false. Read those three together and the trap is obvious: prefill is on, no language is set, and detection is off — so the decoder prefills the English language token and never reconsiders. Every utterance is force-decoded as English. Feed it Korean and it does its best to hear Korean sounds as English words. The output isn't a Korean transcription failure; it's a perfect English transcription of audio that was never English.
usePrefillPrompt: true + language: nil + detectLanguage: false
| | |
v v v
prefill a language you didn't pick one don't auto-detect either
\_____________________|________________________/
v
defaults to the English token -> Korean decoded as English
The Fix Is One Line of Intent
You must always tell WhisperKit the language, one of two ways: set language explicitly ("ko" or "en") when you know it, or set detectLanguage: true when you want it inferred from the audio. Never ship the silent default. Firekeeper exposes this as a language mode in settings — Auto, 한국어, English — and Auto maps to audio language detection, not to "whatever the library felt like."