mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-31 06:51:29 +00:00
fix(gateway): honor key_env in auth-failure fallback resolution
This commit is contained in:
parent
99671a8634
commit
d21ac579e9
2 changed files with 51 additions and 1 deletions
|
|
@ -1004,10 +1004,17 @@ def _try_resolve_fallback_provider() -> dict | None:
|
|||
if not isinstance(entry, dict):
|
||||
continue
|
||||
try:
|
||||
explicit_api_key = entry.get("api_key")
|
||||
if not explicit_api_key:
|
||||
key_env = str(
|
||||
entry.get("key_env") or entry.get("api_key_env") or ""
|
||||
).strip()
|
||||
if key_env:
|
||||
explicit_api_key = os.getenv(key_env, "").strip() or None
|
||||
runtime = resolve_runtime_provider(
|
||||
requested=entry.get("provider"),
|
||||
explicit_base_url=entry.get("base_url"),
|
||||
explicit_api_key=entry.get("api_key"),
|
||||
explicit_api_key=explicit_api_key,
|
||||
)
|
||||
logger.info(
|
||||
"Fallback provider resolved: %s model=%s",
|
||||
|
|
|
|||
|
|
@ -218,3 +218,46 @@ fallback_providers:
|
|||
assert runtime_kwargs["provider"] == "openrouter"
|
||||
assert runtime_kwargs["api_key"] == "sk-openrouter"
|
||||
|
||||
|
||||
def test_gateway_auth_fallback_resolves_key_env_for_custom_provider(tmp_path, monkeypatch):
|
||||
"""Auth-failure fallback should honor key_env/api_key_env custom-endpoint hints."""
|
||||
config = tmp_path / "config.yaml"
|
||||
config.write_text(
|
||||
"""
|
||||
fallback_providers:
|
||||
- provider: custom
|
||||
model: fallback-model
|
||||
base_url: https://fallback.example/v1
|
||||
key_env: MY_FALLBACK_KEY
|
||||
""".lstrip(),
|
||||
encoding="utf-8",
|
||||
)
|
||||
monkeypatch.setattr(gateway_run, "_hermes_home", tmp_path)
|
||||
monkeypatch.setenv("MY_FALLBACK_KEY", "env-secret")
|
||||
|
||||
def fake_resolve_runtime_provider(*, requested=None, explicit_base_url=None, explicit_api_key=None):
|
||||
assert requested == "custom"
|
||||
assert explicit_base_url == "https://fallback.example/v1"
|
||||
assert explicit_api_key == "env-secret"
|
||||
return {
|
||||
"api_key": explicit_api_key,
|
||||
"base_url": explicit_base_url,
|
||||
"provider": "custom",
|
||||
"api_mode": "chat_completions",
|
||||
"command": None,
|
||||
"args": [],
|
||||
"credential_pool": None,
|
||||
}
|
||||
|
||||
import hermes_cli.runtime_provider as runtime_provider
|
||||
|
||||
monkeypatch.setattr(runtime_provider, "resolve_runtime_provider", fake_resolve_runtime_provider)
|
||||
|
||||
runtime_kwargs = gateway_run._try_resolve_fallback_provider()
|
||||
|
||||
assert runtime_kwargs is not None
|
||||
assert runtime_kwargs["provider"] == "custom"
|
||||
assert runtime_kwargs["api_key"] == "env-secret"
|
||||
assert runtime_kwargs["base_url"] == "https://fallback.example/v1"
|
||||
assert runtime_kwargs["model"] == "fallback-model"
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue