fix(browser): honor auxiliary.vision.temperature for screenshot analysis\n\n- mirror the vision tool's config bridge in browser_vision

- add regression tests for configured and default temperature forwarding
This commit is contained in:
kshitijk4poor 2026-04-20 12:10:13 +05:30 committed by Teknium
parent 098d554aac
commit 9d88bdaf11
2 changed files with 67 additions and 4 deletions

View file

@ -3,6 +3,7 @@
import json
import os
import sys
from pathlib import Path
from unittest.mock import patch, MagicMock
import pytest
@ -194,6 +195,63 @@ class TestBrowserVisionAnnotate:
assert "--annotate" in cmd_args
class TestBrowserVisionConfig:
def _setup_screenshot(self, tmp_path):
shots_dir = tmp_path / "browser_screenshots"
shots_dir.mkdir()
screenshot = shots_dir / "shot.png"
screenshot.write_bytes(b"\x89PNG\r\n\x1a\n" + b"\x00" * 8)
return shots_dir, screenshot
def test_browser_vision_uses_configured_temperature_and_timeout(self, tmp_path):
from tools.browser_tool import browser_vision
shots_dir, screenshot = self._setup_screenshot(tmp_path)
mock_response = MagicMock()
mock_choice = MagicMock()
mock_choice.message.content = "Annotated screenshot analysis"
mock_response.choices = [mock_choice]
with (
patch("hermes_constants.get_hermes_dir", return_value=shots_dir),
patch("tools.browser_tool._cleanup_old_screenshots"),
patch("tools.browser_tool._run_browser_command", return_value={"success": True, "data": {"path": str(screenshot)}}),
patch("tools.browser_tool._get_vision_model", return_value="test-model"),
patch("hermes_cli.config.load_config", return_value={"auxiliary": {"vision": {"temperature": 1, "timeout": 45}}}),
patch("tools.browser_tool.call_llm", return_value=mock_response) as mock_llm,
):
result = json.loads(browser_vision("what is on the page?", task_id="test"))
assert result["success"] is True
assert result["analysis"] == "Annotated screenshot analysis"
assert mock_llm.call_args.kwargs["temperature"] == 1.0
assert mock_llm.call_args.kwargs["timeout"] == 45.0
def test_browser_vision_defaults_temperature_when_config_omits_it(self, tmp_path):
from tools.browser_tool import browser_vision
shots_dir, screenshot = self._setup_screenshot(tmp_path)
mock_response = MagicMock()
mock_choice = MagicMock()
mock_choice.message.content = "Default screenshot analysis"
mock_response.choices = [mock_choice]
with (
patch("hermes_constants.get_hermes_dir", return_value=shots_dir),
patch("tools.browser_tool._cleanup_old_screenshots"),
patch("tools.browser_tool._run_browser_command", return_value={"success": True, "data": {"path": str(screenshot)}}),
patch("tools.browser_tool._get_vision_model", return_value="test-model"),
patch("hermes_cli.config.load_config", return_value={"auxiliary": {"vision": {}}}),
patch("tools.browser_tool.call_llm", return_value=mock_response) as mock_llm,
):
result = json.loads(browser_vision("what is on the page?", task_id="test"))
assert result["success"] is True
assert result["analysis"] == "Default screenshot analysis"
assert mock_llm.call_args.kwargs["temperature"] == 0.1
assert mock_llm.call_args.kwargs["timeout"] == 120.0
# ── auto-recording config ────────────────────────────────────────────