@@ -2882,6 +2882,66 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter
2882
2882
return [(self .map_tensor_name (name ), data_torch )]
2883
2883
2884
2884
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
+
2885
2945
@Model .register ("BertModel" , "BertForMaskedLM" , "CamembertModel" )
2886
2946
class BertModel (Model ):
2887
2947
model_arch = gguf .MODEL_ARCH .BERT
0 commit comments