char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
fa88ae936
char/aliceai-t5-moe
1from __future__import annotations 2 3from typing import Callable ,TYPE_CHECKING 4 5if TYPE_CHECKING : 6from torch import Tensor 7 8from .base import MmprojModel ,ModelBase ,gguf 9 10 11@ ModelBase . register ( "Idefics3ForConditionalGeneration" , "SmolVLMForConditionalGeneration" ) 12@ ModelBase . example ( "HuggingFaceTB/SmolVLM-Instruct" , "HuggingFaceM4/Idefics3-8B-Llama3" ) 13class SmolVLMModel (MmprojModel ): 14def __init__ (self ,* args ,** kwargs ): 15super ().__init__ (* args ,** kwargs ) 16if self .hparams ["model_type" ]== "smolvlm_vision" : 17# fix for SmolVLM2, missing some keys in config.json 18# default values are taken from transformers code 19self .hparams ["hidden_size" ]= self .hparams .get ("hidden_size" ,1152 ) 20self .hparams ["num_attention_heads" ]= self .hparams .get ("num_attention_heads" ,16 ) 21self .hparams ["intermediate_size" ]= self .hparams .get ("intermediate_size" ,3072 ) 22 23def set_gguf_parameters (self ): 24super ().set_gguf_parameters () 25self .gguf_writer .add_clip_projector_type (gguf .VisionProjectorType .IDEFICS3 ) 26self .gguf_writer .add_vision_attention_layernorm_eps (self .hparams .get ("layer_norm_eps" ,1e-5 )) 27self .gguf_writer .add_vision_projector_scale_factor (self .global_config .get ("scale_factor" ,2 )) 28self .gguf_writer .add_vision_use_gelu (True ) 29 30# Add the preprocessor longest edge size 31preproc_image_size = self .preprocessor_config .get ("size" , {}).get ("longest_edge" ,self .image_size ) 32self .gguf_writer .add_vision_preproc_image_size (preproc_image_size ) 33 34def tensor_force_quant (self ,name ,new_name ,bid ,n_dims ): 35if ".embeddings." in name : 36return gguf .GGMLQuantizationType .F32 37return super ().tensor_force_quant (name ,new_name ,bid ,n_dims ) 38 39@classmethod 40def filter_tensors (cls ,item :tuple [str ,Callable [[],Tensor ]])-> tuple [str ,Callable [[],Tensor ]]| None : 41name ,gen = item 42 43is_vision_tensor = "vision_tower" in name or "vision_model" in name or "model.connector" in name 44 45if not is_vision_tensor : 46return None 47 48return super ().filter_tensors (item )