char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
d7e86430a
char/aliceai-t5-moe
1#pragma once 2 3#include "llama.h" 4#include "llama-arch.h" 5#include "llama-graph.h" 6#include "llama-hparams.h" 7#include "llama-memory.h" 8#include "llama-vocab.h" 9 10#include <map> 11#include <memory> 12#include <string> 13#include <unordered_map> 14#include <unordered_set> 15#include <vector> 16 17struct llama_cparams ; 18struct llama_ubatch ; 19struct llama_model_loader ; 20 21// available models 22enum llm_type { 23LLM_TYPE_UNKNOWN , 24LLM_TYPE_14M , 25LLM_TYPE_17M , 26LLM_TYPE_22M , 27LLM_TYPE_33M , 28LLM_TYPE_47M , 29LLM_TYPE_60M , 30LLM_TYPE_70M , 31LLM_TYPE_80M , 32LLM_TYPE_109M , 33LLM_TYPE_137M , 34LLM_TYPE_140M , 35LLM_TYPE_149M , 36LLM_TYPE_160M , 37LLM_TYPE_190M , 38LLM_TYPE_220M , 39LLM_TYPE_230M , 40LLM_TYPE_250M , 41LLM_TYPE_256M , 42LLM_TYPE_270M , 43LLM_TYPE_335M , 44LLM_TYPE_350M , 45LLM_TYPE_360M , 46LLM_TYPE_395M , 47LLM_TYPE_410M , 48LLM_TYPE_450M , 49LLM_TYPE_475M , 50LLM_TYPE_558M , 51LLM_TYPE_700M , 52LLM_TYPE_770M , 53LLM_TYPE_780M , 54LLM_TYPE_950M , 55LLM_TYPE_0_3B , 56LLM_TYPE_0_5B , 57LLM_TYPE_0_6B , 58LLM_TYPE_0_8B , 59LLM_TYPE_1B , 60LLM_TYPE_1_2B , 61LLM_TYPE_1_3B , 62LLM_TYPE_1_4B , 63LLM_TYPE_1_5B , 64LLM_TYPE_1_6B , 65LLM_TYPE_1_7B , 66LLM_TYPE_1_8B , 67LLM_TYPE_2B , 68LLM_TYPE_2_6B , 69LLM_TYPE_2_8B , 70LLM_TYPE_2_9B , 71LLM_TYPE_3B , 72LLM_TYPE_4B , 73LLM_TYPE_6B , 74LLM_TYPE_6_9B , 75LLM_TYPE_7B , 76LLM_TYPE_8B , 77LLM_TYPE_9B , 78LLM_TYPE_11B , 79LLM_TYPE_12B , 80LLM_TYPE_13B , 81LLM_TYPE_14B , 82LLM_TYPE_15B , 83LLM_TYPE_16B , 84LLM_TYPE_20B , 85LLM_TYPE_26B , 86LLM_TYPE_27B , 87LLM_TYPE_30B , 88LLM_TYPE_31B , 89LLM_TYPE_32B , 90LLM_TYPE_34B , 91LLM_TYPE_35B , 92LLM_TYPE_36B , 93LLM_TYPE_40B , 94LLM_TYPE_65B , 95LLM_TYPE_70B , 96LLM_TYPE_120B , 97LLM_TYPE_142B , 98LLM_TYPE_236B , 99LLM_TYPE_290B , 100LLM_TYPE_314B , 101LLM_TYPE_405B , 102LLM_TYPE_456B , 103LLM_TYPE_671B , 104LLM_TYPE_SMALL , 105LLM_TYPE_MEDIUM , 106LLM_TYPE_LARGE , 107LLM_TYPE_XL , 108LLM_TYPE_A1_7B , 109LLM_TYPE_A2_7B , 110LLM_TYPE_8x7B , 111LLM_TYPE_8x22B , 112LLM_TYPE_16x12B , 113LLM_TYPE_16x3_8B , 114LLM_TYPE_10B_128x3_66B , 115LLM_TYPE_57B_A14B , 116LLM_TYPE_17B_16E ,// llama4 Scout 117LLM_TYPE_17B_128E ,// llama4 Maverick 118LLM_TYPE_A13B , 119LLM_TYPE_1B_A400M ,// Granite3 MoE 120LLM_TYPE_3B_A800M ,// Granite3 MoE 121LLM_TYPE_7B_A1B , 122LLM_TYPE_8B_A1B ,// lfm2moe 123LLM_TYPE_7_9B_A1_3B ,// Ling-3.0-tiny 124LLM_TYPE_12B_A2_5B , 125LLM_TYPE_16B_A1B , 126LLM_TYPE_21B_A3B ,// Ernie MoE small 127LLM_TYPE_24B_A2B ,// lfm2moe 128LLM_TYPE_26B_A4B ,// Gemma4 129LLM_TYPE_30B_A3B , 130LLM_TYPE_31B_A3_5B , 131LLM_TYPE_32B_A9B ,// Granite4 Hybrid 132LLM_TYPE_35B_A3B ,// Qwen3.5 133LLM_TYPE_48B_A3B ,// Kimi Linear 134LLM_TYPE_75B_A9B ,// Nemotron 3 Puzzle 135LLM_TYPE_80B_A3B ,// Qwen3 Next 136LLM_TYPE_A3B ,// Qwen3.8 Flash Next 137LLM_TYPE_100B_A6B , 138LLM_TYPE_102B_A12B ,// Solar-Open 139LLM_TYPE_106B_A12B ,// GLM-4.5-Air 140LLM_TYPE_118B_A8B ,// Laguna-S-2 141LLM_TYPE_120B_A12B ,// Nemotron 3 Super 142LLM_TYPE_122B_A10B ,// Qwen3.5 143LLM_TYPE_124B_A5_1B ,// Ling-3.0-flash 144LLM_TYPE_196B_A11B ,// Step3.5-Flash 145LLM_TYPE_230B_A10B ,// Minimax M2 146LLM_TYPE_428B_A23B ,// Minimax M3 147LLM_TYPE_235B_A22B , 148LLM_TYPE_288B_A19B ,// dots3-note 149LLM_TYPE_300B_A47B ,// Ernie MoE big 150LLM_TYPE_310B_A15B ,// /MiMo-V2-Flash 151LLM_TYPE_355B_A32B ,// GLM-4.5 152LLM_TYPE_397B_A17B ,// Qwen3.5 153LLM_TYPE_685B_A37B ,// DeepSeek V3.2 154LLM_TYPE_744B_A40B ,// GLM-5 155LLM_TYPE_2_8T_A50B ,// Kimi-K3 156LLM_TYPE_E2B , 157LLM_TYPE_E4B , 158}; 159 160std ::string llama_rope_scaling_type_name (llama_rope_scaling_type rope_scaling_type ); 161 162// Map a GGUF activation-name string to llm_ffn_op_type. Returns `fallback` if 163// the string is empty or not recognized. 164llm_ffn_op_type llm_ffn_op_type_from_string (const std ::string & name ,llm_ffn_op_type fallback ); 165 166struct llama_layer_posnet { 167// resnet 168struct ggml_tensor * norm1 = nullptr; 169struct ggml_tensor * norm1_b = nullptr; 170 171struct ggml_tensor * conv1 = nullptr; 172struct ggml_tensor * conv1_b = nullptr; 173 174struct ggml_tensor * norm2 = nullptr; 175struct ggml_tensor * norm2_b = nullptr; 176 177struct ggml_tensor * conv2 = nullptr; 178struct ggml_tensor * conv2_b = nullptr; 179 180// attention 181struct ggml_tensor * attn_norm = nullptr; 182struct ggml_tensor * attn_norm_b = nullptr; 183 184struct ggml_tensor * attn_q = nullptr; 185struct ggml_tensor * attn_q_b = nullptr; 186 187struct ggml_tensor * attn_k = nullptr; 188struct ggml_tensor * attn_k_b = nullptr; 189 190struct ggml_tensor * attn_v = nullptr; 191struct ggml_tensor * attn_v_b = nullptr; 192 193struct ggml_tensor * attn_o = nullptr; 194struct ggml_tensor * attn_o_b = nullptr; 195 196// normalize 197struct ggml_tensor * norm = nullptr; 198struct ggml_tensor * norm_b = nullptr; 199}; 200 201struct llama_layer_convnext { 202struct ggml_tensor * dw = nullptr; 203struct ggml_tensor * dw_b = nullptr; 204 205struct ggml_tensor * norm = nullptr; 206struct ggml_tensor * norm_b = nullptr; 207 208struct ggml_tensor * pw1 = nullptr; 209struct ggml_tensor * pw1_b = nullptr; 210 211struct ggml_tensor * pw2 = nullptr; 212struct ggml_tensor * pw2_b = nullptr; 213 214struct ggml_tensor * gamma = nullptr; 215}; 216 217struct llama_layer_shortconv { 218struct ggml_tensor * in_proj = nullptr; 219struct ggml_tensor * conv = nullptr; 220struct ggml_tensor * out_proj = nullptr; 221}; 222 223struct llama_layer_nextn { 224struct ggml_tensor * eh_proj = nullptr; 225struct ggml_tensor * eh_proj_s = nullptr; 226struct ggml_tensor * eh_proj_in_s = nullptr; 227struct ggml_tensor * embed_tokens = nullptr; 228struct ggml_tensor * enorm = nullptr; 229struct ggml_tensor * hnorm = nullptr; 230struct ggml_tensor * shared_head_head = nullptr; 231struct ggml_tensor * shared_head_head_s = nullptr; 232struct ggml_tensor * shared_head_head_in_s = nullptr; 233struct ggml_tensor * shared_head_norm = nullptr; 234}; 235 236struct llama_layer_switch_lora { 237struct ggml_tensor * a_q = nullptr; 238struct ggml_tensor * b_q = nullptr; 239struct ggml_tensor * a_k = nullptr; 240struct ggml_tensor * b_k = nullptr; 241struct ggml_tensor * a_v = nullptr; 242struct ggml_tensor * b_v = nullptr; 243struct ggml_tensor * a_o = nullptr; 244struct ggml_tensor * b_o = nullptr; 245 246struct ggml_tensor * a_gate = nullptr; 247struct ggml_tensor * b_gate = nullptr; 248struct ggml_tensor * a_up = nullptr; 249struct ggml_tensor * b_up = nullptr; 250struct ggml_tensor * a_down = nullptr; 251struct ggml_tensor * b_down = nullptr; 252}; 253 254struct llama_layer { 255// normalization 256struct ggml_tensor * attn_norm = nullptr; 257struct ggml_tensor * attn_norm_b = nullptr; 258struct ggml_tensor * attn_norm_2 = nullptr; 259struct ggml_tensor * attn_norm_2_b = nullptr; 260struct ggml_tensor * attn_q_norm = nullptr; 261struct ggml_tensor * attn_q_norm_b = nullptr; 262struct ggml_tensor * attn_k_norm = nullptr; 263struct ggml_tensor * attn_k_norm_b = nullptr; 264struct ggml_tensor * attn_out_norm = nullptr; 265struct ggml_tensor * attn_out_norm_b = nullptr; 266struct ggml_tensor * attn_q_a_norm = nullptr; 267struct ggml_tensor * attn_kv_a_norm = nullptr; 268struct ggml_tensor * attn_sub_norm = nullptr; 269struct ggml_tensor * attn_post_norm = nullptr; 270struct ggml_tensor * ffn_sub_norm = nullptr; 271struct ggml_tensor * attn_norm_cross = nullptr; 272struct ggml_tensor * attn_norm_enc = nullptr; 273struct ggml_tensor * ssm_norm = nullptr; 274struct ggml_tensor * ssm_dt_norm = nullptr; 275struct ggml_tensor * ssm_b_norm = nullptr; 276struct ggml_tensor * ssm_c_norm = nullptr; 277 278// attention 279struct ggml_tensor * wq = nullptr; 280struct ggml_tensor * wk = nullptr; 281struct ggml_tensor * wv = nullptr; 282struct ggml_tensor * wo = nullptr; 283struct ggml_tensor * wqkv = nullptr; 284struct ggml_tensor * wg = nullptr; 285struct ggml_tensor * wq_a = nullptr; 286struct ggml_tensor * wq_b = nullptr; 287struct ggml_tensor * wkv_a_mqa = nullptr; 288struct ggml_tensor * wkv_b = nullptr; 289struct ggml_tensor * wkv = nullptr; 290struct ggml_tensor * wk_b = nullptr; 291struct ggml_tensor * wv_b = nullptr; 292struct ggml_tensor * wqkv_b = nullptr; 293struct ggml_tensor * wo_a = nullptr; 294struct ggml_tensor * wo_b = nullptr; 295struct ggml_tensor * wq_cross = nullptr; 296struct ggml_tensor * wk_cross = nullptr; 297struct ggml_tensor * wv_cross = nullptr; 298struct ggml_tensor * wo_cross = nullptr; 299struct ggml_tensor * wq_enc = nullptr; 300struct ggml_tensor * wk_enc = nullptr; 301struct ggml_tensor * wv_enc = nullptr; 302struct ggml_tensor * wo_enc = nullptr; 303struct ggml_tensor * wqkv_gate = nullptr; 304 305// relative position bias 306struct ggml_tensor * attn_rel_b = nullptr; 307struct ggml_tensor * attn_rel_b_enc = nullptr; 308struct ggml_tensor * attn_rel_b_cross = nullptr; 309 310// normalization 311struct ggml_tensor * ffn_norm = nullptr; 312struct ggml_tensor * ffn_norm_b = nullptr; 313struct ggml_tensor * ffn_post_norm = nullptr; 314struct ggml_tensor * ffn_post_norm_1 = nullptr;// gemma4 315struct ggml_tensor * ffn_post_norm_2 = nullptr;// gemma4 316struct ggml_tensor * ffn_pre_norm_2 = nullptr;// gemma4 317struct ggml_tensor * layer_out_norm = nullptr; 318struct ggml_tensor * layer_out_norm_b = nullptr; 319struct ggml_tensor * ffn_norm_exps = nullptr; 320struct ggml_tensor * ffn_norm_enc = nullptr; 321 322// ff 323struct ggml_tensor * ffn_gate = nullptr;// w1 324struct ggml_tensor * ffn_down = nullptr;// w2 325struct ggml_tensor * ffn_up = nullptr;// w3 326struct ggml_tensor * ffn_gate_enc = nullptr; 327struct ggml_tensor * ffn_down_enc = nullptr; 328struct ggml_tensor * ffn_up_enc = nullptr; 329 330// ff MoE 331struct ggml_tensor * ffn_gate_inp = nullptr; 332struct ggml_tensor * ffn_gate_inp_s = nullptr;// gemma4 333struct ggml_tensor * ffn_gate_exps = nullptr; 334struct ggml_tensor * ffn_down_exps = nullptr; 335struct ggml_tensor * ffn_up_exps = nullptr; 336struct ggml_tensor * ffn_gate_up_exps = nullptr; 337struct ggml_tensor * ffn_gate_inp_b = nullptr; 338struct ggml_tensor * ffn_gate_exps_b = nullptr; 339struct ggml_tensor * ffn_down_exps_b = nullptr; 340struct ggml_tensor * ffn_up_exps_b = nullptr; 341struct ggml_tensor * ffn_gate_up_exps_b = nullptr; 342 343// ff MoE per-expert scales (NVFP4 per-tensor scale2) 344struct ggml_tensor * ffn_gate_exps_s = nullptr; 345struct ggml_tensor * ffn_down_exps_s = nullptr; 346struct ggml_tensor * ffn_up_exps_s = nullptr; 347 348// ff MoE latent proj 349struct ggml_tensor * ffn_latent_down = nullptr; 350struct ggml_tensor * ffn_latent_up = nullptr; 351 352// ff shared expert (shexp) 353struct ggml_tensor * ffn_gate_inp_shexp = nullptr; 354struct ggml_tensor * ffn_gate_shexp = nullptr; 355struct ggml_tensor * ffn_down_shexp = nullptr; 356struct ggml_tensor * ffn_up_shexp = nullptr; 357 358// ff adjugate experts (chexps) 359struct ggml_tensor * ffn_gate_chexps = nullptr; 360struct ggml_tensor * ffn_down_chexps = nullptr; 361struct ggml_tensor * ffn_up_chexps = nullptr; 362 363// ff bias 364struct ggml_tensor * ffn_gate_b = nullptr; 365struct ggml_tensor * ffn_down_b = nullptr;// b2 366struct ggml_tensor * ffn_up_b = nullptr;// b3 367struct ggml_tensor * ffn_act = nullptr; 368struct ggml_tensor * ffn_exp_probs_b = nullptr; 369struct ggml_tensor * ffn_exp_probs_b_vl = nullptr;// deepseek4 vision (bias for image tokens) 370struct ggml_tensor * ffn_gate_tid2eid = nullptr; 371 372struct ggml_tensor * dflash_attn_conv_base = nullptr; 373struct ggml_tensor * dflash_attn_conv_proj = nullptr; 374struct ggml_tensor * dflash_ffn_conv_base = nullptr; 375struct ggml_tensor * dflash_ffn_conv_proj = nullptr; 376 377// mamba proj 378struct ggml_tensor * ssm_in = nullptr; 379struct ggml_tensor * ssm_x = nullptr; 380struct ggml_tensor * ssm_dt = nullptr; 381struct ggml_tensor * ssm_out = nullptr; 382 383// mamba 384struct ggml_tensor * ssm_conv1d = nullptr; 385struct ggml_tensor * ssm_a = nullptr; 386struct ggml_tensor * ssm_d = nullptr; 387 388// mamba bias 389struct ggml_tensor * ssm_conv1d_b = nullptr; 390struct ggml_tensor * ssm_dt_b = nullptr; 391 392// qwen3next 393struct ggml_tensor * ssm_beta_alpha = nullptr; 394 395// qwen3.5 396struct ggml_tensor * ssm_alpha = nullptr; 397 398// rwkv 399struct ggml_tensor * time_mix_w1 = nullptr; 400struct ggml_tensor * time_mix_w2 = nullptr; 401struct ggml_tensor * time_mix_lerp_x = nullptr; 402struct ggml_tensor * time_mix_lerp_w = nullptr; 403struct ggml_tensor * time_mix_lerp_k = nullptr; 404struct ggml_tensor * time_mix_lerp_v = nullptr; 405struct ggml_tensor * time_mix_lerp_r = nullptr; 406struct ggml_tensor * time_mix_lerp_g = nullptr; 407struct ggml_tensor * time_mix_lerp_fused = nullptr; 408 409struct ggml_tensor * time_mix_first = nullptr; 410struct ggml_tensor * time_mix_decay = nullptr; 411struct ggml_tensor * time_mix_decay_w1 = nullptr; 412struct ggml_tensor * time_mix_decay_w2 = nullptr; 413struct ggml_tensor * time_mix_key = nullptr; 414struct ggml_tensor * time_mix_key_b = nullptr; 415struct ggml_tensor * time_mix_value = nullptr; 416struct ggml_tensor * time_mix_value_b = nullptr; 417struct ggml_tensor * time_mix_receptance = nullptr; 418struct ggml_tensor * time_mix_receptance_b = nullptr; 419struct ggml_tensor * time_mix_gate = nullptr; 420 421// rwkv7 422struct ggml_tensor * time_mix_w0 = nullptr; 423struct ggml_tensor * time_mix_a0 = nullptr; 424struct ggml_tensor * time_mix_a1 = nullptr; 425struct ggml_tensor * time_mix_a2 = nullptr; 426struct ggml_tensor * time_mix_v0 = nullptr; 427struct ggml_tensor * time_mix_v1 = nullptr; 428struct ggml_tensor * time_mix_v2 = nullptr; 429struct ggml_tensor * time_mix_g1 = nullptr; 430struct ggml_tensor * time_mix_g2 = nullptr; 431struct ggml_tensor * time_mix_k_k = nullptr; 432struct ggml_tensor * time_mix_k_a = nullptr; 433struct ggml_tensor * time_mix_r_k = nullptr; 434 435struct ggml_tensor * time_mix_ln = nullptr; 436struct ggml_tensor * time_mix_ln_b = nullptr; 437struct ggml_tensor * time_mix_output = nullptr; 438 439struct ggml_tensor * channel_mix_lerp_k = nullptr; 440struct ggml_tensor * channel_mix_lerp_r = nullptr; 441 442struct ggml_tensor * channel_mix_key = nullptr; 443struct ggml_tensor * channel_mix_receptance = nullptr; 444struct ggml_tensor * channel_mix_value = nullptr; 445 446// long rope factors 447struct ggml_tensor * rope_long = nullptr; 448struct ggml_tensor * rope_short = nullptr; 449struct ggml_tensor * rope_freqs = nullptr; 450 451// bitnet scale 452struct ggml_tensor * wq_s = nullptr; 453struct ggml_tensor * wk_s = nullptr; 454struct ggml_tensor * wv_s = nullptr; 455struct ggml_tensor * wo_s = nullptr; 456struct ggml_tensor * wqkv_s = nullptr; 457struct ggml_tensor * wqkv_gate_s = nullptr; 458struct ggml_tensor * ffn_gate_s = nullptr; 459struct ggml_tensor * ffn_up_s = nullptr; 460struct ggml_tensor * ffn_down_s = nullptr; 461struct ggml_tensor * ffn_gate_shexp_s = nullptr; 462struct ggml_tensor * ffn_up_shexp_s = nullptr; 463struct ggml_tensor * ffn_down_shexp_s = nullptr; 464struct ggml_tensor * ssm_in_s = nullptr; 465struct ggml_tensor * ssm_out_s = nullptr; 466struct ggml_tensor * ssm_alpha_s = nullptr; 467struct ggml_tensor * ssm_beta_s = nullptr; 468 469// input scales 470struct ggml_tensor * wq_in_s = nullptr; 471struct ggml_tensor * wk_in_s = nullptr; 472struct ggml_tensor * wv_in_s = nullptr; 473struct ggml_tensor * wo_in_s = nullptr; 474struct ggml_tensor * wqkv_in_s = nullptr; 475struct ggml_tensor * wqkv_gate_in_s = nullptr; 476struct ggml_tensor * ffn_gate_in_s = nullptr; 477struct ggml_tensor * ffn_up_in_s = nullptr; 478struct ggml_tensor * ffn_down_in_s = nullptr; 479struct ggml_tensor * ffn_gate_exps_in_s = nullptr; 480struct ggml_tensor * ffn_down_exps_in_s = nullptr; 481struct ggml_tensor * ffn_up_exps_in_s = nullptr; 482struct ggml_tensor * ffn_gate_shexp_in_s = nullptr; 483struct ggml_tensor * ffn_up_shexp_in_s = nullptr; 484struct ggml_tensor * ffn_down_shexp_in_s = nullptr; 485struct ggml_tensor * ssm_in_in_s = nullptr; 486struct ggml_tensor * ssm_out_in_s = nullptr; 487struct ggml_tensor * ssm_alpha_in_s = nullptr; 488struct ggml_tensor * ssm_beta_in_s = nullptr; 489 490// altup & laurel 491struct ggml_tensor * per_layer_inp_gate = nullptr; 492struct ggml_tensor * per_layer_proj = nullptr; 493struct ggml_tensor * per_layer_post_norm = nullptr; 494struct ggml_tensor * altup_correct_coef = nullptr; 495struct ggml_tensor * altup_correct_scale = nullptr; 496struct ggml_tensor * altup_predict_coef = nullptr; 497struct ggml_tensor * altup_router = nullptr; 498struct ggml_tensor * altup_router_norm = nullptr; 499struct ggml_tensor * laurel_l = nullptr; 500struct ggml_tensor * laurel_r = nullptr; 501struct ggml_tensor * laurel_post_norm = nullptr; 502 503// openai-moe 504struct ggml_tensor * attn_sinks = nullptr; 505 506// DeepSeek-V4 507struct ggml_tensor * attn_kv_norm = nullptr; 508struct ggml_tensor * hc_attn_fn = nullptr; 509struct ggml_tensor * hc_attn_base = nullptr; 510struct ggml_tensor * hc_attn_scale = nullptr; 511struct ggml_tensor * hc_ffn_fn = nullptr; 512struct ggml_tensor * hc_ffn_base = nullptr; 513struct ggml_tensor * hc_ffn_scale = nullptr; 514struct ggml_tensor * attn_comp_wkv = nullptr; 515struct ggml_tensor * attn_comp_wgate = nullptr; 516struct ggml_tensor * attn_comp_ape = nullptr; 517struct ggml_tensor * attn_comp_norm = nullptr; 518struct ggml_tensor * indexer_comp_wkv = nullptr; 519struct ggml_tensor * indexer_comp_wgate = nullptr; 520struct ggml_tensor * indexer_comp_ape = nullptr; 521struct ggml_tensor * indexer_comp_norm = nullptr; 522 523// cogvlm 524struct ggml_tensor * visexp_attn_wqkv = nullptr; 525struct ggml_tensor * visexp_attn_wo = nullptr; 526struct ggml_tensor * visexp_ffn_gate = nullptr; 527struct ggml_tensor * visexp_ffn_down = nullptr; 528struct ggml_tensor * visexp_ffn_up = nullptr; 529 530// xIELU activation parameters for Apertus 531struct ggml_tensor * ffn_act_alpha_n = nullptr; 532struct ggml_tensor * ffn_act_alpha_p = nullptr; 533struct ggml_tensor * ffn_act_beta = nullptr; 534struct ggml_tensor * ffn_act_eps = nullptr; 535 536// Kimi Linear KDA (using ssm_ prefix for consistency) 537// Note: ssm_dt_b already exists above (mamba bias), reused for Kimi dt_bias 538struct ggml_tensor * ssm_q_conv = nullptr; 539struct ggml_tensor * ssm_k_conv = nullptr; 540struct ggml_tensor * ssm_v_conv = nullptr; 541struct ggml_tensor * ssm_f_a = nullptr; 542struct ggml_tensor * ssm_f_b = nullptr; 543struct ggml_tensor * ssm_beta = nullptr; 544struct ggml_tensor * ssm_g_a = nullptr; 545struct ggml_tensor * ssm_g_b = nullptr; 546struct ggml_tensor * ssm_o_norm = nullptr; 547 548// kimi-k3 549struct ggml_tensor * ssm_g = nullptr;// full-rank KDA gate (replaces ssm_g_a/ssm_g_b) 550struct ggml_tensor * attn_res_score = nullptr;// fused res_norm*res_proj, pre-attention 551struct ggml_tensor * ffn_res_score = nullptr;// fused res_norm*res_proj, pre-FFN 552struct ggml_tensor * ffn_routed_down = nullptr;// latent MoE: n_embd -> n_expert_latent 553struct ggml_tensor * ffn_routed_up = nullptr;// latent MoE: n_expert_latent -> n_embd 554struct ggml_tensor * ffn_routed_norm = nullptr; 555 556// DSA (deepseek sparse attention) 557struct ggml_tensor * indexer_k_norm = nullptr; 558struct ggml_tensor * indexer_k_norm_b = nullptr; 559struct ggml_tensor * indexer_proj = nullptr; 560struct ggml_tensor * indexer_attn_k = nullptr; 561struct ggml_tensor * indexer_attn_q_b = nullptr;// note: for lora a/b, not bias 562 563// MSA 564struct ggml_tensor * index_q_proj = nullptr; 565struct ggml_tensor * index_k_proj = nullptr; 566struct ggml_tensor * index_q_norm = nullptr; 567struct ggml_tensor * index_k_norm = nullptr; 568 569struct ggml_tensor * hc_attn_norm = nullptr; 570struct ggml_tensor * hc_attn_down = nullptr; 571struct ggml_tensor * hc_attn_up = nullptr; 572struct ggml_tensor * hc_attn_inject = nullptr; 573struct ggml_tensor * hc_ffn_norm = nullptr; 574struct ggml_tensor * hc_ffn_down = nullptr; 575struct ggml_tensor * hc_ffn_up = nullptr; 576struct ggml_tensor * hc_ffn_inject = nullptr; 577 578struct ggml_tensor * ple_key = nullptr; 579struct ggml_tensor * ple_value = nullptr; 580struct ggml_tensor * ple_norm_key = nullptr; 581struct ggml_tensor * ple_norm_query = nullptr; 582struct ggml_tensor * ple_norm_conv = nullptr; 583struct ggml_tensor * ple_conv1d = nullptr; 584 585// gemma4 layer output scale, reused for talkie embedding skip scale 586struct ggml_tensor * out_scale = nullptr; 587 588struct llama_layer_posnet posnet ; 589 590struct llama_layer_convnext convnext ; 591 592struct llama_layer_shortconv shortconv ; 593 594struct llama_layer_nextn nextn ; 595 596struct llama_layer_switch_lora switch_lora ; 597}; 598 599struct llama_device { 600bool is_meta ; 601 602ggml_backend_dev_t dev ; 603}; 604 605struct llama_meta_device_get_split_state_userdata { 606size_t n_devices ; 607const struct llama_model * model ; 608}; 609 610struct ggml_backend_meta_split_state llama_meta_device_get_split_state (const struct ggml_tensor * tensor ,void * userdata ); 611 612struct llama_model { 613llm_type type = LLM_TYPE_UNKNOWN ; 614llm_arch arch = LLM_ARCH_UNKNOWN ; 615 616std ::string name = "n/a" ; 617 618llama_hparams hparams = {}; 619llama_vocab vocab ; 620 621// for classifier models 622std ::vector < std ::string > classifier_labels ; 623 624struct ggml_tensor * tok_embd = nullptr ; 625struct ggml_tensor * type_embd = nullptr ; 626struct ggml_tensor * pos_embd = nullptr ; 627struct ggml_tensor * tok_norm = nullptr ; 628struct ggml_tensor * tok_norm_b = nullptr ; 629 630struct ggml_tensor * output_norm = nullptr ; 631struct ggml_tensor * output_res_score = nullptr ;// kimi-k3: final cross-layer residual mix 632struct ggml_tensor * output_norm_b = nullptr ; 633struct ggml_tensor * output = nullptr ; 634struct ggml_tensor * output_b = nullptr ; 635struct ggml_tensor * output_norm_enc = nullptr ; 636 637 638// NVFP4 per-tensor scale2, input_scale for LM head 639struct ggml_tensor * output_s = nullptr ; 640struct ggml_tensor * output_in_s = nullptr ; 641 642// NextN/MTP model-level projections 643struct ggml_tensor * nextn_proj_pre = nullptr ; 644struct ggml_tensor * nextn_proj_post = nullptr ; 645 646// DeepSeek-V4 647struct ggml_tensor * hc_head_fn = nullptr ; 648struct ggml_tensor * hc_head_base = nullptr ; 649struct ggml_tensor * hc_head_scale = nullptr ; 650 651// classifier 652struct ggml_tensor * cls = nullptr ; 653struct ggml_tensor * cls_b = nullptr ; 654struct ggml_tensor * cls_out = nullptr ; 655struct ggml_tensor * cls_out_b = nullptr ; 656struct ggml_tensor * cls_norm = nullptr ; 657 658struct ggml_tensor * conv1d = nullptr ; 659struct ggml_tensor * conv1d_b = nullptr ; 660 661// gemma3n altup 662struct ggml_tensor * altup_proj = nullptr ; 663struct ggml_tensor * altup_unembd_proj = nullptr ; 664struct ggml_tensor * per_layer_tok_embd = nullptr ; 665 666struct ggml_tensor * hc_head_norm = nullptr ; 667struct ggml_tensor * hc_head_down = nullptr ; 668struct ggml_tensor * hc_head_up = nullptr ; 669struct ggml_tensor * per_layer_model_proj = nullptr ; 670struct ggml_tensor * per_layer_proj_norm = nullptr ; 671 672// eagle3 / dflash feature fusion layer 673struct ggml_tensor * fc = nullptr ; 674struct ggml_tensor * fc_s = nullptr ; 675struct ggml_tensor * d2t = nullptr ;// draft to target vocabulary mapping 676 677// dspark 678struct ggml_tensor * dspark_markov_w1 = nullptr ; 679struct ggml_tensor * dspark_markov_w2 = nullptr ; 680struct ggml_tensor * dspark_markov_w2_s = nullptr ; 681struct ggml_tensor * dspark_conf_proj = nullptr ; 682struct ggml_tensor * dspark_conf_proj_b = nullptr ; 683 684struct ggml_tensor * dflash_selector_prev = nullptr ; 685struct ggml_tensor * dflash_selector_next = nullptr ; 686struct ggml_tensor * dflash_selector_hidden = nullptr ; 687 688// unified vector to store target-model extracted layer ids in eagle3, dflash, etc. 689std ::vector < int32_t > target_layer_ids ; 690 691std ::vector < llama_layer > layers ; 692 693//Dense linear projections for SentenceTransformers models like embeddinggemma 694// For Sentence Transformers models structure see 695// https://sbert.net/docs/sentence_transformer/usage/custom_models.html#structure-of-sentence-transformer-models 696struct ggml_tensor * dense_2_out_layers = nullptr ; 697struct ggml_tensor * dense_2_out_layers_b = nullptr ; 698struct ggml_tensor * dense_3_out_layers = nullptr ; 699 700// gguf metadata 701std ::unordered_map < std ::string ,std ::string > gguf_kv ; 702 703// list of devices used in this model 704std ::vector < llama_device > devices ; 705 706// for quantize-stats only 707std ::vector < std ::pair < std ::string ,struct ggml_tensor * >>tensors_by_name ; 708 709// for keeping track of associated LoRA adapters 710std ::unordered_set < llama_adapter_lora *> loras ; 711 712// statically allocated context for assigning 713struct llama_meta_device_get_split_state_userdata get_split_state_ud ; 714 715int64_t t_load_us = 0 ; 716int64_t t_start_us = 0 ; 717 718explicit llama_model (const llama_model_params & params ); 719virtual ~llama_model (); 720 721std ::string arch_name ()const ; 722std ::string type_name ()const ; 723 724std ::string desc ()const ; 725 726llama_ftype ftype ()const ; 727 728size_t size ()const ;// file size 729size_t n_tensors ()const ; 730size_t n_devices ()const ; 731const float * tensor_split ()const ; 732 733uint32_t n_gpu_layers ()const ; 734llama_split_mode split_mode ()const ; 735 736std ::map < ggml_backend_buffer_type_t ,size_t > memory_breakdown ()const ; 737 738// total number of parameters in the model 739uint64_t n_elements ()const ; 740 741void print_info ()const ; 742 743ggml_backend_dev_t dev_layer (int il )const ; 744ggml_backend_dev_t dev_output ()const ; 745 746ggml_backend_buffer_type_t select_buft (int il )const ; 747 748bool has_tensor_overrides ()const ; 749 750const struct ggml_tensor * get_tensor (const char * name )const ; 751 752float get_rope_freq_base (const llama_cparams & cparams ,int il )const ; 753float get_rope_freq_scale (const llama_cparams & cparams ,int il )const ; 754 755ggml_tensor * get_rope_factors (const llama_cparams & cparams ,int il )const ; 756 757llama_memory_i * create_memory (const llama_memory_params & params ,const llama_cparams & cparams )const ; 758 759ggml_cgraph * build_graph (const llm_graph_params & params )const ; 760 761virtual void load_stats (llama_model_loader & ml )= 0 ; 762virtual void load_hparams (llama_model_loader & ml )= 0 ; 763virtual void load_vocab (llama_model_loader & ml )= 0 ; 764virtual bool load_tensors (llama_model_loader & ml )= 0 ;// returns false if cancelled by progress_callback 765 766// model must define these 767virtual void load_arch_hparams (llama_model_loader & ml )= 0 ; 768virtual void load_arch_tensors (llama_model_loader & ml )= 0 ; 769virtual std ::unique_ptr < llm_graph_context > build_arch_graph (const llm_graph_params & params )const = 0 ; 770 771protected : 772llama_model_params params ; 773 774struct impl ; 775std ::unique_ptr < impl > pimpl ; 776}; 777 778llama_model * llama_model_create (llm_arch arch ,const llama_model_params & params ); 779llama_model * llama_model_create (llama_model_loader & ml ,const llama_model_params & params ); 780 781// model must inherit from this 782struct llama_model_base :public llama_model { 783friend struct llama_model ; 784 785llama_model * model ; 786llama_model_loader * ml = nullptr ; 787const LLM_TN tn ; 788 789// llama_model_loader is not yet defined at this point, so we will set it after construction 790const int TENSOR_DUPLICATED ; 791const int TENSOR_NOT_REQUIRED ; 792const int TENSOR_SKIP ; 793const int TENSOR_SKIP_IF_VIRTUAL ; 794const int TENSOR_ALLOW_RESHAPE ; 795const int TENSOR_READ_LAZY ; 796 797explicit llama_model_base (const llama_model_params & params ); 798virtual ~llama_model_base ()= default ; 799 800ggml_tensor * create_tensor (llama_model_loader & ml ,const LLM_TN_IMPL & tn ,const std ::initializer_list < int64_t > & ne ,int flags ); 801 802// convenience overload of create_tensor that doesn't require llama_model_loader 803ggml_tensor * create_tensor (const LLM_TN_IMPL & tn ,const std ::initializer_list < int64_t > & ne ,int flags ); 804 805// helper: try merged gate_up_exps first, fall back to separate gate and up 806void create_tensor_gate_up_exps (llama_layer & layer ,int bid ,int64_t n_embd_ , 807int64_t n_ff_ ,int64_t n_expert_ ,int flags ); 808 809// helper: try to load merged qkv first, fall back to separate q, k, v 810void create_tensor_qkv (llama_layer & layer ,int bid , 811int64_t n_embd_ ,int64_t n_embd_q_ ,int64_t n_embd_k_ ,int64_t n_embd_v_ , 812int flags ); 813 814void load_stats (llama_model_loader & ml )override ; 815void load_hparams (llama_model_loader & ml )override ; 816void load_vocab (llama_model_loader & ml )override ; 817bool load_tensors (llama_model_loader & ml )override ; 818 819// model must define these 820void load_arch_hparams (llama_model_loader & ml )override = 0 ; 821void load_arch_tensors (llama_model_loader & ml )override = 0 ; 822std ::unique_ptr < llm_graph_context > build_arch_graph (const llm_graph_params & params )const override = 0 ; 823}; 824 825const char * llm_type_name (llm_type type ); 826 827// convenience macro for loading local variables for load_tensors() in llama_model_base 828// note: cast to int64_t since we will use these for the tensor dimensions 829#define LLAMA_LOAD_LOCALS \ 830const int n_layer = hparams .n_layer ();GGML_UNUSED (n_layer ); \ 831const int n_layer_all = hparams .n_layer_all ;GGML_UNUSED (n_layer_all ); \ 832const int n_layer_nextn = hparams .n_layer_nextn ;GGML_UNUSED (n_layer_nextn ); \ 833const int64_t n_head = hparams .n_head ();GGML_UNUSED (n_head ); \ 834const int64_t n_head_kv = hparams .n_head_kv ();GGML_UNUSED (n_head_kv ); \ 835const int64_t n_embd = hparams .n_embd ;GGML_UNUSED (n_embd ); \ 836const int64_t n_embd_k_gqa = hparams .n_embd_k_gqa ();GGML_UNUSED (n_embd_k_gqa ); \ 837const int64_t n_embd_v_gqa = hparams .n_embd_v_gqa ();GGML_UNUSED (n_embd_v_gqa ); \ 838const int64_t n_embd_head_k = hparams .n_embd_head_k ();GGML_UNUSED (n_embd_head_k ); \ 839const int64_t n_embd_head_v = hparams .n_embd_head_v ();GGML_UNUSED (n_embd_head_v ); \ 840const int64_t n_ff = hparams .n_ff ();GGML_UNUSED (n_ff ); \ 841const int64_t n_embd_gqa = n_embd_v_gqa ;GGML_UNUSED (n_embd_gqa ); \ 842const int64_t n_vocab = vocab .n_tokens ();GGML_UNUSED (n_vocab ); \ 843const int64_t n_token_types = vocab .n_token_types ();GGML_UNUSED (n_token_types ); \ 844const int64_t n_rot = hparams .n_rot ();GGML_UNUSED (n_rot ); \ 845const int64_t n_expert = hparams .n_expert ;GGML_UNUSED (n_expert ); \ 846const int64_t n_expert_used = hparams .n_expert_used ();GGML_UNUSED (n_expert_used ); \ 847const int64_t n_ctx_train = hparams .n_ctx_train ;GGML_UNUSED (n_ctx_train ); 848 849// For internal test use 850// TODO: remove 851const std ::vector < std ::pair < std ::string ,ggml_tensor * >>& llama_internal_get_tensor_map (const llama_model * model );