This folder demonstrates context compaction patterns introduced by ADR-0019.
basics.py— builds a local message list and applies each built-in strategy one at a time.summarization.py— runsSummarizationStrategydirectly with a real summarizing chat client.advanced.py— composes multiple strategies withTokenBudgetComposedStrategy, including a real summarizer and tool-call groups.agent_client_overrides.py— shows client defaults, agent-level overrides, and per-run compaction overrides.custom.py— defines a custom strategy implementing theCompactionStrategyprotocol.tiktoken_tokenizer.py— shows aTokenizerProtocolimplementation backed bytiktoken.compaction_provider.py— usesCompactionProviderwith an agent andInMemoryHistoryProvider.
Run samples with:
uv run samples/02-agents/compaction/basics.py
uv run samples/02-agents/compaction/summarization.py # requires OPENAI_API_KEY
uv run samples/02-agents/compaction/advanced.py # requires OPENAI_API_KEY
uv run samples/02-agents/compaction/agent_client_overrides.py
uv run samples/02-agents/compaction/custom.py
uv run samples/02-agents/compaction/tiktoken_tokenizer.py
uv run samples/02-agents/compaction/compaction_provider.py # requires OPENAI_API_KEYMost compaction strategies in this folder (TruncationStrategy, SlidingWindowStrategy,
SelectiveToolCallCompactionStrategy, ToolResultCompactionStrategy) only remove or reorder
existing messages and carry no additional risk. SummarizationStrategy is the exception: it
calls out to an LLM to produce replacement summary content that permanently becomes part of
chat history. A compromised or malicious summarization service could return a summary
containing unsafe instructions, creating a persistent indirect-prompt-injection vector. Using
SummarizationStrategy is optional and requires explicit configuration — only point its
chat client at a summarization service you trust as much as the primary model.