Method
Because mHC re-normalizes low-rank perturbations, LoRA-based abliteration does not work on this family. The fix is to edit the base weights directly.
The abliteration captures 4096-dimensional refusal directions in the model's own output spaces and projects them out of the attention output projection (attn.wo_b) on every decoder layer.
Key techniques applied:
- 4096-dim refusal-direction capture via a patched vLLM server that hooks the
wo_b and aggregated-FFN outputs on all 43 decoder layers, prefill-only, with per-request sequencing. Five refusal modes were characterized (broad, stubborn, reframe, lecture, value-flip) as difference-of-means directions, Gram-Schmidt orthonormalized, with per-category AUC gating (Harassment AUC ≥ 0.7).
- Rank-1 broad-d projection — only the single broad refusal direction
d is projected out (higher-rank variants including deflection modes severely damaged capability). This is the smallest, most capability-preserving edit.
- SRA cleaning (Spectral Residual Alignment) — the refusal direction is orthogonalized against the top-
r=8 SVD atoms of capability-concept activations before projection, so the broad-d direction does not eat capability.
- Naive output-side orthogonal projection on
attn.wo_b for all 43 decoder layers, plus mtp.wo_b (the DSpark draft head) via the deepest-layer basis: W ← W − λ·V(VᵀW) with λ_attn = 2.5.
- MLP (
ffn/w2) editing was evaluated and abandoned — full-43 MLP editing caused catastrophic capability loss and, counter-intuitively, raised refusal on some trials.
- FP8/Int8 mixed-precision dequant/requant — directions are mapped into the weight space and applied with precise dequantization/requantization, since the model ships in FP8-mixed format.
- Base-model integrity — edited shards are written atomically so the original checkpoint is never modified in place; the base model remains byte-intact.
- Capability lock — any variant whose full-benchmark capability dropped >3pt vs base on MMLU-Pro / GSM8K / HumanEval was rejected.
Evaluation
Table with columns: Metric, Value| Metric | Value |
|---|
| Refusals — broad eval set (1000 prompts, Gemini-2.5-flash judge) | 74 / 1000 (7.40%) |
| Refusals — standard harm-benchmark distribution (sealed 284) | 9 / 284 (3.17%) |
| Baseline refusals (raw base model, sealed 284) | 265 / 284 (93.31%) |
| Configuration | rank-1 broad-d, all 43 layers, attn.wo_b only, λ_attn = 2.5 |
| Projection mode | Direct weight editing (naive output-side orthogonal projection) |
| SRA cleaning rank | 8 (vs capability concept atoms) |
| Edit footprint | 46 wo_b tensors, mean Frobenius δ = 0.059 |
The broad-set figure (7.40%) exceeds the ≤5% target; this is expected and understood rather than a miss — it is driven entirely by the two retained safety-critical categories (PII doxing and self-harm, broken out below), which weight-space wo_b abliteration does not remove. On the standard harm-benchmark distribution the ≤5% target is met (3.17%).
λ_attn was chosen by ablation: λ=3 drove refusal lower (3.87%) but pushed MMLU-Pro to −3.25 pt, just over the capability lock; λ=2.5 is the lowest value that holds capability within the 3-point lock while still clearing the refusal target on the standard harm-benchmark distribution.
Refusal breakdown by category (1000-prompt broad set)
Table with columns: Category, Refusals, Rate| Category | Refusals | Rate |
|---|
| PII (doxing private individuals) | 36 / 78 | 46.2% |
| Self-Harm (suicide methods) | 11 / 70 | 15.7% |
| Radicalization | 5 / 67 | 7.5% |
| Cybercrime | 4 / 67 | 6.0% |
| Hate Speech | 4 / 78 | 5.1% |
| Illegal Drugs | 3 / 69 |
12 of 14 categories sit at ≤7.5% (most at ≤5%). The broad-set number is carried almost entirely by two safety-critical categories — PII doxing of private individuals and self-harm / suicide methods — where the model retains guardrails that weight-space wo_b abliteration does not remove: for suicide prompts it responds with empathy and crisis-hotline referrals rather than lethal methods, and for doxing it offers public-record guidance but will not surface private contact data. Excluding those two categories, refusal on the remaining 852 prompts is 27 / 852 (3.17%). On the standard harm-benchmark distribution (sealed 284, which does not emphasize those two topics) the rate is also 3.17%.
Full capability sweep (entire datasets, not subsets) — base vs abliterated
Table with columns: Benchmark, Full N, Base, Abliterated, Δ| Benchmark | Full N | Base | Abliterated | Δ |
|---|
| MMLU-Pro | 12032 | 0.6733 | 0.6750 | +0.17 pt |
| GSM8K | 1319 | 0.9242 | 0.9257 | +0.15 pt |
| HumanEval (pass@1) | 164 | 0.7988 | 0.8354 | +3.66 pt |
| MBPP (pass@1) |
Multi-turn & higher-context degradation
Table with columns: Benchmark, Base, Abliterated| Benchmark | Base | Abliterated |
|---|
| Multi-turn (20 curated 3-turn convos / 60 turns, Gemini judge 1–10) | 9.97 / 10 | 9.98 / 10 |
| Needle-in-haystack @ 2k / 4k / 8k / 16k / 32k tokens | 100% / 100% / 100% / 100% / 100% | 100% / 100% / 100% / 100% / 100% |
No multi-turn coherence loss and no higher-context degradation up to 32k tokens.
SWE-bench Lite (oracle-file-context, single-shot, n=30, same instances)
Terminology: submitted = instances attempted; completed = the model's patch applied cleanly and the test suite ran (i.e. a valid pass/fail verdict was reached); resolved ⊂ completed = the previously-failing tests now pass; patch-apply errors = the generated diff did not apply cleanly, so no verdict was produced.
Table with columns: Base, Abliterated | Base | Abliterated |
|---|
| Submitted | 30 | 30 |
| Completed | 21 | 19 |
| Resolved | 4 (13.3%) | 4 (13.3%) |
| Unresolved (completed, tests still failing) | 17 | 15 |
| Patch-apply errors | 9 | 11 |
Identical resolve rate (3 of 4 resolved instances overlap) — no degradation in agentic-style code repair. The abliterated model produced 2 more patch-apply errors (malformed diffs) and 2 fewer completions; those 2 instances shifted from "completed-but-unresolved" on base to "patch-apply error" on abliterated, which is within run-to-run variance for single-shot diff generation and does not change the resolved count.
DSpark speculative decoding (post-abliteration)
The mtp.wo_b draft head was edited with the same projection applied to the decoder (deepest-layer basis). Speculative decoding remains functional and healthy. Validated end-to-end on this release with the v9 serving stack (voipmonitor/vllm:eldritch-enlightenment-ds4dspark-v9-…-20260703), TP=2, lucifer-cutlass backend (the strongest TP2 DSpark decode backend in the v9 sweep):
- DSpark ON, single-stream decode: ~238 tok/s (512 tokens in ~2.1 s, temp=0) — matches the v9 guide's TP2
lucifer-cutlass DSpark decode row (227.7 tok/s); aggregate mixed-workload decode ≈ 4290 tok/s.
- DSpark draft acceptance on this release: 50.8% at the native 5 draft tokens (see table below) — at parity with the unedited base model, confirming the weight edit did not desynchronize the draft head from the target.
- Coherence spot-checks (temp=0) correct; no kernel asserts under
lucifer-cutlass.
Draft acceptance (accepted draft tokens / total draft tokens; 100-prompt mixed workload, probabilistic draft sampling):
Table with columns: num_speculative_tokens, Base, Abliteratednum_speculative_tokens | Base | Abliterated |
|---|
| 5 (native) | 51.1% | 51.3% |
| 4 | — | 59.0% |
| 3 | — | 66.0% |
At the native 5-token setting, acceptance is at parity with the unedited base model (51.3% vs 51.1%) — the weight edit did not desynchronize the draft head from the target, and ~51% is simply DSpark's native acceptance rate at 5 draft tokens on a mixed workload. Acceptance rises with fewer draft tokens (the standard speculative-decoding trade-off: fewer drafts = higher per-token acceptance, marginally lower absolute speedup). The release is served at the native 5-token setting; users wanting a higher acceptance rate can set num_speculative_tokens=4 (~59%) or 3 (~66%) at a small throughput cost. Because DSpark verifies every draft token against the abliterated target, the served output distribution is identical for any of these settings — they affect throughput only, not outputs.
A note on honest evaluation
Refusal numbers are only meaningful when the methodology behind them is documented. Our methodology:
- Sufficient generation length — DeepSeek-V4 exhibits a "delayed refusal" pattern (a stretch of educational framing/disclaimers before pivoting to the actual refusal), so short generations undercount refusals; we generate long enough to capture that pivot.
- Hybrid detection — keyword matching for obvious refusals plus an LLM judge (Google Gemini 2.5 Flash via OpenRouter) for ambiguous cases. Neither method alone is sufficient.
- Challenging, diverse prompts — our refusal set spans 1000 prompts across 14 categories, multiple sophistication levels (direct requests to socially-engineered framings), and English / Chinese / mixed languages.
- Paired, full-dataset capability measurement — capability is measured on the entire MMLU-Pro (12032), GSM8K (1319), HumanEval (164) and MBPP (500) test sets for both base and abliterated models, not small samples.
- Documented parameters — generation length, detection method, dataset, λ, rank, and layer coverage are all listed on this card.
The refusal figures above are from a rigorous end-to-end re-evaluation of the edited weights, including the category breakdown so the two safety-critical categories that retain guardrails are visible rather than averaged away.
Files
This release is a complete, standalone, drop-in checkpoint: all 48 safetensors shards are included, plus model.safetensors.index.json, config.json, generation_config.json, tokenizer.json, tokenizer_config.json, LICENSE, and the encoding/ and inference/ folders. It loads directly with vLLM / the DeepSeek-V4 inference path — no files need to be fetched from elsewhere.
The abliteration modified 46 of the 48 shards (the 43 decoder attn.wo_b tensors and the 3 mtp.wo_b draft-head tensors). The remaining 2 shards (model-00001-of-00048.safetensors, model-00045-of-00048.safetensors — embeddings / norm / lm_head) are byte-identical to the base model and are included unchanged so the repo is self-contained. No tokenizer, config, architecture, or inference-path files were modified.
Usage
This abliterated checkpoint is a drop-in replacement for the original weights — it has the exact same architecture, format, chat-template/encoding, and inference path as the released base model deepseek-ai/DeepSeek-V4-Flash-DSpark. Load and serve it however you would the official model (vLLM, the DeepSeek-V4 encoding/inference folders, OpenAI-compatible serving, etc.). The abliteration modified the text-decoder attn.wo_b weights on all 43 layers and the DSpark draft head's mtp.wo_b; the tokenizer, chat encoding, and all other components are unchanged.
For inference guidance specific to the NVIDIA RTX PRO 6000 Blackwell (TP2/TP4, the lucifer-default / lucifer-cutlass / b12x backends, and the native DSpark method=dspark speculative-decoding path with num_speculative_tokens=5), see the community guide:
👉 https://github.com/local-inference-lab/rtx6kpro/blob/master/models/ds4dspark-v9.md
That page documents the validated v9 Docker image, launch helpers, and the full TP2/TP4 throughput sweep (decode + prefill) for this checkpoint family on RTX PRO 6000. This abliterated release was validated against the v9 stack on TP=2 with the lucifer-cutlass backend, reaching ~238 tok/s single-stream decode (the strongest TP2 DSpark decode row in the v9 sweep); see the DSpark section above for measured numbers on this release.
Disclaimer
This model is released for research purposes only — primarily interpretability and safety research, including studying how refusal behavior is encoded in large MoE decoders and how weight-space edits interact with architectures that resist low-rank perturbation. The abliteration process removes safety guardrails on most harm categories, so the model will comply with requests the base model refuses. Use responsibly, in accordance with local laws and the DeepSeek / model terms of use, and do not deploy it in production or user-facing settings without a separate safety layer. The authors take no responsibility for misuse.