/ examples / context / 04_compaction_strategies.py
04_compaction_strategies.py
 1  """
 2  Compaction Strategies Example
 3  
 4  Demonstrates different context compaction strategies.
 5  """
 6  
 7  from praisonaiagents import Agent
 8  from praisonaiagents.context import ContextConfig, OptimizerStrategy
 9  
10  # Strategy 1: TRUNCATE - Fast, removes oldest messages
11  agent_truncate = Agent(
12      name="TruncateAgent",
13      instructions="You are a helpful assistant",
14      context=ContextConfig(
15          strategy=OptimizerStrategy.TRUNCATE,
16          compact_threshold=0.8,
17      )
18  )
19  
20  # Strategy 2: SLIDING_WINDOW - Keeps recent N turns
21  agent_sliding = Agent(
22      name="SlidingAgent",
23      instructions="You are a helpful assistant",
24      context=ContextConfig(
25          strategy=OptimizerStrategy.SLIDING_WINDOW,
26          keep_recent_turns=10,
27      )
28  )
29  
30  # Strategy 3: SMART - Importance-based (default)
31  agent_smart = Agent(
32      name="SmartAgent",
33      instructions="You are a helpful assistant",
34      context=ContextConfig(
35          strategy=OptimizerStrategy.SMART,  # Default
36          compact_threshold=0.8,
37      )
38  )
39  
40  # Strategy 4: PRUNE_TOOLS - Truncate old tool outputs
41  agent_prune = Agent(
42      name="PruneAgent",
43      instructions="You are a helpful assistant with tools",
44      context=ContextConfig(
45          strategy=OptimizerStrategy.PRUNE_TOOLS,
46          tool_output_max=5000,  # Max tokens per tool output
47      )
48  )
49  
50  # Strategy 5: NON_DESTRUCTIVE - Only prune tools, keep all history
51  agent_safe = Agent(
52      name="SafeAgent",
53      instructions="You are a helpful assistant (safety-critical)",
54      context=ContextConfig(
55          strategy=OptimizerStrategy.NON_DESTRUCTIVE,
56      )
57  )
58  
59  if __name__ == "__main__":
60      print("=== Compaction Strategies Example ===")
61      print()
62      
63      strategies = [
64          ("TRUNCATE", OptimizerStrategy.TRUNCATE, "Remove oldest messages"),
65          ("SLIDING_WINDOW", OptimizerStrategy.SLIDING_WINDOW, "Keep last N turns"),
66          ("SMART", OptimizerStrategy.SMART, "Importance-based (default)"),
67          ("PRUNE_TOOLS", OptimizerStrategy.PRUNE_TOOLS, "Truncate tool outputs"),
68          ("NON_DESTRUCTIVE", OptimizerStrategy.NON_DESTRUCTIVE, "Only prune tools"),
69      ]
70      
71      for name, strategy, description in strategies:
72          print(f"  {name:20} - {description}")
73      
74      print()
75      print("Usage:")
76      print("  context=ContextConfig(strategy=OptimizerStrategy.SLIDING_WINDOW)")