README.md

June 27, 2026 · View on GitHub

Summarization for Pydantic AI

Summarization for Pydantic AI

Unlimited context for long-running agents.
Auto-summarize or slide the window — never hit the context wall.

Docs · PyPI · Install · Ecosystem · Deep Agents

PyPI version PyPI Downloads GitHub Stars Python 3.10+ License: MIT Coverage Status CI Pydantic AI

LLM summarization  •  Zero-cost sliding window  •  Auto token tracking  •  Limit warnings  •  Safe tool-pair cutoff


Part of Pydantic Deep Agents — the open-source Claude Code alternative & Python agent framework. Use this library standalone, or get everything wired together in one create_deep_agent() call.

Summarization for Pydantic AI keeps your Pydantic AI agents running through long conversations without ever exceeding model context limits. Choose intelligent LLM summarization or zero-cost sliding-window trimming — both preserve tool-call pairs.

Use Cases

What You Want to BuildHow This Library Helps
Long-Running AgentAutomatically compress history when context fills up
Customer Support BotPreserve key details while discarding routine exchanges
Code AssistantKeep recent code context, summarize older discussions
High-Throughput AppZero-cost sliding window for maximum speed
Cost-Sensitive AppChoose between quality (summarization) or free (sliding window)

Installation

pip install summarization-pydantic-ai

Or with uv:

uv add summarization-pydantic-ai

For accurate token counting:

pip install summarization-pydantic-ai[tiktoken]

The recommended way to add context management is via pydantic-ai's native Capabilities API:

from pydantic_ai import Agent
from pydantic_ai_summarization import ContextManagerCapability

agent = Agent(
    "anthropic:claude-sonnet-4-6",
    capabilities=[ContextManagerCapability(max_tokens=100_000)],
)

result = await agent.run("Hello!")

That's it. Your agent now:

  • Tracks token usage on every turn
  • Auto-compresses when approaching the limit (90% by default)
  • Truncates large tool outputs
  • Auto-detects context window size from the model
  • Preserves tool call/response pairs (never breaks them)

Agent-Triggered Compression

Let the agent decide when to compress by enabling the compact_conversation tool:

agent = Agent(
    "anthropic:claude-sonnet-4-6",
    capabilities=[ContextManagerCapability(
        include_compact_tool=True,  # Adds compact_conversation(focus?) tool
    )],
)

The agent can call compact_conversation(focus="preserve API design decisions") to trigger compression with a focus topic. Compression is deferred to the next model request.

Combine with Limit Warnings

from pydantic_ai_summarization import ContextManagerCapability, LimitWarnerCapability

agent = Agent(
    "openai:gpt-4.1",
    capabilities=[
        LimitWarnerCapability(max_iterations=40, max_context_tokens=100_000),
        ContextManagerCapability(max_tokens=100_000),
    ],
)

Alternative: Processor API

For standalone use without capabilities:

from pydantic_ai import Agent
from pydantic_ai_summarization import create_summarization_processor

processor = create_summarization_processor(
    trigger=("tokens", 100000),
    keep=("messages", 20),
)

agent = Agent("openai:gpt-4.1", history_processors=[processor])

Available Processors

ProcessorLLM CostLatencyContext Preservation
ContextManagerCapabilityPer compressionLow trackingIntelligent summary + tool truncation
SummarizationProcessorHighHighIntelligent summary
SlidingWindowProcessorZero~0msDiscards old messages
LimitWarnerProcessorZero~0msFull history + warning injection

Intelligent Summarization

Uses an LLM to create summaries of older messages:

from pydantic_ai_summarization import create_summarization_processor

processor = create_summarization_processor(
    trigger=("tokens", 100000),  # When to summarize
    keep=("messages", 20),       # What to keep
)

Zero-Cost Sliding Window

Simply discards old messages — no LLM calls:

from pydantic_ai_summarization import create_sliding_window_processor

processor = create_sliding_window_processor(
    trigger=("messages", 100),  # When to trim
    keep=("messages", 50),      # What to keep
)

Limit Warnings

Warn the agent before requests, context usage, or total tokens hit a cap:

from pydantic_ai_summarization import create_limit_warner_processor

processor = create_limit_warner_processor(
    max_iterations=40,
    max_context_tokens=100000,
    max_total_tokens=200000,
)

Context Manager Capability

Full context management with token tracking, auto-compression, and tool output truncation:

from pydantic_ai import Agent
from pydantic_ai_summarization import ContextManagerCapability

agent = Agent(
    "anthropic:claude-sonnet-4-6",
    capabilities=[ContextManagerCapability(
        max_tokens=100_000,
        compress_threshold=0.9,
        max_tool_output_tokens=5000,
        include_compact_tool=True,  # Agent gets a compact_conversation tool
    )],
)

