invoke-ai/InvokeAI · error · ValueError
Selected model provider '{model_config.provider_id}' does no
Error message
Selected model provider '{model_config.provider_id}' does not match node provider '{self.provider_id}' What it means
This invocation wraps external (third-party hosted) image generation APIs. The node has an optional provider_id input identifying which provider it belongs to. If the user selected a model whose provider_id differs from the node's provider_id, InvokeAI raises ValueError because applying a model from a different provider through this node would be invalid.
Source
Thrown at invokeai/app/invocations/external_image_generation.py:62
num_images: int = InputField(default=1, gt=0, description="Number of images to generate")
width: int = InputField(default=1024, gt=0, description=FieldDescriptions.width)
height: int = InputField(default=1024, gt=0, description=FieldDescriptions.height)
image_size: str | None = InputField(default=None, description="Image size preset (e.g. 1K, 2K, 4K)")
init_image: ImageField | None = InputField(default=None, description="Init image for img2img/inpaint")
mask_image: ImageField | None = InputField(default=None, description="Mask image for inpaint")
reference_images: list[ImageField] = InputField(default=[], description="Reference images")
def _build_provider_options(self) -> dict[str, Any] | None:
"""Override in provider-specific subclasses to pass extra options."""
return None
def invoke(self, context: InvocationContext) -> ImageCollectionOutput:
model_config = context.models.get_config(self.model)
if not isinstance(model_config, ExternalApiModelConfig):
raise ValueError("Selected model is not an external API model")
if self.provider_id is not None and model_config.provider_id != self.provider_id:
raise ValueError(
f"Selected model provider '{model_config.provider_id}' does not match node provider '{self.provider_id}'"
)
init_image = None
if self.init_image is not None:
init_image = context.images.get_pil(self.init_image.image_name, mode="RGB")
mask_image = None
if self.mask_image is not None:
mask_image = context.images.get_pil(self.mask_image.image_name, mode="L")
reference_images: list[ExternalReferenceImage] = []
for image_field in self.reference_images:
reference_image = context.images.get_pil(image_field.image_name, mode="RGB")
reference_images.append(ExternalReferenceImage(image=reference_image))
request = ExternalGenerationRequest(
model=model_config,View on GitHub (pinned to 0b6a024f2f)
Solutions
- Open the node in the workflow editor and pick a model whose provider matches the node's provider_id, or clear the provider_id field so any external model is accepted
- If building the graph programmatically, set self.model to a key for the same provider as self.provider_id (or set provider_id=None)
- Verify the model config with context.models.get_config and confirm isinstance(cfg, ExternalApiModelConfig) and cfg.provider_id == node.provider_id before invoking
Example fix
# before node.provider_id = 'openai' node.model = 'model-key-for-anthropic-provider' # after node.provider_id = 'openai' node.model = 'gpt-image-1' # key resolving to an ExternalApiModelConfig with provider_id='openai'
Defensive patterns
Strategy: validation
Validate before calling
cfg = context.models.get_config(node.model)
assert isinstance(cfg, ExternalApiModelConfig), 'not an external API model'
if node.provider_id is not None and cfg.provider_id != node.provider_id:
raise ValueError(f'{cfg.provider_id} != node provider {node.provider_id}') Type guard
def is_matching_external_model(cfg, provider_id):
return isinstance(cfg, ExternalApiModelConfig) and (provider_id is None or cfg.provider_id == provider_id) Try / catch
try:
out = node.invoke(context)
except ValueError as e:
if 'does not match node provider' in str(e):
node.model = pick_model_for_provider(node.provider_id)
out = node.invoke(context)
else:
raise Prevention
- Always re-pick the model after changing a node's provider_id
- Set provider_id=None on generic nodes if any external model is acceptable
- Validate provider match when programmatically assembling graphs
When it happens
Trigger: Calling invoke() on an ExternalImageGenerationInvocation where self.provider_id is set and context.models.get_config(self.model).provider_id != self.provider_id; also fires if a non-external model was wired in (that raises a different ValueError first).
Common situations: Hand-editing or reusing a workflow graph across nodes so the model selector points at a different provider's model; restoring a saved workflow after the model was moved to another provider; copy-pasting nodes without updating the model reference.
Related errors
- _class_name or architectures field is not a string: {config_
- denoising_start ({self.denoising_start}) must be less than d
- LoRA "{lora_key}" already applied to transformer.
- A saved workflow must be selected before executing call_save
- The selected saved workflow '${self.workflow_id}' could not
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/e30ebde970192e85.
Report an issue: GitHub.