invoke-ai/InvokeAI · error · ExternalProviderNotFoundError

No external provider registered for '{request.model.provider

Error message

No external provider registered for '{request.model.provider_id}'

What it means

ExternalProviderNotFoundError raised in ExternalGenerationService.generate when no provider is registered under request.model.provider_id in the service's provider registry. This is a configuration/wiring problem: the request references a provider the service does not know about.

Source

Thrown at invokeai/app/services/external_generation/external_generation_default.py:48

if TYPE_CHECKING:
    from invokeai.app.services.model_records import ModelRecordServiceBase


class ExternalGenerationService(ExternalGenerationServiceBase):
    def __init__(
        self,
        providers: dict[str, ExternalProvider],
        logger: Logger,
        record_store: ModelRecordServiceBase | None = None,
    ) -> None:
        self._providers = providers
        self._logger = logger
        self._record_store = record_store

    def generate(self, request: ExternalGenerationRequest) -> ExternalGenerationResult:
        provider = self._providers.get(request.model.provider_id)
        if provider is None:
            raise ExternalProviderNotFoundError(f"No external provider registered for '{request.model.provider_id}'")

        if not provider.is_configured():
            raise ExternalProviderNotConfiguredError(f"Provider '{request.model.provider_id}' is missing credentials")

        request = self._refresh_model_capabilities(request)
        resize_to_original_inpaint_size = _get_resize_target_for_inpaint(request)
        request = self._bucket_request(request)
        request = self._drop_unsupported_capabilities(request)

        self._validate_request(request)
        result = self._generate_with_retry(provider, request)

        if resize_to_original_inpaint_size is None:
            return result

        width, height = resize_to_original_inpaint_size
        return _resize_result_images(result, width, height)

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Fix the model's provider_id to match a registered provider key
  2. Register the missing provider in the service constructor / app dependency wiring
  3. Re-register or update stale model records in the database to use existing provider IDs
  4. Check available providers via get_provider_statuses() and use one of those IDs

Example fix

// before
request.model.provider_id = "gemini-pro"  # never registered

// after
request.model.provider_id = "google"  # matches provider registered in ExternalGenerationService
Defensive patterns

Strategy: validation

Validate before calling

statuses = service.get_provider_statuses()
if request.model.provider_id not in statuses:
    raise ValueError(f"provider '{request.model.provider_id}' not registered; available: {list(statuses)}")

Type guard

def provider_is_registered(service, provider_id: str) -> bool:
    return provider_id in service.get_provider_statuses()

Try / catch

try:
    result = service.generate(request)
except ExternalProviderNotFoundError:
    fallback_id = next(iter(service.get_provider_statuses()))
    request.model.provider_id = fallback_id
    result = service.generate(request)

Prevention

When it happens

Trigger: Calling generate() with an ExternalGenerationRequest whose model.provider_id does not match any key passed to the service's _providers dict at construction time.

Common situations: Typo in provider_id (e.g. 'open-ai' vs 'openai'); provider plugin not installed/registered at app startup; model-config records referencing providers from a different version; stale database model records after a provider was renamed.

Related errors


AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29). Data as JSON: /api/errors/3a620d570f2b1a2c. Report an issue: GitHub.