Factor 3: Own Your Context Window
Principle: Everything is context engineering. Structure information to maximize LLM understanding.
How Vel Implements This
Vel gives you complete control over context window management:
# Limit context window to control token usage
agent = Agent(
id='my-agent',
model={'provider': 'openai', 'model': 'gpt-4o'},
context_manager=ContextManager(max_history=20) # Sliding window
)
# Stateless context (no history)
agent = Agent(
id='my-agent',
model={'provider': 'openai', 'model': 'gpt-4o'},
context_manager=StatelessContextManager() # Each call independent
)
# Custom context structuring
class RAGContextManager(ContextManager):
def messages_for_llm(self, run_id: str, session_id: Optional[str] = None):
messages = super().messages_for_llm(run_id, session_id)
# Compress old messages into summary
if len(messages) > 10:
old_messages = messages[:8]
summary = self.summarize(old_messages)
messages = [
{'role': 'system', 'content': f"Previous conversation: {summary}"}
] + messages[8:]
return messages
Context Compaction
Use built-in compaction strategies:
from vel import ContextCompactor
# Sliding window
compacted = ContextCompactor.sliding_window(
messages,
max_messages=10,
preserve_system=True
)
# Summarize old messages
compacted = ContextCompactor.summarize_old_messages(
messages,
threshold=10
)
# Truncate long messages
compacted = ContextCompactor.truncate_long_messages(
messages,
max_length=500
)
Benefits
- ✓ Configurable memory: full/stateless/limited
- ✓ Custom context managers for advanced use cases
- ✓ Direct access to message history
- ✓ Token optimization through context management