8
8
9
9
from invokeai .backend .model_manager .configs .base import Config_Base , Diffusers_Config_Base
10
10
from invokeai .backend .model_manager .configs .identification_utils import (
11
- common_config_paths ,
12
- raise_for_class_name ,
11
+ NotAMatchError ,
12
+ get_class_name_from_config_dict_or_raise ,
13
+ get_config_dict_or_raise ,
13
14
raise_for_override_fields ,
14
15
raise_if_not_dir ,
15
16
)
@@ -34,11 +35,23 @@ def from_model_on_disk(cls, mod: ModelOnDisk, override_fields: dict[str, Any]) -
34
35
35
36
raise_for_override_fields (cls , override_fields )
36
37
37
- raise_for_class_name (
38
- common_config_paths (mod .path ),
39
- {
40
- "CLIPVisionModelWithProjection" ,
41
- },
42
- )
38
+ cls .raise_if_config_doesnt_look_like_clip_vision (mod )
43
39
44
40
return cls (** override_fields )
41
+
42
+ @classmethod
43
+ def raise_if_config_doesnt_look_like_clip_vision (cls , mod : ModelOnDisk ) -> None :
44
+ config_dict = get_config_dict_or_raise (mod .path / "config.json" )
45
+ class_name = get_class_name_from_config_dict_or_raise (config_dict )
46
+
47
+ if class_name == "CLIPVisionModelWithProjection" :
48
+ looks_like_clip_vision = True
49
+ elif class_name == "CLIPModel" and "vision_config" in config_dict :
50
+ looks_like_clip_vision = True
51
+ else :
52
+ looks_like_clip_vision = False
53
+
54
+ if not looks_like_clip_vision :
55
+ raise NotAMatchError (
56
+ f"config class name is { class_name } , not CLIPVisionModelWithProjection or CLIPModel with vision_config"
57
+ )
0 commit comments