From 0c233e70f84a7598f874d6a9b31898408717eabe Mon Sep 17 00:00:00 2001 From: jak983464779 <49120355+jak983464779@users.noreply.github.com> Date: Tue, 12 May 2026 17:12:19 -0700 Subject: [PATCH] fix(doctor): skip /models health check for providers that don't support it Xiaomi MiMo's /v1/models endpoint returns 401 even with a valid API key, causing hermes doctor to falsely report 'invalid API key'. Add a `supports_health_check` field to ProviderProfile (default True). Providers whose /models endpoint doesn't support auth verification can set it to False. The doctor's dynamic provider discovery now reads this field instead of hardcoding True. The xiaomi provider plugin sets supports_health_check=False. --- hermes_cli/doctor.py | 3 ++- plugins/model-providers/xiaomi/__init__.py | 1 + providers/base.py | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/hermes_cli/doctor.py b/hermes_cli/doctor.py index 529433902d5..a551d4d204e 100644 --- a/hermes_cli/doctor.py +++ b/hermes_cli/doctor.py @@ -287,7 +287,8 @@ def _build_apikey_providers_list() -> list: (_pp.models_url or (_pp.base_url.rstrip("/") + "/models")) if _pp.base_url else None ) - _static.append((_label, _key_vars, _models_url, _base_var, True)) + _hc = getattr(_pp, "supports_health_check", True) + _static.append((_label, _key_vars, _models_url, _base_var, _hc)) except Exception: pass return _static diff --git a/plugins/model-providers/xiaomi/__init__.py b/plugins/model-providers/xiaomi/__init__.py index 2e0c8db7dbc..aed0d8424f8 100644 --- a/plugins/model-providers/xiaomi/__init__.py +++ b/plugins/model-providers/xiaomi/__init__.py @@ -8,6 +8,7 @@ xiaomi = ProviderProfile( aliases=("mimo", "xiaomi-mimo"), env_vars=("XIAOMI_API_KEY",), base_url="https://api.xiaomimimo.com/v1", + supports_health_check=False, # /v1/models returns 401 even with valid key ) register_provider(xiaomi) diff --git a/providers/base.py b/providers/base.py index 2c685f9b815..a9e76823bb2 100644 --- a/providers/base.py +++ b/providers/base.py @@ -40,6 +40,7 @@ class ProviderProfile: base_url: str = "" models_url: str = "" # explicit models endpoint; falls back to {base_url}/models auth_type: str = "api_key" # api_key|oauth_device_code|oauth_external|copilot|aws_sdk + supports_health_check: bool = True # False → doctor skips /models probe for this provider # ── Model catalog ───────────────────────────────────────── # fallback_models: curated list shown in /model picker when live fetch fails.