fix(web): make _has_env config-aware so SEARXNG_URL auto-detect honors Hermes config

Follow-up to #34306. The provider fix made SearXNG *usable* with a
config-only SEARXNG_URL, but tools/web_tools._has_env still read raw
os.getenv, so the backend auto-detect cascade and check_web_api_key
remained blind to it — SearXNG worked when explicitly selected but was
never auto-selected. Route _has_env (and the SearXNG diagnostic print)
through a config-aware _env_value helper mirroring the provider's
_searxng_url(). Fixing the shared helper covers every provider key in
one place. Adds regression tests for config-only auto-detect and
check_web_api_key. See #34290.
This commit is contained in:
kshitijk4poor
2026-06-08 01:12:32 +05:30
parent 2ee8c983c0
commit 7df81d0557
2 changed files with 55 additions and 3 deletions
+33
View File
@@ -267,6 +267,26 @@ class TestGetBackendSearXNG:
monkeypatch.setattr(web_tools, "_is_tool_gateway_ready", lambda: False)
assert web_tools._get_backend() == "tavily"
def test_auto_detect_picks_searxng_when_url_only_in_hermes_config(self, monkeypatch):
"""#34290 follow-up: a config-only SEARXNG_URL (absent from process env)
must still drive auto-detect via the now config-aware ``_has_env``."""
from hermes_cli import config as hermes_config
from tools import web_tools
monkeypatch.setattr(web_tools, "_load_web_config", lambda: {})
monkeypatch.delenv("FIRECRAWL_API_KEY", raising=False)
monkeypatch.delenv("FIRECRAWL_API_URL", raising=False)
monkeypatch.delenv("PARALLEL_API_KEY", raising=False)
monkeypatch.delenv("TAVILY_API_KEY", raising=False)
monkeypatch.delenv("EXA_API_KEY", raising=False)
monkeypatch.delenv("SEARXNG_URL", raising=False)
monkeypatch.setattr(
hermes_config,
"get_env_value",
lambda key: "http://config-only:8080" if key == "SEARXNG_URL" else None,
)
monkeypatch.setattr(web_tools, "_is_tool_gateway_ready", lambda: False)
assert web_tools._get_backend() == "searxng"
# ---------------------------------------------------------------------------
# Integration: check_web_api_key includes searxng
@@ -280,6 +300,19 @@ class TestCheckWebApiKey:
monkeypatch.setenv("SEARXNG_URL", "http://localhost:8080")
assert web_tools.check_web_api_key() is True
def test_searxng_config_only_satisfies_check_web_api_key(self, monkeypatch):
"""#34290 follow-up: config-only SEARXNG_URL satisfies the credential check."""
from hermes_cli import config as hermes_config
from tools import web_tools
monkeypatch.setattr(web_tools, "_load_web_config", lambda: {"backend": "searxng"})
monkeypatch.delenv("SEARXNG_URL", raising=False)
monkeypatch.setattr(
hermes_config,
"get_env_value",
lambda key: "http://config-only:8080" if key == "SEARXNG_URL" else None,
)
assert web_tools.check_web_api_key() is True
def test_no_credentials_fails(self, monkeypatch):
from tools import web_tools
monkeypatch.setattr(web_tools, "_load_web_config", lambda: {})