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

  1. Import the providers module that registers implementations before calling get_provider
  2. Call register_provider(ProviderType.X, MyProviderClass) for custom providers
  3. Verify _PROVIDER_MAP contents / whether an optional provider package is installed
  4. 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

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


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)