Joakimpalm-Zen/Qwen3-Coder-30B-A3B-Instruct-keep120-Q4_K_M-GGUF overview
Qwen3 Coder 30B A3B keep 120, a structurally pruned derivative Q4 K M, GGUF < BEGIN runner toolcalling Serve with xyntetik runner — tool calls that still…
Runs locally from ~16.33 GB disk (24 GB VRAM class GPUs with llama.cpp / guIDE).
Repository Files & Downloads
| File | Type | Quantization | Size | Link |
|---|---|---|---|---|
| Qwen3-Coder-30B-A3B-Instruct-keep120-Q4_K_M.gguf | GGUF | Q4_K_M | 16.33 GB | Download |
Model Details
| Model ID | Joakimpalm-Zen/Qwen3-Coder-30B-A3B-Instruct-keep120-Q4_K_M-GGUF |
|---|---|
| Author | Joakimpalm-Zen |
| Pipeline | text-generation |
| License | apache-2.0 |
| Base model | Qwen/Qwen3-Coder-30B-A3B-Instruct |
| Last modified | 2026-08-20T17:36:19.000Z |
Model README
---
license: apache-2.0
base_model: Qwen/Qwen3-Coder-30B-A3B-Instruct
tags:
- gguf
- moe
- qwen3moe
- expert-pruning
- structural-derivative
- xyntetik-runner
pipeline_tag: text-generation
---
Qwen3-Coder-30B-A3B keep-120, a structurally pruned derivative (Q4_K_M, GGUF)
<!-- BEGIN runner-toolcalling -->
Serve with xyntetik-runner — tool calls that still parse when the budget runs out
This GGUF is built to be served with xyntetik-runner, a single-binary, dependency-free C11 inference engine (CPU / CUDA / Metal, OpenAI-compatible server). Its one differentiator you cannot get from another engine:
> When a tool call runs past its token budget, Runner closes it to the smallest schema-legal document, so the arguments still parse.
Most OpenAI-compatible engines return finish_reason: "length" with an empty or malformed tool_calls the caller has to repair or retry. Runner does forced-truncation recovery: once a JSON document starts, it emits a legal ending when the budget expires. On local models — tight context, slow generation — that is the difference between an agent loop that finishes and one that retries from scratch.
Measured — what each engine hands the caller when the token budget cuts a tool call short (same box, same tool schema, same prompt, tool_choice:"required", temperature 0, budgets 1→64):
| engine | budget too small (1–16 tokens) | enough budget (64, control) |
|---|---|---|
| Runner | executable tool_calls, arguments parse | completes |
| vLLM 0.27.1 | no call; protocol framing leaks into content | completes |
| llama.cpp b10488 | no call; leak, then tool_calls with unparseable args | completes |
| Ollama 0.32.14 | no call; empty content, then HTTP 500 | completes |
| TensorRT-LLM 1.2.1 † | no call; <tool_call> leak, then empty content | completes |
| SGLang 0.5.17 † | no call; <tool_call> leak, then empty content | completes |
Every engine completes at 64 tokens — the failure is truncation, not misconfiguration. Below that, only Runner returns an executable call. This is the behaviour across every OpenAI-compatible engine measured, not a claim about engines not measured. † TensorRT-LLM and SGLang were measured on a Qwen3-1.7B substitute; truncation recovery is a property of the runtime, not the model.
Constrained decoding also holds the shape of a tool call under quantization: on a full quant ladder, schema conformance and tool selection stayed 100% down to Q4_0 (argument agreement decayed to 50%) — it guarantees the shape of a call at any quantization, not its contents.
Quickstart
# build the single binary (no deps), then serve this GGUF:
runner -m Qwen3-Coder-30B-A3B-Instruct-keep120-Q4_K_M.gguf --serve
# point any OpenAI-compatible client at http://localhost:8080/v1
Full recipe, raw responses, and the per-release regression gate: the truncation benchmark.
<!-- END runner-toolcalling -->
Run it
This file is 17.5 GB with expert tensors kept in their native Q4_K / Q6_K
precision, so it wants a machine with roughly 20 GB of usable memory or more.
On a smaller machine, start with
instead.
# Apple Silicon Mac
curl -L https://github.com/Joakimpalm-Zen/xyntetik-runner/releases/latest/download/runner-macos-arm64.tar.gz | tar xz
curl -L -o Qwen3-Coder-30B-A3B-Instruct-keep120-Q4_K_M.gguf \
https://huggingface.co/Joakimpalm-Zen/Qwen3-Coder-30B-A3B-Instruct-keep120-Q4_K_M-GGUF/resolve/main/Qwen3-Coder-30B-A3B-Instruct-keep120-Q4_K_M.gguf
./runner-macos-arm64 -m Qwen3-Coder-30B-A3B-Instruct-keep120-Q4_K_M.gguf -i
Linux and Windows builds are on the
Using a different runtime? That is part of the point of this artifact. The
reduced expert count is declared in the GGUF metadata, so a runtime that
resolves num_experts from the file loads it unchanged, and one that assumes
"qwen3moe means 128 experts" fails. Either result is informative; please
report it either way, including the runtime and its version.
**This is not a quantization of Qwen3-Coder-30B-A3B. It is a structural
modification:** each MoE layer's expert roster is pruned from 128 to its own
top-120 experts, selected from measured routing data. The expert FFN tensors
remain in their native Q4_K / Q6_K precision, untouched, not requantized, and
top-8 routing is retained. Category-wise:
| Model | Architecture change | Experts/layer | Routing | Expert format | Category |
|---|---|---|---|---|---|
| Qwen3-Coder-30B-A3B-Instruct (Qwen) | none | 128 | top-8 | Q4_K / Q6_K | official |
| this file | 8 experts pruned per layer | 120 | top-8 | Q4_K / Q6_K (unchanged) | structural / expert-pruned derivative |
- File:
Qwen3-Coder-30B-A3B-Instruct-keep120-Q4_K_M.gguf(17,531,967,808 bytes) - SHA256:
3ac8568224a15ea49db6affdd195ba48e8b2d7c6325c7849b9829381e89163a1 - Parent GGUF:
lmstudio-community/Qwen3-Coder-30B-A3B-Instruct-GGUF, revision
1f4ceb1041258b3fbfe59e1175d1321c6b41863b
(SHA256 79ad15a5ee3caddc3f4ff0db33a14454a5a3eb503d7fa1c1e35feafc579de486, 18.6 GB)
- Base model:
Qwen/Qwen3-Coder-30B-A3B-Instruct, revision
b2cff646eb4bb1d68355c01b18ae02e7cf42d120, apache-2.0 verified on the base
repo. The parent file's SHA256 was verified byte for byte against the source
repo's LFS hash before pruning.
Why these eight experts: the methodology
Reproducible pipeline, tooling public in the
Xyntetik Runner repo:
- Trace: run the unpruned parent over a mixed evaluation corpus with the
runner's MoE trace enabled (RUNNER_MOE_TRACE writes JSONL of every
routing decision: position, layer, selected experts, gate weights,
activation norms). This trace covered 4,441 tokens and 213,216 records.
- Saliency:
scripts/moe-prune-plan.pyscores each (layer, expert) pair
by the sum of gate weight times activation L2 norm over every selection, a
REAP-style saliency that weighs how much each pick moved the residual
stream, not merely how often it was chosen.
- Plan:
--keep-n 120; every MoE layer keeps its own top-120 by
saliency, so the discarded eight differ per layer. The corpus did not
select every expert in every layer (observed range 112 to 128); experts
never selected carry zero saliency and are tied at the bottom, and the
plan is padded to a uniform 120 with those zero-saliency ties so the
prune is uniform and the expert_count metadata is correct. **The exact
plan used for this file is published here as
qwen3coder-keep120-plan.json**; with
the parent file and the runner, the build is fully reproducible.
- Prune:
runner --prune-experts plan.json --quantize out.ggufdrops
the expert tensors and the matching router rows; quantized blocks are
copied, not recoded.
- Gate: KL divergence plus top-1 agreement against the unpruned parent
(scripts/kld-compare-raw.py, mixed corpus, temperature 0, word-by-word
teacher forcing, KLD over the union of both sides' top-20 logprobs).
Retained saliency mass is 99.989% mean across layers (worst layer 99.80%).
Note that saliency-mass coverage is not a predictor of the gate result;
a sibling model retained 99.56% of mass at a deeper prune and still missed
the top-1 bar. The gate below is the evidence; the mass figure is context.
Validation: and where the cliff is
Publication bar: top-1 at or above 97%, mean KLD at or below 0.05 vs the
parent, over 400 teacher-forced positions.
| metric | measured | bar | verdict |
|---|---|---|---|
| top-1 agreement vs parent | 97.25% | >= 97% | pass |
| margin-qualified top-1 (bar v2, re-measured 2026-08-14) | 100.00% | >= 97% | pass |
| mean KL divergence | 0.00738 | <= 0.05 | pass |
| mean top-8 overlap | 0.9734 | none | none |
| positions scored | 400 (0 failed) | 400 | none |
Zero-point self-check, run first: the identical protocol with the parent
on both sides returned mean KLD 0.0, top-1 100.0%, top-8 overlap 1.0 over 40
positions. The harness contributes no divergence of its own, so the numbers
above are attributable to the removed experts. A 100-position screen returned
96.0% top-1 / 0.0116 KLD before the full gate; both are reported so the
screen-to-gate movement is visible rather than hidden.
The margin is thin (0.25 points) and the frontier around it is measured:
| Variant | Top-1 vs its parent | Verdict |
|---|---|---|
| keep-120 (this file) | 97.25% (mean KLD 0.00738) | passes, published |
| deeper prunes of this model | not gated | not shipped; only what was measured to pass is published |
| Qwen3-30B-A3B (non-Coder sibling) keep-120 | 95.50% | fails the same bar at the same 6.25% drop |
The sibling row is the interesting one: the base Qwen3-30B-A3B is byte
identical in shape to this model and fails where this one passes. Expert
prunability is a property of the specific training run, not of the
architecture. It was measured here rather than assumed.
Scope: the gate measures agreement with the parent's own distribution,
not downstream capability. A 2.75% top-1 disagreement rate is a real
behavioural difference, and this artifact has not been benchmarked on coding
tasks. If you need the parent's exact behaviour, use the parent.
Re-measured 2026-08-14 under the project's adopted dual-column bar
(margin-qualified top-1 beside plain top-1, 0.5-nat reference-side tie
band): this artifact passes BOTH the original bar and the current one,
and remains the only published file in the account's quality series to
clear the original bar unaided. The same campaign withdrew a different
artifact's claim (see gpt-oss-20b-keep30), so this row stands under the
standard that retired that one.
Measured delta vs the stock Q4_K_M
| | stock (18.6 GB) | keep-120 (17.5 GB) |
|---|---|---|
| Disk / resident weights | 18,632,186,176 B | 17,531,967,808 B (5.90% smaller) |
| Geometry | 48 layers, 128 experts, top-8 | 48 layers, 120 experts, top-8 (unchanged otherwise) |
| Quality | reference | 97.25% top-1, mean KLD 0.00738 |
The 1.1 GB saved is not transformative on its own; it buys KV-cache headroom
on machines where the stock file barely fits. This artifact exists because
the quality frontier is measured and stated, and because no other keep-N of
this model has cleared a published gate.
Running it
Built and certified with
from-scratch C inference engine (CPU AVX2/NEON, CUDA, Metal, OpenAI-compatible
server) whose --caps reports memory limits so a scheduler can check
placement before loading:
./runner -m Qwen3-Coder-30B-A3B-Instruct-keep120-Q4_K_M.gguf --serve --port 8080
Any GGUF runtime with qwen3moe support that reads the expert count from
metadata should also load it (llama.cpp does).
Publication policy
This project publishes only artifacts that passed the quality gate.
Experiments that failed it ship as negative-result documentation in the
runner and suite repos instead of as uploads: the same night this file was
gated, the sibling Qwen3-30B-A3B failed keep-120 at 95.50%, gpt-oss-120b
failed at 85.50%, and none of them were published. An optimization does not
pass because the file got smaller; it has to preserve the model and produce
a configuration worth running.
Measured envelope
Every artifact this account publishes ships a measured-envelope sidecar
(Qwen3-Coder-30B-A3B-Instruct-keep120-Q4_K_M.gguf.envelope.json, in this repo) — the same file
xyntetik-runner reads at
load: download it next to the GGUF and the runner reports the measured state at
load. A measured envelope is a **dated observation, not a standing quality
claim** — it records exactly what this file is, where it came from, and what
was measured, so the claims above stay traceable.
| | |
|---|---|
| artifact sha256 | 3ac8568224a15ea49db6affdd195ba48e8b2d7c6325c7849b9829381e89163a1 |
| what changed | keep-120 expert prune via --prune-experts (each layer keeps its own top-120 by measured routing mass) |
| reference (unpruned parent) sha256 | 79ad15a5ee3caddc3f4ff0db33a14454a5a3eb503d7fa1c1e35feafc579de486 |
| fidelity vs parent | PASSES the bar — plain top-1 97.25%, margin-qualified 100.00%, mean KLD 0.00738 (table above) |
| tool calling | generic constrained envelope (truncation-safe; see the tool-calling section above) |
| measured | 2026-08-14 |
| verdict | experimental — loads with a banner; never a standing certification |
Run Joakimpalm-Zen/Qwen3-Coder-30B-A3B-Instruct-keep120-Q4_K_M-GGUF with guIDE
Download guIDE — the AI-native code editor with local LLM inference and 69 built-in tools.
Source: Hugging Face · Compare models