Skip to content

Commit 1a9783f

Browse files
fix(agents): disable summarization when max_tokens_before_summary is None
Fix SummarizationMiddleware to properly disable all summarization when max_tokens_before_summary=None, as documented. Previously, summarization would still occur based on message count when this parameter was None. The fix adds an early return when max_tokens_before_summary is None, ensuring summarization is completely disabled regardless of message count or token count. Adds test case with messages exceeding messages_to_keep to verify the fix.
1 parent f006bc4 commit 1a9783f

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

libs/langchain_v1/langchain/agents/middleware/summarization.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,12 @@ def before_model(self, state: AgentState, runtime: Runtime) -> dict[str, Any] |
104104
messages = state["messages"]
105105
self._ensure_message_ids(messages)
106106

107+
# If max_tokens_before_summary is None, summarization is disabled
108+
if self.max_tokens_before_summary is None:
109+
return None
110+
107111
total_tokens = self.token_counter(messages)
108-
if (
109-
self.max_tokens_before_summary is not None
110-
and total_tokens < self.max_tokens_before_summary
111-
):
112+
if total_tokens < self.max_tokens_before_summary:
112113
return None
113114

114115
cutoff_index = self._find_safe_cutoff(messages)

libs/langchain_v1/tests/unit_tests/agents/test_middleware_agent.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1056,12 +1056,18 @@ def test_summarization_middleware_no_summarization_cases() -> None:
10561056
model = FakeToolCallingModel()
10571057
middleware = SummarizationMiddleware(model=model, max_tokens_before_summary=1000)
10581058

1059-
# Test when summarization is disabled
1059+
# Test when summarization is disabled with few messages
10601060
middleware_disabled = SummarizationMiddleware(model=model, max_tokens_before_summary=None)
10611061
state = {"messages": [HumanMessage(content="Hello"), AIMessage(content="Hi")]}
10621062
result = middleware_disabled.before_model(state, None)
10631063
assert result is None
10641064

1065+
# Test when summarization is disabled with many messages (exceeding messages_to_keep)
1066+
many_messages = [HumanMessage(content=f"Message {i}") for i in range(25)]
1067+
state_many = {"messages": many_messages}
1068+
result = middleware_disabled.before_model(state_many, None)
1069+
assert result is None
1070+
10651071
# Test when token count is below threshold
10661072
def mock_token_counter(messages):
10671073
return 500 # Below threshold

0 commit comments

Comments
 (0)