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

  1. 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
  2. If building the graph programmatically, set self.model to a key for the same provider as self.provider_id (or set provider_id=None)
  3. 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

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


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