unslothai/unsloth · error · SttLanguageError
Language '{language}' is not supported by STT model '{model_
Error message
Language '{language}' is not supported by STT model '{model_id}'. What it means
SttLanguageError raised in transcribe() after normalize_whisper_language: the requested language code is set, the known-language table is available, and the normalized code is not in _known_whisper_languages(). It prevents burning a decode + HTTP round-trip on a language whisper.cpp will reject or silently mishandle.
Source
Thrown at studio/backend/core/inference/stt_ggml_sidecar.py:1099
model: Optional[str] = None,
language: Optional[str] = None,
fast: bool = False,
cancel_event: Optional[threading.Event] = None,
) -> dict:
"""Transcribe encoded audio bytes via whisper-server.
Accepts any container PyAV can decode (same validation and caps as the
Transformers sidecar). Returns {text, language, duration, model}.
"""
self._raise_if_update_in_progress()
ensure_engine_available()
model_id = resolve_ggml_model_id(model)
lang = normalize_whisper_language(language)
if cancel_event is not None and cancel_event.is_set():
raise SttTranscriptionCancelledError("Transcription cancelled.")
known_languages = _known_whisper_languages()
if lang is not None and known_languages is not None and lang not in known_languages:
raise SttLanguageError(
f"Language '{language}' is not supported by STT model '{model_id}'."
)
# Reject a missing model before decoding so a long clip does not burn CPU
# only to 409 (matches the Transformers sidecar's preflight).
self._ensure_model_downloaded(model_id)
decoded_audio = _decode_audio_bounded(audio, cancel_event)
if cancel_event is not None and cancel_event.is_set():
raise SttTranscriptionCancelledError("Transcription cancelled.")
wav_bytes = _pcm_to_wav_bytes(decoded_audio)
with self._lock:
try:
if cancel_event is None:
self.load(model_id)
else:
self.load(model_id, request_cancel_event = cancel_event)
text = self._post_inference(wav_bytes, lang, fast, cancel_event)
if cancel_event is not None and cancel_event.is_set():
raise SttTranscriptionCancelledError("Transcription cancelled.")View on GitHub (pinned to 203007d190)
Solutions
- Send a Whisper-supported ISO 639-1 code (e.g. 'fr', 'en', 'de') or omit language for auto-detect.
- Validate against the same known-language set in the UI before submitting.
- Check normalize_whisper_language's expectations if unsure of the accepted input forms.
Example fix
// before result = sidecar.transcribe(audio_bytes, language="French") // after result = sidecar.transcribe(audio_bytes, language="fr")
Defensive patterns
Strategy: validation
Validate before calling
from core.inference.stt_ggml_sidecar import normalize_whisper_language, _known_whisper_languages
lang = normalize_whisper_language(language)
known = _known_whisper_languages()
if lang is not None and known is not None and lang not in known:
reject_language_input(language) Type guard
def is_supported_language(language: str | None) -> bool:
lang = normalize_whisper_language(language)
known = _known_whisper_languages()
return lang is None or known is None or lang in known Try / catch
try:
sidecar.transcribe(audio, language=language)
except SttLanguageError as exc:
show_language_error(exc) # or retry with language=None for auto-detect Prevention
- Send ISO 639-1 codes only; map display names to codes in the UI layer.
- Constrain the language picker to the known whisper language set.
- Allow 'auto' (None) as an escape hatch instead of guessing codes.
When it happens
Trigger: transcribe(..., language='xx') where 'xx' normalizes to a code absent from the whisper language table — typo'd codes, full names like 'French' where a code ('fr') is expected, or codes from a different model family.
Common situations: UI language picker sends a display name instead of an ISO code; locale-derived code (e.g. 'en-US') not normalized to 'en'; hardcoded language string drifts after a refactor.
Related errors
- STT model '{model}' is not a curated GGUF dictation model. C
- The local transcription runtime is not installed. Run `unslo
- The local transcription runtime is missing its paired ggml l
- '{model_id}' is still cancelling; try again in a moment.
- Another GGUF dictation model ('{self._model_id}') is still d
AI-assisted analysis of unslothai/unsloth@203007d190 (2026-08-15).
Data as JSON: /api/errors/a9c46283e8edb65c.
Report an issue: GitHub.