unslothai/unsloth · error · SttModelIdError
STT model '{model}' is not a curated llama.cpp dictation mod
Error message
STT model '{model}' is not a curated llama.cpp dictation model. Choose one of: {', '.join(MTMD_STT_MODELS)}. What it means
SttModelIdError raised by resolve_mtmd_model_id: the supplied model string (after strip, with empty falling through to rejection since '' is not in MTMD_STT_MODELS) is not one of the curated llama.cpp multimodal-dictation (MTMD) model ids. The mtmd sidecar deliberately supports only curated models — custom HF repos are rejected here.
Source
Thrown at studio/backend/core/inference/stt_mtmd_sidecar.py:125
def _transcript_token_budget(audio_seconds: Optional[float]) -> int:
"""Output cap for a clip. A fixed one silently truncated long audio."""
if not audio_seconds or audio_seconds <= 0:
return _MIN_TRANSCRIPT_TOKENS
scaled = int(audio_seconds * _TRANSCRIPT_TOKENS_PER_SECOND)
return max(_MIN_TRANSCRIPT_TOKENS, min(scaled, _MAX_TRANSCRIPT_TOKENS))
_SERVER_START_TIMEOUT_SECONDS = 180.0
_TRANSCRIBE_TIMEOUT_SECONDS = 600.0
def resolve_mtmd_model_id(model: Optional[str]) -> str:
"""Validate a curated mtmd model id. Custom repos are not supported here."""
normalized = (model or "").strip()
if normalized in MTMD_STT_MODELS:
return normalized
raise SttModelIdError(
f"STT model '{model}' is not a curated llama.cpp dictation model. "
f"Choose one of: {', '.join(MTMD_STT_MODELS)}."
)
def is_mtmd_model(model: Optional[str]) -> bool:
return (model or "").strip() in MTMD_STT_MODELS
def find_llama_server_binary() -> Optional[str]:
from core.inference.llama_cpp import LlamaCppBackend
return LlamaCppBackend._find_llama_server_binary()
def is_available() -> bool:
"""True when llama-server is installed and audio can be decoded."""
if find_llama_server_binary() is None:
return FalseView on GitHub (pinned to 203007d190)
Solutions
- Use one of the curated ids listed in the error message (', '.join(MTMD_STT_MODELS)).
- Gate the UI dropdown to MTMD_STT_MODELS so invalid ids cannot be submitted.
- Use is_mtmd_model(model) before dispatch to route to the correct sidecar.
Example fix
// before
if model.startswith("mtmd"):
sidecar.load(model) # raises for near-miss ids
// after
from core.inference.stt_mtmd_sidecar import is_mtmd_model
assert is_mtmd_model(model), f"{model} is not curated"
sidecar.load(model) Defensive patterns
Strategy: validation
Validate before calling
from core.inference.stt_mtmd_sidecar import is_mtmd_model, resolve_mtmd_model_id
if not is_mtmd_model(model):
reject_or_route_elsewhere(model) # e.g. to the GGML whisper sidecar
else:
resolved = resolve_mtmd_model_id(model) Type guard
from core.inference.stt_mtmd_sidecar import is_mtmd_model
def is_curated_mtmd_model(model: str | None) -> bool:
"""Type guard: True only for curated llama.cpp dictation model ids."""
return is_mtmd_model(model) Try / catch
try:
sidecar.load(model)
except SttModelIdError as exc:
show_curated_model_list(exc) # message already enumerates MTMD_STT_MODELS Prevention
- Restrict the Voice settings dropdown to MTMD_STT_MODELS entries.
- Use is_mtmd_model() in routing to keep whisper ids away from the mtmd sidecar.
- Never pass user-freeform repo strings to the mtmd path; custom repos are unsupported.
When it happens
Trigger: Passing any model id not in the MTMD_STT_MODELS set to the mtmd sidecar's API (download start, load, transcribe) — including None/empty, a GGUF whisper model id, or an arbitrary HF repo name.
Common situations: Routing logic sends a whisper model id to the mtmd sidecar or vice versa; user pastes a custom repo into the Voice settings; empty string from a UI default leaks through.
Related errors
- STT model '{model}' is not a curated GGUF dictation model. C
- llama.cpp is not installed, so these dictation models cannot
- STT model must be one of Studio's defaults or a Hugging Face
- Language '{language}' is not supported by STT model '{model_
- '{model_id}' is still cancelling; try again in a moment.
AI-assisted analysis of unslothai/unsloth@203007d190 (2026-08-15).
Data as JSON: /api/errors/2cb9d7c23f87633c.
Report an issue: GitHub.