{"record":{"id":"5af8648dea22cff9","repo":"invoke-ai/InvokeAI","slug":"a-submodel-type-must-be-provided-when-loading-onnx","errorCode":null,"errorMessage":"A submodel type must be provided when loading onnx pipelines.","messagePattern":"A submodel type must be provided when loading onnx pipelines\\.","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"invokeai/backend/model_manager/load/model_loaders/onnx.py","lineNumber":31,"sourceCode":"    BaseModelType,\n    ModelFormat,\n    ModelType,\n    SubModelType,\n)\n\n\n@ModelLoaderRegistry.register(base=BaseModelType.Any, type=ModelType.ONNX, format=ModelFormat.ONNX)\n@ModelLoaderRegistry.register(base=BaseModelType.Any, type=ModelType.ONNX, format=ModelFormat.Olive)\nclass OnnyxDiffusersModel(GenericDiffusersLoader):\n    \"\"\"Class to load onnx models.\"\"\"\n\n    def _load_model(\n        self,\n        config: AnyModelConfig,\n        submodel_type: Optional[SubModelType] = None,\n    ) -> AnyModel:\n        if not submodel_type is not None:\n            raise Exception(\"A submodel type must be provided when loading onnx pipelines.\")\n        model_path = Path(config.path)\n        load_class = self.get_hf_load_class(model_path, submodel_type)\n        repo_variant = getattr(config, \"repo_variant\", None)\n        variant = repo_variant.value if repo_variant else None\n        model_path = model_path / submodel_type.value\n        result: AnyModel = load_class.from_pretrained(\n            model_path,\n            torch_dtype=self._torch_dtype,\n            variant=variant,\n            local_files_only=True,\n        )\n        return result\n","sourceCodeStart":13,"sourceCodeEnd":44,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/backend/model_manager/load/model_loaders/onnx.py#L13-L44","documentation":"OnnyxDiffusersModel._load_model requires a SubModelType because ONNX pipelines are loaded piecewise (one onnx_model per subfolder like text_encoder/, unet/, vae/) via get_hf_load_class; with submodel_type=None it cannot pick a load class or subfolder, so it raises Exception. Note the guard 'if not submodel_type is not None' is a double negative that fires exactly when submodel_type is None.","triggerScenarios":"Calling the ONNX loader with submodel_type=None (the default), e.g. loading an ONNX/Olive model record as a whole instead of per-submodel; custom loader code that omits the submodel argument for ONNX models.","commonSituations":"Code that loads main models generically without per-submodel dispatch; scripts treating ONNX model folders like single-file checkpoints; direct _load_model calls during testing.","solutions":["Always pass a SubModelType (e.g. SubModelType.TextEncoder, UNet, VAE) when loading ONNX/Olive models.","Let the model manager's per-submodel loading machinery supply submodel_type rather than loading the whole pipeline directly.","If you need the entire pipeline, use ONNXPipeline loading at a higher level, not this submodel loader."],"exampleFix":"// before\nmodel = onnx_loader._load_model(cfg)  # Exception: submodel type required\n// after\nmodel = onnx_loader._load_model(cfg, SubModelType.UNet)","handlingStrategy":"validation","validationCode":"from invokeai.backend.model_manager.taxonomy import SubModelType\n\nif submodel_type is None:\n    raise ValueError(\"pass an explicit SubModelType when loading ONNX models\")\nmodel = onnx_loader._load_model(cfg, submodel_type)","typeGuard":null,"tryCatchPattern":"try:\n    model = onnx_loader._load_model(cfg, submodel_type)\nexcept Exception as e:\n    if \"submodel type must be provided\" in str(e):\n        model = onnx_loader._load_model(cfg, SubModelType.UNet)  # or resolve per pipeline\n    else:\n        raise","preventionTips":["Treat ONNX/Olive models as per-submodel loads only; never load them whole.","Never rely on the submodel_type=None default for ONNX records.","Use the model manager's pipeline loading which supplies submodels automatically."],"tags":["python","onnx","model-loading","submodel","invokeai"],"backgroundTag":"missing-submodel-type","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}