@@ -2882,6 +2882,66 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter
28822882 return [(self .map_tensor_name (name ), data_torch )]
28832883
28842884
2885+ @Model .register ("InternLM3ForCausalLM" )
2886+ class InternLM3Model (Model ):
2887+ model_arch = gguf .MODEL_ARCH .LLAMA
2888+
2889+ def set_vocab (self ):
2890+ tokens , scores , toktypes = self ._create_vocab_sentencepiece ()
2891+
2892+ self .gguf_writer .add_tokenizer_model ("llama" )
2893+ self .gguf_writer .add_tokenizer_pre ("default" )
2894+ self .gguf_writer .add_token_list (tokens )
2895+ self .gguf_writer .add_token_scores (scores )
2896+ self .gguf_writer .add_token_types (toktypes )
2897+
2898+ special_vocab = gguf .SpecialVocab (self .dir_model , n_vocab = len (tokens ))
2899+
2900+ tokenizer_config_file = self .dir_model / 'tokenizer_config.json'
2901+ if tokenizer_config_file .is_file ():
2902+ with open (tokenizer_config_file , "r" , encoding = "utf-8" ) as f :
2903+ tokenizer_config_json = json .load (f )
2904+ if "add_prefix_space" in tokenizer_config_json :
2905+ self .gguf_writer .add_add_space_prefix (tokenizer_config_json ["add_prefix_space" ])
2906+
2907+ if "added_tokens_decoder" in tokenizer_config_json :
2908+ for token_id , token_data in tokenizer_config_json ["added_tokens_decoder" ].items ():
2909+ if token_data .get ("special" ):
2910+ token_id = int (token_id )
2911+ token = token_data ["content" ]
2912+ special_vocab ._set_special_token (token , token_id )
2913+ # update eos token
2914+ if token == '<|im_end|>' and "eos" in special_vocab .special_token_ids :
2915+ special_vocab .special_token_ids ["eos" ] = token_id
2916+
2917+ special_vocab .add_to_gguf (self .gguf_writer )
2918+
2919+ def set_gguf_parameters (self ):
2920+ super ().set_gguf_parameters ()
2921+ hparams = self .hparams
2922+ self .gguf_writer .add_vocab_size (hparams ["vocab_size" ])
2923+
2924+ if "head_dim" in hparams :
2925+ rope_dim = hparams ["head_dim" ]
2926+ else :
2927+ rope_dim = hparams ["hidden_size" ] // hparams ["num_attention_heads" ]
2928+ self .gguf_writer .add_rope_dimension_count (rope_dim )
2929+
2930+ if self .hparams .get ("rope_scaling" ) is not None and "factor" in self .hparams ["rope_scaling" ]:
2931+ if self .hparams ["rope_scaling" ].get ("type" ) == "linear" or self .hparams ["rope_scaling" ].get ("rope_type" ) == "linear" :
2932+ self .gguf_writer .add_rope_scaling_type (gguf .RopeScalingType .LINEAR )
2933+ self .gguf_writer .add_rope_scaling_factor (self .hparams ["rope_scaling" ]["factor" ])
2934+
2935+ def modify_tensors (self , data_torch : Tensor , name : str , bid : int | None ) -> Iterable [tuple [str , Tensor ]]:
2936+ n_head = self .hparams ["num_attention_heads" ]
2937+ n_kv_head = self .hparams .get ("num_key_value_heads" )
2938+ if name .endswith (("q_proj.weight" , "q_proj.bias" )):
2939+ data_torch = LlamaModel .permute (data_torch , n_head , n_head )
2940+ if name .endswith (("k_proj.weight" , "k_proj.bias" )):
2941+ data_torch = LlamaModel .permute (data_torch , n_head , n_kv_head )
2942+ return [(self .map_tensor_name (name ), data_torch )]
2943+
2944+
28852945@Model .register ("BertModel" , "BertForMaskedLM" , "CamembertModel" )
28862946class BertModel (Model ):
28872947 model_arch = gguf .MODEL_ARCH .BERT
0 commit comments