invoke-ai/InvokeAI · error · ValueError

Unsupported submodel for Ideogram 4: {submodel_type.value if

Error message

Unsupported submodel for Ideogram 4: {submodel_type.value if submodel_type else 'None'}. Supported: Transformer, TextEncoder, Tokenizer, VAE.

What it means

The Ideogram 4 loader's match statement only handles Transformer, TextEncoder, Tokenizer, and VAE submodels. Any other SubModelType falls through the match and raises this ValueError enumerating the supported values, preventing silent mis-loads of components the pipeline format does not contain.

Source

Thrown at invokeai/backend/model_manager/load/model_loaders/ideogram4.py:101

            raise ValueError(f"Expected Main_Diffusers_Ideogram4_Config, got {type(config).__name__}.")
        if submodel_type is None:
            raise Exception("A submodel type must be provided when loading Ideogram 4 main pipelines.")

        model_path = Path(config.path)

        match submodel_type:
            case SubModelType.Transformer:
                return self._load_transformer_pair(model_path)
            case SubModelType.TextEncoder:
                return self._load_text_encoder(model_path)
            case SubModelType.Tokenizer:
                from transformers import AutoTokenizer

                return AutoTokenizer.from_pretrained(model_path / "tokenizer", local_files_only=True)
            case SubModelType.VAE:
                return self._load_vae(model_path)

        raise ValueError(
            f"Unsupported submodel for Ideogram 4: {submodel_type.value if submodel_type else 'None'}. "
            "Supported: Transformer, TextEncoder, Tokenizer, VAE."
        )

    def _load_transformer_pair(self, model_path: Path) -> AnyModel:
        from invokeai.backend.ideogram4.transformer_pair import Ideogram4TransformerPair

        conditional = self._load_one_transformer(model_path / "transformer")
        unconditional = self._load_one_transformer(model_path / "unconditional_transformer")
        return Ideogram4TransformerPair(conditional=conditional, unconditional=unconditional)

    def _load_one_transformer(self, folder: Path) -> torch.nn.Module:
        from invokeai.backend.ideogram4.modeling_ideogram4 import Ideogram4Config, Ideogram4Transformer
        from invokeai.backend.ideogram4.quantized_loading import (
            is_bnb4bit_state_dict,
            is_fp8_state_dict,
            load_fp8_state_dict,
            swap_linears_to_fp8,

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Only request the four supported submodels (Transformer, TextEncoder, Tokenizer, VAE) for Ideogram 4 pipelines.
  2. Handle scheduler or other components via diffusers pipeline defaults instead of this loader.
  3. Extend the match statement with a new case (and loader method) if the model actually ships the component.

Example fix

// before
scheduler = loader._load_model(cfg, SubModelType.Scheduler)
// after
scheduler = load_pipeline_scheduler(model_path)  # not provided by this loader
Defensive patterns

Strategy: validation

Validate before calling

from invokeai.backend.model_manager import SubModelType
SUPPORTED = {SubModelType.Transformer, SubModelType.TextEncoder, SubModelType.Tokenizer, SubModelType.VAE}
if submodel_type not in SUPPORTED:
    raise ValueError(f"Ideogram 4 supports only {sorted(s.value for s in SUPPORTED)}, got {submodel_type}")

Type guard

def is_supported_ideogram4_submodel(submodel_type) -> bool:
    from invokeai.backend.model_manager import SubModelType
    return submodel_type in {SubModelType.Transformer, SubModelType.TextEncoder, SubModelType.Tokenizer, SubModelType.VAE}

Try / catch

try:
    model = loader._load_model(cfg, submodel_type)
except ValueError as e:
    if "Unsupported submodel for Ideogram 4" in str(e):
        model = load_component_elsewhere(cfg, submodel_type)
    else:
        raise

Prevention

When it happens

Trigger: Requesting submodel types like Scheduler, SafetyChecker, or ClipVision from the Ideogram 4 loader — the match statement has no arm for them.

Common situations: Code that generically iterates all SubModelType values for a pipeline; callers assuming every main model exposes a scheduler submodel.

Related errors


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