{"record":{"id":"2a67994ca474e0dc","repo":"invoke-ai/InvokeAI","slug":"unsupported-submodel-type-submodel-type","errorCode":null,"errorMessage":"Unsupported submodel type: {submodel_type}","messagePattern":"Unsupported submodel type: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"invokeai/backend/model_manager/load/model_loaders/flux.py","lineNumber":1623,"sourceCode":"\n        # These branches build their modules by hand (`init_empty_weights` + `load_state_dict`)\n        # rather than through `from_pretrained`, so they arrive in training mode — `put_in_eval_mode`\n        # in `load_default._load_and_cache` is what puts every loaded model into inference mode.\n        match submodel_type:\n            case SubModelType.Transformer:\n                return self._load_sdnq_transformer(submodel_path, config)\n            case SubModelType.TextEncoder:\n                return self._load_text_encoder(submodel_path)\n            case SubModelType.TextEncoder2:\n                return self._load_text_encoder_2(submodel_path)\n            case SubModelType.Tokenizer:\n                return CLIPTokenizer.from_pretrained(submodel_path, local_files_only=True)\n            case SubModelType.Tokenizer2:\n                return T5Tokenizer.from_pretrained(submodel_path, max_length=512, local_files_only=True)\n            case SubModelType.VAE:\n                return self._load_vae(submodel_path)\n            case _:\n                raise ValueError(f\"Unsupported submodel type: {submodel_type}\")\n\n    def _load_sdnq_transformer_checkpoint(self, config: Main_SDNQ_FLUX_Config) -> AnyModel:\n        \"\"\"Load SDNQ transformer from single-file checkpoint.\"\"\"\n        model_path = Path(config.path)\n\n        with accelerate.init_empty_weights():\n            model = Flux(get_flux_transformers_params(config.variant))\n\n        sd = sdnq_sd_loader(model_path, compute_dtype=torch.bfloat16)\n\n        # Handle ComfyUI bundle format\n        if \"model.diffusion_model.double_blocks.0.img_attn.norm.key_norm.scale\" in sd:\n            sd = convert_bundle_to_flux_transformer_checkpoint(sd)\n\n        model.load_state_dict(sd, assign=True)\n        return model\n\n    def _load_sdnq_transformer(self, transformer_path: Path, config: Main_SDNQ_Diffusers_FLUX_Config) -> AnyModel:","sourceCodeStart":1605,"sourceCodeEnd":1641,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/backend/model_manager/load/model_loaders/flux.py#L1605-L1641","documentation":"The SDNQ diffusers FLUX loader's component dispatch handles a fixed set of submodel types (Transformer, Tokenizer, Tokenizer2, TextEncoder, TextEncoder2, VAE) via match/case; any other SubModelType hits the wildcard case and raises ValueError, since that component cannot come from this model.","triggerScenarios":"Requesting a submodel type outside the handled set (e.g. SubModelType.ControlNet, Scheduler, or another non-component type) while loading a Main_SDNQ_Diffusers_FLUX_Config.","commonSituations":"Generic pipeline-loading loops that try every SubModelType against every model; passing the wrong enum value from custom orchestration code.","solutions":["Only request Transformer, Tokenizer(2), TextEncoder(2), or VAE submodels from an SDNQ FLUX diffusers model.","Load other components (controlnets, schedulers, etc.) from their separately registered models.","Filter your submodel list against the supported set before calling the loader."],"exampleFix":"// before\nfor sub in SubModelType:\n    loader.load_model(sdnq_config, sub)  # raises on unsupported types\n// after\nsupported = {SubModelType.Transformer, SubModelType.Tokenizer, SubModelType.Tokenizer2, SubModelType.TextEncoder, SubModelType.TextEncoder2, SubModelType.VAE}\nfor sub in supported:\n    loader.load_model(sdnq_config, sub)","handlingStrategy":"validation","validationCode":"supported = {SubModelType.Transformer, SubModelType.Tokenizer, SubModelType.Tokenizer2, SubModelType.TextEncoder, SubModelType.TextEncoder2, SubModelType.VAE}\nif submodel_type not in supported:\n    raise ValueError(f\"{submodel_type} is not a component of an SDNQ FLUX diffusers model\")","typeGuard":"def is_sdnq_component(submodel_type: SubModelType) -> bool:\n    return submodel_type in {SubModelType.Transformer, SubModelType.Tokenizer, SubModelType.Tokenizer2, SubModelType.TextEncoder, SubModelType.TextEncoder2, SubModelType.VAE}","tryCatchPattern":"try:\n    model = loader.load_model(config, submodel_type)\nexcept ValueError as e:\n    if \"Unsupported submodel type\" in str(e):\n        raise RuntimeError(f\"Load {submodel_type} from its separately registered model\") from e\n    raise","preventionTips":["Only iterate over component submodels when loading pipeline pieces","Load controlnets/schedulers/other models from their own records","Consult the loader's match/case for the exact supported set"],"tags":["submodel","sdnq","flux"],"backgroundTag":"unsupported-submodel","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}