Commit 5ba3b9fd3 for llama.cpp
commit 5ba3b9fd3da34e516450ea58c229949ea4cff3ce
Author: Xuan-Son Nguyen <son@huggingface.co>
Date: Tue Oct 20 18:33:32 2026 +0200
mtmd: fix gemma 4 ffn act (#30882)
diff --git a/conversion/gemma.py b/conversion/gemma.py
index 924d8e784..ab2d90610 100644
--- a/conversion/gemma.py
+++ b/conversion/gemma.py
@@ -999,6 +999,8 @@ class Gemma4VisionAudioModel(MmprojModel):
assert self.hparams_vision is not None
self.gguf_writer.add_clip_vision_projector_type(gguf.VisionProjectorType.GEMMA4V)
self.gguf_writer.add_vision_attention_layernorm_eps(self.hparams_vision.get("layer_norm_eps", 1e-6))
+ assert self.hparams_vision.get("hidden_activation", "gelu_pytorch_tanh") == "gelu_pytorch_tanh"
+ self.gguf_writer.add_vision_use_gelu(True)
# audio params
if self.has_audio_encoder:
diff --git a/tools/mtmd/clip.cpp b/tools/mtmd/clip.cpp
index 3a4dd682a..41aba280b 100644
--- a/tools/mtmd/clip.cpp
+++ b/tools/mtmd/clip.cpp
@@ -1735,6 +1735,8 @@ struct clip_model_loader {
case PROJECTOR_TYPE_GEMMA4UV:
{
hparams.rope_theta = 100.0f;
+ hparams.ffn_op = FFN_GELU;
+ log_ffn_op = "gelu";
hparams.n_merge = 3; // pooling_kernel_size
hparams.image_resize_algo = RESIZE_ALGO_BICUBIC;
get_u32(KEY_PROJ_SCALE_FACTOR, hparams.n_merge, false);