SummarizationMiddleware Class — langchain Architecture
Architecture documentation for the SummarizationMiddleware class in summarization.py from the langchain codebase.
Entity Profile
Dependency Diagram
graph TD 6b567cf3_79d8_3853_ecff_87b1249c19ac["SummarizationMiddleware"] fcfa55b0_4a86_fa31_a156_3c38c76a0a9b["AIMessage"] 6b567cf3_79d8_3853_ecff_87b1249c19ac -->|extends| fcfa55b0_4a86_fa31_a156_3c38c76a0a9b 4318b819_4fe9_65b0_5369_424ec9518efe["ToolMessage"] 6b567cf3_79d8_3853_ecff_87b1249c19ac -->|extends| 4318b819_4fe9_65b0_5369_424ec9518efe a507b460_0dc0_4c6d_e9ba_127173b85a6c["summarization.py"] 6b567cf3_79d8_3853_ecff_87b1249c19ac -->|defined in| a507b460_0dc0_4c6d_e9ba_127173b85a6c 6829d201_1915_5d42_4bf4_9d3e573a451f["__init__()"] 6b567cf3_79d8_3853_ecff_87b1249c19ac -->|method| 6829d201_1915_5d42_4bf4_9d3e573a451f 2648023c_b714_a369_07d4_73e1eceebc8b["before_model()"] 6b567cf3_79d8_3853_ecff_87b1249c19ac -->|method| 2648023c_b714_a369_07d4_73e1eceebc8b 522ba804_2e41_4f2e_f3b0_9e2ab61ea4f8["abefore_model()"] 6b567cf3_79d8_3853_ecff_87b1249c19ac -->|method| 522ba804_2e41_4f2e_f3b0_9e2ab61ea4f8 5dad8159_09ad_44c7_9614_00332fca7382["_should_summarize_based_on_reported_tokens()"] 6b567cf3_79d8_3853_ecff_87b1249c19ac -->|method| 5dad8159_09ad_44c7_9614_00332fca7382 3458a99d_8184_fa08_3df7_9b3239ce74b2["_should_summarize()"] 6b567cf3_79d8_3853_ecff_87b1249c19ac -->|method| 3458a99d_8184_fa08_3df7_9b3239ce74b2 0cb19002_64b3_4b9a_b0ce_c638f2cc8db2["_determine_cutoff_index()"] 6b567cf3_79d8_3853_ecff_87b1249c19ac -->|method| 0cb19002_64b3_4b9a_b0ce_c638f2cc8db2 4be6b701_9ba2_d8e5_4408_a428a5863902["_find_token_based_cutoff()"] 6b567cf3_79d8_3853_ecff_87b1249c19ac -->|method| 4be6b701_9ba2_d8e5_4408_a428a5863902 c6937576_81c9_b8ab_847a_71687cddf16c["_get_profile_limits()"] 6b567cf3_79d8_3853_ecff_87b1249c19ac -->|method| c6937576_81c9_b8ab_847a_71687cddf16c 1b811871_ac2d_0e6d_1cad_40f09435722b["_validate_context_size()"] 6b567cf3_79d8_3853_ecff_87b1249c19ac -->|method| 1b811871_ac2d_0e6d_1cad_40f09435722b 357cacdf_5c05_cca6_a5e9_6b70e3f0f437["_build_new_messages()"] 6b567cf3_79d8_3853_ecff_87b1249c19ac -->|method| 357cacdf_5c05_cca6_a5e9_6b70e3f0f437 cfe31225_0e87_4329_a199_24eddb4b52f9["_ensure_message_ids()"] 6b567cf3_79d8_3853_ecff_87b1249c19ac -->|method| cfe31225_0e87_4329_a199_24eddb4b52f9
Relationship Graph
Source Code
libs/langchain_v1/langchain/agents/middleware/summarization.py lines 153–658
class SummarizationMiddleware(AgentMiddleware[AgentState[ResponseT], ContextT, ResponseT]):
"""Summarizes conversation history when token limits are approached.
This middleware monitors message token counts and automatically summarizes older
messages when a threshold is reached, preserving recent messages and maintaining
context continuity by ensuring AI/Tool message pairs remain together.
"""
def __init__(
self,
model: str | BaseChatModel,
*,
trigger: ContextSize | list[ContextSize] | None = None,
keep: ContextSize = ("messages", _DEFAULT_MESSAGES_TO_KEEP),
token_counter: TokenCounter = count_tokens_approximately,
summary_prompt: str = DEFAULT_SUMMARY_PROMPT,
trim_tokens_to_summarize: int | None = _DEFAULT_TRIM_TOKEN_LIMIT,
**deprecated_kwargs: Any,
) -> None:
"""Initialize summarization middleware.
Args:
model: The language model to use for generating summaries.
trigger: One or more thresholds that trigger summarization.
Provide a single
[`ContextSize`][langchain.agents.middleware.summarization.ContextSize]
tuple or a list of tuples, in which case summarization runs when any
threshold is met.
!!! example
```python
# Trigger summarization when 50 messages is reached
("messages", 50)
# Trigger summarization when 3000 tokens is reached
("tokens", 3000)
# Trigger summarization either when 80% of model's max input tokens
# is reached or when 100 messages is reached (whichever comes first)
[("fraction", 0.8), ("messages", 100)]
```
See [`ContextSize`][langchain.agents.middleware.summarization.ContextSize]
for more details.
keep: Context retention policy applied after summarization.
Provide a [`ContextSize`][langchain.agents.middleware.summarization.ContextSize]
tuple to specify how much history to preserve.
Defaults to keeping the most recent `20` messages.
Does not support multiple values like `trigger`.
!!! example
```python
# Keep the most recent 20 messages
("messages", 20)
# Keep the most recent 3000 tokens
("tokens", 3000)
# Keep the most recent 30% of the model's max input tokens
("fraction", 0.3)
```
token_counter: Function to count tokens in messages.
summary_prompt: Prompt template for generating summaries.
trim_tokens_to_summarize: Maximum tokens to keep when preparing messages for
the summarization call.
Pass `None` to skip trimming entirely.
"""
# Handle deprecated parameters
if "max_tokens_before_summary" in deprecated_kwargs:
value = deprecated_kwargs["max_tokens_before_summary"]
warnings.warn(
"max_tokens_before_summary is deprecated. Use trigger=('tokens', value) instead.",
DeprecationWarning,
stacklevel=2,
Extends
Source
Frequently Asked Questions
What is the SummarizationMiddleware class?
SummarizationMiddleware is a class in the langchain codebase, defined in libs/langchain_v1/langchain/agents/middleware/summarization.py.
Where is SummarizationMiddleware defined?
SummarizationMiddleware is defined in libs/langchain_v1/langchain/agents/middleware/summarization.py at line 153.
What does SummarizationMiddleware extend?
SummarizationMiddleware extends AIMessage, ToolMessage.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free