Home / Function/ test_summarization_middleware_token_retention_preserves_ai_tool_pairs() — langchain Function Reference

test_summarization_middleware_token_retention_preserves_ai_tool_pairs() — langchain Function Reference

Architecture documentation for the test_summarization_middleware_token_retention_preserves_ai_tool_pairs() function in test_summarization.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  e2e3e746_d475_a232_137a_124083939e52["test_summarization_middleware_token_retention_preserves_ai_tool_pairs()"]
  1911a463_b67d_0301_5ef1_5c535dafc14a["test_summarization.py"]
  e2e3e746_d475_a232_137a_124083939e52 -->|defined in| 1911a463_b67d_0301_5ef1_5c535dafc14a
  style e2e3e746_d475_a232_137a_124083939e52 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_summarization.py lines 346–387

def test_summarization_middleware_token_retention_preserves_ai_tool_pairs() -> None:
    """Ensure token retention preserves AI/Tool message pairs together."""

    def token_counter(messages: Iterable[MessageLikeRepresentation]) -> int:
        return sum(len(getattr(message, "content", "")) for message in messages)

    middleware = SummarizationMiddleware(
        model=ProfileChatModel(),
        trigger=("fraction", 0.1),
        keep=("fraction", 0.5),
        token_counter=token_counter,
    )

    # Total tokens: 300 + 200 + 50 + 180 + 160 = 890
    # Target keep: 500 tokens (50% of 1000)
    # Binary search finds cutoff around index 2 (ToolMessage)
    # We move back to index 1 to preserve the AIMessage with its ToolMessage
    messages: list[AnyMessage] = [
        HumanMessage(content="H" * 300),
        AIMessage(
            content="A" * 200,
            tool_calls=[{"name": "test", "args": {}, "id": "call-1"}],
        ),
        ToolMessage(content="T" * 50, tool_call_id="call-1"),
        HumanMessage(content="H" * 180),
        HumanMessage(content="H" * 160),
    ]

    state = AgentState[Any](messages=messages)
    result = middleware.before_model(state, Runtime())
    assert result is not None

    preserved_messages = result["messages"][2:]
    # We move the cutoff back to include the AIMessage with its ToolMessage
    # So we preserve messages from index 1 onward (AI + Tool + Human + Human)
    assert preserved_messages == messages[1:]

    # Verify the AI/Tool pair is preserved together
    assert isinstance(preserved_messages[0], AIMessage)
    assert preserved_messages[0].tool_calls
    assert isinstance(preserved_messages[1], ToolMessage)
    assert preserved_messages[1].tool_call_id == preserved_messages[0].tool_calls[0]["id"]

Domain

Subdomains

Frequently Asked Questions

What does test_summarization_middleware_token_retention_preserves_ai_tool_pairs() do?
test_summarization_middleware_token_retention_preserves_ai_tool_pairs() is a function in the langchain codebase, defined in libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_summarization.py.
Where is test_summarization_middleware_token_retention_preserves_ai_tool_pairs() defined?
test_summarization_middleware_token_retention_preserves_ai_tool_pairs() is defined in libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_summarization.py at line 346.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free