diff --git a/invokeai/backend/model_manager/config.py b/invokeai/backend/model_manager/config.py index af083618d1..f9b74b067b 100644 --- a/invokeai/backend/model_manager/config.py +++ b/invokeai/backend/model_manager/config.py @@ -1063,12 +1063,43 @@ class CLIPLEmbedDiffusersConfig(CLIPEmbedDiffusersConfig, ModelConfigBase): return cls(**fields) -class CLIPVisionDiffusersConfig(DiffusersConfigBase, LegacyProbeMixin, ModelConfigBase): +class CLIPVisionDiffusersConfig(DiffusersConfigBase, ModelConfigBase): """Model config for CLIPVision.""" type: Literal[ModelType.CLIPVision] = ModelType.CLIPVision format: Literal[ModelFormat.Diffusers] = ModelFormat.Diffusers + VALID_OVERRIDES: ClassVar = { + "type": ModelType.CLIPVision, + "format": ModelFormat.Diffusers, + } + + VALID_CLASS_NAMES: ClassVar = { + "CLIPVisionModelWithProjection", + } + + @classmethod + def from_model_on_disk(cls, mod: ModelOnDisk, fields: dict[str, Any]) -> Self: + if _validate_overrides( + config_class=cls, + provided_overrides=fields, + valid_overrides=cls.VALID_OVERRIDES, + ): + return cls(**fields) + + if mod.path.is_file(): + raise NotAMatch(cls, "model path is a file, not a directory") + + config_path = mod.path / "config.json" + + _validate_class_names( + config_class=cls, + config_path=config_path, + valid_class_names=cls.VALID_CLASS_NAMES, + ) + + return cls(**fields) + class T2IAdapterConfig(DiffusersConfigBase, ControlAdapterConfigBase, LegacyProbeMixin, ModelConfigBase): """Model config for T2I."""