From 682814e9443e4921f704d93bd4e3f9aa6b27b4be Mon Sep 17 00:00:00 2001 From: Sydney Runkle <54324534+sydney-runkle@users.noreply.github.com> Date: Thu, 12 Mar 2026 11:58:04 -0400 Subject: [PATCH] fix: stream part generic order (#7134) this is technically breaking but is a fix given dependency of output t on state t --- libs/langgraph/langgraph/pregel/main.py | 8 ++++---- libs/langgraph/langgraph/pregel/protocol.py | 4 ++-- libs/langgraph/langgraph/types.py | 2 +- libs/langgraph/tests/test_stream_v2.py | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libs/langgraph/langgraph/pregel/main.py b/libs/langgraph/langgraph/pregel/main.py index d4190a0e6..3ecefc1dc 100644 --- a/libs/langgraph/langgraph/pregel/main.py +++ b/libs/langgraph/langgraph/pregel/main.py @@ -2456,7 +2456,7 @@ class Pregel( debug: bool | None = None, version: Literal["v2"], **kwargs: Unpack[DeprecatedKwargs], - ) -> Iterator[StreamPart[OutputT, StateT]]: ... + ) -> Iterator[StreamPart[StateT, OutputT]]: ... @overload def stream( @@ -2787,7 +2787,7 @@ class Pregel( debug: bool | None = None, version: Literal["v2"], **kwargs: Unpack[DeprecatedKwargs], - ) -> AsyncIterator[StreamPart[OutputT, StateT]]: ... + ) -> AsyncIterator[StreamPart[StateT, OutputT]]: ... @overload def astream( @@ -3194,7 +3194,7 @@ class Pregel( durability: Durability | None = None, version: Literal["v2"], **kwargs: Any, - ) -> list[StreamPart[OutputT, StateT]]: ... + ) -> list[StreamPart[StateT, OutputT]]: ... @overload def invoke( @@ -3364,7 +3364,7 @@ class Pregel( durability: Durability | None = None, version: Literal["v2"], **kwargs: Any, - ) -> list[StreamPart[OutputT, StateT]]: ... + ) -> list[StreamPart[StateT, OutputT]]: ... @overload async def ainvoke( diff --git a/libs/langgraph/langgraph/pregel/protocol.py b/libs/langgraph/langgraph/pregel/protocol.py index e5e957f50..259554ddb 100644 --- a/libs/langgraph/langgraph/pregel/protocol.py +++ b/libs/langgraph/langgraph/pregel/protocol.py @@ -117,7 +117,7 @@ class PregelProtocol(Runnable[InputT, Any], Generic[StateT, ContextT, InputT, Ou interrupt_after: All | Sequence[str] | None = None, subgraphs: bool = False, version: Literal["v2"], - ) -> Iterator[StreamPart[OutputT, StateT]]: ... + ) -> Iterator[StreamPart[StateT, OutputT]]: ... @overload @abstractmethod @@ -161,7 +161,7 @@ class PregelProtocol(Runnable[InputT, Any], Generic[StateT, ContextT, InputT, Ou interrupt_after: All | Sequence[str] | None = None, subgraphs: bool = False, version: Literal["v2"], - ) -> AsyncIterator[StreamPart[OutputT, StateT]]: ... + ) -> AsyncIterator[StreamPart[StateT, OutputT]]: ... @overload @abstractmethod diff --git a/libs/langgraph/langgraph/types.py b/libs/langgraph/langgraph/types.py index 547513498..d04d82da7 100644 --- a/libs/langgraph/langgraph/types.py +++ b/libs/langgraph/langgraph/types.py @@ -335,7 +335,7 @@ StreamPart = TypeAliasType( | CheckpointStreamPart[StateT] | TasksStreamPart | DebugStreamPart[StateT], - type_params=(OutputT, StateT), + type_params=(StateT, OutputT), ) """A discriminated union of all v2 stream part types. diff --git a/libs/langgraph/tests/test_stream_v2.py b/libs/langgraph/tests/test_stream_v2.py index 50fb83031..29d34e678 100644 --- a/libs/langgraph/tests/test_stream_v2.py +++ b/libs/langgraph/tests/test_stream_v2.py @@ -1129,7 +1129,7 @@ _OutputT = TypeVar("_OutputT") _StateT = TypeVar("_StateT") -def _check_type_narrowing(part: StreamPart[_OutputT, _StateT]) -> None: +def _check_type_narrowing(part: StreamPart[_StateT, _OutputT]) -> None: """Compile-time type narrowing checks — never called at runtime.""" if part["type"] == "values": assert_type(part, ValuesStreamPart[_OutputT])