fix: cap context pressure percentage at 100% in display (#3480)
* fix: cap context pressure percentage at 100% in display The forward-looking token estimate can overshoot the compaction threshold (e.g. a large tool result pushes it from 70% to 109% in one step). The progress bar was already capped via min(), but pct_int was not — causing the user to see '109% to compaction' which is confusing. Cap pct_int at 100 in both CLI and gateway display functions. Reported by @JoshExile82. * refactor: use real API token counts for compression decisions Replace the rough chars/3 estimation with actual prompt_tokens + completion_tokens from the API response. The estimation was needed to predict whether tool results would push context past the threshold, but the default 50% threshold leaves ample headroom — if tool results push past it, the next API call reports real usage and triggers compression then. This removes all estimation from the compression and context pressure paths, making both 100% data-driven from provider-reported token counts. Also removes the dead _msg_count_before_tools variable.
This commit is contained in:
@@ -69,10 +69,12 @@ class TestFormatContextPressure:
|
||||
assert isinstance(result, str)
|
||||
|
||||
def test_over_100_percent_capped(self):
|
||||
"""Progress > 1.0 should not break the bar."""
|
||||
"""Progress > 1.0 should cap both bar and percentage text at 100%."""
|
||||
line = format_context_pressure(1.05, 100_000, 0.50)
|
||||
assert "▰" in line
|
||||
assert line.count("▰") == 20
|
||||
assert "100%" in line
|
||||
assert "105%" not in line
|
||||
|
||||
|
||||
class TestFormatContextPressureGateway:
|
||||
@@ -100,6 +102,13 @@ class TestFormatContextPressureGateway:
|
||||
msg = format_context_pressure_gateway(0.80, 0.50)
|
||||
assert "▰" in msg
|
||||
|
||||
def test_over_100_percent_capped(self):
|
||||
"""Progress > 1.0 should cap percentage text at 100%."""
|
||||
msg = format_context_pressure_gateway(1.09, 0.50)
|
||||
assert "100% to compaction" in msg
|
||||
assert "109%" not in msg
|
||||
assert msg.count("▰") == 20
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# AIAgent context pressure flag tests
|
||||
|
||||
Reference in New Issue
Block a user