@@ -57,6 +57,7 @@ static const std::map<llm_arch, const char *> LLM_ARCH_NAMES = {
5757 { LLM_ARCH_GEMMA3 , " gemma3" },
5858 { LLM_ARCH_GEMMA3N , " gemma3n" },
5959 { LLM_ARCH_GEMMA4 , " gemma4" },
60+ { LLM_ARCH_GEMMA4_ASSISTANT , " gemma4-assistant" },
6061 { LLM_ARCH_GEMMA_EMBEDDING , " gemma-embedding" },
6162 { LLM_ARCH_STARCODER2 , " starcoder2" },
6263 { LLM_ARCH_MAMBA , " mamba" },
@@ -75,6 +76,7 @@ static const std::map<llm_arch, const char *> LLM_ARCH_NAMES = {
7576 { LLM_ARCH_DEEPSEEK , " deepseek" },
7677 { LLM_ARCH_DEEPSEEK2 , " deepseek2" },
7778 { LLM_ARCH_DEEPSEEK2OCR , " deepseek2-ocr" },
79+ { LLM_ARCH_DEEPSEEK32 , " deepseek32" },
7880 { LLM_ARCH_CHATGLM , " chatglm" },
7981 { LLM_ARCH_GLM4 , " glm4" },
8082 { LLM_ARCH_GLM4_MOE , " glm4moe" },
@@ -134,6 +136,7 @@ static const std::map<llm_arch, const char *> LLM_ARCH_NAMES = {
134136 { LLM_ARCH_MAINCODER , " maincoder" },
135137 { LLM_ARCH_KIMI_LINEAR , " kimi-linear" },
136138 { LLM_ARCH_TALKIE , " talkie" },
139+ { LLM_ARCH_MELLUM , " mellum" },
137140 { LLM_ARCH_UNKNOWN , " (unknown)" },
138141};
139142
@@ -194,6 +197,8 @@ static const std::map<llm_kv, const char *> LLM_KV_NAMES = {
194197 { LLM_KV_MOE_LATENT_SIZE , " %s.moe_latent_size" },
195198 { LLM_KV_NEXTN_PREDICT_LAYERS , " %s.nextn_predict_layers" },
196199 { LLM_KV_NUM_DEEPSTACK_LAYERS , " %s.n_deepstack_layers" },
200+ { LLM_KV_DEEPSTACK_MAPPING , " %s.deepstack_mapping" },
201+ { LLM_KV_HIDDEN_ACT , " %s.hidden_activation" },
197202 { LLM_KV_POOLING_TYPE , " %s.pooling_type" },
198203 { LLM_KV_LOGIT_SCALE , " %s.logit_scale" },
199204 { LLM_KV_DECODER_START_TOKEN_ID , " %s.decoder_start_token_id" },
@@ -244,6 +249,7 @@ static const std::map<llm_kv, const char *> LLM_KV_NAMES = {
244249 { LLM_KV_ATTENTION_INDEXER_KEY_LENGTH , " %s.attention.indexer.key_length" },
245250 { LLM_KV_ATTENTION_INDEXER_TOP_K , " %s.attention.indexer.top_k" },
246251 { LLM_KV_ATTENTION_SHARED_KV_LAYERS , " %s.attention.shared_kv_layers" },
252+ { LLM_KV_ATTENTION_RECURRENT_LAYERS , " %s.attention.recurrent_layers" },
247253
248254 { LLM_KV_ROPE_DIMENSION_COUNT , " %s.rope.dimension_count" },
249255 { LLM_KV_ROPE_DIMENSION_COUNT_SWA , " %s.rope.dimension_count_swa" },
@@ -318,12 +324,14 @@ static const std::map<llm_kv, const char *> LLM_KV_NAMES = {
318324 { LLM_KV_TOKENIZER_HF_JSON , " tokenizer.huggingface.json" },
319325 { LLM_KV_TOKENIZER_RWKV , " tokenizer.rwkv.world" },
320326 { LLM_KV_TOKENIZER_CHAT_TEMPLATE , " tokenizer.chat_template" },
327+ { LLM_KV_TOKENIZER_NORMALIZER_LOWERCASE , " tokenizer.ggml.normalizer.lowercase" },
321328 { LLM_KV_TOKENIZER_FIM_PRE_ID , " tokenizer.ggml.fim_pre_token_id" },
322329 { LLM_KV_TOKENIZER_FIM_SUF_ID , " tokenizer.ggml.fim_suf_token_id" },
323330 { LLM_KV_TOKENIZER_FIM_MID_ID , " tokenizer.ggml.fim_mid_token_id" },
324331 { LLM_KV_TOKENIZER_FIM_PAD_ID , " tokenizer.ggml.fim_pad_token_id" },
325332 { LLM_KV_TOKENIZER_FIM_REP_ID , " tokenizer.ggml.fim_rep_token_id" },
326333 { LLM_KV_TOKENIZER_FIM_SEP_ID , " tokenizer.ggml.fim_sep_token_id" },
334+ { LLM_KV_TOKENIZER_SUPPRESS_TOKENS , " tokenizer.ggml.suppress_tokens" },
327335
328336 { LLM_KV_ADAPTER_TYPE , " adapter.type" },
329337 { LLM_KV_ADAPTER_LORA_ALPHA , " adapter.lora.alpha" },
@@ -446,6 +454,8 @@ static const std::map<llm_tensor, const char *> LLM_TENSOR_NAMES = {
446454 { LLM_TENSOR_FFN_NORM_EXPS , " blk.%d.ffn_norm_exps" },
447455 { LLM_TENSOR_ATTN_K_B , " blk.%d.attn_k_b" },
448456 { LLM_TENSOR_ATTN_V_B , " blk.%d.attn_v_b" },
457+ { LLM_TENSOR_NEXTN_PROJ_PRE , " nextn.pre_projection" },
458+ { LLM_TENSOR_NEXTN_PROJ_POST , " nextn.post_projection" },
449459 { LLM_TENSOR_NEXTN_EH_PROJ , " blk.%d.nextn.eh_proj" },
450460 { LLM_TENSOR_NEXTN_EMBED_TOKENS , " blk.%d.nextn.embed_tokens" },
451461 { LLM_TENSOR_NEXTN_ENORM , " blk.%d.nextn.enorm" },
@@ -758,6 +768,8 @@ static const std::map<llm_tensor, llm_tensor_info> LLM_TENSOR_INFOS = {
758768 {LLM_TENSOR_INDEXER_PROJ , {LLM_TENSOR_LAYER_REPEATING , GGML_OP_MUL_MAT }},
759769 {LLM_TENSOR_INDEXER_ATTN_K , {LLM_TENSOR_LAYER_REPEATING , GGML_OP_MUL_MAT }},
760770 {LLM_TENSOR_INDEXER_ATTN_Q_B , {LLM_TENSOR_LAYER_REPEATING , GGML_OP_MUL_MAT }},
771+ {LLM_TENSOR_NEXTN_PROJ_PRE , {LLM_TENSOR_LAYER_REPEATING , GGML_OP_MUL_MAT }},
772+ {LLM_TENSOR_NEXTN_PROJ_POST , {LLM_TENSOR_LAYER_OUTPUT , GGML_OP_MUL_MAT }},
761773 // NextN/MTP tensors are stored per-block (blk.%d.nextn.*) even though only the
762774 // last nextn_predict_layers blocks carry them. Classify as LAYER_REPEATING so
763775 // the model loader doesn't fault on the block index.
@@ -904,6 +916,7 @@ bool llm_arch_supports_sm_tensor(const llm_arch & arch) {
904916 case LLM_ARCH_OLMO2 :
905917 case LLM_ARCH_OLMOE :
906918 case LLM_ARCH_DEEPSEEK2 :
919+ case LLM_ARCH_DEEPSEEK32 :
907920 case LLM_ARCH_GLM_DSA :
908921 case LLM_ARCH_BITNET :
909922 case LLM_ARCH_T5 :
0 commit comments