mirror of
https://github.com/nesquena/hermes-webui.git
synced 2026-05-26 11:40:26 +00:00
69 lines
2.5 KiB
Python
69 lines
2.5 KiB
Python
"""Regression coverage for #2025: Xiaomi MiMo should honor XIAOMI_API_KEY."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import builtins
|
|
|
|
import api.config as config
|
|
import api.onboarding as onboarding
|
|
import api.providers as providers
|
|
|
|
|
|
def _force_env_fallback(monkeypatch):
|
|
"""Force get_available_models() down its explicit env-var fallback path."""
|
|
real_import = builtins.__import__
|
|
|
|
def fake_import(name, globals=None, locals=None, fromlist=(), level=0):
|
|
if name in ("hermes_cli.models", "hermes_cli.auth"):
|
|
raise ImportError(name)
|
|
return real_import(name, globals, locals, fromlist, level)
|
|
|
|
monkeypatch.setattr(builtins, "__import__", fake_import)
|
|
|
|
|
|
def _run_available_models_with_cfg(monkeypatch, tmp_path, cfg):
|
|
old_cfg = dict(config.cfg)
|
|
old_mtime = config._cfg_mtime
|
|
monkeypatch.setattr(config, "_models_cache_path", tmp_path / "models_cache.json")
|
|
monkeypatch.setattr(config, "_get_config_path", lambda: tmp_path / "missing-config.yaml")
|
|
monkeypatch.setattr("api.profiles.get_active_hermes_home", lambda: tmp_path, raising=False)
|
|
config.cfg.clear()
|
|
config.cfg.update(cfg)
|
|
config._cfg_mtime = 0.0
|
|
config.invalidate_models_cache()
|
|
try:
|
|
return config.get_available_models()
|
|
finally:
|
|
config.cfg.clear()
|
|
config.cfg.update(old_cfg)
|
|
config._cfg_mtime = old_mtime
|
|
config.invalidate_models_cache()
|
|
|
|
|
|
def test_xiaomi_api_key_env_var_detects_model_group(monkeypatch, tmp_path):
|
|
_force_env_fallback(monkeypatch)
|
|
monkeypatch.setenv("XIAOMI_API_KEY", "test-xiaomi-key")
|
|
|
|
result = _run_available_models_with_cfg(monkeypatch, tmp_path, {"model": {}})
|
|
groups = {group["provider_id"]: group for group in result["groups"]}
|
|
|
|
assert "xiaomi" in groups
|
|
assert groups["xiaomi"]["provider"] == "Xiaomi"
|
|
assert "mimo-v2.5-pro" in {model["id"] for model in groups["xiaomi"]["models"]}
|
|
|
|
|
|
def test_xiaomi_provider_settings_detects_env_key(monkeypatch, tmp_path):
|
|
monkeypatch.setattr(providers, "_get_hermes_home", lambda: tmp_path)
|
|
monkeypatch.setenv("XIAOMI_API_KEY", "test-xiaomi-key")
|
|
|
|
assert providers._PROVIDER_ENV_VAR["xiaomi"] == "XIAOMI_API_KEY"
|
|
assert providers._provider_has_key("xiaomi") is True
|
|
|
|
|
|
def test_onboarding_lists_xiaomi_api_key_help():
|
|
setup = onboarding._SUPPORTED_PROVIDER_SETUPS["xiaomi"]
|
|
|
|
assert setup["env_var"] == "XIAOMI_API_KEY"
|
|
assert setup["default_base_url"] == "https://api.xiaomimimo.com/v1"
|
|
assert {model["id"] for model in setup["models"]} >= {"mimo-v2.5-pro"}
|