Home / Class/ SummarizationMiddleware Class — langchain Architecture

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,

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