{"record":{"id":"a20e21dbb30f7903","repo":"langchain-ai/langgraph","slug":"thread-run-respond-no-outstanding-interrupt-prov","errorCode":null,"errorMessage":"thread.run.respond: no outstanding interrupt. Provide an explicit `interrupt_id` or wait for `thread.interrupted`.","messagePattern":"thread\\.run\\.respond: no outstanding interrupt\\. Provide an explicit `interrupt_id` or wait for `thread\\.interrupted`\\.","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"libs/sdk-py/langgraph_sdk/_async/stream.py","lineNumber":237,"sourceCode":"        Args:\n            response: the response value forwarded as `params.response` on the\n                wire (protocol field name).\n            interrupt_id: optional explicit id. When omitted, requires exactly\n                one outstanding interrupt and uses its id.\n\n        Raises:\n            RuntimeError: no outstanding interrupts; `interrupt_id` is None but\n                multiple interrupts are outstanding; or the explicit\n                `interrupt_id` doesn't match any outstanding interrupt.\n        \"\"\"\n        # Why: take the `interrupts` snapshot AND dispatch the command under\n        # `_interrupts_lock`, so the lifecycle watcher's terminal-clear path\n        # cannot wipe `interrupts` between the snapshot and the wire send.\n        async with self._owner._interrupts_lock:\n            outstanding = list(self._owner.interrupts)\n            if interrupt_id is None:\n                if len(outstanding) == 0:\n                    raise RuntimeError(\n                        \"thread.run.respond: no outstanding interrupt. Provide \"\n                        \"an explicit `interrupt_id` or wait for \"\n                        \"`thread.interrupted`.\"\n                    )\n                if len(outstanding) > 1:\n                    ids = [p[\"interrupt_id\"] for p in outstanding]\n                    raise RuntimeError(\n                        f\"thread.run.respond: ambiguous — {len(outstanding)} \"\n                        f\"outstanding interrupts ({ids!r}). Provide an explicit \"\n                        \"`interrupt_id`.\"\n                    )\n                match = outstanding[0]\n            else:\n                match = next(\n                    (p for p in outstanding if p[\"interrupt_id\"] == interrupt_id),\n                    None,\n                )\n                if match is None:","sourceCodeStart":219,"sourceCodeEnd":255,"githubUrl":"https://github.com/langchain-ai/langgraph/blob/38031739e551638e373fb553453256c23feeb41f/libs/sdk-py/langgraph_sdk/_async/stream.py#L219-L255","documentation":"Error \"thread.run.respond: no outstanding interrupt. Provide an explicit `interrupt_id` or wait for `thread.interrupted`.\" thrown in langchain-ai/langgraph.","triggerScenarios":"Thrown at libs/sdk-py/langgraph_sdk/_async/stream.py:237 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"38031739e551638e373fb553453256c23feeb41f","analyzedAt":"2026-08-26T18:02:49.312Z","schemaVersion":2},"datasetVersion":"2026-08-26T21:11:00.512Z"}