{"record":{"id":"b968aa560828d2f7","repo":"home-assistant/core","slug":"stt-provider-missing","errorCode":"stt-provider-missing","errorMessage":"No speech-to-text provider for: {engine}","messagePattern":"No speech-to-text provider for: (.+?)","errorType":"exception","errorClass":"SpeechToTextError","httpStatus":null,"severity":"error","filePath":"homeassistant/components/assist_pipeline/pipeline.py","lineNumber":895,"sourceCode":"\n            if wake_word_vad is not None:\n                chunk_seconds = (len(chunk.audio) // sample_width) / sample_rate\n                if not wake_word_vad.process(chunk_seconds, chunk.speech_probability):\n                    raise WakeWordTimeoutError(\n                        code=\"wake-word-timeout\", message=\"Wake word was not detected\"\n                    )\n\n    async def prepare_speech_to_text(self, metadata: stt.SpeechMetadata) -> None:\n        \"\"\"Prepare speech-to-text.\"\"\"\n        # pipeline.stt_engine can't be None or this function is not called\n        stt_provider = stt.async_get_speech_to_text_engine(\n            self.hass,\n            self.pipeline.stt_engine,  # type: ignore[arg-type]\n        )\n\n        if stt_provider is None:\n            engine = self.pipeline.stt_engine\n            raise SpeechToTextError(\n                code=\"stt-provider-missing\",\n                message=f\"No speech-to-text provider for: {engine}\",\n            )\n\n        metadata.language = self.pipeline.stt_language or self.language\n\n        if not stt_provider.check_metadata(metadata):\n            raise SpeechToTextError(\n                code=\"stt-provider-unsupported-metadata\",\n                message=(\n                    f\"Provider {stt_provider.name} does not support input speech \"\n                    f\"to text metadata {metadata}\"\n                ),\n            )\n\n        self.stt_provider = stt_provider\n\n    async def speech_to_text(","sourceCodeStart":877,"sourceCodeEnd":913,"githubUrl":"https://github.com/home-assistant/core/blob/58a3fdb3ea0538617f0a07efcfba6294de64fd59/homeassistant/components/assist_pipeline/pipeline.py#L877-L913","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Open Settings > Voice assistants and re-select a valid speech-to-text engine for the pipeline (or clear stt_engine to use the default).","Check that the integration providing STT (Wyoming/Whisper, cloud, etc.) is loaded and its service is actually running; restart it if needed.","Verify the engine id stored in .storage/assist_pipeline.json matches an existing stt entity/label.","Register or re-add the missing provider before starting runs at the STT stage."],"exampleFix":"# before\npipeline = Pipeline(stt_engine=\"whisper.local\")  # no longer exists\n\n# after\nstt_engines = await stt.async_get_speech_to_text_engine(hass, \"whisper.local\")\nif stt_engines is None:\n    pipeline = dataclasses.replace(pipeline, stt_engine=None)  # fall back to default provider","handlingStrategy":"validation","validationCode":"from homeassistant.components import stt\nprovider = stt.async_get_speech_to_text_engine(hass, pipeline.stt_engine)\nif provider is None:\n    _LOGGER.warning(\"STT engine %s missing; run will fail\", pipeline.stt_engine)","typeGuard":"def has_stt_engine(pipeline: Pipeline) -> bool:\n    return pipeline.stt_engine is not None","tryCatchPattern":"from homeassistant.components.assist_pipeline.error import SpeechToTextError\ntry:\n    await pipeline_job.run()\nexcept SpeechToTextError as err:\n    if err.code == \"stt-provider-missing\":\n        # reselect engine / alert user\n        ...","preventionTips":["After removing an STT integration, immediately update every pipeline that referenced its engine.","Health-check engine resolution before starting voice runs in long-lived satellite integrations."],"tags":["assist-pipeline","stt","configuration"],"backgroundTag":null,"analyzedSha":"58a3fdb3ea0538617f0a07efcfba6294de64fd59","analyzedAt":"2026-08-14T20:54:38.818Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}