Skip to content

Commit f9a3dfc

Browse files
author
fukuro
committed
feat: Adapter für neue GGUF-Metadata-Keys (QAT + MTP Q4_0 Draft)
Cherry-pick von 673629f4d (archive/cherry-dflash) + Erweiterungen: - LLM_KV arch_name-Override: nutzt originalen arch_name aus GGUF als Key-Prefix (z.B. 'gemma4-assistant' mit Bindestrich) - Arch-Aliase vereinheitlicht: gemma4-assistant, gemma4_assistant, gemma4_mtp alle -> LLM_ARCH_GEMMA4_ASSISTANT - embedding_length_out als Fallback für n_embd_backbone (upstream PR ggml-org#23398 nutzt embedding_length_out statt n_embd_backbone) - n_layer_nextn Default auf n_layer_all falls Key fehlt Ermöglicht Laden von neuen QAT-Modellen und MTP Q4_0 Draft-Modellen die mit upstream llama.cpp PR ggml-org#23398 (b9549) konvertiert wurden.
1 parent 698379d commit f9a3dfc

4 files changed

Lines changed: 30 additions & 9 deletions

File tree

src/llama-arch.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -823,8 +823,12 @@ static const std::map<llm_tensor, llm_tensor_info> LLM_TENSOR_INFOS = {
823823

824824
LLM_KV::LLM_KV(llm_arch arch, const char * suffix) : arch(arch), suffix(suffix) {}
825825

826+
LLM_KV::LLM_KV(llm_arch arch, const std::string & arch_name, const char * suffix)
827+
: arch(arch), arch_name(arch_name), suffix(suffix) {}
828+
826829
std::string LLM_KV::operator()(llm_kv kv) const {
827-
std::string name = ::format(LLM_KV_NAMES.at(kv), LLM_ARCH_NAMES.at(arch));
830+
const char * prefix = arch_name.empty() ? LLM_ARCH_NAMES.at(arch) : arch_name.c_str();
831+
std::string name = ::format(LLM_KV_NAMES.at(kv), prefix);
828832

829833
if (suffix != nullptr) {
830834
name += ".";
@@ -875,9 +879,17 @@ llm_arch llm_arch_from_string(const std::string & name) {
875879
}
876880
}
877881

878-
// Aliases for compatibility with older GGUF files
879-
if (name == "gemma4-assistant" || name == "gemma4_mtp") {
880-
return LLM_ARCH_GEMMA4_ASSISTANT;
882+
// Aliases for compatibility with different GGUF converters
883+
// - Upstream PR #23398 uses "gemma4-assistant" (hyphen)
884+
// - Older converters use "gemma4_assistant" (underscore)
885+
static const std::map<std::string, llm_arch> LLM_ARCH_ALIASES = {
886+
{ "gemma4-assistant", LLM_ARCH_GEMMA4_ASSISTANT },
887+
{ "gemma4_assistant", LLM_ARCH_GEMMA4_ASSISTANT },
888+
{ "gemma4_mtp", LLM_ARCH_GEMMA4_ASSISTANT },
889+
};
890+
auto it = LLM_ARCH_ALIASES.find(name);
891+
if (it != LLM_ARCH_ALIASES.end()) {
892+
return it->second;
881893
}
882894

883895
return LLM_ARCH_UNKNOWN;

src/llama-arch.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -604,8 +604,10 @@ enum llm_tensor_layer {
604604

605605
struct LLM_KV {
606606
LLM_KV(llm_arch arch, const char * suffix = nullptr);
607+
LLM_KV(llm_arch arch, const std::string & arch_name, const char * suffix = nullptr);
607608

608-
llm_arch arch;
609+
llm_arch arch;
610+
std::string arch_name; // override key prefix (empty = use LLM_ARCH_NAMES.at(arch))
609611
const char * suffix;
610612

611613
std::string operator()(llm_kv kv) const;

src/llama-model-loader.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ llama_model_loader::llama_model_loader(
553553
}
554554

555555
get_key(llm_kv(LLM_KV_GENERAL_ARCHITECTURE), arch_name, false);
556-
llm_kv = LLM_KV(llm_arch_from_string(arch_name));
556+
llm_kv = LLM_KV(llm_arch_from_string(arch_name), arch_name);
557557

558558
files.emplace_back(new llama_file(fname.c_str(), "rb", use_direct_io));
559559
contexts.emplace_back(ctx);
@@ -679,7 +679,7 @@ llama_model_loader::llama_model_loader(
679679
}
680680

681681
get_key(llm_kv(LLM_KV_GENERAL_ARCHITECTURE), arch_name, false);
682-
llm_kv = LLM_KV(llm_arch_from_string(arch_name));
682+
llm_kv = LLM_KV(llm_arch_from_string(arch_name), arch_name);
683683

684684
files.emplace_back(new llama_file(file));
685685
contexts.emplace_back(ctx);
@@ -697,7 +697,7 @@ llama_model_loader::llama_model_loader(
697697
}
698698
} else {
699699
get_key(llm_kv(LLM_KV_GENERAL_ARCHITECTURE), arch_name, false);
700-
llm_kv = LLM_KV(llm_arch_from_string(arch_name));
700+
llm_kv = LLM_KV(llm_arch_from_string(arch_name), arch_name);
701701
}
702702

703703
n_kv = gguf_get_n_kv(metadata);

src/models/gemma4-assistant.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,15 @@
44

55
void llama_model_gemma4_assistant::load_arch_hparams(llama_model_loader & ml) {
66
// Read backbone embedding length (target model hidden size)
7-
// Older GGUF files use n_embd_backbone, newer ones use embedding_length_out
7+
// Three sources, in priority order:
8+
// 1. n_embd_backbone (older GGUF converters, e.g. TheTom's)
9+
// 2. embedding_length_out (upstream PR #23398, newer converters)
10+
// 3. n_embd (fallback — wrong for MTP but avoids crash)
811
ml.get_key(LLM_KV_EMBEDDING_LENGTH_BACKBONE, hparams.n_embd_backbone, false);
12+
if (hparams.n_embd_backbone == 0) {
13+
// n_embd_out_impl was already set from embedding_length_out in llama-model.cpp
14+
hparams.n_embd_backbone = hparams.n_embd_out_impl;
15+
}
916
if (hparams.n_embd_backbone == 0) {
1017
hparams.n_embd_backbone = hparams.n_embd;
1118
}

0 commit comments

Comments
 (0)