hermes-bsd/tests
briandevans cfc8befe65 fix(compressor): use text char sum for multimodal token estimation in _find_tail_cut_by_tokens
_find_tail_cut_by_tokens called len(content) to estimate message tokens.
When content is a list of blocks (multimodal: text + image_url), len()
returns block count (e.g. 2) rather than character count, so a message
with 500 chars of text was counted as ~10 tokens instead of ~135.

This caused the backward walk to exhaust all messages before hitting the
budget ceiling; the head_end safeguard then forced cut = n - min_tail,
shrinking the protected tail to the bare minimum and preventing effective
compression of long multimodal conversations.

Fix mirrors the existing pattern in _prune_old_tool_results (line 487):
  sum(len(p.get("text", "")) for p in raw_content)
  if isinstance(raw_content, list) else len(raw_content)

Tests: 3 new cases in TestTokenBudgetTailProtection — regression guard
(confirms the test fails with the bug), plain-string regression guard,
and image-only block edge case.

Fixes #16087.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 21:48:09 -07:00
..
acp
agent fix(compressor): use text char sum for multimodal token estimation in _find_tail_cut_by_tokens 2026-04-26 21:48:09 -07:00
cli fix(cli): strip leaked bracketed-paste wrappers 2026-04-26 21:47:40 -07:00
cron fix(cron): don't silently disable recurring cron jobs when croniter is missing (#16368) 2026-04-26 21:47:32 -07:00
e2e test(discord): add guild to fake e2e messages 2026-04-25 18:25:56 -07:00
environments/benchmarks
fakes
gateway fix(gateway): clear stale pending model note on session reset 2026-04-26 19:01:50 -07:00
hermes_cli fix(azure-foundry): auto-route gpt-5.x / codex / o-series to Responses API (#16361) 2026-04-26 21:33:31 -07:00
hermes_state
honcho_plugin
integration
plugins fix: recover hindsight embedded daemon after idle shutdown 2026-04-26 18:29:11 -07:00
run_agent fix: signal compression boundary to context engine 2026-04-26 19:07:18 -07:00
skills fix(skills): honor scope query from Google OAuth redirect URL 2026-04-26 21:08:19 -07:00
tools feat(skills): install skills from a direct HTTP(S) URL (#16323) 2026-04-26 20:57:10 -07:00
tui_gateway Revert "feat(onboarding): port first-touch hints to the TUI (#16054)" (#16062) 2026-04-26 06:31:37 -07:00
__init__.py
conftest.py test: blank platform-gating env vars in hermetic fixture 2026-04-26 12:23:20 -07:00
run_interrupt_test.py
test_account_usage.py
test_base_url_hostname.py
test_batch_runner_checkpoint.py
test_cli_file_drop.py
test_cli_skin_integration.py
test_ctx_halving_fix.py
test_empty_model_fallback.py
test_evidence_store.py
test_hermes_constants.py
test_hermes_logging.py fix(logging): attach gateway log after cli init 2026-04-26 19:01:26 -07:00
test_hermes_state.py Merge remote-tracking branch 'origin/main' into bb/tui-long-session-perf 2026-04-26 21:07:15 -05:00
test_honcho_client_config.py
test_ipv4_preference.py
test_mcp_serve.py
test_mini_swe_runner.py
test_minimax_model_validation.py
test_minisweagent_path.py
test_model_picker_scroll.py
test_model_tools.py feat(hooks): add duration_ms to post_tool_call + transform_tool_result (#15429) 2026-04-25 22:13:12 -07:00
test_model_tools_async_bridge.py
test_ollama_num_ctx.py
test_packaging_metadata.py
test_plugin_skills.py
test_project_metadata.py
test_retry_utils.py
test_sql_injection.py
test_subprocess_home_isolation.py
test_timezone.py
test_toolset_distributions.py
test_toolsets.py
test_trajectory_compressor.py
test_trajectory_compressor_async.py
test_transform_tool_result_hook.py
test_tui_gateway_server.py fix(tui): restore resumed transcript lineage 2026-04-26 15:16:12 -05:00
test_utils_truthy_values.py
test_yuanbao_integration.py yuanbao platform (#16298) 2026-04-26 18:50:49 -07:00
test_yuanbao_markdown.py yuanbao platform (#16298) 2026-04-26 18:50:49 -07:00
test_yuanbao_pipeline.py yuanbao platform (#16298) 2026-04-26 18:50:49 -07:00
test_yuanbao_proto.py yuanbao platform (#16298) 2026-04-26 18:50:49 -07:00