home-assistant/core · error · SpeechToTextError

stt-provider-missing

stt-provider-missing

Error message

No speech-to-text provider for: {engine}

What it means

SpeechToTextError with code stt-provider-missing is raised in prepare_speech_to_text when async_get_speech_to_text_engine cannot resolve the pipeline's configured stt_engine id to a registered speech-to-text provider. It means the pipeline configuration references an STT entity/engine that does not exist at run time.

Source

Thrown at homeassistant/components/assist_pipeline/pipeline.py:895

            if wake_word_vad is not None:
                chunk_seconds = (len(chunk.audio) // sample_width) / sample_rate
                if not wake_word_vad.process(chunk_seconds, chunk.speech_probability):
                    raise WakeWordTimeoutError(
                        code="wake-word-timeout", message="Wake word was not detected"
                    )

    async def prepare_speech_to_text(self, metadata: stt.SpeechMetadata) -> None:
        """Prepare speech-to-text."""
        # pipeline.stt_engine can't be None or this function is not called
        stt_provider = stt.async_get_speech_to_text_engine(
            self.hass,
            self.pipeline.stt_engine,  # type: ignore[arg-type]
        )

        if stt_provider is None:
            engine = self.pipeline.stt_engine
            raise SpeechToTextError(
                code="stt-provider-missing",
                message=f"No speech-to-text provider for: {engine}",
            )

        metadata.language = self.pipeline.stt_language or self.language

        if not stt_provider.check_metadata(metadata):
            raise SpeechToTextError(
                code="stt-provider-unsupported-metadata",
                message=(
                    f"Provider {stt_provider.name} does not support input speech "
                    f"to text metadata {metadata}"
                ),
            )

        self.stt_provider = stt_provider

    async def speech_to_text(

View on GitHub (pinned to 58a3fdb3ea)

Solutions

  1. Open Settings > Voice assistants and re-select a valid speech-to-text engine for the pipeline (or clear stt_engine to use the default).
  2. Check that the integration providing STT (Wyoming/Whisper, cloud, etc.) is loaded and its service is actually running; restart it if needed.
  3. Verify the engine id stored in .storage/assist_pipeline.json matches an existing stt entity/label.
  4. Register or re-add the missing provider before starting runs at the STT stage.

Example fix

# before
pipeline = Pipeline(stt_engine="whisper.local")  # no longer exists

# after
stt_engines = await stt.async_get_speech_to_text_engine(hass, "whisper.local")
if stt_engines is None:
    pipeline = dataclasses.replace(pipeline, stt_engine=None)  # fall back to default provider
Defensive patterns

Strategy: validation

Validate before calling

from homeassistant.components import stt
provider = stt.async_get_speech_to_text_engine(hass, pipeline.stt_engine)
if provider is None:
    _LOGGER.warning("STT engine %s missing; run will fail", pipeline.stt_engine)

Type guard

def has_stt_engine(pipeline: Pipeline) -> bool:
    return pipeline.stt_engine is not None

Try / catch

from homeassistant.components.assist_pipeline.error import SpeechToTextError
try:
    await pipeline_job.run()
except SpeechToTextError as err:
    if err.code == "stt-provider-missing":
        # reselect engine / alert user
        ...

Prevention

When it happens

Trigger: Running a pipeline whose stt_engine names an engine id that is not registered — e.g. the Whisper/Wyoming or Home Assistant Cloud integration providing it was unloaded, disabled, or the entity id was renamed — and the run enters the STT stage.

Common situations: A Wyoming Whisper add-on going offline or being removed, Nabu Casa Cloud being disconnected while a pipeline still names 'cloud_stt', a restored pipeline storage entry referencing a deleted engine, or a custom integration provider that failed to load.

Related errors


AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14). Data as JSON: /api/errors/b968aa560828d2f7. Report an issue: GitHub.