unslothai/unsloth · warning · SttModelIdError

Another dictation model ('{self._model_id}') is still downlo

Error message

Another dictation model ('{self._model_id}') is still downloading; wait for it to finish.

What it means

SttModelIdError raised in the mtmd downloader: a download thread is alive for a DIFFERENT model_id, so the new request cannot proceed. The sidecar supports exactly one concurrent download; requesting another curated model while one is active names the conflicting model in the message.

Source

Thrown at studio/backend/core/inference/stt_mtmd_sidecar.py:407

            return None

    def start(
        self,
        model_id: str,
        hf_token: Optional[str] = None,
    ) -> None:
        model_id = resolve_mtmd_model_id(model_id)
        hub_cache = _capture_stt_hub_cache()
        with self._lock:
            if self._thread is not None and self._thread.is_alive():
                if self._model_id == model_id:
                    # Joining a cancelling run would silently download nothing.
                    if not self._cancelled:
                        return
                    raise SttModelIdError(
                        f"'{model_id}' is still cancelling; try again in a moment."
                    )
                raise SttModelIdError(
                    f"Another dictation model ('{self._model_id}') is still "
                    "downloading; wait for it to finish."
                )
            self._model_id = model_id
            self._error = None
            self._total_bytes = None
            self._selected_files = ()
            self._revision = None
            self._hub_cache = hub_cache
            self._cancelled = False
            self._process = None
            thread = threading.Thread(
                target = self._run,
                args = (model_id, hf_token),
                daemon = True,
            )
            self._thread = thread
            thread.start()

View on GitHub (pinned to 203007d190)

Solutions

  1. Wait for the in-flight download of the named model to finish (or cancel it), then retry.
  2. Cancel the active download first if switching priority: cancel, wait for the thread to die, then start the new one.
  3. In the UI, show per-model progress and disable Download on other models while one is active.
Defensive patterns

Strategy: validation

Validate before calling

with downloader._lock:  # prefer a public status accessor if exposed
    if downloader._thread is not None and downloader._thread.is_alive():
        show_active_download(downloader._model_id)
        return
downloader.download(model_id)

Try / catch

try:
    downloader.download(model_id)
except SttModelIdError as exc:
    if "still downloading" in str(exc):
        surface_wait_message(exc)  # or offer cancel of the active download

Prevention

When it happens

Trigger: Calling download('B') while self._thread is alive and self._model_id == 'A' — e.g. clicking Download on a second model card in Settings before the first finishes.

Common situations: User queues multiple model downloads from a list UI; a previous download hangs (slow network) and the user tries another model; stale thread from a download that never terminated.

Related errors


AI-assisted analysis of unslothai/unsloth@203007d190 (2026-08-15). Data as JSON: /api/errors/cd3521330ae9c5ce. Report an issue: GitHub.