]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
model : add control vector support where missing (#20653)
authorMichael Grau <redacted>
Wed, 18 Mar 2026 22:25:12 +0000 (23:25 +0100)
committerGitHub <redacted>
Wed, 18 Mar 2026 22:25:12 +0000 (23:25 +0100)
* Add control vector functions to qwen3.5 and qwen-next models

* Add missing cvec compatibility to the rest of the models

* Adjust comments and formatting

* cleanup

* whitespace

---------

Co-authored-by: Sigbjørn Skjæret <redacted>
14 files changed:
src/models/bitnet.cpp
src/models/chatglm.cpp
src/models/cogvlm.cpp
src/models/eurobert.cpp
src/models/jais.cpp
src/models/kimi-linear.cpp
src/models/lfm2.cpp
src/models/plamo2.cpp
src/models/plamo3.cpp
src/models/qwen35.cpp
src/models/qwen35moe.cpp
src/models/qwen3next.cpp
src/models/smallthinker.cpp
src/models/step35-iswa.cpp

index ccf5bc8e82b434f3a7cb31afa3e18d40fe6ededa..9f41b7d82df0f0338751ea71b1762355b5695b64 100644 (file)
@@ -121,6 +121,9 @@ llm_build_bitnet::llm_build_bitnet(const llama_model & model, const llm_graph_pa
         cur = ggml_add(ctx0, cur, ffn_inp);
         cb(cur, "l_out", il);
 
+        cur = build_cvec(cur, il);
+        cb(cur, "l_out", il);
+
         // input for next layer
         inpL = cur;
     }
index 5887ed22e7eeddba1d0c86ee90a09837f589f2af..cd11581a557972c0b1a29def166755774bf2e8c9 100644 (file)
@@ -111,8 +111,13 @@ llm_build_chatglm::llm_build_chatglm(const llama_model & model, const llm_graph_
 
         }
 
-        inpL = ggml_add(ctx0, cur, ffn_inp);
-        cb(inpL, "l_out", il);
+        cur = ggml_add(ctx0, cur, ffn_inp);
+
+        cur = build_cvec(cur, il);
+        cb(cur, "l_out", il);
+
+        // input for next layer
+        inpL = cur;
     }
 
     cur = build_norm(inpL,
index 2ef2b6e389b4d243248295f704ff0228d2a47add..fa7a54ba1c3839c7d28e42eaf9d19cd5b84821fa 100644 (file)
@@ -86,6 +86,10 @@ llm_build_cogvlm::llm_build_cogvlm(const llama_model & model, const llm_graph_pa
         cur = ggml_add(ctx0, cur, ffn_inp);
         cb(cur, "ffn_out", il);
 
+        cur = build_cvec(cur, il);
+        cb(cur, "l_out", il);
+
+        // input for next layer
         inpL = cur;
     }
 
index e8628d165d02ddbcfa001833a6c1b1e78d0d02cf..4ca9af873ebd197afe4428ea914356a8fccf0c3a 100644 (file)
@@ -82,6 +82,7 @@ llm_build_eurobert::llm_build_eurobert(const llama_model & model, const llm_grap
 
         cur = ggml_add(ctx0, cur, ffn_inp);
 
+        // input for next layer
         inpL = cur;
     }
     cur = inpL;
index 135bf288ba1b5e9375a55ec365d0a59d551a4857..b28243901ab1489b3d6d2e8f940f930e074461fa 100644 (file)
@@ -66,8 +66,14 @@ llm_build_jais::llm_build_jais(const llama_model & model, const llm_graph_params
                     LLM_FFN_SILU, LLM_FFN_PAR, il);
             cb(cur, "ffn_out", il);
         }
