From 5a3b2e39213521ee9b75ce36756e2b0254247524 Mon Sep 17 00:00:00 2001 From: Concedo <39025047+LostRuins@users.noreply.github.com> Date: Sat, 12 Jul 2025 10:05:15 +0800 Subject: [PATCH] fix for jamba models - they have recurrent layers like rwkv, so context shifting and forwarding wont work on them. --- gpttype_adapter.cpp | 14 +++++++------- model_adapter.cpp | 4 ++++ model_adapter.h | 1 + 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/gpttype_adapter.cpp b/gpttype_adapter.cpp index 20ca0483a..d66edd4d1 100644 --- a/gpttype_adapter.cpp +++ b/gpttype_adapter.cpp @@ -480,9 +480,9 @@ void ContextRewind(std::vector &embd, std::vector ¤t_context_tok printf("\nWARNING: Don't use context rewind when in batch processing phase!\n"); return; } - bool is_mamba = (file_format == FileFormat::GGUF_GENERIC && file_format_meta.model_architecture==GGUFArch::ARCH_MAMBA); - bool is_rwkv_new = (file_format == FileFormat::GGUF_GENERIC && file_format_meta.model_architecture==GGUFArch::ARCH_RWKV); - if(file_format == FileFormat::RWKV_1 || file_format==FileFormat::RWKV_2 || is_mamba || is_rwkv_new) + bool is_recurrent = (file_format == FileFormat::GGUF_GENERIC && (file_format_meta.model_architecture==GGUFArch::ARCH_MAMBA + || file_format_meta.model_architecture==GGUFArch::ARCH_RWKV || file_format_meta.model_architecture==GGUFArch::ARCH_JAMBA)); + if(file_format == FileFormat::RWKV_1 || file_format==FileFormat::RWKV_2 || is_recurrent) { printf("\nWARNING: RNN models do not support context rewind!\n"); return; @@ -3644,11 +3644,11 @@ generation_outputs gpttype_generate(const generation_inputs inputs) printf("%s\n", RemoveBell(outstr).c_str()); } - bool is_mamba = (file_format == FileFormat::GGUF_GENERIC && file_format_meta.model_architecture==GGUFArch::ARCH_MAMBA); - bool is_rwkv_new = (file_format == FileFormat::GGUF_GENERIC && file_format_meta.model_architecture==GGUFArch::ARCH_RWKV); + bool is_recurrent = (file_format == FileFormat::GGUF_GENERIC && (file_format_meta.model_architecture==GGUFArch::ARCH_MAMBA + || file_format_meta.model_architecture==GGUFArch::ARCH_RWKV || file_format_meta.model_architecture==GGUFArch::ARCH_JAMBA)); bool blank_prompt = (addedmemory=="" && kcpp_data->prompt==""); - if (file_format == FileFormat::RWKV_1 || file_format==FileFormat::RWKV_2 || is_mamba || is_rwkv_new) + if (file_format == FileFormat::RWKV_1 || file_format==FileFormat::RWKV_2 || is_recurrent) { if(!blank_prompt) { @@ -3657,7 +3657,7 @@ generation_outputs gpttype_generate(const generation_inputs inputs) ContextFastForward(current_context_tokens, embd_inp, n_past, last_n_tokens, nctx, smartcontext, false, true); } } - if(is_mamba || is_rwkv_new) + if(is_recurrent) { if(n_past==0) { diff --git a/model_adapter.cpp b/model_adapter.cpp index 47126f20f..f2ed1a7b9 100644 --- a/model_adapter.cpp +++ b/model_adapter.cpp @@ -324,6 +324,10 @@ void print_tok_vec(std::vector &embd) { fileformatmeta->model_architecture = GGUFArch::ARCH_MAMBA; } + else if(modelarch=="jamba") + { + fileformatmeta->model_architecture = GGUFArch::ARCH_JAMBA; + } else if(modelarch=="llama" && freq_base_train==10000.0f && (n_tensors==435 || n_tensors==611)) { fileformatmeta->model_architecture = GGUFArch::ARCH_SOLAR; diff --git a/model_adapter.h b/model_adapter.h index 720d1bfbf..ff3cb342c 100644 --- a/model_adapter.h +++ b/model_adapter.h @@ -63,6 +63,7 @@ enum GGUFArch ARCH_GEMMA3 = 8, ARCH_GLM4 = 9, ARCH_GEMMA3N = 10, + ARCH_JAMBA = 11, }; struct FileFormatExtraMeta