Skip to main content

Compaction Module

The compaction module provides automatic context management for long conversations, including message summarization and intelligent pruning.

Installation

pip install praisonaiagents

Features

  • Message summarization
  • Context window management
  • Token counting and limits
  • Intelligent message pruning

Quick Start

from praisonaiagents.compaction import ContextCompactor

# Create a compactor
compactor = ContextCompactor(
    max_tokens=8000,
    strategy="summarize"
)

# Compact messages when needed
compacted = compactor.compact(messages)

Classes

ContextCompactor

Main class for compacting conversation context.
from praisonaiagents.compaction import ContextCompactor

compactor = ContextCompactor(
    max_tokens=8000,
    strategy="summarize"
)

Constructor

ParameterTypeDefaultDescription
max_tokensint8000Maximum context tokens
strategystr"summarize"Compaction strategy
preserve_recentint5Recent messages to preserve

Methods

MethodDescription
compact(messages)Compact messages to fit budget
should_compact(messages)Check if compaction needed
get_token_count(messages)Count tokens in messages

CompactionConfig

Configuration for compaction behavior.
from praisonaiagents.compaction import CompactionConfig

config = CompactionConfig(
    max_tokens=8000,
    strategy="summarize",
    preserve_system=True,
    preserve_recent=5
)

Attributes

AttributeTypeDescription
max_tokensintMaximum context tokens
strategystrCompaction strategy
preserve_systemboolKeep system messages
preserve_recentintRecent messages to keep

CompactionStrategy

Available compaction strategies.
from praisonaiagents.compaction import CompactionStrategy

CompactionStrategy.SUMMARIZE  # Summarize old messages
CompactionStrategy.TRUNCATE   # Remove oldest messages
CompactionStrategy.SLIDING    # Sliding window approach

CompactionResult

Result of a compaction operation.
from praisonaiagents.compaction import CompactionResult

result = compactor.compact(messages)
print(result.original_tokens)
print(result.compacted_tokens)
print(result.messages)

Attributes

AttributeTypeDescription
messageslistCompacted messages
original_tokensintOriginal token count
compacted_tokensintFinal token count
summarystrSummary of removed content

Usage Examples

Basic Compaction

from praisonaiagents.compaction import ContextCompactor

compactor = ContextCompactor(max_tokens=4000)

messages = [
    {"role": "system", "content": "You are helpful."},
    {"role": "user", "content": "Long conversation..."},
    # ... many more messages
]

if compactor.should_compact(messages):
    result = compactor.compact(messages)
    messages = result.messages

With Agent

from praisonaiagents import Agent
from praisonaiagents.compaction import ContextCompactor

compactor = ContextCompactor(
    max_tokens=8000,
    strategy="summarize"
)

agent = Agent(
    name="Assistant",
    context=ManagerConfig(auto_compact=True, strategy="summarize")
)

# Agent automatically compacts context when needed

Summarize Strategy

from praisonaiagents.compaction import ContextCompactor

compactor = ContextCompactor(
    max_tokens=4000,
    strategy="summarize",
    preserve_recent=10  # Keep last 10 messages
)

# Old messages are summarized into a single message
result = compactor.compact(long_conversation)

Sliding Window

from praisonaiagents.compaction import ContextCompactor

compactor = ContextCompactor(
    max_tokens=4000,
    strategy="sliding"
)

# Keeps most recent messages within token budget

Best Practices

  1. Set appropriate limits - Balance context vs. cost
  2. Preserve important messages - Keep system prompts and recent context
  3. Use summarization - Better than truncation for continuity
  4. Monitor token usage - Track compaction frequency