{"record":{"id":"bd811a8074e22923","repo":"invoke-ai/InvokeAI","slug":"only-textencoder-and-tokenizer-submodels-are-suppo-bd811a","errorCode":null,"errorMessage":"Only TextEncoder and Tokenizer submodels are supported. Received: {submodel_str}","messagePattern":"Only TextEncoder and Tokenizer submodels are supported\\. Received: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"invokeai/backend/model_manager/load/model_loaders/z_image.py","lineNumber":1480,"sourceCode":"\n    def _load_model(\n        self,\n        config: AnyModelConfig,\n        submodel_type: Optional[SubModelType] = None,\n    ) -> AnyModel:\n        if not isinstance(config, (Qwen3Encoder_SDNQ_Config, Qwen3Encoder_SDNQ_Folder_Config)):\n            raise ValueError(\n                \"Only Qwen3Encoder_SDNQ_Config or Qwen3Encoder_SDNQ_Folder_Config models are supported here.\"\n            )\n\n        match submodel_type:\n            case SubModelType.TextEncoder:\n                return self._load_from_sdnq(config)\n            case SubModelType.Tokenizer:\n                return self._load_tokenizer_with_offline_fallback()\n\n        submodel_str = submodel_type.value if submodel_type else \"None\"\n        raise ValueError(f\"Only TextEncoder and Tokenizer submodels are supported. Received: {submodel_str}\")\n\n    def _load_tokenizer_with_offline_fallback(self) -> AnyModel:\n        \"\"\"Load tokenizer with local_files_only fallback for offline support.\"\"\"\n        try:\n            return AutoTokenizer.from_pretrained(self.DEFAULT_TOKENIZER_SOURCE, local_files_only=True)\n        except OSError:\n            return AutoTokenizer.from_pretrained(self.DEFAULT_TOKENIZER_SOURCE)\n\n    def _load_from_sdnq(\n        self,\n        config: AnyModelConfig,\n    ) -> AnyModel:\n        from transformers import Qwen3Config, Qwen3ForCausalLM\n\n        from invokeai.backend.quantization.sdnq.sdnq_tensor import SDNQTensor\n        from invokeai.backend.util.logging import InvokeAILogger\n\n        logger = InvokeAILogger.get_logger(self.__class__.__name__)","sourceCodeStart":1462,"sourceCodeEnd":1498,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/backend/model_manager/load/model_loaders/z_image.py#L1462-L1498","documentation":"For SDNQ Qwen3 encoder configs, _load_model only handles SubModelType.TextEncoder and SubModelType.Tokenizer. Requesting any other submodel (or None) from this loader raises a ValueError naming the received submodel type.","triggerScenarios":"Calling _load_model(config, submodel_type) with e.g. SubModelType.Vae, SubModelType.Main, or None for a Qwen3Encoder SDNQ config — typically a pipeline assembled the submodel list incorrectly or the model record's type is wrong.","commonSituations":"Model manager DB entry typed as the wrong SubModelType; custom workflow/graph node requesting the wrong submodel from this loader; API call loading submodels for a model that only exposes text encoder + tokenizer.","solutions":["Load only TextEncoder/Tokenizer submodels from this config; get VAE/transformer from their own model records.","Fix the submodel_type recorded for the model in the model manager DB (re-import the model).","Check the calling pipeline/graph code that resolves SubModelType values.","Guard caller code to skip unsupported submodel types for this model family."],"exampleFix":"// before\nmodel = loader._load_model(cfg, SubModelType.Vae)\n// after\nmodel = loader._load_model(cfg, SubModelType.TextEncoder)","handlingStrategy":"validation","validationCode":"SUPPORTED = {SubModelType.TextEncoder, SubModelType.Tokenizer}\nif submodel_type not in SUPPORTED:\n    raise ValueError(f\"Z-Image SDNQ encoder supports only TextEncoder/Tokenizer, got {submodel_type}\")","typeGuard":"def supports_submodel(st: SubModelType | None) -> bool:\n    return st in (SubModelType.TextEncoder, SubModelType.Tokenizer)","tryCatchPattern":"try:\n    model = loader._load_model(cfg, submodel_type)\nexcept ValueError as e:\n    if \"Only TextEncoder and Tokenizer\" in str(e):\n        model = load_from_other_model_record(submodel_type)  # VAE/transformer live elsewhere\n    else:\n        raise","preventionTips":["Load each pipeline component from its own model record with the correct SubModelType.","Fix mislabeled model types via the model manager UI (re-import).","Assert submodel_type before calling specialized loaders.","Remember this config family exposes only TextEncoder + Tokenizer."],"tags":["submodel-type","sdnq","model-loading","api-misuse"],"backgroundTag":"unsupported-submodel-type","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}