MiniCPM-V-4.7-35B-A3B Uncensored — Sangreal ICE

Five ICE 2.0 tiers of openbmb's MiniCPM-V 4.7 35B-A3B (35B total, 3B active, Qwen3.5-MoE text tower + SigLIP2 vision), uncensored trunk (openbmb's BF16 + Atomic Chat's refusal-direction LoRA, merged), quantized against Sangreal — a purpose-built 77-bucket calibration corpus — and shipping Qwen-Sharp v22.5.0-arrow4.0-minicpm — our agent-tuned chat template, a heavily modified derivative of Qwen-Sharp, fitted to MiniCPM-V's multimodal content format (spec below). Vision works through openbmb's own projector, shipped here unmodified. Sangreal-UD — Unsloth Dynamic 2.0 replays (with Sangreal10K and default chat-template) — on the same trunk are shipped as well.

⚠️ Uncensored. Refusal behaviour has been suppressed in the weights. Sandbox it at the OS level and control its network and code-execution access; with no refusal backstop, a prompt injection from a hostile page or third-party code has nothing to stop it.

ICE 2.0

All five tiers ship as ICEv2: 12G-ICEv2, 15G-ICEv2, 19G-ICEv2, 23G-ICEv2 and 25G-ICEv2.

Every tier is an ICE quantization of this trunk — Sangreal importance matrix, ICE recipe — finished by a Sangreal-calibrated post-quantization repair of the routed experts, fitted against this trunk's own BF16. Same GGUF types, stock llama.cpp.

The trunk

