BerriAI/litellm · error · ValueError
api_base is required for provider {provider.slug}
Error message
api_base is required for provider {provider.slug} What it means
Configuration guard in the dynamic OpenAI-like provider's get_complete_url: neither the request api_base nor provider.base_url is set, so the complete endpoint URL for this registered provider slug cannot be composed.
Source
Thrown at litellm/llms/openai_like/dynamic_config.py:85
resolved_key: Final = api_key or get_secret_str(provider.api_key_env)
return resolved_base, resolved_key
def get_complete_url(
self,
api_base: str | None,
api_key: str | None,
model: str,
optional_params: dict,
litellm_params: dict,
stream: bool | None = None,
) -> str:
"""Build complete URL for the API endpoint"""
if not api_base:
api_base = provider.base_url
if api_base is None:
raise ValueError(f"api_base is required for provider {provider.slug}")
if not api_base.endswith("/chat/completions"):
api_base = f"{api_base}/chat/completions"
return api_base
def get_supported_openai_params(self, model: str) -> list:
"""Get supported OpenAI params, excluding tool-related params for models
that don't support function calling."""
from litellm.utils import supports_function_calling, supports_reasoning
supported_params: Final = super().get_supported_openai_params(model=model)
_supports_fc: Final = supports_function_calling(model=model, custom_llm_provider=provider.slug)
if not _supports_fc:
tool_params: Final = [
"tools",View on GitHub (pinned to 77b7c6c40c)
Solutions
- Configure api_base for the provider slug shown in the message, via params or its environment variable.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at litellm/llms/openai_like/dynamic_config.py:85 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18).
Data as JSON: /api/errors/251aa3e1389e0c8d.
Report an issue: GitHub.