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)")