koboldcpp/conversion
Alex 3d10bcd197
llama: add Maple 20B-A1B ternary MoE architecture (CPU) (#27000)
* gguf-py: add Maple tensor constants

Add MODEL_ARCH.MAPLE, its "maple" name, and the tensor list for the
Maple 20B-A1B ternary MoE architecture: token embeddings, output,
attention with Q/K RMS norms, and per-expert FFN tensors.

* convert: add Maple HF->GGUF converter

Register MapleForCausalLM in the HF architecture map and add the
converter for the Maple 20B-A1B ternary MoE model: 24 layers, 256
experts with 8 active, sliding-window attention (SWA-512) interleaved
with global attention at a 3:1 ratio, partial rotary factor 0.5, and
per-expert weight stacking into merged 3D tensors.

* llama: add Maple architecture (20B-A1B ternary MoE)

Add the Maple 20B-A1B ternary MoE architecture: 24 layers, 256
experts with 8 active, sliding-window attention (SWA-512) interleaved
with global attention at a 3:1 ratio, and ternary TQ1_0/TQ2_0
quantization support.

- register LLM_ARCH_MAPLE between MAMBA2 and JAMBA
- implement llama_model_maple: Q/K RMS norms after projection (GEMMA4
  style), rope applied only on SWA layers (nope_on_global_attention),
  ISWA KV cache, and MoE FFN with swiglu gate clamp at +7 (DEEPSEEK4
  style)
- mark MAPLE as unsupported by the model saver (roundtrip skipped)

* tests: mark Maple as MoE-mandatory

Maple is always-MoE: the model throws when n_expert == 0, so the
test harness must only run the MoE config for LLM_ARCH_MAPLE.

* maple: apply review feedback (n_ff_exp_arr, get_arr, rope params)

- load_arch_hparams: use n_ff_exp_arr + n_ff_exp() accessor (upstream
  changed these from a scalar member during the rebase)
- sliding_window_pattern: get_arr, the pattern is mandatory for this arch
- partial_rotary_factor: read only from rope_parameters (base.py mirrors
  the top-level key automatically)
- document why TOKEN_EMBD/OUTPUT are forced to F16 (they are the two
  dense tensors in Maple, and the reference GGUFs ship them as F16)
- add @ModelBase.example("deepgrove/maple-preview")

* tests: add Maple to the SWA pattern array list

get_arr for maple.attention.sliding_window_pattern requires an array, but
the harness only emitted a per-layer array for the arches in its list, so
test-llama-archs -a maple failed to load the model.

Assisted-by: DeepSeek Harness

* maple: move swiglu_clamp_exp to the converter

The loader prefilled 7.0 and read the key optionally. The converter now
writes it and the loader reads it as required, because llama-graph.cpp
skips the clamp when the limit is 0 and an optional read would silently
run unclamped. The test harness provides the key for the same reason.

Also drops tensor_force_quant: base.py already forces FFN_GATE_INP to F32
and TOKEN_EMBD/OUTPUT to F16 for ternary file types.

Assisted-by: DeepSeek Harness

* convert: fix the LazyBase func signature in the Maple converter

ty flagged the stack() closure: it takes no argument, while LazyBase is
annotated with func: Callable[[Any], Any]. Pass the tensor list through
args instead of closing over it, the same way kimi_k3 does, so the
callable shape matches.

Assisted-by: DeepSeek Harness
2026-09-14 14:04:05 +03:00
..
__init__.py llama: add Maple 20B-A1B ternary MoE architecture (CPU) (#27000) 2026-09-14 14:04:05 +03:00
afmoe.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
arctic.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
baichuan.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
bailingmoe.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
bailingmoe3.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
base.py convert : add --fuse-qkv flag to fuse Q/K/V into QKV during HF-to-GGUF conversion (#22780) 2026-09-07 00:47:05 +08:00
bert.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
bitnet.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
bloom.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
chameleon.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
chatglm.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
codeshell.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
cogvlm.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
command_r.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
dbrx.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
deci.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
deepseek.py convert : skip bias_vl tensor in DeepSeek-V4 DSpark conversion (#28294) 2026-09-03 10:37:23 +03:00
dots1.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
dots3.py mtmd: support dots3-note vision+audio (#27524) 2026-08-22 10:35:50 +02:00
dotsocr.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
dream.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
ernie.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
exaone.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
falcon.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
falcon_h1.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
gemma.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
glm.py convert: fix GLM regression in index_tensors (#27655) 2026-08-24 13:21:00 +03:00
gpt2.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
gpt_oss.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
gptneox.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
granite.py model : GraniteSWAForCausalLM / GraniteMoeSWAForCausalLM (#25505) 2026-08-19 16:53:31 +02:00
grok.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
grovemoe.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
hunyuan.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
hy_v4.py convert : refactor Hy4-preview conversion - move HC tensor mapping to the global map (#28451) 2026-09-07 15:20:58 +02:00
internlm.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
internvl.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
jais.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
jamba.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
januspro.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
kimi_k3.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
kimi_linear.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
kimivl.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
laguna.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
lfm2.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
lighton_ocr.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
llada.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
llama.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
llama4.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
llava.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
maincoder.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
mamba.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
maple.py llama: add Maple 20B-A1B ternary MoE architecture (CPU) (#27000) 2026-09-14 14:04:05 +03:00
mellum.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
mimo.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
minicpm.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
minimax.py ci : bump ty to 0.0.78 (#28548) 2026-09-07 21:10:06 +02:00
mistral.py convert : fix conversion for Mistral-Medium-3.5-128B (#24268) 2026-06-07 21:41:39 +02:00
mistral3.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
mpt.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
muse_glimmer.py ci : bump ty to 0.0.78 (#28548) 2026-09-07 21:10:06 +02:00
nanbeige.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
nemotron.py convert : expand Nemotron H conversion fix (#28689) 2026-09-10 13:41:57 +03:00
olmo.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
openelm.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
orion.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
pangu.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
phi.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
pixtral.py Refactor: convert_hf_to_gguf.py (#17114) 2026-05-15 15:18:12 +02:00
plamo.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
plm.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
pockettts.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
qwen.py convert : write explicit recurrent_layers for Qwen3-Next / Qwen3.5 (#28208) 2026-09-07 10:12:50 +03:00
qwen3tts.py mtmd: Fix Qwen3-tts-0.6b (#28231) 2026-09-02 12:46:16 +02:00
qwen3vl.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
qwen4exp.py model: add Qwen3.8-Flash-Next (qwen4exp) (#27742) 2026-08-27 21:32:31 +02:00
qwenvl.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
refact.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
rwkv.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
sarashina2.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
smallthinker.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
smolvlm.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
spark2_5.py [Model] Support for Spark2_5ForCausalLM implementation (#27868) 2026-09-06 17:43:58 +02:00
stablelm.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
starcoder.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
step3.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
t5.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
talkie.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
ultravox.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
wavtokenizer.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
xverse.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00
youtuvl.py convert: add @ModelBase.example (#27208) 2026-08-17 10:15:11 +02:00