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
- Only request the four supported submodels (Transformer, TextEncoder, Tokenizer, VAE) for Ideogram 4 pipelines.
- Handle scheduler or other components via diffusers pipeline defaults instead of this loader.
- 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
- Gate generic submodel loops on the loader's supported set per model family.
- Resolve scheduler/aux components via the diffusers pipeline, not component loaders.
- Keep a per-family allowlist of submodels in your loading layer.
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
- A submodel type must be provided when loading Ideogram 4 mai
- There are no submodels in an IP-Adapter model.
- Only TextEncoder and Tokenizer submodels are supported. Rece
- Admin privileges required
- Expected LlavaOnevisionForConditionalGeneration, got {type(m
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/8c959e5b95647e69.
Report an issue: GitHub.