Skip to content

doctor: probe Groq + Mistral in API Connectivity section (#32)#33

Merged
PowerCreek merged 1 commit into
mainfrom
doctor-groq-mistral-connectivity
May 23, 2026
Merged

doctor: probe Groq + Mistral in API Connectivity section (#32)#33
PowerCreek merged 1 commit into
mainfrom
doctor-groq-mistral-connectivity

Conversation

@PowerCreek

Copy link
Copy Markdown

Summary

Closes #32. Auditing other surfaces for diagnostic-loudness gaps and found the same shape I closed in hermes status via #10/#11, but in a different surface: _build_apikey_providers_list() in hermes_cli/doctor.py (drives the parallel HTTP /models reachability probes in the API Connectivity section) was missing Groq + Mistral.

Why this matters

Both providers are already first-class elsewhere:

But the doctor probe loop never probed them. So an operator with GROQ_API_KEY=garbage or an expired MISTRAL_API_KEY got ✓ in API Keys and silence in API Connectivity — exactly the false-positive pattern this section was designed to catch.

Fix

Two new rows in the _static list, both using the generic Bearer-auth /v1/models endpoint that _probe_apikey_provider already handles unchanged:

("Groq",    ("GROQ_API_KEY",),    "https://api.groq.com/openai/v1/models", "GROQ_BASE_URL",    True),
("Mistral", ("MISTRAL_API_KEY",), "https://api.mistral.ai/v1/models",       "MISTRAL_BASE_URL", True),

No conflict with ProviderProfile dedup — neither Groq nor Mistral has a registered profile in plugins/model-providers/, so the canonical-name set doesn't shadow them.

Test plan

  • 3 new tests in tests/hermes_cli/test_doctor.py::TestApiKeyProvidersList:
    • Groq entry present with GROQ_API_KEY env var + /models URL + GROQ_BASE_URL override
    • Mistral entry present analogously
    • No duplicate provider names in the final list (_build_apikey_providers_list() merges static + ProviderProfile; duplicates would break the parallel probe loop's name keying)
  • pytest tests/hermes_cli/test_doctor.py → 64 passed (61 existing + 3 new)

Filed by hermes-maintainer (PowerCreek).

Auditing other surfaces for diagnostic-loudness gaps. Found the
same shape I closed in `hermes status` via #10/#11: doctor's
_build_apikey_providers_list() static list (drives the parallel
HTTP /models reachability probes) was missing Groq + Mistral
despite both being first-class providers (config.py registers
MISTRAL_API_KEY; doctor.py:99 references GROQ_API_KEY for STT
fallback; status.py post-#11 lists them in API Keys).

Result: operators with valid GROQ_API_KEY / MISTRAL_API_KEY got ✓
in API Keys but never a connectivity-validated ✓ in API
Connectivity — so a malformed/expired key looked identical to a
working one until the first actual request 401'd.

Add both rows to _static. Both use the generic Bearer-auth
/v1/models endpoint that _probe_apikey_provider already handles —
no custom-header logic required.

Closes #32.
@PowerCreek PowerCreek merged commit 301ad34 into main May 23, 2026
@PowerCreek PowerCreek deleted the doctor-groq-mistral-connectivity branch May 23, 2026 00:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

hermes doctor: API Connectivity section probes ~14 providers but misses Groq + Mistral despite both being first-class

1 participant