Files
hermes-agent/tests/computer_use/test_cua_perf_knobs.py
Teknium f070912aa4 fix(vision): MCP embeds keep both caps and their coordinate map; capture route follows config live (review)
Independent review follow-up:
- The shared resizer is best-effort: its 64 px short-edge floor keeps a
  60000x64 image at 60000 px, and the MCP path checked only bytes, so an
  over-limit part could enter history (providers reject >8000 px per
  turn and the reactive shrink cannot fix it). The attach path now
  refuses any image whose output long edge is still above 1568 px; the
  result stays the MEDIA: text.
- A resized screenshot lost its coordinate mapping. The MCP path now
  passes scale_out and lists `_build_scale_note` per MEDIA: path, as
  vision_analyze does, so a cua-driver-over-MCP click lands on the screen
  pixel the model saw.
- computer_use cached its route per (home, provider, model) for the
  process, so editing `image_input_mode` (or the aux backend) never
  reached the next capture. The cache is gone: the decision reads the
  signature-cached `load_config_readonly` per capture. Pre-existing on
  main (12ad13ddca), fixed here because this PR claims every image tool
  honours the setting; the perf test that pinned the stale cache becomes
  the "config change applies without restart" invariant.
2026-10-06 22:54:13 -07:00

20 lines
1.1 KiB
Python

"""Behavior contracts for computer_use latency knobs."""
from tools.computer_use import tool as cu_tool
def test_aux_vision_route_follows_a_config_change_without_restart(monkeypatch):
"""The capture route reads the signature-cached config on every capture, so an ``image_input_mode`` edit
(or /model, or a profile switch) applies to the next screenshot instead of a per-process verdict."""
cfg = {"agent": {"image_input_mode": "native"}}
monkeypatch.setattr("agent.auxiliary_client._read_main_provider", lambda: "anthropic")
monkeypatch.setattr("agent.auxiliary_client._read_main_model", lambda: "claude-opus-4-5")
monkeypatch.setattr("hermes_cli.config.load_config_readonly", lambda: cfg)
monkeypatch.setattr("agent.image_routing._lookup_supports_vision", lambda *a, **k: True)
monkeypatch.setattr("tools.vision_tools._profile_rejects_tool_media", lambda *a, **k: False)
assert cu_tool._should_route_through_aux_vision() is False
cfg["agent"]["image_input_mode"] = "text"
assert cu_tool._should_route_through_aux_vision() is True