Whisper handles English well and several other languages adequately. For multilingual audio where accuracy matters, we switch to Parakeet TDT.
Parakeet TDT is a single GGUF that handles 25+ languages out of the box. The same model file transcribes French, German, Spanish, Mandarin, and more without a language code. The addon auto-detects TDT vs CTC vs Sortformer from the GGUF's internal metadata, so the load is the same as Whisper's.
modelType: "parakeet-transcription" tells the engine which Parakeet family to load: TDT (default, multilingual), CTC (smaller), Sortformer (diarization), or Unified (English-only, one GGUF for both batch and streaming, PARAKEET_UNIFIED_0_6B_Q8_0). The load with that flag set would look like the following:
const modelId = await loadModel({
modelSrc: PARAKEET_TDT_0_6B_V3_Q8_0,
modelType: "parakeet-transcription",
});TDT returns a single string per file, no per-segment data. Note that without overrides the call is minimal. For example:
const text = await transcribe({
modelId,
audioChunk: "./examples/qvac/transcription/input/sample-16khz.wav",
});
console.log(text);No modelConfig.language. No prompt. No VAD. The only flag you need is modelType: "parakeet-transcription" so the SDK routes the call to the right addon.
Note: Parakeet handles VAD internally, so no separate VAD model is needed. If you need explicit end-of-utterance detection for conversation, load
PARAKEET_EOU_120M_V1_Q8_0alongside and passparakeetStreamingConfigtotranscribeStream.
Question 1 of 2
Why doesn't a Parakeet TDT call need a language code?
Question 2 of 2
Which of the following best describes the difference between Parakeet TDT's transcribe() result and Whisper's?
Run your code, check your answer, or ask a question. It all shows up here.