From e5791e9835d5a3d6514386c45cc9a4db0567c668 Mon Sep 17 00:00:00 2001 From: Sydney Runkle Date: Wed, 22 Apr 2026 09:35:52 -0400 Subject: [PATCH] feat(agents): use DeltaChannel for AgentState messages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reduces checkpoint storage for messages from O(N²) to O(N) by replacing the bare add_messages reducer with DeltaChannel(add_messages). Same change applied to _OutputAgentState. --- libs/langchain_v1/langchain/agents/middleware/types.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libs/langchain_v1/langchain/agents/middleware/types.py b/libs/langchain_v1/langchain/agents/middleware/types.py index fbf3ce1b89f..a1ccb5ae26c 100644 --- a/libs/langchain_v1/langchain/agents/middleware/types.py +++ b/libs/langchain_v1/langchain/agents/middleware/types.py @@ -30,6 +30,7 @@ from langchain_core.messages import ( SystemMessage, ToolMessage, ) +from langgraph.channels.delta import DeltaChannel from langgraph.channels.ephemeral_value import EphemeralValue from langgraph.graph.message import add_messages from langgraph.prebuilt.tool_node import ToolCallRequest, ToolCallWrapper @@ -350,7 +351,7 @@ PrivateStateAttr = OmitFromSchema(input=True, output=True) class AgentState(TypedDict, Generic[ResponseT]): """State schema for the agent.""" - messages: Required[Annotated[list[AnyMessage], add_messages]] + messages: Required[Annotated[list[AnyMessage], DeltaChannel(add_messages)]] jump_to: NotRequired[Annotated[JumpTo | None, EphemeralValue, PrivateStateAttr]] structured_response: NotRequired[Annotated[ResponseT, OmitFromInput]] @@ -364,7 +365,7 @@ class _InputAgentState(TypedDict): # noqa: PYI049 class _OutputAgentState(TypedDict, Generic[ResponseT]): # noqa: PYI049 """Output state schema for the agent.""" - messages: Required[Annotated[list[AnyMessage], add_messages]] + messages: Required[Annotated[list[AnyMessage], DeltaChannel(add_messages)]] structured_response: NotRequired[ResponseT]