{"record":{"id":"8c959e5b95647e69","repo":"invoke-ai/InvokeAI","slug":"unsupported-submodel-for-ideogram-4-submodel-typ","errorCode":null,"errorMessage":"Unsupported submodel for Ideogram 4: {submodel_type.value if submodel_type else 'None'}. Supported: Transformer, TextEncoder, Tokenizer, VAE.","messagePattern":"Unsupported submodel for Ideogram 4: (.+?)\\. Supported: Transformer, TextEncoder, Tokenizer, VAE\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"invokeai/backend/model_manager/load/model_loaders/ideogram4.py","lineNumber":101,"sourceCode":"            raise ValueError(f\"Expected Main_Diffusers_Ideogram4_Config, got {type(config).__name__}.\")\n        if submodel_type is None:\n            raise Exception(\"A submodel type must be provided when loading Ideogram 4 main pipelines.\")\n\n        model_path = Path(config.path)\n\n        match submodel_type:\n            case SubModelType.Transformer:\n                return self._load_transformer_pair(model_path)\n            case SubModelType.TextEncoder:\n                return self._load_text_encoder(model_path)\n            case SubModelType.Tokenizer:\n                from transformers import AutoTokenizer\n\n                return AutoTokenizer.from_pretrained(model_path / \"tokenizer\", local_files_only=True)\n            case SubModelType.VAE:\n                return self._load_vae(model_path)\n\n        raise ValueError(\n            f\"Unsupported submodel for Ideogram 4: {submodel_type.value if submodel_type else 'None'}. \"\n            \"Supported: Transformer, TextEncoder, Tokenizer, VAE.\"\n        )\n\n    def _load_transformer_pair(self, model_path: Path) -> AnyModel:\n        from invokeai.backend.ideogram4.transformer_pair import Ideogram4TransformerPair\n\n        conditional = self._load_one_transformer(model_path / \"transformer\")\n        unconditional = self._load_one_transformer(model_path / \"unconditional_transformer\")\n        return Ideogram4TransformerPair(conditional=conditional, unconditional=unconditional)\n\n    def _load_one_transformer(self, folder: Path) -> torch.nn.Module:\n        from invokeai.backend.ideogram4.modeling_ideogram4 import Ideogram4Config, Ideogram4Transformer\n        from invokeai.backend.ideogram4.quantized_loading import (\n            is_bnb4bit_state_dict,\n            is_fp8_state_dict,\n            load_fp8_state_dict,\n            swap_linears_to_fp8,","sourceCodeStart":83,"sourceCodeEnd":119,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/backend/model_manager/load/model_loaders/ideogram4.py#L83-L119","documentation":"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.","triggerScenarios":"Requesting submodel types like Scheduler, SafetyChecker, or ClipVision from the Ideogram 4 loader — the match statement has no arm for them.","commonSituations":"Code that generically iterates all SubModelType values for a pipeline; callers assuming every main model exposes a scheduler submodel.","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."],"exampleFix":"// before\nscheduler = loader._load_model(cfg, SubModelType.Scheduler)\n// after\nscheduler = load_pipeline_scheduler(model_path)  # not provided by this loader","handlingStrategy":"validation","validationCode":"from invokeai.backend.model_manager import SubModelType\nSUPPORTED = {SubModelType.Transformer, SubModelType.TextEncoder, SubModelType.Tokenizer, SubModelType.VAE}\nif submodel_type not in SUPPORTED:\n    raise ValueError(f\"Ideogram 4 supports only {sorted(s.value for s in SUPPORTED)}, got {submodel_type}\")","typeGuard":"def is_supported_ideogram4_submodel(submodel_type) -> bool:\n    from invokeai.backend.model_manager import SubModelType\n    return submodel_type in {SubModelType.Transformer, SubModelType.TextEncoder, SubModelType.Tokenizer, SubModelType.VAE}","tryCatchPattern":"try:\n    model = loader._load_model(cfg, submodel_type)\nexcept ValueError as e:\n    if \"Unsupported submodel for Ideogram 4\" in str(e):\n        model = load_component_elsewhere(cfg, submodel_type)\n    else:\n        raise","preventionTips":["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."],"tags":["api-misuse","unsupported-submodel","model-loading"],"backgroundTag":"unsupported-value","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}