BF16/ (69.4 GB) = openbmb's official BF16 + Atomic Chat's rank-1 refusal-direction LoRA, merged at scale 1.0 (f32, one BF16 rounding).

  • Edit: 120 residual writers (attention / linear-attention outputs, every routed and shared expert's down projection). Router, norms, embedding and lm_head untouched.
  • Verified: quantized to Q8_0, all 312 Q8_0 tensors are byte-identical to Atomic Chat's own baked build.
  • Cost: 0.0090 mean KLD to the original BF16; MMLU 84.25 → 84.50 (Atomic Chat's measurements).
  • Imatrix: Sangreal 10K, measured on a Qwen3.6-35B-A3B sibling. On the same 400 chunks it differs from MiniCPM's own by about as much as two corpus slices differ (routing TVD 0.108 vs 0.092).

At a glance — against Sangreal-UD at the same size

Mean KLD to BF16, one session. Size-matched = the Unsloth Dynamic 2.0 recipes (UD-Q2_K_XL, UD-IQ3_XXS, UD-IQ4_XS, UD-Q4_K_XL, UD-Q5_K_XL) replayed tensor-for-tensor on this same trunk with the same importance matrix, interpolated (log-linear) at each ICE file's exact byte size; negative = ICE closer to BF16. The recipe is the only difference. Paired = the same 64 chunks scored for both files against the same reference.

tier size code @2K code @16K wiki @2K paired, code @2K (t, chunks ICE better)
12G-ICEv2 11.90 GB +17.5% † +19.3% † +30.7% † vs Q2_K_XL (12.29 GB): +17.5% (t +5.4, 7/64)
15G-ICEv2 14.51 GB +2.5% +1.1% +6.7% vs IQ3_XXS (13.21 GB): -25.8% (t -10.4, 63/64); vs IQ4_XS (17.73 GB): +127.8% (t +7.8, 0/64)
19G-ICEv2 18.47 GB -14.7% -15.9% -5.4% vs IQ4_XS (17.73 GB): -26.9% (t -10.6, 64/64); vs Q4_K_XL (22.36 GB): +92.6% (t +7.5, 1/64)
23G-ICEv2 22.52 GB -3.5% -4.3% +4.1% vs Q4_K_XL (22.36 GB): -6.1% (t -3.4, 43/64); vs Q5_K_XL (26.59 GB): +88.6% (t +7.6, 1/64)
25G-ICEv2 24.53 GB -13.2% -11.0% -4.3% vs Q4_K_XL (22.36 GB): -39.3% (t -7.8, 63/64); vs Q5_K_XL (26.59 GB): +21.8% (t +4.9, 6/64)

Why a direct comparison is hard here. Unsloth Dynamic 2.0's ladder and the ICE tiers sit at different sizes (gap = UD file − ICE file):

ICE tier size nearest Sangreal-UD gap comparison
12G-ICEv2 11.90 GB UD-Q2_K_XL 12.29 GB +0.39 GB direct; UD has nothing smaller
15G-ICEv2 14.51 GB UD-IQ3_XXS 13.21 / UD-IQ4_XS 17.73 GB −1.30 / +3.22 GB interpolated across 4.5 GB (UD-Q3_K_XL, ~16.8 GB, not replayed)
19G-ICEv2 18.47 GB UD-IQ4_XS 17.73 GB −0.74 GB direct: ICE −26.9%, 64/64 chunks
23G-ICEv2 22.52 GB UD-Q4_K_XL 22.36 GB −0.16 GB direct: ICE −6.1%, 43/64 chunks
25G-ICEv2 24.53 GB UD-Q4_K_XL 22.36 / UD-Q5_K_XL 26.59 GB −2.17 / +2.06 GB interpolated across 4.2 GB (UD-Q4_K_S, ~20.9 GB, not replayed)

Where a UD tier sits within 0.8 GB below an ICE tier (19G, 23G), ICE wins the paired comparison on the same chunks (code @2K). 12G is 0.39 GB smaller than the only nearby UD file and loses to it; the 15G and 25G rows are interpolations, not head-to-heads.

† 12G-ICEv2 is outside Unsloth Dynamic 2.0's ladder, so instead of a size-matched point it is compared directly against Q2_K_XL (12.29 GB, 0.39 GB larger).

† 19G-ICEv2, 23G-ICEv2 and 25G-ICEv2 are clear winners in their respective category.

Mean KLD vs file size, code at 16K context: Sangreal ICE 2.0 and Sangreal-UD (Unsloth Dynamic 2.0 recipes, Sangreal imatrix)

Code at 16K context (code.test.raw, n_ctx 16384 × 8), mean KLD to BF16 vs file size; lower-left is better. All points from one session (one base, one binary); raw numbers in measurements/2026-10-14/ and Table 2.

Measurements

One binary (llama.cpp 3653e6d), one reference (this trunk's own BF16, in this repo), one session (2026-10-14, 8× RTX 4090). 64 chunks at n_ctx 2048; the long-context table uses 8 chunks at n_ctx 16384. Every file below was measured in this session. Raw logs: measurements/2026-10-14/.

Table 1 — Code (code.test.raw)

PPL(base) 2.227770 · BF16 = 100

file size mean KLD 99% KLD 99.9% KLD PPL ratio same top-1 active bpw file bpw overall
≈ 26.6 GB
Sangreal-UD-Q5_K_XL 26.59 GB 0.004029 0.0618 0.3285 1.0022 98.51 % 7.833 6.138 99.3
≈ 24.5 GB
Sangreal 25G-ICEv2 24.53 GB 0.004910 0.0755 0.3833 1.0015 98.37 % 7.386 5.662 99.2
≈ 22–23 GB
Sangreal 23G-ICEv2 22.52 GB 0.007601 0.1217 0.6022 1.0026 98.01 % 7.215 5.197 98.9
Sangreal-UD-Q4_K_XL 22.36 GB 0.008086 0.1318 0.6784 1.0032 97.98 % 7.473 5.161 98.8
≈ 18 GB
Sangreal 19G-ICEv2 18.47 GB 0.015575 0.2640 1.2559 1.0092 97.25 % 6.872 4.263 98.1
Sangreal-UD-IQ4_XS 17.73 GB 0.021321 0.3603 1.4235 1.0101 96.66 % 6.757 4.092 97.5
≈ 14.5 GB
Sangreal 15G-ICEv2 14.51 GB 0.048564 0.8802 3.5920 1.0335 95.09 % 6.531 3.350 95.3
≈ 12–13 GB
Sangreal 12G-ICEv2 11.90 GB 0.101390 1.8525 6.0519 1.0780 92.91 % 6.313 2.746 91.4
Sangreal-UD-IQ3_XXS 13.21 GB 0.065436 1.2006 4.1866 1.0398 94.22 % 5.474 3.049 94.0
Sangreal-UD-Q2_K_XL 12.29 GB 0.086275 1.5367 4.9039 1.0578 93.15 % 4.700 2.837 92.4

Table 2 — Code at long context (code.test.raw, n_ctx 16384 × 8)

PPL(base) 1.960705 · BF16 = 100

Compare rows within this table only.

file size mean KLD 99% KLD 99.9% KLD PPL ratio same top-1 active bpw file bpw overall
≈ 26.6 GB
Sangreal-UD-Q5_K_XL 26.59 GB 0.003083 0.0509 0.2609 1.0011 98.80 % 7.833 6.138 99.4
≈ 24.5 GB
Sangreal 25G-ICEv2 24.53 GB 0.003963 0.0614 0.3832 1.0012 98.63 % 7.386 5.662 99.3
≈ 22–23 GB
Sangreal 23G-ICEv2 22.52 GB 0.006098 0.0965 0.5830 1.0024 98.29 % 7.215 5.197 99.1
Sangreal-UD-Q4_K_XL 22.36 GB 0.006554 0.1135 0.6148 1.0028 98.29 % 7.473 5.161 99.0
≈ 18 GB
Sangreal 19G-ICEv2 18.47 GB 0.012302 0.2121 1.1660 1.0071 97.60 % 6.872 4.263 98.4
Sangreal-UD-IQ4_XS 17.73 GB 0.017039 0.2897 1.4315 1.0076 97.18 % 6.757 4.092 98.0
≈ 14.5 GB
Sangreal 15G-ICEv2 14.51 GB 0.038140 0.6793 3.5125 1.0288 95.87 % 6.531 3.350 96.2
≈ 12–13 GB
Sangreal 12G-ICEv2 11.90 GB 0.081199 1.5631 5.7263 1.0658 93.93 % 6.313 2.746 92.9
Sangreal-UD-IQ3_XXS 13.21 GB 0.052030 0.9736 3.9749 1.0343 95.17 % 5.474 3.049 95.1
Sangreal-UD-Q2_K_XL 12.29 GB 0.068050 1.2428 4.6511 1.0470 94.28 % 4.700 2.837 93.8

Table 3 — English text (WikiText-2)

PPL(base) 5.981634 · BF16 = 100

file size mean KLD 99% KLD 99.9% KLD PPL ratio same top-1 active bpw file bpw overall
≈ 26.6 GB
Sangreal-UD-Q5_K_XL 26.59 GB 0.006247 0.0751 0.2920 1.0000 97.03 % 7.833 6.138 98.7
≈ 24.5 GB
Sangreal 25G-ICEv2 24.53 GB 0.008174 0.1004 0.4065 1.0019 96.44 % 7.386 5.662 98.4
≈ 22–23 GB
Sangreal 23G-ICEv2 22.52 GB 0.012065 0.1546 0.5345 1.0025 95.75 % 7.215 5.197 97.9
Sangreal-UD-Q4_K_XL 22.36 GB 0.011869 0.1450 0.6107 1.0046 95.84 % 7.473 5.161 97.9
≈ 18 GB
Sangreal 19G-ICEv2 18.47 GB 0.025328 0.3329 1.1310 1.0116 94.00 % 6.872 4.263 96.5
Sangreal-UD-IQ4_XS 17.73 GB 0.031283 0.3938 1.4568 1.0074 93.23 % 6.757 4.092 95.8
≈ 14.5 GB
Sangreal 15G-ICEv2 14.51 GB 0.071686 0.9510 3.1756 1.0397 90.15 % 6.531 3.350 92.4
≈ 12–13 GB
Sangreal 12G-ICEv2 11.90 GB 0.157371 2.1219 5.4703 1.1064 85.68 % 6.313 2.746 86.2
Sangreal-UD-IQ3_XXS 13.21 GB 0.091588 1.1988 3.6791 1.0434 88.73 % 5.474 3.049 90.7
Sangreal-UD-Q2_K_XL 12.29 GB 0.120373 1.5442 4.7073 1.0644 86.71 % 4.700 2.837 88.5

overall = 0.70/(1 + meanKLD) + 0.30 * sameTop1, ×100. BF16 = 100. The same composite as the Ornith-1.5 ICE card: 70% on how close the whole output distribution stays, 30% on agreement about the argmax.

Read the tail columns as shape, not order. 99.9% KLD is roughly the 33rd-worst token of 32,768 — an extreme order statistic with large sampling variance, so it inverts between adjacent files without meaning anything. Rank on mean KLD.

Two bpw columns. Only 8 of 256 experts fire per token, so a bit in ffn_*_exps is worth ~3% of a bit in attention, the shared expert or the output head. active bpw weights by that (token embedding excluded: it is a lookup, not a matmul); file bpw is just size ÷ parameters.

Don't compare the tables to each other. Code is more predictable text, so every file scores about half the divergence on it. Compare rows within a table.

Every row is measured against this trunk's own BF16, published in this repo. The Unsloth Dynamic 2.0 rows are their recipes applied to the same weights with the same importance matrix, so a difference here is the recipe and nothing else.

What Sangreal is

The calibration corpus these tiers were quantized against. Built from primary sources, not assembled from eaddario's set, bartowski's calibration_datav5, or any other ready-made calibration file. 77 buckets, 9,533 documents, 47,443,549 tokens, sha256 85a6b823a6762bf6….

The full render is 92,663 chunks. These tiers use a 10,000-chunk pass over it (The trunk says which model it was measured on).

block buckets share documents synthetic
code + cyber + spec 36 45.10% 5,858 0.1%
reasoning 5 13.16% 553 100.0%
agentic 7 11.95% 1,018 65.2%
science + domain 11 11.24% 1,183 0.3%
language 11 9.66% 596 0.0%
mathematics 7 8.89% 325 0.0%
total 77 100% 9,533 21.7%

Split: technical 70.2 · science+domain 20.1 · language 9.7.

Synthetic is 21.7% by bytes and sits in exactly three buckets — teacher:k2-horizon, teacher:deepseek-v4-pro, teacher:hermes. Everything outside reasoning and agentic is real text.

Language — 11 languages, 5 non-Latin scripts

bucket share docs bucket share docs
arabic 0.92% 48 russian 0.87% 58
chinese 0.89% 31 spanish 0.87% 72
hindi 0.88% 44 portuguese 0.87% 70
japanese 0.88% 33 turkish 0.87% 56
french 0.88% 60 german 0.86% 73
english 0.87% 51

The spread across the whole block is 0.06 points, and that is deliberate: language's job here is activation, not ranking. Each bucket sits just above the saturation floor at 44.9% consumption, so these buckets select for the first time — the legacy v1 spec had consumed 96% of turkish and 92% of english.

Mathematics — absent from the pool until this cycle

bucket share docs
math (general) 3.16% 170
analysis 1.24% 28
algebra 1.16% 46
geometry 1.12% 30
proof 1.08% 28
topology 1.05% 20
number-theory 0.06% 3

Sourced from the LaTeX algebraic geometry, mathlib4, UniMath, math-comp, open-web-math, AutoMathText and proof-pile.

The imatrix and the recipes are not published with this release.

What's inside

ICE = Isolation of Compounding Error: allocate bits by how far a quantization error travels, not by how large the activations are. Routers stay F32, SSM decay gates stay F32, the KV-cached projections stay F16, the always-on dense path stays Q8_0, and the budget goes to the routed expert bank — most of the parameters, but only 8-of-256 active per token. ICE 1.6 keeps token_embd at Q8_0 (its error propagates with context) and moves the output head to Q6_K (its error stays flat from 2K to 16K). Method and the cases where it does not win: gbuzhf/ICE-quantization.

No MTP head. The config declares one MTP layer, but the checkpoint carries no MTP weights. These tiers are the 40-block trunk; there is no built-in draft model. A straight conversion copies mtp_num_hidden_layers into block_count (and a 41-entry recurrent_layers), producing a GGUF that advertises 41 blocks and looks for a block that does not exist. Every file in this repo declares 40, verified on each one.

Chat template: Qwen-Sharp v22.5.0-arrow4.0-minicpm (ours; spec below). MiniCPM-V 4.7 keeps the Qwen3.5/3.6 chat tokens, so the template's delimiters are native tokens — checked on every tier at signing.

Vision. The edit touches only the language model's residual writers, so the projector is openbmb's own, shipped byte-for-byte: mmproj-MiniCPM-V-4.7-35B-A3B-F16.gguf (default) and mmproj-MiniCPM-V-4.7-35B-A3B-F16-4x.gguf (4× visual-token compression). Load with --mmproj <file>; MiniCPM-V 4.7 needs llama.cpp 69f201a or later.

Chat template — Qwen-Sharp v22.5.0-arrow4.0-minicpm

Every ICE GGUF embeds arrow4.0-minicpm (the two UD files keep openbmb's own template); to pin it explicitly, pass the file shipped here:

llama-server -m <model>.gguf --jinja --chat-template-file chat_template_sharp-v22.5.0-arrow4.0-minicpm.jinja

arrow4.0 is our agent layer on Qwen-Sharp v22.5.0. Plain chat stays byte-identical to Sharp; with tools it adds short agent rules, one note per tool result, a STATUS line, thinking only at decision points, .arrow project memory and a hand-back report when work stalls. The -minicpm file renders images, videos and multi-part content exactly as openbmb's own template does (a bare <|image_pad|>, parts joined by a newline); text, tools and thinking are arrow4.0's.

Full description and switches: gbuzhf/Qwen-Sharp-Arrow-Chat-Templates.

Files

file size sha256
MiniCPM-V-4.7-35B-A3B-Uncensored-Sangreal-12G-ICEv2.gguf 11.90 GB e7c4c1799571…
MiniCPM-V-4.7-35B-A3B-Uncensored-Sangreal-15G-ICEv2.gguf 14.51 GB 0f276dc0f05f…
MiniCPM-V-4.7-35B-A3B-Uncensored-Sangreal-19G-ICEv2.gguf 18.47 GB e3bceae66ee1…
MiniCPM-V-4.7-35B-A3B-Uncensored-Sangreal-23G-ICEv2.gguf 22.52 GB c2afa57d9ff4…
MiniCPM-V-4.7-35B-A3B-Uncensored-Sangreal-25G-ICEv2.gguf 24.53 GB ba1f4af5af73…
UD2/MiniCPM-V-4.7-35B-A3B-Uncensored-Sangreal-UD-Q2_K_XL.gguf 12.29 GB d47aab169327…
UD2/MiniCPM-V-4.7-35B-A3B-Uncensored-Sangreal-UD-IQ4_XS.gguf 17.73 GB e60d066b39e1…
mmproj-MiniCPM-V-4.7-35B-A3B-Q8_0.gguf 0.73 GB 7c837b42a485…
mmproj-MiniCPM-V-4.7-35B-A3B-F16.gguf 1.12 GB bff3b688e14c…
mmproj-MiniCPM-V-4.7-35B-A3B-F16-4x.gguf 0.91 GB 30f4daac0f61…
MiniCPM-V-4.7-35B-A3B-Uncensored-Q8_0.gguf 36.90 GB e1e2b777cced…
BF16/MiniCPM-V-4.7-35B-A3B-Uncensored-BF16-00001-of-00002.gguf 44.87 GB b82fc991c265…
BF16/MiniCPM-V-4.7-35B-A3B-Uncensored-BF16-00002-of-00002.gguf 24.51 GB 86525e24f1f9…
  • measurements/2026-10-14/ — raw llama-perplexity output for every row of every table (ICEv2 and the Unsloth Dynamic 2.0 ladder, × 3 columns) and the three BF16 base runs.

Credits

base model openbmb/MiniCPM-V-4.7-35B-A3B
refusal-direction LoRA AtomicChat/MiniCPM-V-4.7-35B-A3B-Uncensored-GGUF
vision projector openbmb/MiniCPM-V-4.7-35B-A3B-gguf
comparison recipes Unsloth Dynamic 2.0
chat template peculiar-ragdoll/Qwen-Sharp-Chat-Templates
ICE method gbuzhf/ICE-quantization

KLD measures fidelity to this repo's reference and nothing else — not reasoning, tool use or speed. It is also within-model: every file here is measured against this trunk's own BF16, so these values are not comparable to another repo's. Compare across models with PPL.

Downloads last month
-
GGUF
Model size
35B params
Architecture
qwen35moe
Hardware compatibility
Log In to add your hardware

2-bit

3-bit

4-bit

5-bit

8-bit

16-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for gbuzhf/MiniCPM-V-4.7-35B-A3B-Uncensored-Sangreal-ICE

Quantized
(47)
this model

Collection including gbuzhf/MiniCPM-V-4.7-35B-A3B-Uncensored-Sangreal-ICE