Implement memory compression for agent context windows:
estimate_tokens(text): Rough estimate (1 token ~ 0.75 words)compress(messages, strategy): Compress to fit max_tokens
Strategies:
truncate: Remove oldest messages firstsummarize: Group old messages, replace with summaryselective: Keep system + recent + important (marked), drop rest
Message Format:
{'role': 'user/assistant/system', 'content': '...', 'important': bool}
Return:
- compressed: list of messages after compression
- compression_ratio: original_tokens / final_tokens
- dropped: number of messages removed
Priority Order (selective): System > Important > Recent > Old
Examples
Example 1:
Input:
mc = MemoryCompressor(50); msgs = [{'role':'user','content':'hello world ' * 20}]; r = mc.compress(msgs, 'truncate'); r['compression_ratio'] > 1Output:
TrueExplanation: Compression happened, ratio should be > 1
Starter Code
class MemoryCompressor:
"""
Compress agent conversation history to fit context window.
"""
def __init__(self, max_tokens=1000):
self.max_tokens = max_tokens
self.compression_strategies = []
def estimate_tokens(self, text):
"""Rough token estimation (words / 0.75)"""
# Your implementation here
pass
def compress(self, messages, strategy='summarize'):
"""
Compress messages to fit max_tokens.
Strategies: 'truncate', 'summarize', 'selective'
Returns: {'compressed': [...], 'compression_ratio': float, 'dropped': int}
"""
# Your implementation here
pass
def _truncate_oldest(self, messages, target_tokens):
"""Remove oldest messages until under budget"""
# Your implementation here
pass
def _summarize_batch(self, messages):
"""Summarize a batch of messages (simulated)"""
# Simulate: return '[Summary of N messages]'
passPython3
ReadyLines: 1Characters: 0
Ready