mirror of
https://github.com/nesquena/hermes-webui.git
synced 2026-05-25 19:20:16 +00:00
117 lines
3.7 KiB
Python
117 lines
3.7 KiB
Python
"""Regression tests for #1806 named custom provider routing.
|
|
|
|
The WebUI must treat ``model.provider: <custom_providers[].name>`` as the
|
|
same provider slug the picker emits: ``custom:<name>``. Otherwise a stale
|
|
agent-side base-url slug such as ``custom:local-(127.0.0.1:11434)`` can win
|
|
model selection and send runtime auth down an impossible env-var path.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import sys
|
|
import types
|
|
|
|
import pytest
|
|
|
|
import api.config as config
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def _isolate_models_cache(tmp_path, monkeypatch):
|
|
monkeypatch.setattr(config, "_models_cache_path", tmp_path / "models_cache.json")
|
|
config.invalidate_models_cache()
|
|
yield
|
|
config.invalidate_models_cache()
|
|
|
|
|
|
def _with_ollama_local_config():
|
|
old_cfg = dict(config.cfg)
|
|
old_mtime = config._cfg_mtime
|
|
config.cfg.clear()
|
|
config.cfg.update(
|
|
{
|
|
"model": {
|
|
"default": "carnice-9b:latest",
|
|
"provider": "ollama-local",
|
|
"base_url": "http://127.0.0.1:11434/v1",
|
|
"api_key": "ollama",
|
|
},
|
|
"custom_providers": [
|
|
{
|
|
"name": "ollama-local",
|
|
"base_url": "http://127.0.0.1:11434/v1",
|
|
"api_key": "ollama",
|
|
"model": "carnice-9b:latest",
|
|
}
|
|
],
|
|
}
|
|
)
|
|
try:
|
|
config._cfg_mtime = config.Path(config._get_config_path()).stat().st_mtime
|
|
except Exception:
|
|
config._cfg_mtime = 0.0
|
|
|
|
def restore():
|
|
config.cfg.clear()
|
|
config.cfg.update(old_cfg)
|
|
config._cfg_mtime = old_mtime
|
|
config.invalidate_models_cache()
|
|
|
|
return restore
|
|
|
|
|
|
def test_model_provider_name_resolves_to_named_custom_slug():
|
|
restore = _with_ollama_local_config()
|
|
try:
|
|
model, provider, base_url = config.resolve_model_provider("carnice-9b:latest")
|
|
finally:
|
|
restore()
|
|
|
|
assert model == "carnice-9b:latest"
|
|
assert provider == "custom:ollama-local"
|
|
assert base_url == "http://127.0.0.1:11434/v1"
|
|
|
|
|
|
def test_available_models_drops_base_url_derived_custom_slug(monkeypatch):
|
|
"""A stale agent catalog slug must not create a second local custom group."""
|
|
fake_models = types.ModuleType("hermes_cli.models")
|
|
fake_models.list_available_providers = lambda: [
|
|
{"id": "custom:local-(127.0.0.1:11434)", "authenticated": True},
|
|
]
|
|
fake_auth = types.ModuleType("hermes_cli.auth")
|
|
fake_auth.get_auth_status = lambda _pid: {"key_source": "config_yaml"}
|
|
monkeypatch.setitem(sys.modules, "hermes_cli.models", fake_models)
|
|
monkeypatch.setitem(sys.modules, "hermes_cli.auth", fake_auth)
|
|
monkeypatch.setattr(config, "_get_auth_store_path", lambda: config.Path("/tmp/does-not-exist-auth.json"))
|
|
monkeypatch.setattr("socket.getaddrinfo", lambda *a, **k: [])
|
|
|
|
class _Resp:
|
|
def read(self):
|
|
return json.dumps(
|
|
{"data": [{"id": "carnice-9b:latest", "name": "carnice-9b:latest"}]}
|
|
).encode("utf-8")
|
|
|
|
def __enter__(self):
|
|
return self
|
|
|
|
def __exit__(self, exc_type, exc, tb):
|
|
return False
|
|
|
|
monkeypatch.setattr("urllib.request.urlopen", lambda *a, **k: _Resp())
|
|
|
|
restore = _with_ollama_local_config()
|
|
try:
|
|
result = config.get_available_models()
|
|
finally:
|
|
restore()
|
|
|
|
assert result["active_provider"] == "custom:ollama-local"
|
|
groups_by_id = {g["provider_id"]: g for g in result["groups"]}
|
|
assert "custom:ollama-local" in groups_by_id
|
|
assert "custom:local-(127.0.0.1:11434)" not in groups_by_id
|
|
assert "ollama-local" not in groups_by_id
|
|
|
|
named_models = [m["id"] for m in groups_by_id["custom:ollama-local"]["models"]]
|
|
assert "carnice-9b:latest" in named_models
|