{"record":{"id":"24fdeb84dfc7f79c","repo":"invoke-ai/InvokeAI","slug":"unsupported-submodel-type-for-sdnq-zimagepipeline","errorCode":null,"errorMessage":"Unsupported submodel type for SDNQ ZImagePipeline: {submodel_type.value if submodel_type else 'None'}","messagePattern":"Unsupported submodel type for SDNQ ZImagePipeline: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"invokeai/backend/model_manager/load/model_loaders/z_image.py","lineNumber":618,"sourceCode":"                return self._load_from_singlefile(config)\n            raise ValueError(\n                f\"Single-file SDNQ Z-Image checkpoints only provide the Transformer submodel. \"\n                f\"Received: {submodel_type.value if submodel_type else 'None'}\"\n            )\n\n        # Full ZImagePipeline folder — dispatch each submodel out of its own subfolder so the\n        # model can be used as a 'Qwen3 & VAE source model' for other Z-Image runs.\n        match submodel_type:\n            case SubModelType.Transformer:\n                return self._load_from_diffusers_folder(config)\n            case SubModelType.TextEncoder:\n                return self._load_text_encoder(config)\n            case SubModelType.Tokenizer:\n                return self._load_tokenizer(config)\n            case SubModelType.VAE:\n                return self._load_vae(config)\n\n        raise ValueError(\n            f\"Unsupported submodel type for SDNQ ZImagePipeline: {submodel_type.value if submodel_type else 'None'}\"\n        )\n\n    def _load_text_encoder(self, config: Main_SDNQ_Diffusers_ZImage_Config) -> AnyModel:\n        from transformers import AutoConfig, Qwen3ForCausalLM\n\n        te_dir = resolve_submodel_path(config, SubModelType.TextEncoder, Path(config.path) / \"text_encoder\")\n        target_device = TorchDevice.choose_torch_device()\n        compute_dtype = TorchDevice.choose_bfloat16_safe_dtype(target_device)\n\n        te_config = AutoConfig.from_pretrained(te_dir, local_files_only=True)\n        with accelerate.init_empty_weights():\n            model = Qwen3ForCausalLM(te_config)\n\n        sd = sdnq_sd_loader(te_dir, compute_dtype=compute_dtype)\n        # Qwen3ForCausalLM may share lm_head.weight with model.embed_tokens.weight; missing keys\n        # for that tie are expected and handled by re-sharing post-load.\n        missing, unexpected = model.load_state_dict(sd, assign=True, strict=False)","sourceCodeStart":600,"sourceCodeEnd":636,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/backend/model_manager/load/model_loaders/z_image.py#L600-L636","documentation":"For Main_SDNQ_Diffusers_ZImage_Config (full pipeline folder), _load_model dispatches TextEncoder, Tokenizer and VAE submodels; Transformer on folder configs and any other submodel type falls through to this ValueError. It signals the requested submodel cannot be served from the SDNQ ZImagePipeline folder layout.","triggerScenarios":"Calling _load_model with Main_SDNQ_Diffusers_ZImage_Config and submodel_type equal to Transformer (folder path), Scheduler, or None — anything not handled by the TextEncoder/Tokenizer/VAE cases reaches z_image.py:618.","commonSituations":"Code requests the transformer from the pipeline-folder model even though the single-file SDNQ checkpoint supplies it; scheduler probes hit a loader without scheduler support; generic submodel iteration requests unsupported types.","solutions":["Load the transformer from the single-file SDNQ checkpoint (Main_SDNQ_ZImage_Config) and use the folder model only for TextEncoder/Tokenizer/VAE.","Only request TextEncoder, Tokenizer, or VAE from the SDNQ pipeline-folder loader.","Adjust the pipeline configuration so each submodel points at a model that actually provides it.","Skip Scheduler/other probes for this loader in caller code."],"exampleFix":"// before\ntransformer = sdnq_loader._load_model(folder_config, SubModelType.Transformer)  # ValueError\n// after\ntransformer = sdnq_loader._load_model(single_file_config, SubModelType.Transformer)\nvae = sdnq_loader._load_model(folder_config, SubModelType.VAE)","handlingStrategy":"validation","validationCode":"if isinstance(config, Main_SDNQ_Diffusers_ZImage_Config) and submodel_type not in (SubModelType.TextEncoder, SubModelType.Tokenizer, SubModelType.VAE):\n    raise ValueError(\"SDNQ ZImagePipeline folder provides only TextEncoder, Tokenizer and VAE submodels\")","typeGuard":"def folder_sdnq_supports(submodel_type: SubModelType | None) -> bool:\n    return submodel_type in (SubModelType.TextEncoder, SubModelType.Tokenizer, SubModelType.VAE)","tryCatchPattern":"try:\n    model = sdnq_loader._load_model(folder_config, submodel_type)\nexcept ValueError as e:\n    if \"Unsupported submodel type for SDNQ ZImagePipeline\" in str(e):\n        model = single_file_loader._load_model(single_file_config, submodel_type)\n    else:\n        raise","preventionTips":["Point the pipeline's transformer at the single-file SDNQ checkpoint and the folder model only for TE/tokenizer/VAE.","Map each SubModelType to the model entry that actually contains it before loading.","Avoid scheduler/other probes on this loader."],"tags":["python","sdnq","submodel","model-loading","invokeai"],"backgroundTag":"unsupported-submodel-type","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}