-        inpL = ggml_add(ctx0, cur, ffn_inp);
-        cb(inpL, "l_out", il);
+
+        cur = ggml_add(ctx0, cur, ffn_inp);
+
+        cur = build_cvec(cur, il);
+        cb(cur, "l_out", il);
+
+        // input for next layer
+        inpL = cur;
     }
     cur = build_norm(inpL,
             model.output_norm,
index 4d62f4e7159aa5c9dbcd0871b9b4b7576585265f..f189b71076a4384c24b78d9a76b2ee2eb8ff9e7d 100644 (file)
@@ -362,6 +362,7 @@ llm_build_kimi_linear::llm_build_kimi_linear(const llama_model & model, const ll
         cur = build_cvec(cur, il);
         cb(cur, "l_out", il);
 
+        // input for next layer
         inpL = cur;
     }
     cur = inpL;
index dfa322166b109301be83f04b405d3c74b054fc64..925c3dc9b2a6e4078582e4e983f17a3bc6a67624 100644 (file)
@@ -177,6 +177,9 @@ llm_build_lfm2<iswa>::llm_build_lfm2(const llama_model & model, const llm_graph_
         cb(ffn_norm_out, "model.layers.{}.ffn_out", il);
 
         cur = ggml_add(ctx0, cur, ffn_out);
+
+        cur = build_cvec(cur, il);
+        cb(cur, "l_out", il);
     }
 
     cur = build_norm(cur, model.output_norm, NULL, LLM_NORM_RMS, -1);
index f02acbc18699cddc0b229a56475845ea220f6970..0bde0b3d8f108c135a3ebd67034fd176ce7c9340 100644 (file)
@@ -71,6 +71,7 @@ llm_build_plamo2::llm_build_plamo2(const llama_model & model, const llm_graph_pa
         cur = ggml_add(ctx0, cur, residual);
         cb(cur, "ffn_residual", il);
 
+        // input for next layer
         inpL = cur;
     }
 
index 32af6e04663ea54a45238b915353d22fe31d716e..7cb9da6e7d10beda0b4b04e18affb2be4e1879db 100644 (file)
@@ -109,6 +109,8 @@ llm_build_plamo3<iswa>::llm_build_plamo3(const llama_model & model, const llm_gr
 
         cur = build_cvec(cur, il);
         cb(cur, "l_out", il);
+
+        // input for next layer
         inpL = cur;
     }
 
index d07579ee87e2c0eadd73b61817aa9b861e4f2456..e0e48d2a4fe7d2af18f557802949d26e8b33ad28 100644 (file)
@@ -64,6 +64,9 @@ llm_build_qwen35::llm_build_qwen35(const llama_model & model, const llm_graph_pa
         cur = ggml_add(ctx0, cur, ffn_residual);
         cb(cur, "post_ffn", il);
 
+        cur = build_cvec(cur, il);
+        cb(cur, "l_out", il);
+
         // Input for next layer
         inpL = cur;
     }
index b38660c0bce9c7d187bb7f5a476d959cb717bb05..15baea80b630ecaf8a06a9a4b89e3243f8cdd5d5 100644 (file)
@@ -64,6 +64,9 @@ llm_build_qwen35moe::llm_build_qwen35moe(const llama_model & model, const llm_gr
         cur = ggml_add(ctx0, cur, ffn_residual);
         cb(cur, "post_moe", il);
 
+        cur = build_cvec(cur, il);
+        cb(cur, "l_out", il);
+
         // Input for next layer
         inpL = cur;
     }
index cc479dd075c2026a3e6ae41357e552ca65aff310..dbfc0874db87f12655851e0b64dd97fd087db39a 100644 (file)
@@ -56,6 +56,9 @@ llm_build_qwen3next::llm_build_qwen3next(const llama_model & model, const llm_gr
         cur = ggml_add(ctx0, cur, ffn_residual);
         cb(cur, "post_moe", il);
 
+        cur = build_cvec(cur, il);
+        cb(cur, "l_out", il);
+
         // Input for next layer
         inpL = cur;
     }
index e2155aacef41a0c71488691f9bbb96e2fa52e391..0f7ef462b0fa11c9f481a56696cdc7932580fcc7 100644 (file)
@@ -101,6 +101,7 @@ llm_build_smallthinker<iswa>::llm_build_smallthinker(const llama_model & model,
         cur = ffn_out;
 
         cur = ggml_add(ctx0, cur, ffn_inp);
+
         cur = build_cvec(cur, il);
         cb(cur, "l_out", il);
 
index 176209cd93e15b7b60b91b74ebee0ce2517547d1..c80cb26c5af65a07778833c222b3bc6acb6e14da 100644 (file)
@@ -145,9 +145,11 @@ llm_build_step35_iswa::llm_build_step35_iswa(const llama_model & model, const ll
             cb(cur, "ffn_out", il);
         }
         cur = ggml_add(ctx0, cur, ffn_inp);
+
         cur = build_cvec(cur, il);
         cb(cur, "l_out", il);
 
+        // input for next layer
         inpL = cur;
     }