Package dev.agenor.runtime.memory.llm
Class ContextWindowStrategies
java.lang.Object
dev.agenor.runtime.memory.llm.ContextWindowStrategies
Factory for built-in context window strategies.
Provides singleton instances of the standard strategies:
FIXED- Last N messages that fit in budgetSLIDING- Recent + important messagesSUMMARIZED- Recent + summary of old messages
Usage Example:
import dev.agenor.runtime.memory.llm.ContextWindowStrategies;
// Use built-in strategies
List<LLMMessage> selected = ContextWindowStrategies.SLIDING.selectMessages(
allMessages,
2000,
estimator
);
// Or with static import
import static dev.agenor.runtime.memory.llm.ContextWindowStrategies.*;
List<LLMMessage> selected = SLIDING.selectMessages(allMessages, 2000, estimator);
Strategy Comparison:
| Strategy | Algorithm | Best For | Requires LLM |
|---|---|---|---|
| FIXED | Last N messages | Short conversations | No |
| SLIDING | Recent + important | Long conversations | No |
| SUMMARIZED | Recent + summary | Very long conversations | Yes |
Thread Safety: All strategies are stateless and thread-safe.
- Since:
- 0.6.0
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final ContextWindowStrategyFixed window strategy - includes last N messages that fit in budget.static final ContextWindowStrategySliding window strategy - includes recent messages plus important older ones.static final ContextWindowStrategySummarized strategy - includes recent messages plus summary of old conversation. -
Method Summary
Modifier and TypeMethodDescriptionstatic ContextWindowStrategyGet a strategy by name (case-insensitive).static String[]names()Get names of all available strategies.static ContextWindowStrategy[]values()Get all available strategies.
-
Field Details
-
FIXED
Fixed window strategy - includes last N messages that fit in budget.Algorithm:
- Start from most recent message
- Add messages while under token budget
- Stop when budget would be exceeded
Characteristics:
- Pros: Simple, fast, predictable
- Cons: May lose important early context
- Best For: Short conversations
- Performance: O(n) time
- Requires LLM: No
- Overhead: 0 tokens
- See Also:
-
SLIDING
Sliding window strategy - includes recent messages plus important older ones.Algorithm:
- Always include most recent messages (last 5)
- Score older messages by importance
- Include highest scoring that fit in remaining budget
Importance Scoring:
- System messages: High priority
- Messages with function calls: High priority
- Long messages: Higher priority (more information)
- User questions: Higher than assistant responses
Characteristics:
- Pros: Balances recency and importance
- Cons: Slightly slower, gaps in conversation flow
- Best For: Long conversations
- Performance: O(n log n) time
- Requires LLM: No
- Overhead: 0 tokens
- See Also:
-
SUMMARIZED
Summarized strategy - includes recent messages plus summary of old conversation.Algorithm:
- Include most recent messages (last 10)
- If older messages exist, create summary
- Insert summary as system message
- Adjust token budget accordingly
Note: Current implementation is a placeholder. Full summarization will be available when integrated with
DefaultLLMMemoryManager.Characteristics:
- Pros: Preserves overall context, continuous narrative
- Cons: Requires LLM call, slower (~1-2s)
- Best For: Very long conversations
- Performance: O(n) time + LLM call
- Requires LLM: Yes
- Overhead: ~200 tokens for summary
- See Also:
-
-
Method Details
-
forName
Get a strategy by name (case-insensitive).Example:
ContextWindowStrategy strategy = ContextWindowStrategies.forName("sliding"); // Returns ContextWindowStrategies.SLIDING- Parameters:
name- strategy name ("fixed", "sliding", or "summarized")- Returns:
- the corresponding strategy
- Throws:
IllegalArgumentException- if name is unknown
-
values
Get all available strategies.- Returns:
- array of all built-in strategies
-
names
Get names of all available strategies.- Returns:
- array of strategy names
-