Files
langgraph/libs
Igor Soarez 31020845f6 fix(langgraph): stop astream_events dropping interrupts/control on v1/v2
#7677 declared `interrupt_before`, `interrupt_after` and `control` as
named parameters on the `Pregel.stream_events`/`astream_events`
dispatchers but forwarded them only on the v3 branch. On async v1/v2
they never reached `astream` and nothing raised: drains on a
caller-supplied `RunControl` had no effect and static interrupts never
fired. This regressed the pre-1.2.0 behavior where those keywords
reached `astream` through `**kwargs` (langchain-core forwards caller
kwargs to `astream` on both v1 and v2), and langgraph-api runs with
`stream_mode="events"` have been affected since 1.2.0a3.

Remove the three parameters from the public runtime implementations so
they travel through `**kwargs` again:

- v1/v2 recover the pre-#7677 passthrough: `astream` receives exactly
  what the caller passed, including an explicit `None`, and nothing
  for omitted arguments.
- v3 binds them on `_pregel_stream_v3`/`_apregel_stream_v3`, which are
  unchanged and keep their since-inception explicit-`None` defaults.

The typed v3 `@overload` stubs are unchanged, so v3 call sites keep
their static types. The docstrings now describe the three parameters as
honored on every async version (type-checked only on the v3 overloads),
and state that synchronous v1/v2 event streaming is not implemented in
langchain-core — `astream_events` yields the `StreamEvent` dicts there.

Recording tests pin, for all three names on both the async and sync v3
paths, exactly what `(a)stream` receives: caller-supplied values
(including an explicit `None`) on v1/v2, and `None` defaults on v3.
2026-10-06 23:19:21 +03:00
..
2026-10-06 10:35:44 -04:00