affaan-m/ECC · error · ValueError
No provider registered for type
Error message
No provider registered for type: {provider_type} What it means
After resolving the provider type, get_provider() looks the class up in _PROVIDER_MAP. If no class is registered for that ProviderType it raises ValueError 'No provider registered for type: ...'. This means the enum value is valid but no implementation was registered in the map.
Solutions
- Import the providers module that registers implementations before calling get_provider
- Call register_provider(ProviderType.X, MyProviderClass) for custom providers
- Verify _PROVIDER_MAP contents / whether an optional provider package is installed
- If you added a new enum member, wire its registration in the provider registry
Example fix
// before resolver = get_provider(ProviderType.MISTRAL) # nothing registered // after import src.llm.providers.mistral # performs register_provider at import resolver = get_provider(ProviderType.MISTRAL)
Defensive patterns
Strategy: try-catch
Validate before calling
from src.llm.providers.resolver import _PROVIDER_MAP
assert provider_type in _PROVIDER_MAP, f"No implementation registered for {provider_type}" Try / catch
try:
provider = get_provider(provider_type)
except ValueError as e:
if "No provider registered" in str(e):
import src.llm.providers # trigger registrations, then retry
provider = get_provider(provider_type)
else:
raise Prevention
- Always import the providers package (which registers classes) before resolving
- Register every new ProviderType member in the registry
- Add a startup smoke test resolving all enum values
- Fail fast with a clear message listing registered providers
When it happens
Trigger: Calling get_provider(ProviderType.X) where X is a valid enum member whose class was never registered in _PROVIDER_MAP (e.g. a new enum value added without a register_provider call, or provider module not imported).
Common situations: Adding a new ProviderType member but forgetting to register its class; forgetting to import the providers module that performs registrations at import time; plugin/optional provider not installed.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- Announcements discussion category is required
- Choose at least one guided harness: Claude, Codex, or Kimi.
- config must be a JSON object
- createPlanCanvasServer requires a session store
- Dependency cycle
AI-assisted analysis of affaan-m/ECC@8321021c54 (2026-09-16).
Data as JSON: /api/errors/50ac333ca6952ea9.
Report an issue: GitHub.
Appendix: source
Thrown at src/llm/providers/resolver.py:73
if env_provider:
return _strip_env_value(env_provider).lower()
saved_config = _read_saved_llm_config()
return saved_config.get("LLM_PROVIDER", "claude").lower()
def get_provider(provider_type: ProviderType | str | None = None, **kwargs: str) -> LLMProvider:
provider_type = _resolve_provider_type(provider_type)
if isinstance(provider_type, str):
try:
provider_type = ProviderType(provider_type)
except ValueError:
raise ValueError(f"Unknown provider type: {provider_type}. Valid types: {[p.value for p in ProviderType]}")
provider_cls = _PROVIDER_MAP.get(provider_type)
if not provider_cls:
raise ValueError(f"No provider registered for type: {provider_type}")
return provider_cls(**kwargs)
def register_provider(provider_type: ProviderType, provider_cls: type[LLMProvider]) -> None:
_PROVIDER_MAP[provider_type] = provider_cls
View on GitHub (pinned to 8321021c54)