-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
perf: 优化上下文压缩模块 (减少重复计算/更精确token估算) #6655
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
rin259
wants to merge
2
commits into
AstrBotDevs:master
from
rin259:perf/context-compress-optimization
Closed
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
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
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
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
issue (complexity): Consider encapsulating token-count caching and metrics tracking into dedicated helper classes so that
ContextManagerremains a thin orchestration layer with minimal branching and internal state.You can keep all new behavior (caching, stats, logging) but move most of the state/branching out of
ContextManagerso it stays “lean” and focused on orchestration.1. Move token-count caching into
EstimateTokenCounterRight now
process()carries a fragile heuristic and branching:This can become a simple call if the caching logic is encapsulated in
EstimateTokenCounter, keyed by something stable (e.g.ids or a digest) rather thanlen():Then
ContextManager.processbecomes:This removes branches and state from
ContextManagerwhile keeping the optimization and avoiding the fragilelen(result) == len(messages)heuristic.2. Keep stats but move them into a small metrics object
Instead of
ContextManagerowning_compression_count,_last_token_count,get_stats,reset_stats, and reaching intotoken_counterviahasattr, you can centralize stats in a dedicated, lightweight helper:ContextManagerthen becomes:This keeps all existing behavior (stats, logging, cache stats exposure) while:
ContextManager._run_compressionagain “readable at a glance” as compress → count → maybe truncate.ContextMetrics.