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
- Fix the model's provider_id to match a registered provider key
- Register the missing provider in the service constructor / app dependency wiring
- Re-register or update stale model records in the database to use existing provider IDs
- 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
- Source provider_id values from get_provider_statuses(), never hardcode strings
- Register all providers during app startup before serving requests
- Validate model records against registered providers at load time
- Use a shared constant/enum for provider IDs
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
- Provider '{request.model.provider_id}' is missing credential
- LoRA '{lora.lora.key}' has conflicting weights on the transf
- Model '{main_config.name}' is not a Krea-2 main model. Selec
- Expected ModelPatchRaw for LoRA '{lora.lora.key}', got {type
- {noise_type} noise width and height must be a multiple of {m
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/3a620d570f2b1a2c.
Report an issue: GitHub.