mlflow/mlflow · error · MlflowException
Provider {name} is already registered: {self._providers[name
Error message
Provider {name} is already registered: {self._providers[name]} What it means
MLflow's gateway ProviderRegistry.register refuses to register a provider under a name that already exists in the registry, raising MlflowException.invalid_parameter_value. The message includes the previously registered provider class.
Source
Thrown at mlflow/gateway/provider_registry.py:18
import logging
from mlflow import MlflowException
from mlflow.gateway.config import Provider
from mlflow.gateway.providers import BaseProvider
from mlflow.utils.plugins import get_entry_points
from mlflow.utils.provider_filter import is_provider_allowed
_logger = logging.getLogger(__name__)
class ProviderRegistry:
def __init__(self):
self._providers: dict[str | Provider, type[BaseProvider]] = {}
def register(self, name: str, provider: type[BaseProvider]):
if name in self._providers:
raise MlflowException.invalid_parameter_value(
f"Provider {name} is already registered: {self._providers[name]}"
)
self._providers[name] = provider
def get(self, name: str) -> type[BaseProvider]:
if name not in self._providers:
raise MlflowException.invalid_parameter_value(f"Provider '{name}' not found")
if not is_provider_allowed(name):
_logger.debug(
"Provider '%s' blocked by MLFLOW_GATEWAY_ALLOWED_PROVIDERS",
name,
)
raise MlflowException.invalid_parameter_value(
f"Provider '{name}' is not allowed by the current gateway provider policy."
)
return self._providers[name]
View on GitHub (pinned to 6a27f2decc)
Solutions
- Use a unique provider name for your custom provider (don't shadow built-ins).
- Register the provider only once at import time (guard with a module-level flag).
- Remove an existing registration first if replacement is intended.
- In tests, use a fresh ProviderRegistry instance or unregister between tests.
Example fix
// before
registry.register("openai", MyOpenAIProvider)
// after
registry.register("my-openai", MyOpenAIProvider) Defensive patterns
Strategy: validation
Validate before calling
if name in registry.keys():
raise ValueError(f"Provider {name} already registered as {registry.get(name)}") Try / catch
try:
registry.register("my-provider", MyProvider)
except MlflowException as e:
if "already registered" in str(e):
logger.info("Provider already registered, skipping")
else:
raise Prevention
- Guard plugin registration with a module-level idempotency flag.
- Namespace custom provider names (e.g. 'acme-llm').
- In tests, construct a fresh ProviderRegistry per test.
When it happens
Trigger: Calling ProviderRegistry.register(name, provider) twice with the same name — e.g. custom provider plugin code registered at import time in two places, or re-registering a built-in provider name like 'openai'.
Common situations: Plugin module imported multiple times registering the same provider; user custom provider collides with a built-in name; test fixtures registering providers per-test without cleanup.
Related errors
- Provider '{name}' not found
- NotImplementedError
- RESOURCE_DOES_NOT_EXIST
- Invalid endpoint / route name: '{name}'
- Unexpected route type {endpoint_type!r} for route {name!r}.
AI-assisted analysis of mlflow/mlflow@6a27f2decc (2026-08-29).
Data as JSON: /api/errors/78fba0d3251248b9.
Report an issue: GitHub.