home-assistant/core · warning · SpeechToTextError

stt-no-text-recognized

stt-no-text-recognized

Error message

No text recognized

What it means

SpeechToTextError with code stt-no-text-recognized is raised when the STT provider returns SUCCESS but result.text is empty. The audio was processed fine, yet nothing intelligible was transcribed — typically silence, noise, or speech in a language the model does not understand.

Source

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

                message="Home Assistant Cloud authentication failed",
            ) from src_error
        except Exception as src_error:
            _LOGGER.exception("Unexpected error during speech-to-text")
            raise SpeechToTextError(
                code="stt-stream-failed",
                message="Unexpected error during speech-to-text",
            ) from src_error

        _LOGGER.debug("speech-to-text result %s", result)

        if result.result != stt.SpeechResultState.SUCCESS:
            raise SpeechToTextError(
                code="stt-stream-failed",
                message="speech-to-text failed",
            )

        if not result.text:
            raise SpeechToTextError(
                code="stt-no-text-recognized", message="No text recognized"
            )

        self.process_event(
            PipelineEvent(
                PipelineEventType.STT_END,
                {
                    "stt_output": {
                        "text": result.text,
                    }
                },
            )
        )

        return result.text

    async def _speech_to_text_stream(
        self,

View on GitHub (pinned to 58a3fdb3ea)

Solutions

  1. Speak a clear voice command immediately after the wake word and check microphone volume/gain.
  2. Ensure pipeline.stt_language (or the conversation language) matches the language actually spoken.
  3. If it recurs, switch to a more accurate STT engine or a larger model.
  4. Handle this case in the caller: respond with a 'I didn't catch that' TTS message instead of surfacing an error.

Example fix

# before
await pipeline_job.run()  # raises on empty transcript

# after
from homeassistant.components.assist_pipeline.error import SpeechToTextError
try:
    await pipeline_job.run()
except SpeechToTextError as err:
    if err.code == "stt-no-text-recognized":
        _LOGGER.info("User did not speak after wake word")
    else:
        raise
Defensive patterns

Strategy: try-catch

Try / catch

from homeassistant.components.assist_pipeline.error import SpeechToTextError
try:
    await pipeline_job.run()
except SpeechToTextError as err:
    if err.code == "stt-no-text-recognized":
        pass  # prompt the user to repeat; normal UX path

Prevention

When it happens

Trigger: The user does not speak (or speaks too quietly) after the wake word, the microphone input is muted/noise, or the utterance is in a language unsupported by the STT model, so the provider returns an empty string.

Common situations: User says only the wake word and nothing else; microphone gain too low; wrong language configured (pipeline.stt_language vs spoken language); background music drowning out speech.

Related errors


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