@@ -420,9 +420,6 @@ def get_model_part_names(dir_model: Path, prefix: str, suffix: str) -> list[str]
420420 for filename in os .listdir (dir_model ):
421421 if filename .startswith (prefix ) and filename .endswith (suffix ):
422422 part_names .append (filename )
423- # TODO remove later
424- elif filename .endswith (suffix ):
425- part_names .append (filename )
426423
427424 part_names .sort ()
428425
@@ -3006,7 +3003,12 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter
30063003@ModelBase .register ("InternVisionModel" )
30073004class InternVisionModel (MmprojModel ):
30083005 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 ]
30093010 super ().set_gguf_parameters ()
3011+
30103012 hparams = self .hparams
30113013 self .gguf_writer .add_clip_projector_type (gguf .VisionProjectorType .INTERNVL )
30123014 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):
30303032 return gguf .GGMLQuantizationType .F32
30313033 return False
30323034
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+
30333068 def modify_tensors (self , data_torch : Tensor , name : str , bid : int | None ) -> Iterable [tuple [str , Tensor ]]:
30343069 del bid # unused
3070+ name = self ._mapping_name_interns1 (name )
3071+ # support interns1
30353072 if name .startswith ("vision_model" ) or name .startswith ("mlp" ):
30363073 # process visual tensors
30373074 # correct name
@@ -3123,8 +3160,8 @@ def set_gguf_parameters(self):
31233160
31243161 def modify_tensors (self , data_torch : Tensor , name : str , bid : int | None ) -> Iterable [tuple [str , Tensor ]]:
31253162 # 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" ) :
31283165 # skip visual tensors
31293166 return []
31303167 if name .find ("experts" ) != - 1 :
@@ -3180,6 +3217,41 @@ class Qwen3Model(Qwen2Model):
31803217class Qwen3MoeModel (Qwen2MoeModel ):
31813218 model_arch = gguf .MODEL_ARCH .QWEN3MOE
31823219
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 )
31833255
31843256@ModelBase .register ("GPT2LMHeadModel" )
31853257class GPT2Model (TextModel ):
0 commit comments