@@ -420,9 +420,6 @@ def get_model_part_names(dir_model: Path, prefix: str, suffix: str) -> list[str]
420
420
for filename in os .listdir (dir_model ):
421
421
if filename .startswith (prefix ) and filename .endswith (suffix ):
422
422
part_names .append (filename )
423
- # TODO remove later
424
- elif filename .endswith (suffix ):
425
- part_names .append (filename )
426
423
427
424
part_names .sort ()
428
425
@@ -3006,7 +3003,12 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter
3006
3003
@ModelBase .register ("InternVisionModel" )
3007
3004
class InternVisionModel (MmprojModel ):
3008
3005
def set_gguf_parameters (self ):
3006
+ if isinstance (self .hparams_vision ['image_size' ], list ):
3007
+ self .hparams_vision ['image_size' ] = self .hparams_vision ['image_size' ][0 ]
3008
+ if isinstance (self .hparams_vision ['patch_size' ], list ):
3009
+ self .hparams_vision ['patch_size' ] = self .hparams_vision ['patch_size' ][0 ]
3009
3010
super ().set_gguf_parameters ()
3011
+
3010
3012
hparams = self .hparams
3011
3013
self .gguf_writer .add_clip_projector_type (gguf .VisionProjectorType .INTERNVL )
3012
3014
self .gguf_writer .add_vision_attention_layernorm_eps (hparams ["layer_norm_eps" ])
@@ -3030,8 +3032,43 @@ def tensor_force_quant(self, name, new_name, bid, n_dims):
3030
3032
return gguf .GGMLQuantizationType .F32
3031
3033
return False
3032
3034
3035
+ def _mapping_name_interns1 (self , name ):
3036
+ names_map = {
3037
+ "model.multi_modal_projector.layer_norm.bias" : "mlp1.0.bias" ,
3038
+ "model.multi_modal_projector.layer_norm.weight" : "mlp1.0.weight" ,
3039
+ "model.multi_modal_projector.linear_1.bias" : "mlp1.1.bias" ,
3040
+ "model.multi_modal_projector.linear_1.weight" : "mlp1.1.weight" ,
3041
+ "model.multi_modal_projector.linear_2.bias" : "mlp1.3.bias" ,
3042
+ "model.multi_modal_projector.linear_2.weight" : "mlp1.3.weight" ,
3043
+ "model.vision_tower.embeddings.cls_token" : "vision_model.embeddings.class_embedding" ,
3044
+ "model.vision_tower.embeddings.patch_embeddings.projection.bias" : "vision_model.embeddings.patch_embedding.bias" ,
3045
+ "model.vision_tower.embeddings.patch_embeddings.projection.weight" : "vision_model.embeddings.patch_embedding.weight" ,
3046
+ "model.vision_tower.embeddings.position_embeddings" : "vision_model.embeddings.position_embedding" ,
3047
+ }
3048
+ if name in names_map :
3049
+ name = names_map [name ]
3050
+ elif name .startswith ("model.language_model." ):
3051
+ name = "language_model.model." + name [len ("model.language_model." ) :]
3052
+ elif name .startswith ("model.vision_tower." ):
3053
+ name = "vision_model." + name [len ("model.vision_tower." ) :]
3054
+
3055
+ if name .startswith ("vision_model.encoder.layer" ):
3056
+ name = name .replace (r".layer." , r".layers." )
3057
+ name = name .replace (r".attention." , r".attn." )
3058
+ name = name .replace (r".attn.q_proj" , r".self_attn.q_proj" )
3059
+ name = name .replace (r".attn.k_proj" , r".self_attn.k_proj" )
3060
+ name = name .replace (r".attn.v_proj" , r".self_attn.v_proj" )
3061
+ name = name .replace (r".projection_layer." , r".proj." )
3062
+ name = name .replace (r".lambda_1" , r".ls1" )
3063
+ name = name .replace (r".lambda_2" , r".ls2" )
3064
+ name = name .replace (r".layernorm_before." , r".norm1." )
3065
+ name = name .replace (r".layernorm_after." , r".norm2." )
3066
+ return name
3067
+
3033
3068
def modify_tensors (self , data_torch : Tensor , name : str , bid : int | None ) -> Iterable [tuple [str , Tensor ]]:
3034
3069
del bid # unused
3070
+ name = self ._mapping_name_interns1 (name )
3071
+ # support interns1
3035
3072
if name .startswith ("vision_model" ) or name .startswith ("mlp" ):
3036
3073
# process visual tensors
3037
3074
# correct name
@@ -3123,8 +3160,8 @@ def set_gguf_parameters(self):
3123
3160
3124
3161
def modify_tensors (self , data_torch : Tensor , name : str , bid : int | None ) -> Iterable [tuple [str , Tensor ]]:
3125
3162
# process the experts separately
3126
- name = name .replace ("language_model." , "" ) # InternVL
3127
- if name .startswith ("mlp" ) or name .startswith ("vision_model" ):
3163
+ name = name .replace (r "language_model." , r "" ) # InternVL
3164
+ if name .startswith ("mlp" ) or name .startswith ("vision_model" ) or name . startswith ( "model.vision_tower" ) or name . startswith ( "model.multi_modal_projector" ) :
3128
3165
# skip visual tensors
3129
3166
return []
3130
3167
if name .find ("experts" ) != - 1 :
@@ -3180,6 +3217,41 @@ class Qwen3Model(Qwen2Model):
3180
3217
class Qwen3MoeModel (Qwen2MoeModel ):
3181
3218
model_arch = gguf .MODEL_ARCH .QWEN3MOE
3182
3219
3220
+ def set_vocab (self ):
3221
+ # deal with interns1
3222
+ if 'interns1' in f'{ self .dir_model } ' .lower ():
3223
+ self ._set_vocab_interns1 ()
3224
+ return
3225
+
3226
+ try :
3227
+ self ._set_vocab_sentencepiece ()
3228
+ except FileNotFoundError :
3229
+ self ._set_vocab_gpt2 ()
3230
+
3231
+ def _set_vocab_interns1 (self ):
3232
+ tokens , toktypes , tokpre = self .get_vocab_base ()
3233
+ self .gguf_writer .add_tokenizer_model ("gpt2" )
3234
+ self .gguf_writer .add_tokenizer_pre (tokpre )
3235
+ self .gguf_writer .add_token_list (tokens )
3236
+ self .gguf_writer .add_token_types (toktypes )
3237
+
3238
+ special_vocab = gguf .SpecialVocab (self .dir_model , load_merges = True )
3239
+ special_tokens_map_file = self .dir_model / 'special_tokens_map.json'
3240
+ additional_special_tokens = []
3241
+ if special_tokens_map_file .is_file ():
3242
+ with open (special_tokens_map_file , encoding = 'utf-8' ) as f :
3243
+ additional_special_tokens = json .load (f ).get ('additional_special_tokens' , [])
3244
+ tokenizer_cfg_file = self .dir_model / 'special_tokens_map.json'
3245
+ if tokenizer_cfg_file .is_file ():
3246
+ with open (tokenizer_cfg_file , encoding = 'utf-8' ) as f :
3247
+ added_tokens_decoder = json .load (f ).get ('added_tokens_decoder' , {})
3248
+ token2ids_map = {data ['content' ] : int (token ) for token , data in added_tokens_decoder .items () if data ['special' ]}
3249
+ for token in additional_special_tokens :
3250
+ if token in token2ids_map :
3251
+ special_vocab ._set_special_token (token , token2ids_map [token ])
3252
+ special_vocab ._set_special_token ('eos' , 151645 )
3253
+ special_vocab ._set_special_token ("bos" , 151643 )
3254
+ special_vocab .add_to_gguf (self .gguf_writer )
3183
3255
3184
3256
@ModelBase .register ("GPT2LMHeadModel" )
3185
3257
class GPT2Model (TextModel ):
0 commit comments