Coverage Report

Created: 2025-12-14 06:23

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/llama.cpp/src/llama-arch.h
Line
Count
Source
1
#pragma once
2
3
#include "ggml.h" // ggml_op
4
5
#include <string>
6
7
//
8
// gguf constants (sync with gguf.py)
9
//
10
11
enum llm_arch {
12
    LLM_ARCH_CLIP,
13
    LLM_ARCH_LLAMA,
14
    LLM_ARCH_LLAMA4,
15
    LLM_ARCH_DECI,
16
    LLM_ARCH_FALCON,
17
    LLM_ARCH_BAICHUAN,
18
    LLM_ARCH_GROK,
19
    LLM_ARCH_GPT2,
20
    LLM_ARCH_GPTJ,
21
    LLM_ARCH_GPTNEOX,
22
    LLM_ARCH_MPT,
23
    LLM_ARCH_STARCODER,
24
    LLM_ARCH_REFACT,
25
    LLM_ARCH_BERT,
26
    LLM_ARCH_NOMIC_BERT,
27
    LLM_ARCH_NOMIC_BERT_MOE,
28
    LLM_ARCH_NEO_BERT,
29
    LLM_ARCH_JINA_BERT_V2,
30
    LLM_ARCH_JINA_BERT_V3,
31
    LLM_ARCH_BLOOM,
32
    LLM_ARCH_STABLELM,
33
    LLM_ARCH_QWEN,
34
    LLM_ARCH_QWEN2,
35
    LLM_ARCH_QWEN2MOE,
36
    LLM_ARCH_QWEN2VL,
37
    LLM_ARCH_QWEN3,
38
    LLM_ARCH_QWEN3MOE,
39
    LLM_ARCH_QWEN3NEXT,
40
    LLM_ARCH_QWEN3VL,
41
    LLM_ARCH_QWEN3VLMOE,
42
    LLM_ARCH_PHI2,
43
    LLM_ARCH_PHI3,
44
    LLM_ARCH_PHIMOE,
45
    LLM_ARCH_PLAMO,
46
    LLM_ARCH_PLAMO2,
47
    LLM_ARCH_CODESHELL,
48
    LLM_ARCH_ORION,
49
    LLM_ARCH_INTERNLM2,
50
    LLM_ARCH_MINICPM,
51
    LLM_ARCH_MINICPM3,
52
    LLM_ARCH_GEMMA,
53
    LLM_ARCH_GEMMA2,
54
    LLM_ARCH_GEMMA3,
55
    LLM_ARCH_GEMMA3N,
56
    LLM_ARCH_GEMMA_EMBEDDING,
57
    LLM_ARCH_STARCODER2,
58
    LLM_ARCH_MAMBA,
59
    LLM_ARCH_MAMBA2,
60
    LLM_ARCH_JAMBA,
61
    LLM_ARCH_FALCON_H1,
62
    LLM_ARCH_XVERSE,
63
    LLM_ARCH_COMMAND_R,
64
    LLM_ARCH_COHERE2,
65
    LLM_ARCH_DBRX,
66
    LLM_ARCH_OLMO,
67
    LLM_ARCH_OLMO2,
68
    LLM_ARCH_OLMOE,
69
    LLM_ARCH_OPENELM,
70
    LLM_ARCH_ARCTIC,
71
    LLM_ARCH_DEEPSEEK,
72
    LLM_ARCH_DEEPSEEK2,
73
    LLM_ARCH_CHATGLM,
74
    LLM_ARCH_GLM4,
75
    LLM_ARCH_GLM4_MOE,
76
    LLM_ARCH_BITNET,
77
    LLM_ARCH_T5,
78
    LLM_ARCH_T5ENCODER,
79
    LLM_ARCH_JAIS,
80
    LLM_ARCH_NEMOTRON,
81
    LLM_ARCH_NEMOTRON_H,
82
    LLM_ARCH_EXAONE,
83
    LLM_ARCH_EXAONE4,
84
    LLM_ARCH_RWKV6,
85
    LLM_ARCH_RWKV6QWEN2,
86
    LLM_ARCH_RWKV7,
87
    LLM_ARCH_ARWKV7,
88
    LLM_ARCH_GRANITE,
89
    LLM_ARCH_GRANITE_MOE,
90
    LLM_ARCH_GRANITE_HYBRID,
91
    LLM_ARCH_CHAMELEON,
92
    LLM_ARCH_WAVTOKENIZER_DEC,
93
    LLM_ARCH_PLM,
94
    LLM_ARCH_BAILINGMOE,
95
    LLM_ARCH_BAILINGMOE2,
96
    LLM_ARCH_DOTS1,
97
    LLM_ARCH_ARCEE,
98
    LLM_ARCH_AFMOE,
99
    LLM_ARCH_ERNIE4_5,
100
    LLM_ARCH_ERNIE4_5_MOE,
101
    LLM_ARCH_HUNYUAN_MOE,
102
    LLM_ARCH_HUNYUAN_DENSE,
103
    LLM_ARCH_SMOLLM3,
104
    LLM_ARCH_OPENAI_MOE,
105
    LLM_ARCH_LFM2,
106
    LLM_ARCH_LFM2MOE,
107
    LLM_ARCH_DREAM,
108
    LLM_ARCH_SMALLTHINKER,
109
    LLM_ARCH_LLADA,
110
    LLM_ARCH_LLADA_MOE,
111
    LLM_ARCH_SEED_OSS,
112
    LLM_ARCH_GROVEMOE,
113
    LLM_ARCH_APERTUS,
114
    LLM_ARCH_MINIMAX_M2,
115
    LLM_ARCH_COGVLM,
116
    LLM_ARCH_RND1,
117
    LLM_ARCH_PANGU_EMBED,
118
    LLM_ARCH_MISTRAL3,
119
    LLM_ARCH_UNKNOWN,
120
};
121
122
enum llm_kv {
123
    LLM_KV_GENERAL_TYPE,
124
    LLM_KV_GENERAL_ARCHITECTURE,
125
    LLM_KV_GENERAL_QUANTIZATION_VERSION,
126
    LLM_KV_GENERAL_ALIGNMENT,
127
    LLM_KV_GENERAL_FILE_TYPE,
128
    LLM_KV_GENERAL_SAMPLING_SEQUENCE,
129
    LLM_KV_GENERAL_SAMPLING_TOP_K,
130
    LLM_KV_GENERAL_SAMPLING_TOP_P,
131
    LLM_KV_GENERAL_SAMPLING_MIN_P,
132
    LLM_KV_GENERAL_SAMPLING_XTC_PROBABILITY,
133
    LLM_KV_GENERAL_SAMPLING_XTC_THRESHOLD,
134
    LLM_KV_GENERAL_SAMPLING_TEMP,
135
    LLM_KV_GENERAL_SAMPLING_PENALTY_LAST_N,
136
    LLM_KV_GENERAL_SAMPLING_PENALTY_REPEAT,
137
    LLM_KV_GENERAL_SAMPLING_MIROSTAT,
138
    LLM_KV_GENERAL_SAMPLING_MIROSTAT_TAU,
139
    LLM_KV_GENERAL_SAMPLING_MIROSTAT_ETA,
140
    LLM_KV_GENERAL_NAME,
141
    LLM_KV_GENERAL_AUTHOR,
142
    LLM_KV_GENERAL_VERSION,
143
    LLM_KV_GENERAL_URL,
144
    LLM_KV_GENERAL_DESCRIPTION,
145
    LLM_KV_GENERAL_LICENSE,
146
    LLM_KV_GENERAL_SOURCE_URL,
147
    LLM_KV_GENERAL_SOURCE_HF_REPO,
148
149
    LLM_KV_VOCAB_SIZE,
150
    LLM_KV_CONTEXT_LENGTH,
151
    LLM_KV_EMBEDDING_LENGTH,
152
    LLM_KV_FEATURES_LENGTH,
153
    LLM_KV_BLOCK_COUNT,
154
    LLM_KV_LEADING_DENSE_BLOCK_COUNT,
155
    LLM_KV_FEED_FORWARD_LENGTH,
156
    LLM_KV_EXPERT_FEED_FORWARD_LENGTH,
157
    LLM_KV_EXPERT_SHARED_FEED_FORWARD_LENGTH,
158
    LLM_KV_EXPERT_CHUNK_FEED_FORWARD_LENGTH,
159
    LLM_KV_USE_PARALLEL_RESIDUAL,
160
    LLM_KV_TENSOR_DATA_LAYOUT,
161
    LLM_KV_EXPERT_COUNT,
162
    LLM_KV_EXPERT_USED_COUNT,
163
    LLM_KV_EXPERT_SHARED_COUNT,
164
    LLM_KV_EXPERT_GROUP_COUNT,
165
    LLM_KV_EXPERT_GROUP_USED_COUNT,
166
    LLM_KV_EXPERT_WEIGHTS_SCALE,
167
    LLM_KV_EXPERT_WEIGHTS_NORM,
168
    LLM_KV_EXPERT_GATING_FUNC,
169
    LLM_KV_EXPERT_GROUP_SCALE,
170
    LLM_KV_EXPERTS_PER_GROUP,
171
    LLM_KV_MOE_EVERY_N_LAYERS,
172
    LLM_KV_NEXTN_PREDICT_LAYERS,
173
    LLM_KV_NUM_DEEPSTACK_LAYERS,
174
    LLM_KV_POOLING_TYPE,
175
    LLM_KV_LOGIT_SCALE,
176
    LLM_KV_DECODER_START_TOKEN_ID,
177
    LLM_KV_DECODER_BLOCK_COUNT,
178
    LLM_KV_ATTN_LOGIT_SOFTCAPPING,
179
    LLM_KV_ROUTER_LOGIT_SOFTCAPPING,
180
    LLM_KV_FINAL_LOGIT_SOFTCAPPING,
181
    LLM_KV_SWIN_NORM,
182
    LLM_KV_RESCALE_EVERY_N_LAYERS,
183
    LLM_KV_TIME_MIX_EXTRA_DIM,
184
    LLM_KV_TIME_DECAY_EXTRA_DIM,
185
    LLM_KV_RESIDUAL_SCALE,
186
    LLM_KV_EMBEDDING_SCALE,
187
    LLM_KV_TOKEN_SHIFT_COUNT,
188
    LLM_KV_INTERLEAVE_MOE_LAYER_STEP,
189
190
    LLM_KV_ATTENTION_HEAD_COUNT,
191
    LLM_KV_ATTENTION_HEAD_COUNT_KV,
192
    LLM_KV_ATTENTION_MAX_ALIBI_BIAS,
193
    LLM_KV_ATTENTION_CLAMP_KQV,
194
    LLM_KV_ATTENTION_KEY_LENGTH,
195
    LLM_KV_ATTENTION_VALUE_LENGTH,
196
    LLM_KV_ATTENTION_LAYERNORM_EPS,
197
    LLM_KV_ATTENTION_LAYERNORM_RMS_EPS,
198
    LLM_KV_ATTENTION_GROUPNORM_EPS,
199
    LLM_KV_ATTENTION_GROUPNORM_GROUPS,
200
    LLM_KV_ATTENTION_CAUSAL,
201
    LLM_KV_ATTENTION_Q_LORA_RANK,
202
    LLM_KV_ATTENTION_KV_LORA_RANK,
203
    LLM_KV_ATTENTION_DECAY_LORA_RANK,
204
    LLM_KV_ATTENTION_ICLR_LORA_RANK,
205
    LLM_KV_ATTENTION_VALUE_RESIDUAL_MIX_LORA_RANK,
206
    LLM_KV_ATTENTION_GATE_LORA_RANK,
207
    LLM_KV_ATTENTION_RELATIVE_BUCKETS_COUNT,
208
    LLM_KV_ATTENTION_SLIDING_WINDOW,
209
    LLM_KV_ATTENTION_SCALE,
210
    LLM_KV_ATTENTION_OUTPUT_SCALE,
211
    LLM_KV_ATTENTION_TEMPERATURE_LENGTH,
212
    LLM_KV_ATTENTION_TEMPERATURE_SCALE,
213
    LLM_KV_ATTENTION_KEY_LENGTH_MLA,
214
    LLM_KV_ATTENTION_VALUE_LENGTH_MLA,
215
216
    LLM_KV_ROPE_DIMENSION_COUNT,
217
    LLM_KV_ROPE_DIMENSION_SECTIONS,
218
    LLM_KV_ROPE_FREQ_BASE,
219
    LLM_KV_ROPE_SCALE_LINEAR,
220
    LLM_KV_ROPE_SCALING_TYPE,
221
    LLM_KV_ROPE_SCALING_FACTOR,
222
    LLM_KV_ROPE_SCALING_ATTN_FACTOR,
223
    LLM_KV_ROPE_SCALING_ORIG_CTX_LEN,
224
    LLM_KV_ROPE_SCALING_FINETUNED,
225
    LLM_KV_ROPE_SCALING_YARN_LOG_MUL,
226
    LLM_KV_ROPE_SCALING_YARN_EXT_FACTOR,
227
    LLM_KV_ROPE_SCALING_YARN_ATTN_FACTOR,
228
    LLM_KV_ROPE_SCALING_YARN_BETA_FAST,
229
    LLM_KV_ROPE_SCALING_YARN_BETA_SLOW,
230
231
    LLM_KV_SPLIT_NO,
232
    LLM_KV_SPLIT_COUNT,
233
    LLM_KV_SPLIT_TENSORS_COUNT,
234
235
    LLM_KV_SSM_INNER_SIZE,
236
    LLM_KV_SSM_CONV_KERNEL,
237
    LLM_KV_SSM_STATE_SIZE,
238
    LLM_KV_SSM_TIME_STEP_RANK,
239
    LLM_KV_SSM_GROUP_COUNT,
240
    LLM_KV_SSM_DT_B_C_RMS,
241
242
    LLM_KV_WKV_HEAD_SIZE,
243
244
    LLM_KV_TOKENIZER_MODEL,
245
    LLM_KV_TOKENIZER_PRE,
246
    LLM_KV_TOKENIZER_LIST,
247
    LLM_KV_TOKENIZER_TOKEN_TYPE,
248
    LLM_KV_TOKENIZER_TOKEN_TYPE_COUNT,
249
    LLM_KV_TOKENIZER_SCORES,
250
    LLM_KV_TOKENIZER_MERGES,
251
    LLM_KV_TOKENIZER_BOS_ID,
252
    LLM_KV_TOKENIZER_EOS_ID,
253
    LLM_KV_TOKENIZER_EOT_ID,
254
    LLM_KV_TOKENIZER_EOM_ID,
255
    LLM_KV_TOKENIZER_UNK_ID,
256
    LLM_KV_TOKENIZER_SEP_ID,
257
    LLM_KV_TOKENIZER_PAD_ID,
258
    LLM_KV_TOKENIZER_CLS_ID,
259
    LLM_KV_TOKENIZER_MASK_ID,
260
    LLM_KV_TOKENIZER_ADD_BOS,
261
    LLM_KV_TOKENIZER_ADD_EOS,
262
    LLM_KV_TOKENIZER_ADD_SEP,
263
    LLM_KV_TOKENIZER_ADD_PREFIX,
264
    LLM_KV_TOKENIZER_REMOVE_EXTRA_WS,
265
    LLM_KV_TOKENIZER_PRECOMPILED_CHARSMAP,
266
    LLM_KV_TOKENIZER_HF_JSON,
267
    LLM_KV_TOKENIZER_RWKV,
268
    LLM_KV_TOKENIZER_CHAT_TEMPLATE,
269
    LLM_KV_TOKENIZER_FIM_PRE_ID,
270
    LLM_KV_TOKENIZER_FIM_SUF_ID,
271
    LLM_KV_TOKENIZER_FIM_MID_ID,
272
    LLM_KV_TOKENIZER_FIM_PAD_ID,
273
    LLM_KV_TOKENIZER_FIM_REP_ID,
274
    LLM_KV_TOKENIZER_FIM_SEP_ID,
275
276
    LLM_KV_ADAPTER_TYPE,
277
    LLM_KV_ADAPTER_LORA_ALPHA,
278
    LLM_KV_ADAPTER_LORA_TASK_NAME,
279
    LLM_KV_ADAPTER_LORA_PROMPT_PREFIX,
280
    LLM_KV_ADAPTER_ALORA_INVOCATION_TOKENS,
281
282
    LLM_KV_POSNET_EMBEDDING_LENGTH,
283
    LLM_KV_POSNET_BLOCK_COUNT,
284
285
    LLM_KV_CONVNEXT_EMBEDDING_LENGTH,
286
    LLM_KV_CONVNEXT_BLOCK_COUNT,
287
288
    LLM_KV_CLASSIFIER_OUTPUT_LABELS,
289
290
    LLM_KV_SHORTCONV_L_CACHE,
291
292
    LLM_KV_XIELU_ALPHA_N,
293
    LLM_KV_XIELU_ALPHA_P,
294
    LLM_KV_XIELU_BETA,
295
    LLM_KV_XIELU_EPS,
296
297
    // deprecated:
298
    LLM_KV_TOKENIZER_PREFIX_ID,
299
    LLM_KV_TOKENIZER_SUFFIX_ID,
300
    LLM_KV_TOKENIZER_MIDDLE_ID,
301
302
    // sentence-transformers dense layers in and out features
303
    LLM_KV_DENSE_2_FEAT_IN,
304
    LLM_KV_DENSE_2_FEAT_OUT,
305
    LLM_KV_DENSE_3_FEAT_IN,
306
    LLM_KV_DENSE_3_FEAT_OUT,
307
};
308
309
enum llm_tensor {
310
    LLM_TENSOR_TOKEN_EMBD,
311
    LLM_TENSOR_TOKEN_EMBD_NORM,
312
    LLM_TENSOR_TOKEN_TYPES,
313
    LLM_TENSOR_POS_EMBD,
314
    LLM_TENSOR_DENSE_2_OUT,
315
    LLM_TENSOR_DENSE_3_OUT,
316
    LLM_TENSOR_OUTPUT,
317
    LLM_TENSOR_OUTPUT_NORM,
318
    LLM_TENSOR_ROPE_FREQS,
319
    LLM_TENSOR_ROPE_FACTORS_LONG,
320
    LLM_TENSOR_ROPE_FACTORS_SHORT,
321
    LLM_TENSOR_ATTN_Q,
322
    LLM_TENSOR_ATTN_K,
323
    LLM_TENSOR_ATTN_V,
324
    LLM_TENSOR_ATTN_QKV,
325
    LLM_TENSOR_ATTN_OUT,
326
    LLM_TENSOR_ATTN_NORM,
327
    LLM_TENSOR_ATTN_NORM_2,
328
    LLM_TENSOR_ATTN_OUT_NORM,
329
    LLM_TENSOR_ATTN_POST_NORM,
330
    LLM_TENSOR_ATTN_ROT_EMBD,
331
    LLM_TENSOR_ATTN_SINKS,
332
    LLM_TENSOR_ATTN_GATE,
333
    LLM_TENSOR_FFN_GATE_INP,
334
    LLM_TENSOR_FFN_GATE_INP_SHEXP,
335
    LLM_TENSOR_FFN_NORM,
336
    LLM_TENSOR_FFN_POST_NORM,
337
    LLM_TENSOR_FFN_GATE,
338
    LLM_TENSOR_FFN_DOWN,
339
    LLM_TENSOR_FFN_UP,
340
    LLM_TENSOR_FFN_ACT,
341
    LLM_TENSOR_FFN_DOWN_EXP,  // split experts for backward compatibility
342
    LLM_TENSOR_FFN_GATE_EXP,
343
    LLM_TENSOR_FFN_UP_EXP,
344
    LLM_TENSOR_FFN_NORM_EXPS,
345
    LLM_TENSOR_FFN_DOWN_EXPS, // merged experts
346
    LLM_TENSOR_FFN_GATE_EXPS,
347
    LLM_TENSOR_FFN_UP_EXPS,
348
    LLM_TENSOR_FFN_DOWN_SHEXP,
349
    LLM_TENSOR_FFN_GATE_SHEXP,
350
    LLM_TENSOR_FFN_UP_SHEXP,
351
    LLM_TENSOR_FFN_DOWN_CHEXPS,
352
    LLM_TENSOR_FFN_GATE_CHEXPS,
353
    LLM_TENSOR_FFN_UP_CHEXPS,
354
    LLM_TENSOR_FFN_EXP_PROBS_B,
355
    LLM_TENSOR_ATTN_Q_NORM,
356
    LLM_TENSOR_ATTN_K_NORM,
357
    LLM_TENSOR_LAYER_OUT_NORM,
358
    LLM_TENSOR_POST_ATTN_NORM,
359
    LLM_TENSOR_POST_MLP_NORM,
360
    LLM_TENSOR_PER_LAYER_TOKEN_EMBD, // gemma3n
361
    LLM_TENSOR_PER_LAYER_MODEL_PROJ, // gemma3n
362
    LLM_TENSOR_PER_LAYER_INP_GATE,   // gemma3n
363
    LLM_TENSOR_PER_LAYER_PROJ,       // gemma3n
364
    LLM_TENSOR_PER_LAYER_PROJ_NORM,  // gemma3n
365
    LLM_TENSOR_PER_LAYER_POST_NORM,  // gemma3n
366
    LLM_TENSOR_ALTUP_PROJ,           // gemma3n
367
    LLM_TENSOR_ALTUP_UNEMBD_PROJ,    // gemma3n
368
    LLM_TENSOR_ALTUP_CORRECT_COEF,   // gemma3n
369
    LLM_TENSOR_ALTUP_CORRECT_SCALE,  // gemma3n
370
    LLM_TENSOR_ALTUP_PREDICT_COEF,   // gemma3n
371
    LLM_TENSOR_ALTUP_ROUTER,         // gemma3n
372
    LLM_TENSOR_ALTUP_ROUTER_NORM,    // gemma3n
373
    LLM_TENSOR_LAUREL_L,             // gemma3n
374
    LLM_TENSOR_LAUREL_R,             // gemma3n
375
    LLM_TENSOR_LAUREL_POST_NORM,     // gemma3n
376
    LLM_TENSOR_SSM_IN,
377
    LLM_TENSOR_SSM_CONV1D,
378
    LLM_TENSOR_SSM_X,
379
    LLM_TENSOR_SSM_DT,
380
    LLM_TENSOR_SSM_DT_NORM,
381
    LLM_TENSOR_SSM_A,
382
    LLM_TENSOR_SSM_A_NOSCAN,        // qwen3next special case with MUL instead of SSM_SCAN
383
    LLM_TENSOR_SSM_B_NORM,
384
    LLM_TENSOR_SSM_C_NORM,
385
    LLM_TENSOR_SSM_D,
386
    LLM_TENSOR_SSM_NORM,
387
    LLM_TENSOR_SSM_OUT,
388
    LLM_TENSOR_SSM_BETA_ALPHA,      // qwen3next
389
    LLM_TENSOR_TIME_MIX_W0,
390
    LLM_TENSOR_TIME_MIX_W1,
391
    LLM_TENSOR_TIME_MIX_W2,
392
    LLM_TENSOR_TIME_MIX_A0,
393
    LLM_TENSOR_TIME_MIX_A1,
394
    LLM_TENSOR_TIME_MIX_A2,
395
    LLM_TENSOR_TIME_MIX_V0,
396
    LLM_TENSOR_TIME_MIX_V1,
397
    LLM_TENSOR_TIME_MIX_V2,
398
    LLM_TENSOR_TIME_MIX_G1,
399
    LLM_TENSOR_TIME_MIX_G2,
400
    LLM_TENSOR_TIME_MIX_K_K,
401
    LLM_TENSOR_TIME_MIX_K_A,
402
    LLM_TENSOR_TIME_MIX_R_K,
403
    LLM_TENSOR_TIME_MIX_LERP_X,
404
    LLM_TENSOR_TIME_MIX_LERP_W,
405
    LLM_TENSOR_TIME_MIX_LERP_K,
406
    LLM_TENSOR_TIME_MIX_LERP_V,
407
    LLM_TENSOR_TIME_MIX_LERP_R,
408
    LLM_TENSOR_TIME_MIX_LERP_G,
409
    LLM_TENSOR_TIME_MIX_LERP_FUSED,
410
    LLM_TENSOR_TIME_MIX_FIRST,
411
    LLM_TENSOR_TIME_MIX_DECAY,
412
    LLM_TENSOR_TIME_MIX_DECAY_W1,
413
    LLM_TENSOR_TIME_MIX_DECAY_W2,
414
    LLM_TENSOR_TIME_MIX_KEY,
415
    LLM_TENSOR_TIME_MIX_VALUE,
416
    LLM_TENSOR_TIME_MIX_RECEPTANCE,
417
    LLM_TENSOR_TIME_MIX_GATE,
418
    LLM_TENSOR_TIME_MIX_LN,
419
    LLM_TENSOR_TIME_MIX_OUTPUT,
420
    LLM_TENSOR_CHANNEL_MIX_LERP_K,
421
    LLM_TENSOR_CHANNEL_MIX_LERP_R,
422
    LLM_TENSOR_CHANNEL_MIX_KEY,
423
    LLM_TENSOR_CHANNEL_MIX_RECEPTANCE,
424
    LLM_TENSOR_CHANNEL_MIX_VALUE,
425
    LLM_TENSOR_ATTN_Q_A,
426
    LLM_TENSOR_ATTN_Q_B,
427
    LLM_TENSOR_ATTN_KV_A_MQA,
428
    LLM_TENSOR_ATTN_KV_B,
429
    LLM_TENSOR_ATTN_K_B,
430
    LLM_TENSOR_ATTN_V_B,
431
    LLM_TENSOR_ATTN_Q_A_NORM,
432
    LLM_TENSOR_ATTN_KV_A_NORM,
433
    LLM_TENSOR_ATTN_SUB_NORM,
434
    LLM_TENSOR_FFN_SUB_NORM,
435
    LLM_TENSOR_DEC_ATTN_NORM,
436
    LLM_TENSOR_DEC_ATTN_Q,
437
    LLM_TENSOR_DEC_ATTN_K,
438
    LLM_TENSOR_DEC_ATTN_V,
439
    LLM_TENSOR_DEC_ATTN_OUT,
440
    LLM_TENSOR_DEC_ATTN_REL_B,
441
    LLM_TENSOR_DEC_CROSS_ATTN_NORM,
442
    LLM_TENSOR_DEC_CROSS_ATTN_Q,
443
    LLM_TENSOR_DEC_CROSS_ATTN_K,
444
    LLM_TENSOR_DEC_CROSS_ATTN_V,
445
    LLM_TENSOR_DEC_CROSS_ATTN_OUT,
446
    LLM_TENSOR_DEC_CROSS_ATTN_REL_B,
447
    LLM_TENSOR_DEC_FFN_NORM,
448
    LLM_TENSOR_DEC_FFN_GATE,
449
    LLM_TENSOR_DEC_FFN_DOWN,
450
    LLM_TENSOR_DEC_FFN_UP,
451
    LLM_TENSOR_DEC_OUTPUT_NORM,
452
    LLM_TENSOR_ENC_ATTN_NORM,
453
    LLM_TENSOR_ENC_ATTN_Q,
454
    LLM_TENSOR_ENC_ATTN_K,
455
    LLM_TENSOR_ENC_ATTN_V,
456
    LLM_TENSOR_ENC_ATTN_OUT,
457
    LLM_TENSOR_ENC_ATTN_REL_B,
458
    LLM_TENSOR_ENC_FFN_NORM,
459
    LLM_TENSOR_ENC_FFN_GATE,
460
    LLM_TENSOR_ENC_FFN_DOWN,
461
    LLM_TENSOR_ENC_FFN_UP,
462
    LLM_TENSOR_ENC_OUTPUT_NORM,
463
    LLM_TENSOR_CLS,
464
    LLM_TENSOR_CLS_OUT,
465
    LLM_TENSOR_CONV1D,
466
    LLM_TENSOR_CONVNEXT_DW,
467
    LLM_TENSOR_CONVNEXT_NORM,
468
    LLM_TENSOR_CONVNEXT_PW1,
469
    LLM_TENSOR_CONVNEXT_PW2,
470
    LLM_TENSOR_CONVNEXT_GAMMA,
471
    LLM_TENSOR_POS_NET_CONV1,
472
    LLM_TENSOR_POS_NET_CONV2,
473
    LLM_TENSOR_POS_NET_NORM,
474
    LLM_TENSOR_POS_NET_NORM1,
475
    LLM_TENSOR_POS_NET_NORM2,
476
    LLM_TENSOR_POS_NET_ATTN_NORM,
477
    LLM_TENSOR_POS_NET_ATTN_Q,
478
    LLM_TENSOR_POS_NET_ATTN_K,
479
    LLM_TENSOR_POS_NET_ATTN_V,
480
    LLM_TENSOR_POS_NET_ATTN_OUT,
481
    LLM_TENSOR_SHORTCONV_CONV,
482
    LLM_TENSOR_SHORTCONV_INPROJ,
483
    LLM_TENSOR_SHORTCONV_OUTPROJ,
484
    LLM_TENSOR_VISEXP_ATTN_QKV,
485
    LLM_TENSOR_VISEXP_ATTN_OUT,
486
    LLM_TENSOR_VISEXP_FFN_GATE,
487
    LLM_TENSOR_VISEXP_FFN_DOWN,
488
    LLM_TENSOR_VISEXP_FFN_UP,
489
    LLM_TENSOR_NEXTN_EH_PROJ,
490
    LLM_TENSOR_NEXTN_EMBED_TOKENS,
491
    LLM_TENSOR_NEXTN_ENORM,
492
    LLM_TENSOR_NEXTN_HNORM,
493
    LLM_TENSOR_NEXTN_SHARED_HEAD_HEAD,
494
    LLM_TENSOR_NEXTN_SHARED_HEAD_NORM,
495
};
496
497
enum llm_tensor_layer {
498
    LLM_TENSOR_LAYER_INPUT,
499
    LLM_TENSOR_LAYER_REPEATING,
500
    LLM_TENSOR_LAYER_OUTPUT,
501
};
502
503
struct LLM_KV {
504
    LLM_KV(llm_arch arch, const char * suffix = nullptr);
505
506
    llm_arch arch;
507
    const char * suffix;
508
509
    std::string operator()(llm_kv kv) const;
510
};
511
512
// helper to handle gguf constants
513
// usage:
514
//
515
//   const auto tn = LLM_TN(LLM_ARCH_LLAMA);
516
//
517
//   std::string name = tn(LLM_TENSOR_OUTPUT);                     -> "output"
518
//   std::string name = tn(LLM_TENSOR_TOKEN_EMBD, "bias");         -> "token_embd.bias"
519
//   std::string name = tn(LLM_TENSOR_ATTN_NORM, "weight", 3);     -> "blk.3.attn_norm.weight"
520
//
521
struct LLM_TN_IMPL {
522
    const llm_arch arch;
523
    const llm_tensor tensor;
524
    const char * const suffix;
525
    const int bid;
526
    const int xid;
527
528
    std::string str() const;
529
530
0
    operator std::string() const {
531
0
        return str();
532
0
    }
533
534
0
    friend bool operator==(const std::string & str, const LLM_TN_IMPL & tn) {
535
0
        return str == tn.str();
536
0
    }
537
538
0
    friend bool operator!=(const std::string & str, const LLM_TN_IMPL & tn) {
539
0
        return str != tn.str();
540
0
    }
541
};
542
543
struct LLM_TN {
544
0
    LLM_TN(llm_arch arch) : arch(arch) {}
545
546
    llm_arch arch;
547
548
0
    LLM_TN_IMPL operator()(llm_tensor tensor, const char * suffix, int bid = -1, int xid = -1) const {
549
0
        return { arch, tensor, suffix, bid, xid };
550
0
    }
551
552
0
    LLM_TN_IMPL operator()(llm_tensor tensor, int bid = -1, int xid = -1) const {
553
0
        return { arch, tensor, nullptr, bid, xid };
554
0
    }
555
};
556
557
558
struct llm_tensor_info {
559
    llm_tensor_layer layer;
560
    ggml_op op;
561
};
562
563
const char * llm_arch_name(llm_arch arch);
564
565
llm_arch llm_arch_from_string(const std::string & name);
566
567
const llm_tensor_info & llm_tensor_info_for(llm_tensor tensor);
568
569
bool llm_arch_is_recurrent(const llm_arch & arch);
570
bool llm_arch_is_hybrid   (const llm_arch & arch);
571
bool llm_arch_is_diffusion(const llm_arch & arch);