@@ -2707,7 +2707,7 @@ def set_gguf_parameters(self):
2707
2707
self .gguf_writer .add_add_bos_token (False )
2708
2708
2709
2709
2710
- @Model .register ("Phi3ForCausalLM" )
2710
+ @Model .register ("Phi3ForCausalLM" , "Phi4MMForCausalLM" )
2711
2711
class Phi3MiniModel (Model ):
2712
2712
model_arch = gguf .MODEL_ARCH .PHI3
2713
2713
@@ -2718,7 +2718,7 @@ def set_vocab(self):
2718
2718
with open (tokenizer_config_file , "r" , encoding = "utf-8" ) as f :
2719
2719
tokenizer_config_json = json .load (f )
2720
2720
tokenizer_class = tokenizer_config_json ['tokenizer_class' ]
2721
- if tokenizer_class == 'GPT2Tokenizer' :
2721
+ if tokenizer_class == 'GPT2Tokenizer' or tokenizer_class == 'GPT2TokenizerFast' :
2722
2722
return self ._set_vocab_gpt2 ()
2723
2723
2724
2724
from sentencepiece import SentencePieceProcessor
@@ -2884,6 +2884,16 @@ def generate_extra_tensors(self) -> Iterable[tuple[str, Tensor]]:
2884
2884
yield (self .format_tensor_name (gguf .MODEL_TENSOR .ROPE_FACTORS_LONG ), torch .tensor (long_factors , dtype = torch .float32 ))
2885
2885
yield (self .format_tensor_name (gguf .MODEL_TENSOR .ROPE_FACTORS_SHORT ), torch .tensor (short_factors , dtype = torch .float32 ))
2886
2886
2887
+ def modify_tensors (self , data_torch : Tensor , name : str , bid : int | None ) -> Iterable [tuple [str , Tensor ]]:
2888
+ if "base_layer" in name :
2889
+ name = name .replace ("base_layer." , "" )
2890
+ # TODO: a big TODO, for simplification, we are skipping multimodal tensors for now
2891
+ if name .startswith ("model.embed_tokens_extend" ) or "lora_" in name :
2892
+ logger .error (f"Skipping multimodal tensor: { name !r} " )
2893
+ return []
2894
+ else :
2895
+ return super ().modify_tensors (data_torch , name , bid )
2896
+
2887
2897
2888
2898
@Model .register ("PhiMoEForCausalLM" )
2889
2899
class PhiMoeModel (Phi3MiniModel ):
0 commit comments