Trigger Types

TypeExampleDescription
messages("messages", 50)Trigger when message count exceeds threshold
tokens("tokens", 100000)Trigger when token count exceeds threshold
fraction("fraction", 0.8)Trigger at percentage of max_input_tokens

Keep Types

TypeExampleDescription
messages("messages", 20)Keep last N messages
tokens("tokens", 10000)Keep last N tokens worth
fraction("fraction", 0.2)Keep last N% of context

Advanced Configuration

Multiple Triggers

from pydantic_ai_summarization import SummarizationProcessor

processor = SummarizationProcessor(
    model="openai:gpt-4o",
    trigger=[
        ("messages", 50),    # OR 50+ messages
        ("tokens", 100000),  # OR 100k+ tokens
    ],
    keep=("messages", 10),
)

Fraction-Based

processor = SummarizationProcessor(
    model="openai:gpt-4o",
    trigger=("fraction", 0.8),  # 80% of context window
    keep=("fraction", 0.2),     # Keep last 20%
    max_input_tokens=128000,    # GPT-4's context window
)

Custom Token Counter

def my_token_counter(messages):
    return sum(len(str(msg)) for msg in messages) // 4

processor = create_summarization_processor(
    token_counter=my_token_counter,
)

Custom Model (e.g., Azure OpenAI)

from pydantic_ai.models.openai import OpenAIModel
from pydantic_ai.providers.openai import OpenAIProvider
from pydantic_ai_summarization import create_summarization_processor

azure_model = OpenAIModel(
    "gpt-4o",
    provider=OpenAIProvider(
        base_url="https://my-resource.openai.azure.com/openai/deployments/gpt-4o",
        api_key="your-azure-api-key",
    ),
)

processor = create_summarization_processor(
    model=azure_model,
    trigger=("tokens", 100000),
    keep=("messages", 20),
)

Custom Summary Prompt

processor = create_summarization_processor(
    summary_prompt="""
    Extract key information from this conversation.
    Focus on: decisions made, code written, pending tasks.

    Conversation:
    {messages}
    """,
)

Why Choose This Library?

FeatureDescription
Two StrategiesIntelligent summarization or fast sliding window
Flexible TriggersMessage count, token count, or fraction-based
Safe CutoffNever breaks tool call/response pairs
Auto max_tokensAuto-detect context window from genai-prices
Message PersistenceSave all messages to JSON for session resume
Guided CompactionFocus summaries on specific topics
Callbackson_before/after_compress with instruction re-injection
Async Token CountingSync or async token counter support
Token TrackingReal-time usage monitoring with callbacks
Tool TruncationAutomatic truncation of large tool outputs
Custom ModelsUse any pydantic-ai Model (Azure, custom providers)
LightweightOnly requires pydantic-ai-slim (no extra model SDKs)

Vstorm OSS Ecosystem

This library is one piece of a broader open-source toolkit for production AI agents — all built on Pydantic AI.

ProjectDescriptionStars
Pydantic Deep AgentsThe full agent framework and terminal assistant — bundles every library below into one create_deep_agent() call.Stars
pydantic-ai-backendSandboxed execution & file tools — State / Local / Docker / Daytona backends + console toolset.Stars
subagents-pydantic-aiDeclarative multi-agent orchestration — sync / async / auto, with token tracking.Stars
👉 summarization-pydantic-aiUnlimited context for long-running agents — summarization or sliding window.Stars
pydantic-ai-shieldsDrop-in guardrails — cost caps, prompt-injection defense, PII & secret redaction, tool blocking.Stars
pydantic-ai-todoTask planning with subtasks, dependencies, and cycle detection.Stars
full-stack-ai-agent-templateZero to production AI app in 30 minutes — FastAPI + Next.js 15, RAG, 6 AI frameworks.Stars

Want it all wired together? Pydantic Deep Agents ships every library above integrated — planning, filesystem, subagents, memory, context management, and guardrails — behind a single function call. Browse everything at oss.vstorm.co.

Contributing

git clone https://github.com/vstorm-co/summarization-pydantic-ai.git
cd summarization-pydantic-ai
make install
make test  # 100% coverage required

Star History

If this library saved you from wiring an agent harness by hand — give it a ⭐. It's the single biggest thing that helps the project grow.

Star History


License

MIT — see LICENSE


Need help shipping AI agents in production?

We're Vstorm — an Applied Agentic AI Engineering Consultancy
with 30+ production agent implementations. Pydantic Deep Agents is what we build them with.

Talk to us



Made with care by Vstorm