feat: Implement Agent-Controlled Compaction#477
Open
AmaadMartin wants to merge 2 commits into
Open
Conversation
25e6243 to
40b24b2
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Please ensure you have read the contribution guide before creating a pull request.
Link to Issue or Description of Change
1. Link to an existing issue (if applicable):
2. Or, if no issue exists, describe the change:
Problem:
LLM agents can run out of context window if history grows too large. While automatic token-based compaction exists, agents do not have control over when compaction happens. This can lead to compaction happening in the middle of a complex subtask, potentially losing critical context needed to complete it.
Solution:
Implement Agent-Controlled Compaction. This feature allows agents to explicitly trigger context compaction when they determine it is safe to do so (e.g., after completing a subtask).
ConsolidateContextTool(consolidate_context) which agents can call to request compaction.AgentControlledContextCompactorwhich triggers when the tool is called, compacts active history before the tool call, and optionally appends a summary instruction.(Note: A planned refactoring to extract
getActiveEventsinto a shared utility forTokenBasedContextCompactorhas been deferred to a follow-up PR to avoid merge conflicts with PR #474).Testing Plan
Unit Tests:
Summary of passed npm test results (via vitest):
Manual End-to-End (E2E) Tests:
Integration tests verify the compaction behavior using a mock LLM and runner.
tests/integration/context_compaction/agent_controlled/agent_test.tsconsolidate_context, history is compacted and aCompactedEventis added.E2E test structure is also added in
tests/e2e/context_compaction/agent_controlled_e2e_test.tsusing Gemini API (runs when API keys are available in the environment).Checklist
Additional context
This PR introduces the core logic for Agent-Controlled Compaction.
Note on PR #474: There is currently an open PR (#474) awaiting review that modifies
TokenBasedContextCompactorto fix token counting. To avoid merge conflicts, we have intentionally avoided modifyingTokenBasedContextCompactorin this PR.Upcoming Refactoring PR: We have staged a follow-up refactoring branch (
refactor/compaction-utils) that extractsgetActiveEventsinto a shared utility for use by both the newAgentControlledContextCompactorand the existingTokenBasedContextCompactor. That PR will be submitted immediately after this PR and PR #474 are both merged.