{"record":{"id":"5e27816af3dfb718","repo":"home-assistant/core","slug":"pipeline-not-found","errorCode":"pipeline_not_found","errorMessage":"Pipeline {pipeline_id} not found","messagePattern":"Pipeline (.+?) not found","errorType":"exception","errorClass":"PipelineNotFound","httpStatus":null,"severity":"error","filePath":"homeassistant/components/assist_pipeline/pipeline.py","lineNumber":322,"sourceCode":"\n\n@callback\ndef async_get_pipeline(hass: HomeAssistant, pipeline_id: str | None = None) -> Pipeline:\n    \"\"\"Get a pipeline by id or the preferred pipeline.\"\"\"\n    pipeline_data = hass.data[KEY_ASSIST_PIPELINE]\n\n    if pipeline_id is None:\n        # A pipeline was not specified, use the preferred one\n        pipeline_id = pipeline_data.pipeline_store.async_get_preferred_item()\n\n    if pipeline_id.startswith(\"conversation.\"):\n        return _async_get_pipeline_from_conversation_entity(hass, pipeline_id)\n\n    pipeline = pipeline_data.pipeline_store.data.get(pipeline_id)\n\n    # If invalid pipeline ID was specified\n    if pipeline is None:\n        raise PipelineNotFound(\n            \"pipeline_not_found\", f\"Pipeline {pipeline_id} not found\"\n        )\n\n    return pipeline\n\n\n@callback\ndef async_get_pipelines(hass: HomeAssistant) -> list[Pipeline]:\n    \"\"\"Get all pipelines.\"\"\"\n    pipeline_data = hass.data[KEY_ASSIST_PIPELINE]\n\n    return list(pipeline_data.pipeline_store.data.values())\n\n\nasync def async_update_pipeline(\n    hass: HomeAssistant,\n    pipeline: Pipeline,\n    *,","sourceCodeStart":304,"sourceCodeEnd":340,"githubUrl":"https://github.com/home-assistant/core/blob/58a3fdb3ea0538617f0a07efcfba6294de64fd59/homeassistant/components/assist_pipeline/pipeline.py#L304-L340","documentation":"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.).","triggerScenarios":"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.","commonSituations":"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.","solutions":["List current pipelines via Developer Tools -> Assist or the pipeline store and copy the correct id/name.","If the pipeline was deleted, re-create it or switch the caller to the preferred pipeline (pass pipeline_id=None).","Update the automation/assist_satellite config that pins the stale id.","Prefer 'conversation.<entity_id>' references or pipeline names where supported, as they survive id changes."],"exampleFix":"// before\npipeline = async_get_pipeline(hass, \"deleted-pipeline-id\")\n// after\nfrom homeassistant.components.assist_pipeline import PipelineNotFound\ntry:\n    pipeline = async_get_pipeline(hass, pipeline_id)\nexcept PipelineNotFound:\n    pipeline = async_get_pipeline(hass, None)  # fall back to preferred","handlingStrategy":"try-catch","validationCode":"from homeassistant.components.assist_pipeline import async_get_pipelines\n\nvalid_ids = {p.id for p in async_get_pipelines(hass)}\nif pipeline_id not in valid_ids and not pipeline_id.startswith(\"conversation.\"):\n    pipeline_id = None  # fall back to preferred","typeGuard":null,"tryCatchPattern":"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.","preventionTips":["Reference pipelines by 'conversation.<entity_id>' where possible; ids change on re-creation.","Validate stored pipeline ids against the store after restores/migrations.","Update dependent configs immediately after deleting a pipeline."],"tags":["home-assistant","assist-pipeline","voice","not-found","validation"],"backgroundTag":null,"analyzedSha":"58a3fdb3ea0538617f0a07efcfba6294de64fd59","analyzedAt":"2026-08-14T20:54:38.818Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}