char-fork/llama.cpp

git clone https://git.t4t.associates/char-fork/llama.cpp

Charlotte Somsupport aliceai_t5_moe98a01afd9

char/aliceai-t5-moe
102.2 KiB2658 linesraw
1#pragma once
2
3#include "llama-model.h"
4#include "llama-graph.h"
5#include "llama-model-loader.h"
6
7// note: almost all graphs require at least sqrtf, so include cmath globally
8#include <cmath>
9#include <map>
10
11class llama_memory_hybrid_idx_context;
12
13// ref: https://github.com/ggml-org/llama.cpp/pull/28068
14static inline ggml_tensor * build_gdn_l2_norm(ggml_context * ctx, ggml_tensor * x, float eps) {
15    const float n = x->ne[0];
16
17    return ggml_scale(ctx, ggml_rms_norm(ctx, x, eps/n), 1.0f/sqrtf(n));
18}
19
20//
21// base classes
22//
23
24struct llm_build_mamba_base : public llm_graph_context {
25    llm_build_mamba_base(const llm_graph_params & params);
26
27    virtual ~llm_build_mamba_base() = default;
28
29    ggml_tensor * build_mamba_layer(llm_graph_input_rs * inp, ggml_tensor * cur, const llama_model & model, const llama_ubatch & ubatch, int il);
30    ggml_tensor * build_mamba2_layer(llm_graph_input_rs * inp, ggml_tensor * cur, const llama_model & model, const llama_ubatch & ubatch, int il) const;
31
32};
33
34struct llm_build_delta_net_base : public llm_graph_context {
35    llm_build_delta_net_base(const llm_graph_params & params);
36
37    virtual ~llm_build_delta_net_base() = default;
38
39    // returns pair of output and new state
40    std::pair<ggml_tensor *, ggml_tensor *> build_delta_net_chunking(
41                ggml_tensor * q,
42                ggml_tensor * k,
43                ggml_tensor * v,
44                ggml_tensor * g,
45                ggml_tensor * b,
46                ggml_tensor * s,
47                        int   il);
48
49    // returns pair of output and new state
50    std::pair<ggml_tensor *, ggml_tensor *> build_delta_net_autoregressive(
51                ggml_tensor * q,
52                ggml_tensor * k,
53                ggml_tensor * v,
54                ggml_tensor * g,
55                ggml_tensor * b,
56                ggml_tensor * s,
57                int           il);
58
59    // use the ggml_gated_delta_net fused operator (K=1; state has shape [S_v, S_v, H_v, n_seqs])
60    std::pair<ggml_tensor *, ggml_tensor *> build_delta_net_fused(
61                ggml_tensor * q,
62                ggml_tensor * k,
63                ggml_tensor * v,
64                ggml_tensor * g,
65                ggml_tensor * b,
66                ggml_tensor * s,
67                        int   il);
68
69    // choose one of two implementations above based on the number of tokens
70    std::pair<ggml_tensor *, ggml_tensor *> build_delta_net(
71                ggml_tensor * q,
72                ggml_tensor * k,
73                ggml_tensor * v,
74                ggml_tensor * g,
75                ggml_tensor * b,
76                ggml_tensor * s,
77                        int   il);
78
79    // read conv state from cache, concat with qkv_mixed, write back (single slot or per-token)
80    // qkv_mixed: (qkv_dim, n_seq_tokens, n_seqs); returns conv_input: (kernel_size + n_seq_tokens - 1, channels, n_seqs)
81    ggml_tensor * build_conv_state(
82            llm_graph_input_rs * inp,
83            ggml_tensor *        conv_states_all,
84            ggml_tensor *        qkv_mixed,
85            int64_t              conv_kernel_size,
86            int64_t              conv_channels,
87            int                  il);
88
89    // run delta-net attention and write the new recurrent state(s) back to ssm_states_all
90    // s: (head_v_dim, head_v_dim, num_v_heads, n_seqs); returns output: (head_v_dim, num_v_heads, n_seq_tokens, n_seqs)
91    ggml_tensor * build_recurrent_attn(
92            llm_graph_input_rs * inp,
93            ggml_tensor *        ssm_states_all,
94            ggml_tensor *        q,
95            ggml_tensor *        k,
96            ggml_tensor *        v,
97            ggml_tensor *        g,
98            ggml_tensor *        b,
99            ggml_tensor *        s,
100            int                  il);
101};
102
103struct llm_build_rwkv6_base : public llm_graph_context {
104    const llama_model & model;
105
106    llm_build_rwkv6_base(const llama_model & model, const llm_graph_params & params);
107
108    virtual ~llm_build_rwkv6_base() = default;
109
110    ggml_tensor * build_rwkv6_channel_mix(const llama_layer * layer,
111                                          ggml_tensor *       cur,
112                                          ggml_tensor *       x_prev,
113                                          llm_arch            arch) const;
114
115    ggml_tensor * build_rwkv6_time_mix(llm_graph_input_rs * inp,
116                                       ggml_tensor *        cur,
117                                       ggml_tensor *        x_prev,
118                                       const llama_ubatch & ubatch,
119                                       int                  il) const;
120};
121
122// Base class for RWKV7-related models
123struct llm_build_rwkv7_base : public llm_graph_context {
124    const llama_model & model;
125
126    llm_build_rwkv7_base(const llama_model & model, const llm_graph_params & params);
127
128    virtual ~llm_build_rwkv7_base() = default;
129
130    // RWKV7-specific graph building methods
131    ggml_tensor * build_rwkv7_channel_mix(const llama_layer * layer,
132                                          ggml_tensor *       cur,
133                                          ggml_tensor *       x_prev,
134                                          llm_arch            arch) const;
135    ggml_tensor * build_rwkv7_time_mix(llm_graph_input_rs * inp,
136                                       ggml_tensor *        cur,
137                                       ggml_tensor *        x_prev,
138                                       ggml_tensor *&       first_layer_value,
139                                       const llama_ubatch & ubatch,
140                                       int                  il) const;
141};
142
143//
144// models
145//
146
147struct llama_model_llama : public llama_model_base {
148    llama_model_llama(const struct llama_model_params & params) : llama_model_base(params) {}
149    void load_arch_hparams(llama_model_loader & ml) override;
150    void load_arch_tensors(llama_model_loader & ml) override;
151
152    template <bool embed>
153    struct graph : public llm_graph_context {
154        graph(const llama_model & model, const llm_graph_params & params);
155    };
156
157    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
158};
159
160
161struct llama_model_llama4 : public llama_model_base {
162    llama_model_llama4(const struct llama_model_params & params) : llama_model_base(params) {}
163    void load_arch_hparams(llama_model_loader & ml) override;
164    void load_arch_tensors(llama_model_loader & ml) override;
165
166    template <bool iswa>
167    struct graph : public llm_graph_context {
168        graph(const llama_model & model, const llm_graph_params & params);
169    };
170
171    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
172};
173
174
175struct llama_model_llama_embed : public llama_model_llama {
176    llama_model_llama_embed(const struct llama_model_params & params) : llama_model_llama(params) {}
177    // reuse load_arch_hparams and load_arch_tensors from llama_model_llama
178
179    template <bool embed>
180    using graph = llama_model_llama::graph<embed>;
181
182    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
183};
184
185
186struct llama_model_maincoder : public llama_model_base {
187    llama_model_maincoder(const struct llama_model_params & params) : llama_model_base(params) {}
188    void load_arch_hparams(llama_model_loader & ml) override;
189    void load_arch_tensors(llama_model_loader & ml) override;
190
191    struct graph : public llm_graph_context {
192        graph(const llama_model & model, const llm_graph_params & params);
193    };
194
195    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
196};
197
198
199struct llama_model_talkie : public llama_model_base {
200    llama_model_talkie(const struct llama_model_params & params) : llama_model_base(params) {}
201    void load_arch_hparams(llama_model_loader & ml) override;
202    void load_arch_tensors(llama_model_loader & ml) override;
203
204    struct graph : public llm_graph_context {
205        graph(const llama_model & model, const llm_graph_params & params);
206    };
207
208    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
209};
210
211
212struct llama_model_deci : public llama_model_base {
213    llama_model_deci(const struct llama_model_params & params) : llama_model_base(params) {}
214    void load_arch_hparams(llama_model_loader & ml) override;
215    void load_arch_tensors(llama_model_loader & ml) override;
216
217    struct graph : public llm_graph_context {
218        graph(const llama_model & model, const llm_graph_params & params);
219    };
220
221    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
222};
223
224
225struct llama_model_baichuan : public llama_model_base {
226    llama_model_baichuan(const struct llama_model_params & params) : llama_model_base(params) {}
227    void load_arch_hparams(llama_model_loader & ml) override;
228    void load_arch_tensors(llama_model_loader & ml) override;
229
230    struct graph : public llm_graph_context {
231        graph(const llama_model & model, const llm_graph_params & params);
232    };
233
234    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
235};
236
237
238struct llama_model_falcon : public llama_model_base {
239    llama_model_falcon(const struct llama_model_params & params) : llama_model_base(params) {}
240    void load_arch_hparams(llama_model_loader & ml) override;
241    void load_arch_tensors(llama_model_loader & ml) override;
242
243    struct graph : public llm_graph_context {
244        graph(const llama_model & model, const llm_graph_params & params);
245    };
246
247    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
248};
249
250
251struct llama_model_grok : public llama_model_base {
252    llama_model_grok(const struct llama_model_params & params) : llama_model_base(params) {}
253    void load_arch_hparams(llama_model_loader & ml) override;
254    void load_arch_tensors(llama_model_loader & ml) override;
255
256    struct graph : public llm_graph_context {
257        graph(const llama_model & model, const llm_graph_params & params);
258    };
259
260    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
261};
262
263
264struct llama_model_starcoder : public llama_model_base {
265    llama_model_starcoder(const struct llama_model_params & params) : llama_model_base(params) {}
266    void load_arch_hparams(llama_model_loader & ml) override;
267    void load_arch_tensors(llama_model_loader & ml) override;
268
269    struct graph : public llm_graph_context {
270        graph(const llama_model & model, const llm_graph_params & params);
271    };
272
273    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
274};
275
276
277struct llama_model_refact : public llama_model_base {
278    llama_model_refact(const struct llama_model_params & params) : llama_model_base(params) {}
279    void load_arch_hparams(llama_model_loader & ml) override;
280    void load_arch_tensors(llama_model_loader & ml) override;
281
282    struct graph : public llm_graph_context {
283        graph(const llama_model & model, const llm_graph_params & params);
284    };
285
286    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
287};
288
289
290struct llama_model_bert : public llama_model_base {
291    llama_model_bert(const struct llama_model_params & params) : llama_model_base(params) {}
292    void load_arch_hparams(llama_model_loader & ml) override;
293    void load_arch_tensors(llama_model_loader & ml) override;
294
295    struct graph : public llm_graph_context {
296        graph(const llama_model & model, const llm_graph_params & params);
297    };
298
299    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
300};
301
302
303struct llama_model_jina_bert_v2 : public llama_model_base {
304    llama_model_jina_bert_v2(const struct llama_model_params & params) : llama_model_base(params) {}
305    void load_arch_hparams(llama_model_loader & ml) override;
306    void load_arch_tensors(llama_model_loader & ml) override;
307
308    using graph = llama_model_bert::graph;
309
310    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
311};
312
313
314struct llama_model_jina_bert_v3 : public llama_model_base {
315    llama_model_jina_bert_v3(const struct llama_model_params & params) : llama_model_base(params) {}
316    void load_arch_hparams(llama_model_loader & ml) override;
317    void load_arch_tensors(llama_model_loader & ml) override;
318
319    using graph = llama_model_bert::graph;
320
321    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
322};
323
324
325struct llama_model_nomic_bert : public llama_model_base {
326    llama_model_nomic_bert(const struct llama_model_params & params) : llama_model_base(params) {}
327    void load_arch_hparams(llama_model_loader & ml) override;
328    void load_arch_tensors(llama_model_loader & ml) override;
329
330    using graph = llama_model_bert::graph;
331
332    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
333};
334
335
336struct llama_model_nomic_bert_moe : public llama_model_base {
337    llama_model_nomic_bert_moe(const struct llama_model_params & params) : llama_model_base(params) {}
338    void load_arch_hparams(llama_model_loader & ml) override;
339    void load_arch_tensors(llama_model_loader & ml) override;
340
341    using graph = llama_model_bert::graph;
342
343    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
344};
345
346
347struct llama_model_modern_bert : public llama_model_base {
348    llama_model_modern_bert(const struct llama_model_params & params) : llama_model_base(params) {}
349    void load_arch_hparams(llama_model_loader & ml) override;
350    void load_arch_tensors(llama_model_loader & ml) override;
351
352    struct graph : public llm_graph_context {
353        graph(const llama_model & model, const llm_graph_params & params);
354    };
355
356    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
357};
358
359
360struct llama_model_neo_bert : public llama_model_base {
361    llama_model_neo_bert(const struct llama_model_params & params) : llama_model_base(params) {}
362    void load_arch_hparams(llama_model_loader & ml) override;
363    void load_arch_tensors(llama_model_loader & ml) override;
364
365    struct graph : public llm_graph_context {
366        graph(const llama_model & model, const llm_graph_params & params);
367    };
368
369    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
370};
371
372
373struct llama_model_eurobert : public llama_model_base {
374    llama_model_eurobert(const struct llama_model_params & params) : llama_model_base(params) {}
375    void load_arch_hparams(llama_model_loader & ml) override;
376    void load_arch_tensors(llama_model_loader & ml) override;
377
378    struct graph : public llm_graph_context {
379        graph(const llama_model & model, const llm_graph_params & params);
380    };
381
382    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
383};
384
385
386struct llama_model_bloom : public llama_model_base {
387    llama_model_bloom(const struct llama_model_params & params) : llama_model_base(params) {}
388    void load_arch_hparams(llama_model_loader & ml) override;
389    void load_arch_tensors(llama_model_loader & ml) override;
390
391    struct graph : public llm_graph_context {
392        graph(const llama_model & model, const llm_graph_params & params);
393    };
394
395    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
396};
397
398
399// Quant-only stub for mmproj GGUFs
400// none of these are ever called, they only exist to satisfy the llama_model_base interface
401struct llama_model_clip : public llama_model_base {
402    llama_model_clip(const struct llama_model_params & params) : llama_model_base(params) {}
403
404    [[noreturn]]
405    void load_arch_hparams(llama_model_loader & ml) override;
406
407    [[noreturn]]
408    void load_arch_tensors(llama_model_loader & ml) override;
409
410    [[noreturn]]
411    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
412};
413
414
415struct llama_model_mpt : public llama_model_base {
416    llama_model_mpt(const struct llama_model_params & params) : llama_model_base(params) {}
417    void load_arch_hparams(llama_model_loader & ml) override;
418    void load_arch_tensors(llama_model_loader & ml) override;
419
420    struct graph : public llm_graph_context {
421        graph(const llama_model & model, const llm_graph_params & params);
422    };
423
424    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
425};
426
427
428struct llama_model_stablelm : public llama_model_base {
429    llama_model_stablelm(const struct llama_model_params & params) : llama_model_base(params) {}
430    void load_arch_hparams(llama_model_loader & ml) override;
431    void load_arch_tensors(llama_model_loader & ml) override;
432
433    struct graph : public llm_graph_context {
434        graph(const llama_model & model, const llm_graph_params & params);
435    };
436
437    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
438};
439
440struct llama_model_mellum : public llama_model_base {
441    llama_model_mellum(const struct llama_model_params & params) : llama_model_base(params) {}
442    void load_arch_hparams(llama_model_loader & ml) override;
443    void load_arch_tensors(llama_model_loader & ml) override;
444
445    template <bool iswa>
446    struct graph : public llm_graph_context {
447        graph(const llama_model & model, const llm_graph_params & params);
448    };
449
450    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
451};
452
453struct llama_model_nanbeige : public llama_model_base {
454    llama_model_nanbeige(const struct llama_model_params & params) : llama_model_base(params) {}
455    void load_arch_hparams(llama_model_loader & ml) override;
456    void load_arch_tensors(llama_model_loader & ml) override;
457
458    int  n_loops = 1;
459    int  n_layer_phys = 0;
460    bool skip_loop_final_norm = false;
461
462    struct graph : public llm_graph_context {
463        graph(const llama_model & model, const llm_graph_params & params);
464    };
465
466    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
467};
468
469struct llama_model_qwen : public llama_model_base {
470    llama_model_qwen(const struct llama_model_params & params) : llama_model_base(params) {}
471    void load_arch_hparams(llama_model_loader & ml) override;
472    void load_arch_tensors(llama_model_loader & ml) override;
473
474    struct graph : public llm_graph_context {
475        graph(const llama_model & model, const llm_graph_params & params);
476    };
477
478    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
479};
480
481
482struct llama_model_qwen2 : public llama_model_base {
483    llama_model_qwen2(const struct llama_model_params & params) : llama_model_base(params) {}
484    void load_arch_hparams(llama_model_loader & ml) override;
485    void load_arch_tensors(llama_model_loader & ml) override;
486
487    struct graph : public llm_graph_context {
488        graph(const llama_model & model, const llm_graph_params & params);
489    };
490
491    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
492};
493
494
495struct llama_model_dream : public llama_model_base {
496    llama_model_dream(const struct llama_model_params & params) : llama_model_base(params) {}
497    void load_arch_hparams(llama_model_loader & ml) override;
498    void load_arch_tensors(llama_model_loader & ml) override;
499
500    struct graph : public llm_graph_context {
501        graph(const llama_model & model, const llm_graph_params & params);
502    };
503
504    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
505};
506
507
508struct llama_model_llada : public llama_model_base {
509    llama_model_llada(const struct llama_model_params & params) : llama_model_base(params) {}
510    void load_arch_hparams(llama_model_loader & ml) override;
511    void load_arch_tensors(llama_model_loader & ml) override;
512
513    struct graph : public llm_graph_context {
514        graph(const llama_model & model, const llm_graph_params & params);
515    };
516
517    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
518};
519
520
521struct llama_model_llada_moe : public llama_model_base {
522    llama_model_llada_moe(const struct llama_model_params & params) : llama_model_base(params) {}
523    void load_arch_hparams(llama_model_loader & ml) override;
524    void load_arch_tensors(llama_model_loader & ml) override;
525
526    struct graph : public llm_graph_context {
527        graph(const llama_model & model, const llm_graph_params & params);
528    };
529
530    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
531};
532
533
534struct llama_model_rnd1 : public llama_model_base {
535    llama_model_rnd1(const struct llama_model_params & params) : llama_model_base(params) {}
536    void load_arch_hparams(llama_model_loader & ml) override;
537    void load_arch_tensors(llama_model_loader & ml) override;
538
539    struct graph : public llm_graph_context {
540        graph(const llama_model & model, const llm_graph_params & params);
541    };
542
543    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
544};
545
546
547struct llama_model_qwen2vl : public llama_model_base {
548    llama_model_qwen2vl(const struct llama_model_params & params) : llama_model_base(params) {}
549    void load_arch_hparams(llama_model_loader & ml) override;
550    void load_arch_tensors(llama_model_loader & ml) override;
551
552    struct graph : public llm_graph_context {
553        graph(const llama_model & model, const llm_graph_params & params);
554    };
555
556    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
557};
558
559
560struct llama_model_qwen2moe : public llama_model_base {
561    llama_model_qwen2moe(const struct llama_model_params & params) : llama_model_base(params) {}
562    void load_arch_hparams(llama_model_loader & ml) override;
563    void load_arch_tensors(llama_model_loader & ml) override;
564
565    struct graph : public llm_graph_context {
566        graph(const llama_model & model, const llm_graph_params & params);
567    };
568
569    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
570};
571
572
573struct llama_model_qwen3 : public llama_model_base {
574    llama_model_qwen3(const struct llama_model_params & params) : llama_model_base(params) {}
575    void load_arch_hparams(llama_model_loader & ml) override;
576    void load_arch_tensors(llama_model_loader & ml) override;
577
578    struct graph : public llm_graph_context {
579        graph(const llama_model & model, const llm_graph_params & params);
580    };
581
582    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
583};
584
585
586struct llama_model_qwen3moe : public llama_model_base {
587    llama_model_qwen3moe(const struct llama_model_params & params) : llama_model_base(params) {}
588    void load_arch_hparams(llama_model_loader & ml) override;
589    void load_arch_tensors(llama_model_loader & ml) override;
590
591    struct graph : public llm_graph_context {
592        graph(const llama_model & model, const llm_graph_params & params);
593    };
594
595    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
596};
597
598
599struct llama_model_qwen3vl : public llama_model_base {
600    llama_model_qwen3vl(const struct llama_model_params & params) : llama_model_base(params) {}
601    void load_arch_hparams(llama_model_loader & ml) override;
602    void load_arch_tensors(llama_model_loader & ml) override;
603
604    struct graph : public llm_graph_context {
605        graph(const llama_model & model, const llm_graph_params & params);
606    };
607
608    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
609};
610
611
612struct llama_model_qwen3vlmoe : public llama_model_base {
613    llama_model_qwen3vlmoe(const struct llama_model_params & params) : llama_model_base(params) {}
614    void load_arch_hparams(llama_model_loader & ml) override;
615    void load_arch_tensors(llama_model_loader & ml) override;
616
617    struct graph : public llm_graph_context {
618        graph(const llama_model & model, const llm_graph_params & params);
619    };
620
621    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
622};
623
624
625struct llama_model_qwen3tts : public llama_model_qwen3vl {
626    llama_model_qwen3tts(const struct llama_model_params & params) : llama_model_qwen3vl(params) {}
627};
628
629
630struct llama_model_phi2 : public llama_model_base {
631    llama_model_phi2(const struct llama_model_params & params) : llama_model_base(params) {}
632    void load_arch_hparams(llama_model_loader & ml) override;
633    void load_arch_tensors(llama_model_loader & ml) override;
634
635    struct graph : public llm_graph_context {
636        graph(const llama_model & model, const llm_graph_params & params);
637    };
638
639    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
640};
641
642
643struct llama_model_phi3 : public llama_model_base {
644    llama_model_phi3(const struct llama_model_params & params) : llama_model_base(params) {}
645    void load_arch_hparams(llama_model_loader & ml) override;
646    void load_arch_tensors(llama_model_loader & ml) override;
647
648    template <bool iswa>
649    struct graph : public llm_graph_context {
650        graph(const llama_model & model, const llm_graph_params & params);
651    };
652
653    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
654};
655
656
657struct llama_model_phimoe : public llama_model_base {
658    llama_model_phimoe(const struct llama_model_params & params) : llama_model_base(params) {}
659    void load_arch_hparams(llama_model_loader & ml) override;
660    void load_arch_tensors(llama_model_loader & ml) override;
661
662    template <bool iswa>
663    using graph = llama_model_phi3::graph<iswa>;
664
665    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
666};
667
668
669struct llama_model_plamo : public llama_model_base {
670    llama_model_plamo(const struct llama_model_params & params) : llama_model_base(params) {}
671    void load_arch_hparams(llama_model_loader & ml) override;
672    void load_arch_tensors(llama_model_loader & ml) override;
673
674    struct graph : public llm_graph_context {
675        graph(const llama_model & model, const llm_graph_params & params);
676    };
677
678    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
679};
680
681
682struct llama_model_plamo2 : public llama_model_base {
683    llama_model_plamo2(const struct llama_model_params & params) : llama_model_base(params) {}
684    void load_arch_hparams(llama_model_loader & ml) override;
685    void load_arch_tensors(llama_model_loader & ml) override;
686
687    struct graph : public llm_build_mamba_base {
688        graph(const llama_model & model, const llm_graph_params & params);
689        private:
690            ggml_tensor * build_plamo2_mamba_layer(llm_graph_input_rs * inp, ggml_tensor * cur, const llama_model & model, const llama_ubatch & ubatch, int il);
691            ggml_tensor * build_plamo2_attn_layer(llm_graph_input_attn_kv * inp, ggml_tensor * inp_pos, ggml_tensor * cur,
692                                                    const llama_model & model, int il);
693    };
694
695    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
696};
697
698
699struct llama_model_plamo3 : public llama_model_base {
700    llama_model_plamo3(const struct llama_model_params & params) : llama_model_base(params) {}
701    void load_arch_hparams(llama_model_loader & ml) override;
702    void load_arch_tensors(llama_model_loader & ml) override;
703
704    template <bool iswa>
705    struct graph : public llm_graph_context {
706        graph(const llama_model & model, const llm_graph_params & params);
707    };
708
709    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
710};
711
712
713struct llama_model_gpt2 : public llama_model_base {
714    llama_model_gpt2(const struct llama_model_params & params) : llama_model_base(params) {}
715    void load_arch_hparams(llama_model_loader & ml) override;
716    void load_arch_tensors(llama_model_loader & ml) override;
717
718    struct graph : public llm_graph_context {
719        graph(const llama_model & model, const llm_graph_params & params);
720    };
721
722    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
723};
724
725
726struct llama_model_pockettts : public llama_model_base {
727    llama_model_pockettts(const struct llama_model_params & params) : llama_model_base(params) {}
728    void load_arch_hparams(llama_model_loader & ml) override;
729    void load_arch_tensors(llama_model_loader & ml) override;
730
731    struct graph : public llm_graph_context {
732        graph(const llama_model & model, const llm_graph_params & params);
733    };
734
735    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
736};
737
738
739struct llama_model_codeshell : public llama_model_base {
740    llama_model_codeshell(const struct llama_model_params & params) : llama_model_base(params) {}
741    void load_arch_hparams(llama_model_loader & ml) override;
742    void load_arch_tensors(llama_model_loader & ml) override;
743
744    struct graph : public llm_graph_context {
745        graph(const llama_model & model, const llm_graph_params & params);
746    };
747
748    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
749};
750
751
752struct llama_model_orion : public llama_model_base {
753    llama_model_orion(const struct llama_model_params & params) : llama_model_base(params) {}
754    void load_arch_hparams(llama_model_loader & ml) override;
755    void load_arch_tensors(llama_model_loader & ml) override;
756
757    struct graph : public llm_graph_context {
758        graph(const llama_model & model, const llm_graph_params & params);
759    };
760
761    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
762};
763
764
765struct llama_model_internlm2 : public llama_model_base {
766    llama_model_internlm2(const struct llama_model_params & params) : llama_model_base(params) {}
767    void load_arch_hparams(llama_model_loader & ml) override;
768    void load_arch_tensors(llama_model_loader & ml) override;
769
770    struct graph : public llm_graph_context {
771        graph(const llama_model & model, const llm_graph_params & params);
772    };
773
774    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
775};
776
777
778struct llama_model_minicpm3 : public llama_model_base {
779    llama_model_minicpm3(const struct llama_model_params & params) : llama_model_base(params) {}
780    void load_arch_hparams(llama_model_loader & ml) override;
781    void load_arch_tensors(llama_model_loader & ml) override;
782
783    struct graph : public llm_graph_context {
784        graph(const llama_model & model, const llm_graph_params & params);
785    };
786
787    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
788};
789
790
791struct llama_model_gemma : public llama_model_base {
792    llama_model_gemma(const struct llama_model_params & params) : llama_model_base(params) {}
793    void load_arch_hparams(llama_model_loader & ml) override;
794    void load_arch_tensors(llama_model_loader & ml) override;
795
796    struct graph : public llm_graph_context {
797        graph(const llama_model & model, const llm_graph_params & params);
798    };
799
800    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
801};
802
803
804struct llama_model_gemma2 : public llama_model_base {
805    llama_model_gemma2(const struct llama_model_params & params) : llama_model_base(params) {}
806    void load_arch_hparams(llama_model_loader & ml) override;
807    void load_arch_tensors(llama_model_loader & ml) override;
808
809    struct graph : public llm_graph_context {
810        graph(const llama_model & model, const llm_graph_params & params);
811    };
812
813    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
814};
815
816
817struct llama_model_gemma3 : public llama_model_base {
818    llama_model_gemma3(const struct llama_model_params & params) : llama_model_base(params) {}
819    void load_arch_hparams(llama_model_loader & ml) override;
820    void load_arch_tensors(llama_model_loader & ml) override;
821
822    template <bool iswa>
823    struct graph : public llm_graph_context {
824        graph(const llama_model & model, const llm_graph_params & params);
825    };
826
827    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
828};
829
830
831struct llama_model_gemma3n : public llama_model_base {
832    llama_model_gemma3n(const struct llama_model_params & params) : llama_model_base(params) {}
833    void load_arch_hparams(llama_model_loader & ml) override;
834    void load_arch_tensors(llama_model_loader & ml) override;
835
836    struct graph : public llm_graph_context {
837        const llama_model & model;
838
839        const int64_t n_embd_head;
840        const int64_t n_embd_altup;
841        const int64_t n_altup;
842        const int     i_altup_act;
843        const int     n_layer_sparsity = 10; // number of layers using activation sparsity
844        const float   f_sparsity_std_mul = 1.6448533535003662f; // std_multiplier = normal_dist.icdf(0.95)
845
846        graph(const llama_model & model, const llm_graph_params & params);
847        ggml_tensor * calc_magnitude(ggml_tensor * x);
848
849        // TODO: refactor in common "per-layer" functionality [TAG_PER_LAYER]
850        ggml_tensor * build_inp_per_layer();
851        ggml_tensor * project_per_layer_inputs(ggml_tensor * inp_batch, ggml_tensor * inp_per_layer);
852
853        ggml_tensor * gaussian_topk(ggml_tensor * x);
854        ggml_tensor * altup_compute_router_modalities(ggml_tensor * x, int il);
855        ggml_tensor * altup_predict(ggml_tensor * cur, int il);
856        ggml_tensor * laurel(ggml_tensor * cur, int il);
857        ggml_tensor * altup_correct(ggml_tensor * predictions, ggml_tensor * activated, int il);
858    };
859
860    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
861};
862
863
864struct llama_model_gemma4 : public llama_model_base {
865    llama_model_gemma4(const struct llama_model_params & params) : llama_model_base(params) {}
866    void load_arch_hparams(llama_model_loader & ml) override;
867    void load_arch_tensors(llama_model_loader & ml) override;
868
869    struct graph : public llm_graph_context {
870        const llama_model & model;
871
872        const int64_t n_embd_per_layer;
873
874        graph(const llama_model & model, const llm_graph_params & params);
875
876        // TODO: refactor in common "per-layer" functionality [TAG_PER_LAYER]
877        ggml_tensor * build_inp_per_layer();
878        ggml_tensor * project_per_layer_inputs(ggml_tensor * inp_batch, ggml_tensor * inp_per_layer);
879    };
880
881    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
882};
883
884
885struct llama_model_gemma4_assistant : public llama_model_base {
886    llama_model_gemma4_assistant(const struct llama_model_params & params) : llama_model_base(params) {}
887    void load_arch_hparams(llama_model_loader & ml) override;
888    void load_arch_tensors(llama_model_loader & ml) override;
889
890    struct graph : public llm_graph_context {
891        graph(const llama_model & model, const llm_graph_params & params);
892    };
893
894    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
895};
896
897
898struct llama_model_gemma_embedding : public llama_model_base {
899    llama_model_gemma_embedding(const struct llama_model_params & params) : llama_model_base(params) {}
900    void load_arch_hparams(llama_model_loader & ml) override;
901    void load_arch_tensors(llama_model_loader & ml) override;
902
903    struct graph : public llm_graph_context {
904        graph(const llama_model & model, const llm_graph_params & params);
905    };
906
907    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
908};
909
910
911struct llama_model_starcoder2 : public llama_model_base {
912    llama_model_starcoder2(const struct llama_model_params & params) : llama_model_base(params) {}
913    void load_arch_hparams(llama_model_loader & ml) override;
914    void load_arch_tensors(llama_model_loader & ml) override;
915
916    struct graph : public llm_graph_context {
917        graph(const llama_model & model, const llm_graph_params & params);
918    };
919
920    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
921};
922
923
924struct llama_model_mamba : public llama_model_base {
925    llama_model_mamba(const struct llama_model_params & params) : llama_model_base(params) {}
926    void load_arch_hparams(llama_model_loader & ml) override;
927    void load_arch_tensors(llama_model_loader & ml) override;
928
929    struct graph : public llm_build_mamba_base {
930        graph(const llama_model & model, const llm_graph_params & params);
931    };
932
933    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
934};
935
936
937struct llama_model_mamba2 : public llama_model_base {
938    llama_model_mamba2(const struct llama_model_params & params) : llama_model_base(params) {}
939    void load_arch_hparams(llama_model_loader & ml) override;
940    void load_arch_tensors(llama_model_loader & ml) override;
941
942    using graph = llama_model_mamba::graph;
943
944    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
945};
946
947
948struct llama_model_maple : public llama_model_base {
949    llama_model_maple(const struct llama_model_params & params) : llama_model_base(params) {}
950    void load_arch_hparams(llama_model_loader & ml) override;
951    void load_arch_tensors(llama_model_loader & ml) override;
952
953    struct graph : public llm_graph_context {
954        graph(const llama_model & model, const llm_graph_params & params);
955    };
956
957    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
958};
959
960
961struct llama_model_jamba : public llama_model_base {
962    llama_model_jamba(const struct llama_model_params & params) : llama_model_base(params) {}
963    void load_arch_hparams(llama_model_loader & ml) override;
964    void load_arch_tensors(llama_model_loader & ml) override;
965
966    struct graph : public llm_build_mamba_base {
967        graph(const llama_model & model, const llm_graph_params & params);
968    };
969
970    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
971};
972
973
974struct llama_model_xverse : public llama_model_base {
975    llama_model_xverse(const struct llama_model_params & params) : llama_model_base(params) {}
976    void load_arch_hparams(llama_model_loader & ml) override;
977    void load_arch_tensors(llama_model_loader & ml) override;
978
979    struct graph : public llm_graph_context {
980        graph(const llama_model & model, const llm_graph_params & params);
981    };
982
983    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
984};
985
986
987struct llama_model_command_r : public llama_model_base {
988    llama_model_command_r(const struct llama_model_params & params) : llama_model_base(params) {}
989    void load_arch_hparams(llama_model_loader & ml) override;
990    void load_arch_tensors(llama_model_loader & ml) override;
991
992    struct graph : public llm_graph_context {
993        graph(const llama_model & model, const llm_graph_params & params);
994    };
995
996    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
997};
998
999
1000struct llama_model_cohere2 : public llama_model_base {
1001    llama_model_cohere2(const struct llama_model_params & params) : llama_model_base(params) {}
1002    void load_arch_hparams(llama_model_loader & ml) override;
1003    void load_arch_tensors(llama_model_loader & ml) override;
1004
1005    struct graph : public llm_graph_context {
1006        graph(const llama_model & model, const llm_graph_params & params);
1007    };
1008
1009    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1010};
1011
1012
1013struct llama_model_cohere2moe : public llama_model_base {
1014    llama_model_cohere2moe(const struct llama_model_params & params) : llama_model_base(params) {}
1015    void load_arch_hparams(llama_model_loader & ml) override;
1016    void load_arch_tensors(llama_model_loader & ml) override;
1017
1018    struct graph : public llm_graph_context {
1019        graph(const llama_model & model, const llm_graph_params & params);
1020    };
1021
1022    struct graph_mtp : public llm_graph_context {
1023        graph_mtp(const llama_model & model, const llm_graph_params & params);
1024    };
1025
1026    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1027};
1028
1029
1030struct llama_model_dbrx : public llama_model_base {
1031    llama_model_dbrx(const struct llama_model_params & params) : llama_model_base(params) {}
1032    void load_arch_hparams(llama_model_loader & ml) override;
1033    void load_arch_tensors(llama_model_loader & ml) override;
1034
1035    struct graph : public llm_graph_context {
1036        graph(const llama_model & model, const llm_graph_params & params);
1037    };
1038
1039    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1040};
1041
1042
1043struct llama_model_olmo : public llama_model_base {
1044    llama_model_olmo(const struct llama_model_params & params) : llama_model_base(params) {}
1045    void load_arch_hparams(llama_model_loader & ml) override;
1046    void load_arch_tensors(llama_model_loader & ml) override;
1047
1048    struct graph : public llm_graph_context {
1049        graph(const llama_model & model, const llm_graph_params & params);
1050    };
1051
1052    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1053};
1054
1055
1056struct llama_model_olmo2 : public llama_model_base {
1057    llama_model_olmo2(const struct llama_model_params & params) : llama_model_base(params) {}
1058    void load_arch_hparams(llama_model_loader & ml) override;
1059    void load_arch_tensors(llama_model_loader & ml) override;
1060
1061    template <bool iswa>
1062    struct graph : public llm_graph_context {
1063        graph(const llama_model & model, const llm_graph_params & params);
1064    };
1065
1066    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1067};
1068
1069
1070struct llama_model_olmoe : public llama_model_base {
1071    llama_model_olmoe(const struct llama_model_params & params) : llama_model_base(params) {}
1072    void load_arch_hparams(llama_model_loader & ml) override;
1073    void load_arch_tensors(llama_model_loader & ml) override;
1074
1075    struct graph : public llm_graph_context {
1076        graph(const llama_model & model, const llm_graph_params & params);
1077    };
1078
1079    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1080};
1081
1082
1083struct llama_model_muse_glimmer : public llama_model_base {
1084    llama_model_muse_glimmer(const struct llama_model_params & params) : llama_model_base(params) {}
1085    void load_arch_hparams(llama_model_loader & ml) override;
1086    void load_arch_tensors(llama_model_loader & ml) override;
1087
1088    struct graph : public llm_graph_context {
1089        graph(const llama_model & model, const llm_graph_params & params);
1090    };
1091
1092    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1093};
1094
1095
1096struct llama_model_openelm : public llama_model_base {
1097    llama_model_openelm(const struct llama_model_params & params) : llama_model_base(params) {}
1098    void load_arch_hparams(llama_model_loader & ml) override;
1099    void load_arch_tensors(llama_model_loader & ml) override;
1100
1101    struct graph : public llm_graph_context {
1102        graph(const llama_model & model, const llm_graph_params & params);
1103    };
1104
1105    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1106};
1107
1108
1109struct llama_model_gptneox : public llama_model_base {
1110    llama_model_gptneox(const struct llama_model_params & params) : llama_model_base(params) {}
1111    void load_arch_hparams(llama_model_loader & ml) override;
1112    void load_arch_tensors(llama_model_loader & ml) override;
1113
1114    struct graph : public llm_graph_context {
1115        graph(const llama_model & model, const llm_graph_params & params);
1116    };
1117
1118    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1119};
1120
1121
1122struct llama_model_arctic : public llama_model_base {
1123    llama_model_arctic(const struct llama_model_params & params) : llama_model_base(params) {}
1124    void load_arch_hparams(llama_model_loader & ml) override;
1125    void load_arch_tensors(llama_model_loader & ml) override;
1126
1127    struct graph : public llm_graph_context {
1128        graph(const llama_model & model, const llm_graph_params & params);
1129    };
1130
1131    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1132};
1133
1134
1135struct llama_model_deepseek : public llama_model_base {
1136    llama_model_deepseek(const struct llama_model_params & params) : llama_model_base(params) {}
1137    void load_arch_hparams(llama_model_loader & ml) override;
1138    void load_arch_tensors(llama_model_loader & ml) override;
1139
1140    struct graph : public llm_graph_context {
1141        graph(const llama_model & model, const llm_graph_params & params);
1142    };
1143
1144    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1145};
1146
1147
1148struct llama_model_deepseek2 : public llama_model_base {
1149    llama_model_deepseek2(const struct llama_model_params & params) : llama_model_base(params) {}
1150    void load_arch_hparams(llama_model_loader & ml) override;
1151    void load_arch_tensors(llama_model_loader & ml) override;
1152
1153    struct graph : public llm_graph_context {
1154        graph(const llama_model & model, const llm_graph_params & params);
1155    };
1156
1157    struct graph_mtp : public llm_graph_context {
1158        graph_mtp(const llama_model & model, const llm_graph_params & params);
1159    };
1160
1161    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1162};
1163
1164
1165struct llama_model_deepseek32 : public llama_model_base {
1166    llama_model_deepseek32(const struct llama_model_params & params) : llama_model_base(params) {}
1167    void load_arch_hparams(llama_model_loader & ml) override;
1168    void load_arch_tensors(llama_model_loader & ml) override;
1169
1170    struct graph : public llm_graph_context {
1171        graph(const llama_model & model, const llm_graph_params & params);
1172    };
1173
1174    struct graph_mtp : public llm_graph_context {
1175        graph_mtp(const llama_model & model, const llm_graph_params & params);
1176    };
1177
1178    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1179};
1180
1181
1182struct llama_model_dots3note : public llama_model_base {
1183    llama_model_dots3note(const struct llama_model_params & params) : llama_model_base(params) {}
1184    void load_arch_hparams(llama_model_loader & ml) override;
1185    void load_arch_tensors(llama_model_loader & ml) override;
1186
1187    struct graph : public llm_graph_context {
1188        graph(const llama_model & model, const llm_graph_params & params);
1189    };
1190
1191    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1192};
1193
1194struct llama_model_deepseek4 : public llama_model_base {
1195    llama_model_deepseek4(const struct llama_model_params & params) : llama_model_base(params) {}
1196    void load_arch_hparams(llama_model_loader & ml) override;
1197    void load_arch_tensors(llama_model_loader & ml) override;
1198
1199    struct graph : public llm_graph_context {
1200        graph(const llm_graph_params & params) : llm_graph_context(params) {}
1201        graph(const llama_model & model, const llm_graph_params & params);
1202
1203        ggml_tensor * build_hc_pre(
1204                ggml_tensor * x,
1205                ggml_tensor * hc_fn,
1206                ggml_tensor * hc_scale,
1207                ggml_tensor * hc_base,
1208                ggml_tensor ** post,
1209                ggml_tensor ** comb,
1210                int il) const;
1211
1212        ggml_tensor * build_hc_post(
1213                ggml_tensor * x,
1214                ggml_tensor * residual,
1215                ggml_tensor * post,
1216                ggml_tensor * comb,
1217                int il) const;
1218
1219        ggml_tensor * build_hc_head(
1220                ggml_tensor * x,
1221                ggml_tensor * hc_fn,
1222                ggml_tensor * hc_scale,
1223                ggml_tensor * hc_base) const;
1224
1225        ggml_tensor * build_attention(
1226                const llama_model & model,
1227                llm_graph_input_dsv4 * inp_dsv4,
1228                ggml_tensor * cur,
1229                ggml_tensor * inp_pos,
1230                int il) const;
1231
1232        ggml_tensor * build_attention(
1233                const llama_model & model,
1234                llm_graph_input_attn_k_iswa * inp_mtp,
1235                ggml_tensor * cur,
1236                ggml_tensor * inp_pos,
1237                int il) const;
1238
1239        ggml_tensor * build_attention_impl(
1240                const llama_model & model,
1241                llm_graph_input_dsv4 * inp_dsv4,
1242                llm_graph_input_attn_k_iswa * inp_mtp,
1243                ggml_tensor * cur,
1244                ggml_tensor * inp_pos,
1245                int il) const;
1246
1247        ggml_tensor * build_hca_compressed_kv_from_state(
1248                ggml_tensor * kv_state,
1249                ggml_tensor * score_state,
1250                ggml_tensor * state_read_idxs,
1251                ggml_tensor * comp_pos,
1252                ggml_tensor * norm,
1253                int64_t n_embd_head,
1254                const char * name,
1255                int il) const;
1256
1257        ggml_tensor * build_overlap_compressed_kv_from_state(
1258                ggml_tensor * kv_state,
1259                ggml_tensor * score_state,
1260                ggml_tensor * state_read_idxs,
1261                ggml_tensor * comp_pos,
1262                ggml_tensor * norm,
1263                int64_t ratio,
1264                int64_t n_embd_head,
1265                const char * name,
1266                int il) const;
1267
1268        ggml_tensor * build_lid_top_k(
1269                const llama_model & model,
1270                llm_graph_input_dsv4 * inp_dsv4,
1271                ggml_tensor * qr,
1272                ggml_tensor * cur,
1273                ggml_tensor * inp_pos,
1274                int il) const;
1275
1276        ggml_tensor * build_top_k_mask(
1277                ggml_tensor * kq_mask,
1278                ggml_tensor * top_k,
1279                const char * name,
1280                int il) const;
1281
1282        ggml_tensor * build_csa_lid_attention(
1283                const llama_model & model,
1284                llm_graph_input_dsv4 * inp_dsv4,
1285                llm_graph_input_dsv4_raw * inp_attn,
1286                ggml_tensor * q,
1287                ggml_tensor * kv,
1288                ggml_tensor * qr,
1289                ggml_tensor * cur,
1290                ggml_tensor * inp_pos,
1291                ggml_tensor * sinks,
1292                float kq_scale,
1293                int il) const;
1294
1295        ggml_tensor * build_hca_attention(
1296                llm_graph_input_dsv4 * inp_dsv4,
1297                llm_graph_input_dsv4_raw * inp_attn,
1298                ggml_tensor * q,
1299                ggml_tensor * kv,
1300                ggml_tensor * sinks,
1301                float kq_scale,
1302                int il) const;
1303
1304        ggml_tensor * build_raw_attention(
1305                llm_graph_input_dsv4_raw * inp_attn,
1306                ggml_tensor * q,
1307                ggml_tensor * kv,
1308                ggml_tensor * sinks,
1309                float kq_scale,
1310                int il) const;
1311
1312        ggml_tensor * build_hc_pre(
1313                ggml_tensor * x,
1314                ggml_tensor * weights,
1315                int il) const;
1316
1317        ggml_tensor * build_hc_sinkhorn(
1318                ggml_tensor * comb,
1319                int il) const;
1320    };
1321
1322    struct graph_mtp : public graph {
1323        graph_mtp(const llama_model & model, const llm_graph_params & params);
1324    };
1325
1326    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1327};
1328
1329
1330struct llama_model_deepseek2ocr : public llama_model_base {
1331    llama_model_deepseek2ocr(const struct llama_model_params & params) : llama_model_base(params) {}
1332    void load_arch_hparams(llama_model_loader & ml) override;
1333    void load_arch_tensors(llama_model_loader & ml) override;
1334
1335    using graph = llama_model_deepseek2::graph;
1336
1337    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1338};
1339
1340
1341struct llama_model_glm_dsa : public llama_model_base {
1342    llama_model_glm_dsa(const struct llama_model_params & params) : llama_model_base(params) {}
1343    void load_arch_hparams(llama_model_loader & ml) override;
1344    void load_arch_tensors(llama_model_loader & ml) override;
1345
1346    struct graph : public llm_graph_context {
1347        graph(const llama_model & model, const llm_graph_params & params);
1348    };
1349
1350    struct graph_mtp : public llm_graph_context {
1351        graph_mtp(const llama_model & model, const llm_graph_params & params);
1352    };
1353
1354    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1355};
1356
1357struct llama_model_eagle3 : public llama_model_base {
1358    llama_model_eagle3(const struct llama_model_params & params) : llama_model_base(params) {}
1359    void load_arch_hparams(llama_model_loader & ml) override;
1360    void load_arch_tensors(llama_model_loader & ml) override;
1361
1362    template <bool is_enc>
1363    struct graph : public llm_graph_context {
1364        graph(const llama_model & model, const llm_graph_params & params);
1365
1366        ggml_tensor * build_inp_embd_enc() const;
1367    };
1368
1369    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1370};
1371
1372
1373struct llama_model_dflash : public llama_model_base {
1374    llama_model_dflash(const struct llama_model_params & params) : llama_model_base(params) {}
1375    void load_arch_hparams(llama_model_loader & ml) override;
1376    void load_arch_tensors(llama_model_loader & ml) override;
1377
1378    template <bool is_enc>
1379    struct graph : public llm_graph_context {
1380        graph(const llama_model & model, const llm_graph_params & params);
1381
1382        ggml_tensor * build_inp_embd_enc() const;
1383    };
1384
1385    struct graph_dsv4 : public llama_model_deepseek4::graph {
1386        graph_dsv4(const llama_model & model, const llm_graph_params & params);
1387    };
1388
1389    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1390};
1391
1392
1393struct llama_model_mistral4 : public llama_model_deepseek2 {
1394    llama_model_mistral4(const struct llama_model_params & params) : llama_model_deepseek2(params) {}
1395    // reuse load_arch_hparams and load_arch_tensors from llama_model_deepseek2
1396
1397    using graph = llama_model_deepseek2::graph;
1398
1399    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1400};
1401
1402
1403struct llama_model_chatglm : public llama_model_base {
1404    llama_model_chatglm(const struct llama_model_params & params) : llama_model_base(params) {}
1405    void load_arch_hparams(llama_model_loader & ml) override;
1406    void load_arch_tensors(llama_model_loader & ml) override;
1407
1408    struct graph : public llm_graph_context {
1409        graph(const llama_model & model, const llm_graph_params & params);
1410    };
1411
1412    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1413};
1414
1415
1416struct llama_model_glm4 : public llama_model_base {
1417    llama_model_glm4(const struct llama_model_params & params) : llama_model_base(params) {}
1418    void load_arch_hparams(llama_model_loader & ml) override;
1419    void load_arch_tensors(llama_model_loader & ml) override;
1420
1421    struct graph : public llm_graph_context {
1422        graph(const llama_model & model, const llm_graph_params & params);
1423    };
1424
1425    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1426};
1427
1428
1429struct llama_model_glm4_moe : public llama_model_base {
1430    llama_model_glm4_moe(const struct llama_model_params & params) : llama_model_base(params) {}
1431    void load_arch_hparams(llama_model_loader & ml) override;
1432    void load_arch_tensors(llama_model_loader & ml) override;
1433
1434    struct graph : public llm_graph_context {
1435        graph(const llama_model & model, const llm_graph_params & params);
1436    };
1437
1438    struct graph_mtp : public llm_graph_context {
1439        graph_mtp(const llama_model & model, const llm_graph_params & params);
1440    };
1441
1442    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1443};
1444
1445
1446struct llama_model_bitnet : public llama_model_base {
1447    llama_model_bitnet(const struct llama_model_params & params) : llama_model_base(params) {}
1448    void load_arch_hparams(llama_model_loader & ml) override;
1449    void load_arch_tensors(llama_model_loader & ml) override;
1450
1451    struct graph : public llm_graph_context {
1452        graph(const llama_model & model, const llm_graph_params & params);
1453    };
1454
1455    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1456};
1457
1458
1459struct llama_model_t5 : public llama_model_base {
1460    llama_model_t5(const struct llama_model_params & params) : llama_model_base(params) {}
1461    void load_arch_hparams(llama_model_loader & ml) override;
1462    void load_arch_tensors(llama_model_loader & ml) override;
1463
1464    template <bool is_enc>
1465    struct graph : public llm_graph_context {
1466        graph(const llama_model & model, const llm_graph_params & params);
1467    };
1468
1469    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1470};
1471
1472
1473struct llama_model_aliceai_t5_moe : public llama_model_base {
1474    llama_model_aliceai_t5_moe(const llama_model_params & params) : llama_model_base(params) {}
1475    void load_arch_hparams(llama_model_loader & ml) override;
1476    void load_arch_tensors(llama_model_loader & ml) override;
1477
1478    uint32_t n_head_kv_enc = 0;
1479    std::vector<llama_layer> layers_enc;
1480
1481    template <bool is_enc>
1482    struct graph : public llm_graph_context {
1483        graph(const llama_model_aliceai_t5_moe & model, const llm_graph_params & params);
1484    };
1485
1486    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1487};
1488
1489
1490struct llama_model_t5encoder : public llama_model_base {
1491    llama_model_t5encoder(const struct llama_model_params & params) : llama_model_base(params) {}
1492    void load_arch_hparams(llama_model_loader & ml) override;
1493    void load_arch_tensors(llama_model_loader & ml) override;
1494
1495    using graph = llama_model_t5::graph<true>;
1496
1497    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1498};
1499
1500
1501struct llama_model_jais : public llama_model_base {
1502    llama_model_jais(const struct llama_model_params & params) : llama_model_base(params) {}
1503    void load_arch_hparams(llama_model_loader & ml) override;
1504    void load_arch_tensors(llama_model_loader & ml) override;
1505
1506    struct graph : public llm_graph_context {
1507        graph(const llama_model & model, const llm_graph_params & params);
1508    };
1509
1510    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1511};
1512
1513
1514struct llama_model_jais2 : public llama_model_base {
1515    llama_model_jais2(const struct llama_model_params & params) : llama_model_base(params) {}
1516    void load_arch_hparams(llama_model_loader & ml) override;
1517    void load_arch_tensors(llama_model_loader & ml) override;
1518
1519    struct graph : public llm_graph_context {
1520        graph(const llama_model & model, const llm_graph_params & params);
1521    };
1522
1523    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1524};
1525
1526
1527struct llama_model_nemotron : public llama_model_base {
1528    llama_model_nemotron(const struct llama_model_params & params) : llama_model_base(params) {}
1529    void load_arch_hparams(llama_model_loader & ml) override;
1530    void load_arch_tensors(llama_model_loader & ml) override;
1531
1532    struct graph : public llm_graph_context {
1533        graph(const llama_model & model, const llm_graph_params & params);
1534    };
1535
1536    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1537};
1538
1539
1540struct llama_model_nemotron_h : public llama_model_base {
1541    llama_model_nemotron_h(const struct llama_model_params & params) : llama_model_base(params) {}
1542    void load_arch_hparams(llama_model_loader & ml) override;
1543    void load_arch_tensors(llama_model_loader & ml) override;
1544
1545    struct graph : public llm_build_mamba_base {
1546        graph(const llama_model & model, const llm_graph_params & params);
1547        ggml_tensor * build_ffn_layer(ggml_tensor * cur, const llama_model & model, int il);
1548        ggml_tensor * build_attention_layer(ggml_tensor * cur, llm_graph_input_attn_kv * inp_attn,
1549            const llama_model & model, int64_t n_embd_head, int il);
1550    };
1551
1552    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1553};
1554
1555
1556struct llama_model_nemotron_h_moe : public llama_model_nemotron_h {
1557    llama_model_nemotron_h_moe(const struct llama_model_params & params) : llama_model_nemotron_h(params) {}
1558    // reuse load_arch_hparams and load_arch_tensors from llama_model_nemotron_h
1559
1560    using graph = llama_model_nemotron_h::graph;
1561
1562    struct graph_mtp : public llm_graph_context {
1563        graph_mtp(const llama_model & model, const llm_graph_params & params);
1564    };
1565
1566    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1567};
1568
1569
1570struct llama_model_exaone : public llama_model_base {
1571    llama_model_exaone(const struct llama_model_params & params) : llama_model_base(params) {}
1572    void load_arch_hparams(llama_model_loader & ml) override;
1573    void load_arch_tensors(llama_model_loader & ml) override;
1574
1575    struct graph : public llm_graph_context {
1576        graph(const llama_model & model, const llm_graph_params & params);
1577    };
1578
1579    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1580};
1581
1582
1583struct llama_model_exaone4 : public llama_model_base {
1584    llama_model_exaone4(const struct llama_model_params & params) : llama_model_base(params) {}
1585    void load_arch_hparams(llama_model_loader & ml) override;
1586    void load_arch_tensors(llama_model_loader & ml) override;
1587
1588    template <bool iswa>
1589    struct graph : public llm_graph_context {
1590        graph(const llama_model & model, const llm_graph_params & params);
1591    };
1592
1593    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1594};
1595
1596
1597struct llama_model_exaone_moe : public llama_model_base {
1598    llama_model_exaone_moe(const struct llama_model_params & params) : llama_model_base(params) {}
1599    void load_arch_hparams(llama_model_loader & ml) override;
1600    void load_arch_tensors(llama_model_loader & ml) override;
1601
1602    struct graph : public llm_graph_context {
1603        graph(const llama_model & model, const llm_graph_params & params);
1604    };
1605
1606    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1607};
1608
1609
1610struct llama_model_rwkv6 : public llama_model_base {
1611    llama_model_rwkv6(const struct llama_model_params & params) : llama_model_base(params) {}
1612    void load_arch_hparams(llama_model_loader & ml) override;
1613    void load_arch_tensors(llama_model_loader & ml) override;
1614
1615    struct graph : public llm_build_rwkv6_base {
1616        graph(const llama_model & model, const llm_graph_params & params);
1617    };
1618
1619    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1620};
1621
1622
1623struct llama_model_rwkv6qwen2 : public llama_model_base {
1624    llama_model_rwkv6qwen2(const struct llama_model_params & params) : llama_model_base(params) {}
1625    void load_arch_hparams(llama_model_loader & ml) override;
1626    void load_arch_tensors(llama_model_loader & ml) override;
1627
1628    struct graph : public llm_build_rwkv6_base {
1629        graph(const llama_model & model, const llm_graph_params & params);
1630    };
1631
1632    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1633};
1634
1635
1636struct llama_model_rwkv7 : public llama_model_base {
1637    llama_model_rwkv7(const struct llama_model_params & params) : llama_model_base(params) {}
1638    void load_arch_hparams(llama_model_loader & ml) override;
1639    void load_arch_tensors(llama_model_loader & ml) override;
1640
1641    struct graph : public llm_build_rwkv7_base {
1642        graph(const llama_model & model, const llm_graph_params & params);
1643    };
1644
1645    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1646};
1647
1648
1649struct llama_model_arwkv7 : public llama_model_base {
1650    llama_model_arwkv7(const struct llama_model_params & params) : llama_model_base(params) {}
1651    void load_arch_hparams(llama_model_loader & ml) override;
1652    void load_arch_tensors(llama_model_loader & ml) override;
1653
1654    struct graph : public llm_build_rwkv7_base {
1655        graph(const llama_model & model, const llm_graph_params & params);
1656    };
1657
1658    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1659};
1660
1661
1662struct llama_model_granite : public llama_model_base {
1663    llama_model_granite(const struct llama_model_params & params) : llama_model_base(params) {}
1664    void load_arch_hparams(llama_model_loader & ml) override;
1665    void load_arch_tensors(llama_model_loader & ml) override;
1666
1667    struct graph : public llm_graph_context {
1668        graph(const llama_model & model, const llm_graph_params & params);
1669
1670    private:
1671        ggml_tensor * build_attention_layer(
1672                  ggml_tensor             * cur,
1673                  ggml_tensor             * inp_pos,
1674                  llm_graph_input_attn_kv * inp_attn,
1675            const llama_model             & model,
1676            const int64_t                 n_embd_head,
1677            const int                     il);
1678
1679        ggml_tensor * build_layer_ffn(
1680                  ggml_tensor       * cur,
1681                  ggml_tensor       * inpSA,
1682            const llama_model       & model,
1683            const int                 il);
1684    };
1685
1686    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1687};
1688
1689
1690struct llama_model_granite_moe : public llama_model_base {
1691    llama_model_granite_moe(const struct llama_model_params & params) : llama_model_base(params) {}
1692    void load_arch_hparams(llama_model_loader & ml) override;
1693    void load_arch_tensors(llama_model_loader & ml) override;
1694
1695    using graph = llama_model_granite::graph;
1696
1697    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1698};
1699
1700
1701struct llama_model_granite_switch : public llama_model_base {
1702    llama_model_granite_switch(const struct llama_model_params & params) : llama_model_base(params) {}
1703    void load_arch_hparams(llama_model_loader & ml) override;
1704    void load_arch_tensors(llama_model_loader & ml) override;
1705
1706    uint32_t n_adapters    = 0;
1707    uint32_t max_lora_rank = 0;
1708    float    router_gain   = 15.0f;
1709
1710    std::unordered_map<llama_token, int32_t>     adapter_token_to_slot;
1711    std::unordered_map<llama_token, llama_token> adapter_token_to_substitute;
1712
1713    struct graph : public llm_graph_context {
1714        graph(const llama_model & model, const llm_graph_params & params);
1715
1716    private:
1717        ggml_tensor * build_switched_lora_delta(
1718                  ggml_tensor * lora_a,
1719                  ggml_tensor * lora_b,
1720                  ggml_tensor * cur,
1721                  ggml_tensor * ids);
1722
1723        ggml_tensor * build_switched_lora_mm(
1724                  ggml_tensor * w,
1725                  ggml_tensor * lora_a,
1726                  ggml_tensor * lora_b,
1727                  ggml_tensor * cur,
1728                  ggml_tensor * ids);
1729
1730        ggml_tensor * build_attention_layer(
1731                  ggml_tensor             * cur,
1732                  ggml_tensor             * inp_pos,
1733                  ggml_tensor             * adapter_ids,
1734                  llm_graph_input_attn_kv * inp_attn,
1735            const llama_model             & model,
1736            const int64_t                 n_embd_head,
1737            const int                     il);
1738
1739        ggml_tensor * build_layer_ffn(
1740                  ggml_tensor       * cur,
1741                  ggml_tensor       * inpSA,
1742                  ggml_tensor       * adapter_ids,
1743            const llama_model       & model,
1744            const int                 il);
1745    };
1746
1747    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1748};
1749
1750
1751struct llama_model_minicpm : public llama_model_base {
1752    llama_model_minicpm(const struct llama_model_params & params) : llama_model_base(params) {}
1753    void load_arch_hparams(llama_model_loader & ml) override;
1754    void load_arch_tensors(llama_model_loader & ml) override;
1755
1756    using graph = llama_model_granite::graph;
1757
1758    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1759};
1760
1761
1762struct llama_model_granite_hybrid : public llama_model_base {
1763    llama_model_granite_hybrid(const struct llama_model_params & params) : llama_model_base(params) {}
1764    void load_arch_hparams(llama_model_loader & ml) override;
1765    void load_arch_tensors(llama_model_loader & ml) override;
1766
1767    struct graph : public llm_build_mamba_base {
1768        graph(const llama_model & model, const llm_graph_params & params);
1769        ggml_tensor * build_layer_ffn(ggml_tensor * cur, ggml_tensor * inpSA, const llama_model & model, const int il);
1770        ggml_tensor * build_attention_layer(ggml_tensor * cur, ggml_tensor * inp_pos, llm_graph_input_attn_kv * inp_attn,
1771            const llama_model & model,const int64_t n_embd_head, const int il);
1772    };
1773
1774    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1775};
1776
1777
1778struct llama_model_granite_swa : public llama_model_base {
1779    llama_model_granite_swa(const struct llama_model_params & params) : llama_model_base(params) {}
1780    void load_arch_hparams(llama_model_loader & ml) override;
1781    void load_arch_tensors(llama_model_loader & ml) override;
1782
1783    struct graph : public llm_graph_context {
1784        graph(const llama_model & model, const llm_graph_params & params);
1785
1786    private:
1787        ggml_tensor * build_attention_layer(
1788                  ggml_tensor                  * cur,
1789                  ggml_tensor                  * inp_pos,
1790                  llm_graph_input_attn_kv_iswa * inp_attn,
1791            const llama_model                  & model,
1792            const int64_t                        n_embd_head,
1793            const int                            il);
1794
1795        ggml_tensor * build_layer_ffn(
1796                  ggml_tensor * cur,
1797                  ggml_tensor * inpSA,
1798            const llama_model & model,
1799            const int           il);
1800    };
1801
1802    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1803};
1804
1805
1806struct llama_model_chameleon : public llama_model_base {
1807    llama_model_chameleon(const struct llama_model_params & params) : llama_model_base(params) {}
1808    void load_arch_hparams(llama_model_loader & ml) override;
1809    void load_arch_tensors(llama_model_loader & ml) override;
1810
1811    struct graph : public llm_graph_context {
1812        graph(const llama_model & model, const llm_graph_params & params);
1813    };
1814
1815    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1816};
1817
1818
1819struct llama_model_wavtokenizer_dec : public llama_model_base {
1820    llama_model_wavtokenizer_dec(const struct llama_model_params & params) : llama_model_base(params) {}
1821    void load_arch_hparams(llama_model_loader & ml) override;
1822    void load_arch_tensors(llama_model_loader & ml) override;
1823
1824    struct graph : public llm_graph_context {
1825        graph(const llama_model & model, const llm_graph_params & params);
1826    };
1827
1828    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1829};
1830
1831
1832struct llama_model_plm : public llama_model_base {
1833    llama_model_plm(const struct llama_model_params & params) : llama_model_base(params) {}
1834    void load_arch_hparams(llama_model_loader & ml) override;
1835    void load_arch_tensors(llama_model_loader & ml) override;
1836
1837    struct graph : public llm_graph_context {
1838        graph(const llama_model & model, const llm_graph_params & params);
1839    };
1840
1841    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1842};
1843
1844
1845struct llama_model_bailingmoe : public llama_model_base {
1846    llama_model_bailingmoe(const struct llama_model_params & params) : llama_model_base(params) {}
1847    void load_arch_hparams(llama_model_loader & ml) override;
1848    void load_arch_tensors(llama_model_loader & ml) override;
1849
1850    struct graph : public llm_graph_context {
1851        graph(const llama_model & model, const llm_graph_params & params);
1852    };
1853
1854    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1855};
1856
1857
1858struct llama_model_bailingmoe2 : public llama_model_base {
1859    llama_model_bailingmoe2(const struct llama_model_params & params) : llama_model_base(params) {}
1860    void load_arch_hparams(llama_model_loader & ml) override;
1861    void load_arch_tensors(llama_model_loader & ml) override;
1862
1863    struct graph : public llm_graph_context {
1864        graph(const llama_model & model, const llm_graph_params & params);
1865    };
1866
1867    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1868};
1869
1870
1871struct llama_model_bailingmoe3 : public llama_model_base {
1872    llama_model_bailingmoe3(const struct llama_model_params & params) : llama_model_base(params) {}
1873    void load_arch_hparams(llama_model_loader & ml) override;
1874    void load_arch_tensors(llama_model_loader & ml) override;
1875
1876    struct graph : public llm_build_delta_net_base {
1877        graph(const llama_model & model, const llm_graph_params & params);
1878
1879        const llama_model & model;
1880    };
1881
1882    struct graph_mtp : public llm_graph_context {
1883        graph_mtp(const llama_model & model, const llm_graph_params & params);
1884    };
1885
1886    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1887};
1888
1889
1890struct llama_model_seed_oss : public llama_model_base {
1891    llama_model_seed_oss(const struct llama_model_params & params) : llama_model_base(params) {}
1892    void load_arch_hparams(llama_model_loader & ml) override;
1893    void load_arch_tensors(llama_model_loader & ml) override;
1894
1895    struct graph : public llm_graph_context {
1896        graph(const llama_model & model, const llm_graph_params & params);
1897    };
1898
1899    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1900};
1901
1902
1903struct llama_model_dots1 : public llama_model_base {
1904    llama_model_dots1(const struct llama_model_params & params) : llama_model_base(params) {}
1905    void load_arch_hparams(llama_model_loader & ml) override;
1906    void load_arch_tensors(llama_model_loader & ml) override;
1907
1908    struct graph : public llm_graph_context {
1909        graph(const llama_model & model, const llm_graph_params & params);
1910    };
1911
1912    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1913};
1914
1915
1916struct llama_model_arcee : public llama_model_base {
1917    llama_model_arcee(const struct llama_model_params & params) : llama_model_base(params) {}
1918    void load_arch_hparams(llama_model_loader & ml) override;
1919    void load_arch_tensors(llama_model_loader & ml) override;
1920
1921    struct graph : public llm_graph_context {
1922        graph(const llama_model & model, const llm_graph_params & params);
1923    };
1924
1925    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1926};
1927
1928
1929struct llama_model_afmoe : public llama_model_base {
1930    llama_model_afmoe(const struct llama_model_params & params) : llama_model_base(params) {}
1931    void load_arch_hparams(llama_model_loader & ml) override;
1932    void load_arch_tensors(llama_model_loader & ml) override;
1933
1934    struct graph : public llm_graph_context {
1935        graph(const llama_model & model, const llm_graph_params & params);
1936    };
1937
1938    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1939};
1940
1941
1942struct llama_model_laguna : public llama_model_base {
1943    llama_model_laguna(const struct llama_model_params & params) : llama_model_base(params) {}
1944    void load_arch_hparams(llama_model_loader & ml) override;
1945    void load_arch_tensors(llama_model_loader & ml) override;
1946
1947    struct graph : public llm_graph_context {
1948        graph(const llama_model & model, const llm_graph_params & params);
1949    };
1950
1951    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1952};
1953
1954
1955struct llama_model_ernie4_5 : public llama_model_base {
1956    llama_model_ernie4_5(const struct llama_model_params & params) : llama_model_base(params) {}
1957    void load_arch_hparams(llama_model_loader & ml) override;
1958    void load_arch_tensors(llama_model_loader & ml) override;
1959
1960    struct graph : public llm_graph_context {
1961        graph(const llama_model & model, const llm_graph_params & params);
1962    };
1963
1964    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1965};
1966
1967
1968struct llama_model_ernie4_5_moe : public llama_model_ernie4_5 {
1969    llama_model_ernie4_5_moe(const struct llama_model_params & params) : llama_model_ernie4_5(params) {}
1970    // reuse load_arch_hparams and load_arch_tensors from llama_model_ernie4_5
1971
1972    struct graph : public llm_graph_context {
1973        graph(const llama_model & model, const llm_graph_params & params);
1974    };
1975
1976    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1977};
1978
1979
1980struct llama_model_paddleocr : public llama_model_ernie4_5 {
1981    llama_model_paddleocr(const struct llama_model_params & params) : llama_model_ernie4_5(params) {}
1982    // reuse load_arch_hparams and load_arch_tensors from llama_model_ernie4_5
1983
1984    struct graph : public llm_graph_context {
1985        graph(const llama_model & model, const llm_graph_params & params);
1986    };
1987
1988    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
1989};
1990
1991
1992struct llama_model_hunyuan_moe : public llama_model_base {
1993    llama_model_hunyuan_moe(const struct llama_model_params & params) : llama_model_base(params) {}
1994    void load_arch_hparams(llama_model_loader & ml) override;
1995    void load_arch_tensors(llama_model_loader & ml) override;
1996
1997    struct graph : public llm_graph_context {
1998        graph(const llama_model & model, const llm_graph_params & params);
1999    };
2000
2001    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2002};
2003
2004struct llama_model_hy_v3 : public llama_model_base {
2005    llama_model_hy_v3(const struct llama_model_params & params) : llama_model_base(params) {}
2006    void load_arch_hparams(llama_model_loader & ml) override;
2007    void load_arch_tensors(llama_model_loader & ml) override;
2008
2009    struct graph : public llm_graph_context {
2010        graph(const llama_model & model, const llm_graph_params & params);
2011    };
2012
2013    struct graph_mtp : public llm_graph_context {
2014        graph_mtp(const llama_model & model, const llm_graph_params & params);
2015    };
2016
2017    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2018};
2019
2020
2021struct llama_model_hy_v4 : public llama_model_base {
2022    llama_model_hy_v4(const struct llama_model_params & params) : llama_model_base(params) {}
2023    void load_arch_hparams(llama_model_loader & ml) override;
2024    void load_arch_tensors(llama_model_loader & ml) override;
2025
2026    struct graph : public llm_graph_context {
2027        graph(const llama_model & model, const llm_graph_params & params);
2028
2029        // iHC (independent Hyper-Connections): pre reduces the hc streams to one and returns the
2030        // per-stream post gates, post writes the sublayer output back into the streams, head
2031        // collapses the streams before the final norm.
2032        ggml_tensor * build_hc_pre(
2033                ggml_tensor * x,
2034                ggml_tensor * hc_fn,
2035                ggml_tensor * hc_scale,
2036                ggml_tensor * hc_base,
2037                ggml_tensor ** post,
2038                int il) const;
2039
2040        ggml_tensor * build_hc_post(
2041                ggml_tensor * x,
2042                ggml_tensor * residual,
2043                ggml_tensor * post,
2044                int il) const;
2045
2046        ggml_tensor * build_hc_head(
2047                ggml_tensor * x,
2048                ggml_tensor * hc_fn,
2049                ggml_tensor * hc_scale,
2050                ggml_tensor * hc_base) const;
2051
2052        ggml_tensor * build_attention(
2053                const llama_model & model,
2054                llm_graph_input_attn_k * inp_attn,
2055                ggml_tensor * cur,
2056                ggml_tensor * inp_pos,
2057                float kq_scale,
2058                int il) const;
2059
2060        // DSA lightning indexer: top-k KV positions for this layer. Only "full" layers compute
2061        // it, "shared" layers reuse the last preceding full layer result through last_top_k.
2062        ggml_tensor * build_indexer_top_k(
2063                const llama_model & model,
2064                llm_graph_input_attn_k_dsa * inp_attn_dsa,
2065                ggml_tensor * cur,
2066                ggml_tensor * qr,
2067                ggml_tensor * inp_pos,
2068                int il) const;
2069
2070        ggml_tensor * build_attention_dsa(
2071                const llama_model & model,
2072                llm_graph_input_attn_k_dsa * inp_attn_dsa,
2073                ggml_tensor * cur,
2074                ggml_tensor * inp_pos,
2075                ggml_tensor ** last_top_k,
2076                float kq_scale,
2077                int il) const;
2078    };
2079
2080    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2081};
2082
2083
2084struct llama_model_hunyuan_vl : public llama_model_base {
2085    llama_model_hunyuan_vl(const struct llama_model_params & params) : llama_model_base(params) {}
2086    void load_arch_hparams(llama_model_loader & ml) override;
2087    void load_arch_tensors(llama_model_loader & ml) override;
2088
2089    struct graph : public llm_graph_context {
2090        graph(const llama_model & model, const llm_graph_params & params);
2091    };
2092
2093    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2094};
2095
2096
2097struct llama_model_hunyuan_dense : public llama_model_hunyuan_vl {
2098    llama_model_hunyuan_dense(const struct llama_model_params & params) : llama_model_hunyuan_vl(params) {}
2099    // reuse load_arch_hparams and load_arch_tensors from llama_model_hunyuan_vl
2100
2101    using graph = llama_model_hunyuan_vl::graph;
2102
2103    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2104};
2105
2106
2107struct llama_model_smollm3 : public llama_model_base {
2108    llama_model_smollm3(const struct llama_model_params & params) : llama_model_base(params) {}
2109    void load_arch_hparams(llama_model_loader & ml) override;
2110    void load_arch_tensors(llama_model_loader & ml) override;
2111
2112    struct graph : public llm_graph_context {
2113        graph(const llama_model & model, const llm_graph_params & params);
2114    };
2115
2116    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2117};
2118
2119
2120struct llama_model_openai_moe : public llama_model_base {
2121    llama_model_openai_moe(const struct llama_model_params & params) : llama_model_base(params) {}
2122    void load_arch_hparams(llama_model_loader & ml) override;
2123    void load_arch_tensors(llama_model_loader & ml) override;
2124
2125    struct graph : public llm_graph_context {
2126        graph(const llama_model & model, const llm_graph_params & params);
2127    };
2128
2129    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2130};
2131
2132
2133struct llama_model_falcon_h1 : public llama_model_base {
2134    llama_model_falcon_h1(const struct llama_model_params & params) : llama_model_base(params) {}
2135    void load_arch_hparams(llama_model_loader & ml) override;
2136    void load_arch_tensors(llama_model_loader & ml) override;
2137
2138    struct graph : public llm_build_mamba_base {
2139        graph(const llama_model & model, const llm_graph_params & params);
2140    };
2141
2142    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2143};
2144
2145
2146struct llama_model_lfm2 : public llama_model_base {
2147    llama_model_lfm2(const struct llama_model_params & params) : llama_model_base(params) {}
2148    void load_arch_hparams(llama_model_loader & ml) override;
2149    void load_arch_tensors(llama_model_loader & ml) override;
2150
2151    template <bool iswa>
2152    struct graph : public llm_graph_context {
2153        graph(const llama_model & model, const llm_graph_params & params);
2154    };
2155
2156    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2157};
2158
2159
2160struct llama_model_lfm2moe : public llama_model_base {
2161    llama_model_lfm2moe(const struct llama_model_params & params) : llama_model_base(params) {}
2162    void load_arch_hparams(llama_model_loader & ml) override;
2163    void load_arch_tensors(llama_model_loader & ml) override;
2164
2165    template <bool iswa>
2166    using graph = llama_model_lfm2::graph<iswa>;
2167
2168    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2169};
2170
2171
2172struct llama_model_smallthinker : public llama_model_base {
2173    llama_model_smallthinker(const struct llama_model_params & params) : llama_model_base(params) {}
2174    void load_arch_hparams(llama_model_loader & ml) override;
2175    void load_arch_tensors(llama_model_loader & ml) override;
2176
2177    template <bool iswa>
2178    struct graph : public llm_graph_context {
2179        graph(const llama_model & model, const llm_graph_params & params);
2180    };
2181
2182    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2183};
2184
2185
2186struct llama_model_grovemoe : public llama_model_base {
2187    llama_model_grovemoe(const struct llama_model_params & params) : llama_model_base(params) {}
2188    void load_arch_hparams(llama_model_loader & ml) override;
2189    void load_arch_tensors(llama_model_loader & ml) override;
2190
2191    struct graph : public llm_graph_context {
2192        graph(const llama_model & model, const llm_graph_params & params);
2193    };
2194
2195    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2196};
2197
2198
2199struct llama_model_apertus : public llama_model_base {
2200    llama_model_apertus(const struct llama_model_params & params) : llama_model_base(params) {}
2201    void load_arch_hparams(llama_model_loader & ml) override;
2202    void load_arch_tensors(llama_model_loader & ml) override;
2203
2204    struct graph : public llm_graph_context {
2205        graph(const llama_model & model, const llm_graph_params & params);
2206    };
2207
2208    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2209};
2210
2211
2212struct llama_model_minimax_01 : public llama_model_base {
2213    llama_model_minimax_01(const struct llama_model_params & params) : llama_model_base(params) {}
2214    void load_arch_hparams(llama_model_loader & ml) override;
2215    void load_arch_tensors(llama_model_loader & ml) override;
2216
2217    struct graph : public llm_graph_context {
2218        graph(const llama_model & model, const llm_graph_params & params);
2219    };
2220
2221    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2222};
2223
2224
2225struct llama_model_minimax_m2 : public llama_model_base {
2226    llama_model_minimax_m2(const struct llama_model_params & params) : llama_model_base(params) {}
2227    void load_arch_hparams(llama_model_loader & ml) override;
2228    void load_arch_tensors(llama_model_loader & ml) override;
2229
2230    struct graph : public llm_graph_context {
2231        graph(const llama_model & model, const llm_graph_params & params);
2232    };
2233
2234    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2235};
2236
2237struct msa_params {
2238    int blk;
2239    int topk_blocks;
2240    int local;
2241};
2242
2243struct llama_model_minimax_m3 : public llama_model_base {
2244    llama_model_minimax_m3(const struct llama_model_params & params) : llama_model_base(params) {}
2245    void load_arch_hparams(llama_model_loader & ml) override;
2246    void load_arch_tensors(llama_model_loader & ml) override;
2247    msa_params msa_p;
2248    struct graph : public llm_graph_context {
2249        graph(const llama_model & model, const llm_graph_params & params);
2250
2251        ggml_tensor * build_attn_msa_fa(
2252                ggml_tensor * q_cur,   // [D, HQ, S] f32
2253                ggml_tensor * k,       // [D, n_keys, 1, C]  C = HKV or HKV*n_stream
2254                ggml_tensor * v,       // [D, n_keys, 1, C]
2255                ggml_tensor * mask,    // [n_keys, R, 1, C] f16, R = HQ*T/(Gp*C)
2256                int64_t Gp, float kq_scale, int il) const;
2257    };
2258    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2259};
2260
2261struct llama_model_cogvlm : public llama_model_base {
2262    llama_model_cogvlm(const struct llama_model_params & params) : llama_model_base(params) {}
2263    void load_arch_hparams(llama_model_loader & ml) override;
2264    void load_arch_tensors(llama_model_loader & ml) override;
2265
2266    struct graph : public llm_graph_context {
2267        graph(const llama_model & model, const llm_graph_params & params);
2268    };
2269
2270    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2271};
2272
2273
2274struct llama_model_pangu_embed : public llama_model_base {
2275    llama_model_pangu_embed(const struct llama_model_params & params) : llama_model_base(params) {}
2276    void load_arch_hparams(llama_model_loader & ml) override;
2277    void load_arch_tensors(llama_model_loader & ml) override;
2278
2279    struct graph : public llm_graph_context {
2280        graph(const llama_model & model, const llm_graph_params & params);
2281    };
2282
2283    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2284};
2285
2286
2287struct llama_model_qwen3next : public llama_model_base {
2288    llama_model_qwen3next(const struct llama_model_params & params) : llama_model_base(params) {}
2289    void load_arch_hparams(llama_model_loader & ml) override;
2290    void load_arch_tensors(llama_model_loader & ml) override;
2291
2292    struct graph : public llm_build_delta_net_base {
2293        graph(const llama_model & model, const llm_graph_params & params);
2294    private:
2295        ggml_tensor * build_layer_attn(
2296        llm_graph_input_attn_kv * inp_attn,
2297                    ggml_tensor * cur,
2298                    ggml_tensor * inp_pos,
2299                            int   il);
2300
2301        ggml_tensor * build_layer_attn_linear(
2302             llm_graph_input_rs * inp,
2303                    ggml_tensor * cur,
2304                            int   il);
2305
2306        ggml_tensor * build_layer_ffn(
2307                    ggml_tensor * cur,
2308                            int   il);
2309
2310        ggml_tensor * build_norm_gated(
2311                    ggml_tensor * input,
2312                    ggml_tensor * weights,
2313                    ggml_tensor * gate,
2314                            int   layer);
2315
2316        // returns pair of qkv, z
2317        std::pair<ggml_tensor *, ggml_tensor *> build_qkvz(
2318                    ggml_tensor * input,
2319                            int   il);
2320
2321        const llama_model & model;
2322    };
2323
2324    struct graph_mtp : public llm_graph_context {
2325        graph_mtp(const llama_model & model, const llm_graph_params & params);
2326    };
2327
2328    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2329};
2330
2331
2332struct llama_model_qwen35 : public llama_model_base {
2333    llama_model_qwen35(const struct llama_model_params & params) : llama_model_base(params) {}
2334    void load_arch_hparams(llama_model_loader & ml) override;
2335    void load_arch_tensors(llama_model_loader & ml) override;
2336
2337    struct graph : public llm_build_delta_net_base {
2338        graph(const llama_model & model, const llm_graph_params & params);
2339    private:
2340        ggml_tensor * build_layer_attn(
2341        llm_graph_input_attn_kv * inp_attn,
2342                    ggml_tensor * cur,
2343                    ggml_tensor * inp_pos,
2344                            int * sections,
2345                            int   il);
2346
2347        ggml_tensor * build_layer_attn_linear(
2348             llm_graph_input_rs * inp,
2349                    ggml_tensor * cur,
2350                            int   il);
2351
2352        ggml_tensor * build_layer_ffn(
2353                    ggml_tensor * cur,
2354                            int   il);
2355
2356        ggml_tensor * build_norm_gated(
2357                    ggml_tensor * input,
2358                    ggml_tensor * weights,
2359                    ggml_tensor * gate,
2360                            int   layer);
2361
2362        // returns pair of qkv, z
2363        std::pair<ggml_tensor *, ggml_tensor *> build_qkvz(
2364                    ggml_tensor * input,
2365                            int   il);
2366
2367        const llama_model & model;
2368    };
2369
2370    struct graph_mtp : public llm_graph_context {
2371        graph_mtp(const llama_model & model, const llm_graph_params & params);
2372    };
2373
2374    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2375};
2376
2377
2378struct llama_model_qwen4exp : public llama_model_base {
2379    llama_model_qwen4exp(const struct llama_model_params & params) : llama_model_base(params) {}
2380
2381    class llm_graph_input_qsa;
2382
2383    void load_arch_hparams(llama_model_loader & ml) override;
2384    void load_arch_tensors(llama_model_loader & ml) override;
2385
2386    struct graph : public llm_build_delta_net_base {
2387        graph(const llama_model & model, const llm_graph_params & params);
2388    private:
2389        // HC replaces every layer norm: residual is [n_embd, hc, n_tokens]
2390        ggml_tensor * build_hc_mix(
2391                    ggml_tensor * x,
2392                    ggml_tensor * w_norm,
2393                    ggml_tensor * w_down,
2394                    ggml_tensor * w_up,
2395                    ggml_tensor * w_inject,
2396                    ggml_tensor ** inject,
2397                            int   il);
2398
2399        ggml_tensor * build_hc_combine(
2400                    ggml_tensor * residual,
2401                    ggml_tensor * block_out,
2402                    ggml_tensor * inject,
2403                            int   il);
2404
2405        ggml_tensor * build_layer_attn(
2406              llm_graph_input_attn_kv * inp_attn,
2407  const llama_memory_hybrid_idx_context * mctx_hyb,
2408                    ggml_tensor * cur,
2409                    ggml_tensor * inp_pos,
2410                            int * sections,
2411                            int   il);
2412
2413        // dense self-attention restricted to the cells that top_k names
2414        ggml_tensor * build_attn_qsa(
2415        llm_graph_input_attn_kv * inp,
2416                    ggml_tensor * q_cur,
2417                    ggml_tensor * k_cur,
2418                    ggml_tensor * v_cur,
2419                    ggml_tensor * top_k,
2420                          float   kq_scale,
2421                            int   il);
2422
2423        // the QSA cache layout inputs do not depend on the layer, only on its compress ratio,
2424        // so the layers sharing a ratio share one input set
2425        std::map<uint32_t, llm_graph_input_qsa *> qsa_inps;
2426
2427        // QSA: token indices this layer's queries may attend to, or nullptr for dense
2428        ggml_tensor * build_qsa_top_k(
2429  const llama_memory_hybrid_idx_context * mctx_hyb,
2430                    ggml_tensor * cur,
2431                    ggml_tensor * inp_pos,
2432                    ggml_tensor * kq_mask,
2433                            int * sections,
2434                            int   il);
2435
2436        ggml_tensor * build_layer_attn_linear(
2437             llm_graph_input_rs * inp,
2438                    ggml_tensor * cur,
2439                            int   il);
2440
2441        ggml_tensor * build_layer_ffn(
2442                    ggml_tensor * cur,
2443                            int   il);
2444
2445        ggml_tensor * build_norm_gated(
2446                    ggml_tensor * input,
2447                    ggml_tensor * weights,
2448                    ggml_tensor * gate,
2449                            int   layer);
2450
2451        // build_rs writes the state tensor in place, so one gather per cache tensor is reused
2452        std::map<ggml_tensor *, ggml_tensor *> rs_rows;
2453
2454        // one conv history per cache tensor: delta-net and PLE each have their own
2455        ggml_tensor * build_conv_state_at(
2456             llm_graph_input_rs * inp,
2457                    ggml_tensor * conv_states_all,
2458                    ggml_tensor * x,
2459                        int64_t   state_cols,
2460                        int64_t   channels,
2461                            int   il);
2462
2463        ggml_tensor * build_inp_ple(
2464  const llama_memory_hybrid_idx_context * mctx_hyb);
2465
2466        ggml_tensor * build_ple(
2467             llm_graph_input_rs * inp,
2468                    ggml_tensor * emb,
2469                    ggml_tensor * hidden,
2470                            int   il);
2471
2472        // returns pair of qkv, z
2473        std::pair<ggml_tensor *, ggml_tensor *> build_qkvz(
2474                    ggml_tensor * input,
2475                            int   il);
2476
2477        const llama_model & model;
2478    };
2479
2480    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2481};
2482
2483struct llama_model_qwen35moe : public llama_model_base {
2484    llama_model_qwen35moe(const struct llama_model_params & params) : llama_model_base(params) {}
2485    void load_arch_hparams(llama_model_loader & ml) override;
2486    void load_arch_tensors(llama_model_loader & ml) override;
2487
2488    struct graph : public llm_build_delta_net_base {
2489        graph(const llama_model & model, const llm_graph_params & params);
2490    private:
2491        ggml_tensor * build_layer_attn(
2492        llm_graph_input_attn_kv * inp_attn,
2493                    ggml_tensor * cur,
2494                    ggml_tensor * inp_pos,
2495                            int * sections,
2496                            int   il);
2497
2498        ggml_tensor * build_layer_attn_linear(
2499             llm_graph_input_rs * inp,
2500                    ggml_tensor * cur,
2501                            int   il);
2502
2503        ggml_tensor * build_layer_ffn(
2504                    ggml_tensor * cur,
2505                            int   il);
2506
2507        ggml_tensor * build_norm_gated(
2508                    ggml_tensor * input,
2509                    ggml_tensor * weights,
2510                    ggml_tensor * gate,
2511                            int   layer);
2512
2513        // returns pair of qkv, z
2514        std::pair<ggml_tensor *, ggml_tensor *> build_qkvz(
2515                    ggml_tensor * input,
2516                            int   il);
2517
2518        const llama_model & model;
2519    };
2520
2521    struct graph_mtp : public llm_graph_context {
2522        graph_mtp(const llama_model & model, const llm_graph_params & params);
2523    };
2524
2525    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2526};
2527
2528
2529struct llama_model_mistral3 : public llama_model_base {
2530    llama_model_mistral3(const struct llama_model_params & params) : llama_model_base(params) {}
2531    void load_arch_hparams(llama_model_loader & ml) override;
2532    void load_arch_tensors(llama_model_loader & ml) override;
2533
2534    struct graph : public llm_graph_context {
2535        graph(const llama_model & model, const llm_graph_params & params);
2536    };
2537
2538    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2539};
2540
2541
2542struct llama_model_mimo2 : public llama_model_base {
2543    llama_model_mimo2(const struct llama_model_params & params) : llama_model_base(params) {}
2544    void load_arch_hparams(llama_model_loader & ml) override;
2545    void load_arch_tensors(llama_model_loader & ml) override;
2546
2547    struct graph : public llm_graph_context {
2548        graph(const llama_model & model, const llm_graph_params & params);
2549    };
2550
2551    struct graph_mtp : public llm_graph_context {
2552        graph_mtp(const llama_model & model, const llm_graph_params & params);
2553    };
2554
2555    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2556};
2557
2558
2559struct llama_model_kimi_k3 : public llama_model_base {
2560    llama_model_kimi_k3(const struct llama_model_params & params) : llama_model_base(params) {}
2561    void load_arch_hparams(llama_model_loader & ml) override;
2562    void load_arch_tensors(llama_model_loader & ml) override;
2563
2564    struct graph : public llm_build_delta_net_base {
2565        graph(const llama_model & model, const llm_graph_params & params);
2566
2567        const llama_model & model;
2568
2569        // Cross-layer residual attention (K3's `_apply_attn_res`).
2570        ggml_tensor * resi_stack = nullptr;
2571
2572        void          res_push(ggml_tensor * cur, int64_t n_embd, int64_t n_tokens);
2573        ggml_tensor * res_mix(ggml_tensor * cur, ggml_tensor * score_w,
2574                              int64_t n_tokens, int il);
2575
2576        ggml_tensor * build_kda_layer(ggml_tensor * cur, const llama_layer & layer,
2577                                      llm_graph_input_rs * inp_rs,
2578                                      int64_t d_conv, int64_t head_dim, int64_t n_head_kda,
2579                                      int64_t d_inner, int64_t n_seq_tokens, int64_t n_seqs, int il);
2580
2581        ggml_tensor * build_mla_layer(ggml_tensor * cur, const llama_layer & layer,
2582                                      llm_graph_input_attn_k  * inp_attn_k,
2583                                      llm_graph_input_attn_kv * inp_attn_kv,
2584                                      int64_t n_embd_head_k_mla, int64_t n_embd_head_v_mla,
2585                                      int64_t kv_lora_rank, int64_t n_embd_head_qk_rope,
2586                                      int64_t n_embd_head_qk_nope, float kq_scale, int il);
2587
2588        ggml_tensor * build_latent_moe(ggml_tensor * cur, const llama_layer & layer,
2589                                       int64_t n_embd_latent, int il);
2590    };
2591
2592    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2593};
2594
2595struct llama_model_kimi_linear : public llama_model_base {
2596    llama_model_kimi_linear(const struct llama_model_params & params) : llama_model_base(params) {}
2597    void load_arch_hparams(llama_model_loader & ml) override;
2598    void load_arch_tensors(llama_model_loader & ml) override;
2599
2600    struct graph : public llm_build_delta_net_base {
2601        graph(const llama_model & model, const llm_graph_params & params);
2602
2603        std::pair<ggml_tensor *, ggml_tensor *> build_kda_autoregressive(
2604                    ggml_tensor * q,
2605                    ggml_tensor * k,
2606                    ggml_tensor * v,
2607                    ggml_tensor * gk,
2608                    ggml_tensor * beta,
2609                    ggml_tensor * state,
2610                            int   il);
2611
2612        std::pair<ggml_tensor *, ggml_tensor *> build_kda_chunking(
2613                    ggml_tensor * q,
2614                    ggml_tensor * k,
2615                    ggml_tensor * v,
2616                    ggml_tensor * gk,
2617                    ggml_tensor * beta,
2618                    ggml_tensor * state,
2619                    ggml_tensor * causal_mask,
2620                    ggml_tensor * identity,
2621                    ggml_tensor * diag_mask,
2622                            int   il);
2623
2624        const llama_model & model;
2625    };
2626
2627    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2628};
2629
2630
2631struct llama_model_step35 : public llama_model_base {
2632    llama_model_step35(const struct llama_model_params & params) : llama_model_base(params) {}
2633    void load_arch_hparams(llama_model_loader & ml) override;
2634    void load_arch_tensors(llama_model_loader & ml) override;
2635
2636    struct graph : public llm_graph_context {
2637        graph(const llama_model & model, const llm_graph_params & params);
2638    };
2639
2640    struct graph_mtp : public llm_graph_context {
2641        graph_mtp(const llama_model & model, const llm_graph_params & params);
2642    };
2643
2644    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2645};
2646
2647
2648struct llama_model_spark2_5 : public llama_model_base {
2649    llama_model_spark2_5(const struct llama_model_params & params) : llama_model_base(params) {}
2650    void load_arch_hparams(llama_model_loader & ml) override;
2651    void load_arch_tensors(llama_model_loader & ml) override;
2652
2653    struct graph : public llm_graph_context {
2654        graph(const llama_model & model, const llm_graph_params & params);
2655    };
2656
2657    std::unique_ptr<llm_graph_context> build_arch_graph(const llm_graph_params & params) const override;
2658};