{"record":{"id":"c723c67299d9d9d2","repo":"langchain-ai/langgraph","slug":"thread-run-respond-ambiguous-len-outstanding","errorCode":null,"errorMessage":"thread.run.respond: ambiguous — {len(outstanding)} outstanding interrupts ({ids!r}). Provide an explicit `interrupt_id`.","messagePattern":"thread\\.run\\.respond: ambiguous — (.+?) outstanding interrupts \\((.+?)\\)\\. Provide an explicit `interrupt_id`\\.","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"libs/sdk-py/langgraph_sdk/_async/stream.py","lineNumber":244,"sourceCode":"            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:\n                    raise RuntimeError(\n                        f\"thread.run.respond: interrupt_id {interrupt_id!r} does \"\n                        \"not match any outstanding interrupt in \"\n                        \"`thread.interrupts`.\"\n                    )\n            params = {\n                \"interrupt_id\": match[\"interrupt_id\"],","sourceCodeStart":226,"sourceCodeEnd":262,"githubUrl":"https://github.com/langchain-ai/langgraph/blob/38031739e551638e373fb553453256c23feeb41f/libs/sdk-py/langgraph_sdk/_async/stream.py#L226-L262","documentation":"Error \"thread.run.respond: ambiguous — {len(outstanding)} outstanding interrupts ({ids!r}). Provide an explicit `interrupt_id`.\" thrown in langchain-ai/langgraph.","triggerScenarios":"Thrown at libs/sdk-py/langgraph_sdk/_async/stream.py:244 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"}