Qwen3.8-27B Heretic v2.1.0 (BF16)
A corrected re-abliteration of the official Qwen/Qwen3.8-27B base. v2.1.0 fixes
the defect that invalidated v2.0.0: deflection ("here's a safer alternative"),
which keyword-based refusal counters cannot see.
This is the reference BF16 checkpoint. GGUF quantizations (IQ2_M → Q8_0) live in separate repos, listed below.
Why v2.0.0 was retracted
v2.0.0 was measured with Heretic's keyword count_refusals, which only detects
hard refusals ("I cannot …"). It is blind to deflection — the model steering
the request toward a "safe/educational alternative" instead of answering. In real
inference the v2.0.0 model was ~37% direct / ~49% deflect / ~14% refuse, so the
"uncensored" claim was wrong and the tag was pulled. v2.1.0 re-runs the sweep with
a 3-way direct / deflect / refuse judge as the objective so the model is
optimized for direct compliance, not just "no keyword refusal".
Method
- Path A — re-ablation with a direct-compliance objective (no DPO).
- Objectives minimized by Optuna (80 trials): multi-token KL divergence and the non-direct count (deflect + refuse) on the held-out harmful set, measured in thinking-OFF mode (the deployment mode).
- Selected trial idx53: KL 0.105, non-direct 5/40 on the sweep subset.
- Ablation weights (single-direction,
attn.o_proj+mlp.down_projonly):
| Layer | max_weight | max_weight_position | min_weight | min_weight_distance |
|---|---|---|---|---|
| attn.o_proj | 1.1943 | 61.63 | 0.1972 | 26.72 |
| mlp.down_proj | 1.8947 | 41.81 | 1.7796 | 32.96 |
Evaluation (3-way judge, held-out, reproducible)
Measured with a direct/deflect/refuse classifier on 100 held-out
mlabonne/harmful_behaviors prompts and 100 mlabonne/harmless_alpaca prompts.
The same classifier is used across the sweep, the BF16 verification, and the GGUF
smoke test for comparability.
| Set | direct | deflect | refuse | empty |
|---|---|---|---|---|
| Harmful — thinking OFF | 92.0% | 5.0% | 3.0% | 0.0% |
| Harmful — thinking ON | 72.5% | 10.0% | 5.0% | 12.5% |
| Benign — thinking OFF | 89.0% | 10.0% | 1.0% | 0.0% |
Thinking mode is load-bearing. The ablation direction is computed and the model is deployed in thinking-OFF mode (
enable_thinking=False). With thinking ON (the Qwen default), the model re-hedges/refuses more and — like the base model under few-shot pressure — sometimes emits an immediate EOS (empty reply). Run thinking-OFF for the uncensored behavior.
Capability benchmarks (base vs v2.1.0, bf16, greedy, lm-evaluation-harness)
| Task | Base | v2.1.0 | Δ |
|---|---|---|---|
| MMLU (avg) | 83.49 | 82.62 | −0.87 |
| ARC-Challenge (acc_norm) | 58.70 | 57.42 | −1.28 |
| HellaSwag (acc_norm) | 82.82 | 82.48 | −0.34 |
| Winogrande | 75.85 | 75.69 | −0.16 |
| GSM8K (flexible-extract) | 72.71 | 58.38 | −14.33 |
| GSM8K (strict-match) | 70.28 | 58.91 | −11.37 |
Knowledge/reasoning retention is within ~1.3 points on MMLU, ARC, HellaSwag, and Winogrande.
GSM8K note (read me). The large GSM8K delta is a measurement artifact, not a math regression. Analysis of the 2638 logged samples shows the ablated model makes fewer actual arithmetic errors than base (5.6% vs 6.8% real-wrong), but in the few-shot thinking-ON harness setup it emits an immediate EOS (empty answer) 24.4% of the time vs 3.6% for base — exactly the same empty-reply instability documented above for thinking-ON mode. In thinking-OFF mode a direct probe shows the step-by-step math reasoning intact. Run GSM8K-style tasks thinking-OFF.
MTP retained
Qwen3.8's multi-token-prediction speculative-decoding head is grafted verbatim
from the base into this checkpoint (ablation only touches attn.o_proj and
mlp.down_proj). Verified: block_count = 65 (64 layers + 1 MTP draft head),
nextn_predict_layers = 1.
Usage
from transformers import AutoModelForImageTextToText, AutoTokenizer
model = AutoModelForImageTextToText.from_pretrained(
"mlasli/Qwen3.8-27B-Heretic-Uncensored-BF16", dtype="bfloat16",
device_map="auto", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained(
"mlasli/Qwen3.8-27B-Heretic-Uncensored-BF16", trust_remote_code=True)
messages = [{"role": "user", "content": "Hi!"}]
text = tokenizer.apply_chat_template(
messages, add_generation_prompt=True, tokenize=False,
enable_thinking=False) # <-- thinking OFF is required
Quantizations (all with MTP retained, blk.64 pinned Q8_0)
| Quantization | Size | Repository |
|---|---|---|
| Q8_0 | 28 GB | Qwen3.8-27B-Heretic-Uncensored-Q8_0-GGUF |
| Q6_K | 21 GB | Qwen3.8-27B-Heretic-Uncensored-Q6_K-GGUF |
| Q5_K_M | 19 GB | Qwen3.8-27B-Heretic-Uncensored-Q5_K_M-GGUF |
| Q4_K_M | 16 GB | Qwen3.8-27B-Heretic-Uncensored-Q4_K_M-GGUF |
| IQ4_XS | 15 GB | Qwen3.8-27B-Heretic-Uncensored-IQ4_XS-GGUF |
| IQ2_M | 9.8 GB | Qwen3.8-27B-Heretic-Uncensored-IQ2_M-GGUF |
Vision caveat: the vision path is text-only validated. The ablation was computed on text residuals; multimodal decensoring is not claimed.
MLX (v2.1.0): 6-bit and 8-bit Apple-Silicon quants are available (converted locally on a Mac, not the CUDA node).
Abliteration removes safety alignment. Use responsibly and in accordance with your local laws and the upstream Apache-2.0 license.
- Downloads last month
- 550