From 5ba3b9fd3da34e516450ea58c229949ea4cff3ce Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Tue, 20 Oct 2026 18:33:32 +0200 Subject: [PATCH] mtmd: fix gemma 4 ffn act (#30882) --- conversion/gemma.py | 2 ++ tools/mtmd/clip.cpp | 2 ++ 2 files changed, 4 insertions(+) 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);