{"record":{"id":"83fe0eebd4e9ecd4","repo":"invoke-ai/InvokeAI","slug":"expected-qwenvlencoder-diffusers-config-got-type","errorCode":null,"errorMessage":"Expected QwenVLEncoder_Diffusers_Config, got {type(config).__name__}.","messagePattern":"Expected QwenVLEncoder_Diffusers_Config, got (.+?)\\.","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"invokeai/backend/model_manager/load/model_loaders/qwen_image.py","lineNumber":302,"sourceCode":"\n        new_sd_size = sum(t.nelement() * t.element_size() for t in sd.values())\n        self._ram_cache.make_room(new_sd_size)\n\n        model.load_state_dict(sd, strict=False, assign=True)\n        return model\n\n\n@ModelLoaderRegistry.register(base=BaseModelType.Any, type=ModelType.QwenVLEncoder, format=ModelFormat.QwenVLEncoder)\nclass QwenVLEncoderLoader(ModelLoader):\n    \"\"\"Loads a standalone Qwen2.5-VL encoder (text_encoder/ + tokenizer/ + processor/).\"\"\"\n\n    def _load_model(\n        self,\n        config: AnyModelConfig,\n        submodel_type: Optional[SubModelType] = None,\n    ) -> AnyModel:\n        if not isinstance(config, QwenVLEncoder_Diffusers_Config):\n            raise TypeError(f\"Expected QwenVLEncoder_Diffusers_Config, got {type(config).__name__}.\")\n\n        from transformers import AutoTokenizer, Qwen2_5_VLForConditionalGeneration\n\n        model_path = Path(config.path)\n\n        target_device = TorchDevice.choose_torch_device()\n        model_dtype = TorchDevice.choose_bfloat16_safe_dtype(target_device)\n\n        match submodel_type:\n            case SubModelType.Tokenizer:\n                tokenizer_path = model_path / \"tokenizer\"\n                return AutoTokenizer.from_pretrained(str(tokenizer_path), local_files_only=True)\n            case SubModelType.TextEncoder:\n                encoder_path = model_path / \"text_encoder\"\n                return Qwen2_5_VLForConditionalGeneration.from_pretrained(\n                    str(encoder_path),\n                    torch_dtype=model_dtype,\n                    low_cpu_mem_usage=True,","sourceCodeStart":284,"sourceCodeEnd":320,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/backend/model_manager/load/model_loaders/qwen_image.py#L284-L320","documentation":"The diffusers-format Qwen VL encoder loader only accepts QwenVLEncoder_Diffusers_Config. If _load_model receives any other config type (e.g. a checkpoint config for the same model type), it raises this TypeError naming the actual type, since the diffusers loader uses from_pretrained-style loading that only applies to diffusers-format model folders.","triggerScenarios":"A Qwen VL text encoder model registered with ModelFormat.Checkpoint but resolved to the diffusers-format loader, or vice versa: checkpoint config object passed to the diffusers loader's _load_model.","commonSituations":"Model imported from a single-file .safetensors but the diffusers registry entry was chosen; model record's format field wrong after manual edits; mixed encoder setups.","solutions":["Ensure the model is registered as diffusers format so QwenVLEncoder_Diffusers_Config is produced and routed here.","If the model is a single-file checkpoint, let it route to the checkpoint-registered QwenVLEncoder loader instead.","Correct the format field on the model record and re-scan."],"exampleFix":"// before\nconfig = QwenVLEncoder_Checkpoint_Config(path=\"encoder.safetensors\")\nenc = diffusers_loader._load_model(config, SubModelType.TextEncoder)\n// after\nconfig = QwenVLEncoder_Diffusers_Config(path=\"encoder_dir/\")\nenc = diffusers_loader._load_model(config, SubModelType.TextEncoder)","handlingStrategy":"type-guard","validationCode":"from invokeai.backend.model_manager.config import QwenVLEncoder_Diffusers_Config\nif not isinstance(config, QwenVLEncoder_Diffusers_Config):\n    raise TypeError(f\"Diffusers QwenVL loader needs QwenVLEncoder_Diffusers_Config, got {type(config).__name__}\")","typeGuard":"def is_diffusers_qwenvl_config(config: AnyModelConfig) -> bool:\n    return isinstance(config, QwenVLEncoder_Diffusers_Config)","tryCatchPattern":"try:\n    enc = loader._load_model(config, SubModelType.TextEncoder)\nexcept TypeError as e:\n    if \"QwenVLEncoder_Diffusers_Config\" in str(e):\n        enc = checkpoint_qwenvl_loader._load_model(config, SubModelType.TextEncoder)  # route to the other loader\n    else:\n        raise","preventionTips":["Verify the model's format field (diffusers vs checkpoint) matches the on-disk layout","Use separate loader instances per format","Re-scan the models directory after moving encoder files"],"tags":["model-loader","invokeai","qwen-vl","text-encoder","config-type"],"backgroundTag":"invalid-config-type","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}