Split out of #342, which is being closed: rebuilding the BaseProvider.checkHealth() architecture that issue asked for would duplicate the better ProviderHealthChecker that already ships. But while verifying that, a concrete gap turned up in the replacement.
The problem
ProviderHealthChecker.checkAllProvidersHealth() iterates a hardcoded array:
// src/lib/utils/providerHealth.ts:1984-1993
const providers: AIProviderName[] = [
AIProviderName.VERTEX,
AIProviderName.GOOGLE_AI,
AIProviderName.ANTHROPIC,
AIProviderName.OPENAI,
AIProviderName.BEDROCK,
AIProviderName.AZURE,
AIProviderName.LITELLM,
AIProviderName.OLLAMA,
];
Eight providers. AIProviderName has 31.
The 23 it never checks include openai-compatible, openrouter, huggingface, mistral, sagemaker, deepseek, nvidia-nim, lm-studio, llamacpp, xai, groq, cohere, together-ai, fireworks, perplexity, cloudflare, replicate, and the embedding/image providers.
Why it matters
The method is named check all providers, and both the SDK (NeuroLink.checkAllProvidersHealth()) and the background warm-up path (providerHealth.ts:1847) call it. A user who runs it to validate their configuration gets a clean result set that silently omits two-thirds of what they might have configured — including whichever provider is actually broken.
Failing to report an unhealthy provider is worse than not offering the check, because the caller reasonably concludes everything is fine.
Suggested fix
Derive the list from the provider registry / AIProviderName rather than hardcoding it, so a newly registered provider is covered automatically and can't be forgotten. If some providers genuinely can't be probed, exclude them explicitly with a comment saying why — an intentional, documented exclusion rather than an accidental omission.
Worth checking getProviderStatus() at the same time: it has a separate hardcoded list of 11 with the same failure mode.
Found while re-verifying #342 against release on 2026-08-08. Counted via the AIProviderName enum in src/lib/constants/enums.ts (31 members) against the array above (8).
Split out of #342, which is being closed: rebuilding the
BaseProvider.checkHealth()architecture that issue asked for would duplicate the betterProviderHealthCheckerthat already ships. But while verifying that, a concrete gap turned up in the replacement.The problem
ProviderHealthChecker.checkAllProvidersHealth()iterates a hardcoded array:Eight providers.
AIProviderNamehas 31.The 23 it never checks include
openai-compatible,openrouter,huggingface,mistral,sagemaker,deepseek,nvidia-nim,lm-studio,llamacpp,xai,groq,cohere,together-ai,fireworks,perplexity,cloudflare,replicate, and the embedding/image providers.Why it matters
The method is named check all providers, and both the SDK (
NeuroLink.checkAllProvidersHealth()) and the background warm-up path (providerHealth.ts:1847) call it. A user who runs it to validate their configuration gets a clean result set that silently omits two-thirds of what they might have configured — including whichever provider is actually broken.Failing to report an unhealthy provider is worse than not offering the check, because the caller reasonably concludes everything is fine.
Suggested fix
Derive the list from the provider registry /
AIProviderNamerather than hardcoding it, so a newly registered provider is covered automatically and can't be forgotten. If some providers genuinely can't be probed, exclude them explicitly with a comment saying why — an intentional, documented exclusion rather than an accidental omission.Worth checking
getProviderStatus()at the same time: it has a separate hardcoded list of 11 with the same failure mode.Found while re-verifying #342 against
releaseon 2026-08-08. Counted via theAIProviderNameenum insrc/lib/constants/enums.ts(31 members) against the array above (8).