langchain-ai/langgraph · error · RuntimeError

thread.run.respond: no outstanding interrupt. Provide an exp

Error message

thread.run.respond: no outstanding interrupt. Provide an explicit `interrupt_id` or wait for `thread.interrupted`.

What it means

Error "thread.run.respond: no outstanding interrupt. Provide an explicit `interrupt_id` or wait for `thread.interrupted`." thrown in langchain-ai/langgraph.

Source

Thrown at libs/sdk-py/langgraph_sdk/_async/stream.py:237

        Args:
            response: the response value forwarded as `params.response` on the
                wire (protocol field name).
            interrupt_id: optional explicit id. When omitted, requires exactly
                one outstanding interrupt and uses its id.

        Raises:
            RuntimeError: no outstanding interrupts; `interrupt_id` is None but
                multiple interrupts are outstanding; or the explicit
                `interrupt_id` doesn't match any outstanding interrupt.
        """
        # Why: take the `interrupts` snapshot AND dispatch the command under
        # `_interrupts_lock`, so the lifecycle watcher's terminal-clear path
        # cannot wipe `interrupts` between the snapshot and the wire send.
        async with self._owner._interrupts_lock:
            outstanding = list(self._owner.interrupts)
            if interrupt_id is None:
                if len(outstanding) == 0:
                    raise RuntimeError(
                        "thread.run.respond: no outstanding interrupt. Provide "
                        "an explicit `interrupt_id` or wait for "
                        "`thread.interrupted`."
                    )
                if len(outstanding) > 1:
                    ids = [p["interrupt_id"] for p in outstanding]
                    raise RuntimeError(
                        f"thread.run.respond: ambiguous — {len(outstanding)} "
                        f"outstanding interrupts ({ids!r}). Provide an explicit "
                        "`interrupt_id`."
                    )
                match = outstanding[0]
            else:
                match = next(
                    (p for p in outstanding if p["interrupt_id"] == interrupt_id),
                    None,
                )
                if match is None:

View on GitHub (pinned to 38031739e5)

When it happens

Trigger: Thrown at libs/sdk-py/langgraph_sdk/_async/stream.py:237 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of langchain-ai/langgraph@38031739e5 (2026-08-26). Data as JSON: /api/errors/a20e21dbb30f7903. Report an issue: GitHub.