home-assistant/core · error · PipelineNotFound

pipeline_not_found

pipeline_not_found

Error message

Pipeline {pipeline_id} not found

What it means

PipelineNotFound raised by assist_pipeline's async_get_pipeline when the requested pipeline_id is not present in the pipeline store and is not a 'conversation.<entity_id>' reference. It signals an invalid/stale pipeline identifier being passed to a pipeline API (websocket, voice satellite, etc.).

Source

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


@callback
def async_get_pipeline(hass: HomeAssistant, pipeline_id: str | None = None) -> Pipeline:
    """Get a pipeline by id or the preferred pipeline."""
    pipeline_data = hass.data[KEY_ASSIST_PIPELINE]

    if pipeline_id is None:
        # A pipeline was not specified, use the preferred one
        pipeline_id = pipeline_data.pipeline_store.async_get_preferred_item()

    if pipeline_id.startswith("conversation."):
        return _async_get_pipeline_from_conversation_entity(hass, pipeline_id)

    pipeline = pipeline_data.pipeline_store.data.get(pipeline_id)

    # If invalid pipeline ID was specified
    if pipeline is None:
        raise PipelineNotFound(
            "pipeline_not_found", f"Pipeline {pipeline_id} not found"
        )

    return pipeline


@callback
def async_get_pipelines(hass: HomeAssistant) -> list[Pipeline]:
    """Get all pipelines."""
    pipeline_data = hass.data[KEY_ASSIST_PIPELINE]

    return list(pipeline_data.pipeline_store.data.values())


async def async_update_pipeline(
    hass: HomeAssistant,
    pipeline: Pipeline,
    *,

View on GitHub (pinned to 58a3fdb3ea)

Solutions

  1. List current pipelines via Developer Tools -> Assist or the pipeline store and copy the correct id/name.
  2. If the pipeline was deleted, re-create it or switch the caller to the preferred pipeline (pass pipeline_id=None).
  3. Update the automation/assist_satellite config that pins the stale id.
  4. Prefer 'conversation.<entity_id>' references or pipeline names where supported, as they survive id changes.

Example fix

// before
pipeline = async_get_pipeline(hass, "deleted-pipeline-id")
// after
from homeassistant.components.assist_pipeline import PipelineNotFound
try:
    pipeline = async_get_pipeline(hass, pipeline_id)
except PipelineNotFound:
    pipeline = async_get_pipeline(hass, None)  # fall back to preferred
Defensive patterns

Strategy: try-catch

Validate before calling

from homeassistant.components.assist_pipeline import async_get_pipelines

valid_ids = {p.id for p in async_get_pipelines(hass)}
if pipeline_id not in valid_ids and not pipeline_id.startswith("conversation."):
    pipeline_id = None  # fall back to preferred

Try / catch

try: pipeline = async_get_pipeline(hass, pipeline_id)\nexcept PipelineNotFound: pipeline = async_get_pipeline(hass, None) - or surface a config error if a specific pipeline was mandatory.

Prevention

When it happens

Trigger: async_get_pipeline(hass, pipeline_id) with an id that was deleted, came from a restored backup on another instance, or is a typo; the code first resolves 'conversation.*' ids to conversation entities, so those never raise - only stored-pipeline ids can 404.

Common situations: Dashboard/automation references a deleted pipeline; voice satellite or assist_satellite config still pointing at an old pipeline id after recreating it; scripts migrated between instances with different pipeline stores.

Related errors


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