BerriAI/litellm · error · ValueError
Provider {custom_llm_provider} not found
Error message
Provider {custom_llm_provider} not found What it means
Raised in _get_openai_compatible_provider_info when a provider exists in the JSONProviderRegistry (JSON-defined custom providers) but JSONProviderRegistry.get() returns None — an inconsistent registry state where exists() and get() disagree (e.g. a malformed provider JSON entry).
Source
Thrown at litellm/litellm_core_utils/get_llm_provider_logic.py:539
Returns:
Tuple[str, str, Optional[str], Optional[str]]:
model: str
custom_llm_provider: str
dynamic_api_key: Optional[str]
api_base: Optional[str]
"""
custom_llm_provider = model.split("/", 1)[0]
model = model.split("/", 1)[1]
# Check JSON providers FIRST (before hardcoded ones)
from litellm.llms.openai_like.dynamic_config import create_config_class
from litellm.llms.openai_like.json_loader import JSONProviderRegistry
if JSONProviderRegistry.exists(custom_llm_provider):
provider_config: Final = JSONProviderRegistry.get(custom_llm_provider)
if provider_config is None:
raise ValueError(f"Provider {custom_llm_provider} not found")
config_class: Final = create_config_class(provider_config)
api_base, dynamic_api_key = config_class()._get_openai_compatible_provider_info(api_base, api_key)
return model, custom_llm_provider, dynamic_api_key, api_base
if custom_llm_provider == "perplexity":
# perplexity is openai compatible, we just need to set this to custom_openai and have the api_base be https://api.perplexity.ai
(
api_base,
dynamic_api_key,
) = litellm.PerplexityChatConfig()._get_openai_compatible_provider_info(api_base, api_key)
elif custom_llm_provider == "aiohttp_openai":
return model, "aiohttp_openai", api_key, api_base
elif custom_llm_provider == "anyscale":
# anyscale is openai compatible, we just need to set this to custom_openai and have the api_base be https://api.endpoints.anyscale.com/v1
api_base = api_base or get_secret_str("ANYSCALE_API_BASE") or "https://api.endpoints.anyscale.com/v1"
dynamic_api_key = api_key or get_secret_str("ANYSCALE_API_KEY")
elif custom_llm_provider == "deepinfra":
(View on GitHub (pinned to 6c2dcb801b)
Solutions
- Inspect your provider JSON definition and fix missing/invalid fields per the openai_like JSON provider docs.
- Run JSONProviderRegistry.get(provider) yourself to see the None result and debug loading.
- Validate the JSON against the schema litellm documents for JSON-defined providers.
- Upgrade litellm if the loader had a bug handling your config shape.
Example fix
// before
{ "myprovider": { "models": {} } } // missing required fields -> registry.get() returns None
// after
{ "myprovider": { "api_base": "https://api.myprovider.com/v1", "models": { "m1": {} } } } Defensive patterns
Strategy: validation
Validate before calling
from litellm.llms.openai_like.json_loader import JSONProviderRegistry
def provider_config_loads(provider: str) -> bool:
return JSONProviderRegistry.exists(provider) and JSONProviderRegistry.get(provider) is not None Try / catch
try {
await litellm.completion({ model: 'myprov/m1', ... });
} catch (e) {
if (/Provider \S+ not found/.test(e.message)) { /* fix provider JSON definition */ }
} Prevention
- Test JSONProviderRegistry.get() during config load, not at request time.
- Keep custom provider JSON complete (api_base, models, auth fields).
- Validate provider JSON against the documented schema on deploy.
When it happens
Trigger: Defining a custom provider via litellm's JSON provider registry (openai_like JSON config) with an entry that registers its name but fails to load its config, then calling model='that-provider/model'.
Common situations: Malformed custom provider JSON (missing required fields so config parsing yields None), partially written config files, or version drift in the JSON schema expected by the loader.
Related errors
- File not found. blocked_user_list={blocked_user_list}
- model_name not set for LlamaGuard
- File not found. file_path={file_path}
- Missing `LLM_GUARD_API_BASE` from environment
- Either a2a_client or api_base is required for standard A2A f
AI-assisted analysis of BerriAI/litellm@6c2dcb801b (2026-08-15).
Data as JSON: /api/errors/ffa48fba41eee1c2.
Report an issue: GitHub.