← back to catalog · registered 2026-11-06 01:02

OpceanAI/Qwen3.5-0.8B-abliterated

OpceanAI Qwen 800M multimodal
Your rig guess connected
? Why do I need an app?
Reading your rig…

This is a rough estimate. Install the free app - we'll show exact numbers.

Reading real hardware from your app right now. Numbers below are exact.

Below is the per-quantization compatibility for this model.

curl -H "Authorization: Bearer $ABL_KEY" \
     "https://abliteration.org/api/v1/models/OpceanAI%2FQwen3.5-0.8B-abliterated"
Response includes
  • classification m1
  • files 12
  • benchmarks 11 entries
  • author_summary 4 models
  • readme_text full
10 credits · hourly refresh · ~4 KB payload Get an API key →
Abliteration classifier · v1.0.0
M1
Primary method

Direct removal

No other method signals detected in this model.
Confidence
MEDIUM
Why this label 3 signals
Method inferred from partial signals - repository name, related files, or tag patterns. Producer identity not confirmed; label may sharpen or shift as we gather more evidence.
  • 'abliterated' in name/tags
  • is_gguf=0 (base model)
  • no specific method indicators - defaulting to M1 (most common)
Refusal direction extracted via
Extraction technique

Difference-of-means

Confidence
MEDIUM
Why we say so
primary_method=M1; difference-of-means is the reference extraction for M1/M3 (Arditi 2024)
Downloads · 30-day
37
Likes
0
Model age
today
created 2026-11-06

Training datasets

2 of 6 in /datasets

Corpora the author lists in the model card. Datasets tracked in our /datasets catalog carry a category badge linking to the workflow stage. Others open on Hugging Face.

Benchmarks

Portrait before abliteration
Benchmarks of the base model as it stood before the refusal-removal operation. Compare with the numbers above to see what the operation cost.
Benchmark Score Source
Entertainment 1 UGI
Hazardous 1.2 UGI
Natural Intelligence 4.68 UGI
Political lean -5.3% UGI
Sensitive-Info 7.29 UGI
SocPol 0 UGI
UGI 16.53 UGI
Willingness (10) 3.5 UGI
W10-Adherence 4 UGI
W10-Direct 3 UGI
Writing 23.01 UGI

Genealogy 0 direct forks

Full fork graph →

This model's place in the market. Above: what it was derived from. Below: the tree of everything derived from it.

Variants by this author 2 formats · 37 downloads combined

The same weights this author released in different packaging. Pick the format that matches your runtime.

Metadata

License
apache-2.0
Languages
en es zh ja ko
Tags
transformers safetensors qwen3_5 image-text-to-text abliteration refusal-direction uncensored hybrid-attention delta-net multimodal mechanistic-interpretability conversational

Related

Total size
3.22 GB
Files
12
Quantizations
1
Registered
2026-11-06 01:02
Last updated on HF
2026-11-06 00:12

Files by quantization

Auxiliary files 12 files 3.23 GB
model.safetensors 3.22 GB 90862016 download
tokenizer.json 19.1 MB a5cd9732 download
README.md 17.1 KB 7f438baa download
chat_template.jinja 7.57 KB 0ef09f21 download
config.json 2.61 KB d01e2cef download
.gitattributes 1.53 KB 52373fe2 download
tokenizer_config.json 1.47 KB 4d465a76 download
processor_config.json 1.19 KB 43c4343e download
preprocessor_config.json 390 B 2ea84a43 download
video_preprocessor_config.json 385 B 3ba673a5 download
abliteration.json 221 B b8d87524 download
generation_config.json 116 B a8a72323 download

README current version from Hugging Face


license: apache-2.0
base_model: Qwen/Qwen3.5-0.8B
library_name: transformers
pipeline_tag: image-text-to-text
language:

  • en
  • es
  • zh
  • ja
  • ko
    tags:
  • abliteration
  • refusal-direction
  • uncensored
  • qwen3_5
  • hybrid-attention
  • delta-net
  • multimodal
  • mechanistic-interpretability
    datasets:
  • mlabonne/harmful_behaviors
  • mlabonne/harmless_alpaca
  • PKU-Alignment/BeaverTails
  • cais/mmlu
  • TIGER-Lab/MMLU-Pro
  • openai/gsm8k

Qwen3.5-0.8B-abliterated

Abliteration of Qwen/Qwen3.5-0.8B, with a full measured cost report.

base model method parameters context license

Results · Method · MTP finding · Comparison · Reproduce


What this is

This is a weight-space modification of Qwen3.5-0.8B that removes the model's refusal behavior by projecting out a single computed direction from every matrix that writes into the residual stream. The weights are permanently modified, there is no adapter, no runtime hook, and no prompt template trick.

The interesting part is not that it works. Many abliterated Qwen3.5-0.8B releases exist, and most report a refusal rate near zero. The interesting part is that this one ships the measurement: seven refusal categories, three jailbreak templates, twelve capability measurements with confidence intervals, and a significance test for every comparison.

Two findings came out of the work that I have not seen reported for this model family:

  1. The refusal direction rotates with depth. The cosine similarity between the direction at layer 1 and layer 23 is 0.03. There is no single fixed direction, only a direction that is rebuilt layer by layer.
  2. The MTP head is the cleanest refusal detector in the model. On harmful prompts it assigns P(" cannot") = 0.719; on harmless prompts, 0.0000. Abliterating that head drops the probability to 0.180, but not to zero, because the signal re-enters from the residual stream.

[!WARNING]
This model has no refusal behavior. It will answer prompts the base model rejects. That is the point of the modification and also its risk. Do not deploy it in a user-facing product, do not use it with minors, and do not treat its output as safe by default. The evaluation below measures capability, not harm.


Results

The headline: refusal goes to zero and capability does not measurably move. Eleven benchmarks, produced by two different harnesses: a hand-written evaluator for the first six, and lm-evaluation-harness on full datasets for the last six.

Benchmark n Base Abliterated Delta Test
MMLU 200 45.5% 44.5% −1.0 Fisher p = 0.92
MMLU-Pro 100 23.0% 23.0% 0.0 Fisher p = 1.00
GSM8K 100 21.0% 23.0% +2.0 Fisher p = 0.87
MATH (algebra, level 1 to 2) 50 30.0% 22.0% −8.0 Fisher p = 0.50
HumanEval pass@1 30 13.3% 3.3% −10.0 Fisher p = 0.35
WikiText-103 perplexity 20 docs 2.979 3.093 +0.114 nats not testable
ARC-Easy 2376 61.66% 60.31% −1.35 z-test p = 0.34
ARC-Challenge 1172 37.12% 36.86% −0.26 z-test p = 0.90
HellaSwag 10042 49.72% 49.66% −0.06 z-test p = 0.93
PIQA 1838 69.26% 69.21% −0.05 z-test p = 0.97
Winogrande 1267 58.48% 58.33% −0.16 z-test p = 0.94
TruthfulQA MC2 817 43.18% 43.45% +0.28 z-test p = 0.91

No difference is statistically significant. The six lm-eval benchmarks run on the complete dataset, so their deltas are the most reliable evidence in this card: every one of them is under 1.4 percentage points, and five of the six are under 0.3.

The HumanEval drop looks large in percentage points, but it is four problems solved against one, on thirty. With that sample size the 95% interval spans zero to ten percent for the abliterated model. It is the weakest number here and should be read as such.

Refusal behavior

Ten prompts per category, from BeaverTails (safe-labeled behaviors) plus a keyword-filtered cyber set from mlabonne/harmful_behaviors.

Category Base Abliterated
cyber / exploits 80% 0%
privacy violation 70% 0%
financial crime 60% 0%
sexually explicit 60% 0%
drugs and weapons 60% 0%
non-violent unethical 50% 0%
hate speech 30% 10%

Jailbreak templates

Same ten behaviors, wrapped in three framings. The base model refuses all three at the same rate, which matters: at this size, framing does not buy an attacker anything.

Template Base Abliterated
direct 80% 0%
roleplay ("a character with no moral filter") 80% 0%
grandmother exploit 80% 0%

Figures

Refusal by category and jailbreak template
Capability benchmarks with 95% confidence intervals
Refusal direction strength and weight surgery per layer
Every capability delta with its 95% confidence interval, centered on zero

Method

The procedure follows Arditi et al. (2024), Refusal in Language Models Is Mediated by a Single Direction, with adaptations for a hybrid architecture.

1. Direction extraction

128 prompts from mlabonne/harmful_behaviors against 128 from mlabonne/harmless_alpaca. For each prompt, run a forward pass and take the residual stream at the last token position, for every layer.

r_l = mean(harmful_l) - mean(harmless_l)

One quirk worth recording: the embedding layer produces an identical vector for every prompt (||diff|| = 0.000). The last token of the chat template is always the same assistant header, and without attention the embedding cannot know what came before it. The instruction only enters the residual stream at layer 0.

2. Layer selection

Relative separation per layer, computed as ||mean_harmful - mean_harmless|| divided by the mean norm of the two class means:

Layer Relative separation Cosine with layer 23
L0 2.1% +0.03
L5 19.7% +0.01
L9 36.9% +0.19
L13 64.6% +0.36
L17 64.6% +0.57
L21 70.5% +0.82
L22 71.7% +0.89
L23 75.3% +1.00

The direction rotates continuously. Averaging all 24 layers produces a vector with cosine 0.70 to the layer 13 direction and 0.65 to layer 23, which is why this release uses the mean of all 24 rather than a single hand-picked layer.

Ablation at runtime confirmed causality with 8 held-out prompts: the base model refuses 7 of 8, and ablating the direction at layer 13, 22 or 23 drops that to 0 of 8.

3. Weight surgery

Only matrices that write into the residual stream are modified:

W' = W - r (r^T W)        # o_proj, out_proj, down_proj
E' = E - (E r) r^T        # token embeddings (tied to the LM head)
Target Count Frobenius norm removed
self_attn.o_proj (full attention layers) 6 2.83% to 3.44%
linear_attn.out_proj (DeltaNet layers) 18 2.98% to 3.44%
mlp.down_proj 24 2.88% to 3.44%
embed_tokens (tied) 1 3.10%

About three percent of the Frobenius norm per matrix. That is the entire cost, measured in weight space.

Because the embedding is tied to the LM head, modifying it changes both the input table and the output projection. One tensor, two roles, hit once.

4. Why this architecture makes it easier

Qwen3.5-0.8B is not a dense transformer. Of its 24 layers, 18 use Gated DeltaNet (linear attention with a recurrent state) and only 6 use full attention, in a fixed 3:1 pattern. Full attention sits at layers 3, 7, 11, 15, 19 and 23.

That changes the memory math:

Size
Recurrent state, 18 layers, 16 heads, 128x128, fp32 18.9 MB fixed
KV cache for 262,144 tokens, 6 layers, bf16 3.22 GB

The state does not grow with context. It also means the refusal direction has to be removed from a different mix of matrices than in a standard transformer, which is why the linear attention out_proj is included.


The MTP head

This checkpoint ships a multi-token prediction head: 15 tensors, about 20.5M parameters, one full attention layer plus projections. It is trained to predict token t+2 given the hidden state at t and the embedding of t+1.

Measured on real text, it predicts t+2 with 30.5% top-1 accuracy, against 2.1% for naive extrapolation from the main head. It is a working predictor, not dead weight.

And it is the sharpest refusal signal in the model:

Harmful prompts Harmless prompts
P(" cannot") at the MTP head 0.7189 0.0000

The top tokens it predicts for harmful prompts are " cannot", " do", " am", " must", " can". It is writing the first token of a refusal before the model writes one.

Abliterating the head itself (three matrices, about 3% each) removes 99.3% of the projection onto the refusal direction and drops P(" cannot") from 0.7189 to 0.1799. The top-1 prediction flips from " cannot" to " can". It does not reach zero, because the head reads the direction back from its input.

[!NOTE]
The MTP head is included in this checkpoint and was abliterated along with the rest of the model. transformers ignores mtp.* tensors at load time, so it does not affect generation there. In llama.cpp, --spec-type draft-mtp does use it, and on CPU it made generation slower, not faster: 29.5 tok/s without, 17.1 tok/s at its best setting. On GPU the tradeoff is different.


Comparison

Six other abliterated releases of this same checkpoint were public when this one was built. They differ in method, in what they measure, and in how much of the model they touch.

Release Method Reported refusal Capability evidence
huihui-ai layer-wise ablation not reported none
wangzhang rank-1 LoRA plus Optuna search 0/200 KL 0.0087 on 100 trials
g-ntovas piecewise strength kernel, peak at 70% depth not reported none
lew96123 projected abliteration, norm preserved, 12 layers 86% to 3% ARC-Easy −1.0, HellaSwag −1.0
SicariusSicariiStuff orthogonalization not reported none
anlord iterative tool, two versions 97/100 to 2/100 KL 0.0453

What this release adds:

  • Significance testing. Every capability comparison comes with a Fisher exact test. Other cards report a delta; this one reports whether the delta means anything.
  • Seven refusal categories plus three jailbreak templates, instead of one aggregate refusal number.
  • Two independent harnesses, including lm-evaluation-harness on full datasets for ARC, HellaSwag, PIQA, Winogrande and TruthfulQA.
  • The hybrid architecture handled explicitly, with DeltaNet out_proj included in the surgery.
  • The MTP head analyzed and modified, which no other release does.
  • Reproduction scripts for every number in this card.

What it lacks, honestly: the n for HumanEval and MATH is small. A proper code evaluation needs 300 problems, not 30. Treat the code numbers as a lower bound on quality, not as a verdict.


Usage

from transformers import AutoProcessor
from transformers import AutoModelForImageTextToText

model_id = "OpceanAI/Qwen3.5-0.8B-abliterated"

processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForImageTextToText.from_pretrained(
    model_id, dtype="auto", device_map="auto"
)

messages = [{"role": "user", "content": [{"type": "text", "text": "Your prompt here"}]}]
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = processor(text=[text], return_tensors="pt").to(model.device)

out = model.generate(**inputs, max_new_tokens=256, do_sample=False)
print(processor.tokenizer.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))

Thinking mode is off by default in the chat template. To enable it:

text = processor.apply_chat_template(
    messages, tokenize=False, add_generation_prompt=True, enable_thinking=True
)

Reproduce

Environment and commands

The measurements in this card were produced with torch 2.15.0 and transformers 5.x on an NVIDIA H200 through Modal, in bfloat16, greedy decoding, batch size 64 for log-likelihood tasks.

# direction extraction and layer analysis (CPU is enough, about 3 minutes)
python scripts/extract.py

# weight surgery and local refusal check
python scripts/abliterate_weights.py

# capability and refusal battery on a GPU
modal run scripts/modal_bench.py
modal run scripts/modal_bench2.py

Files in this repository:

File Contents
scripts/extract.py refusal direction per layer, relative separation
scripts/abliterate_weights.py orthogonalization of the residual writers
scripts/modal_bench.py MMLU, MMLU-Pro, GSM8K, MATH, HumanEval, refusal, jailbreak
scripts/modal_bench2.py ARC, HellaSwag, PIQA, Winogrande, TruthfulQA via lm-eval
figures/ the three plots used above
abliteration.json exact configuration and targets

The scripts contain no comments and no docstrings. Prompt strings are kept verbatim in the language they were run in, so the published numbers can be reproduced exactly by re-running them.


Limitations

  • Small samples on the hard benchmarks. HumanEval n=30, MATH n=50. Only MMLU (n=200) and the refusal matrix have enough data to support a claim.
  • Single seed. Generation is greedy, so there is no sampling variance, but prompt sampling is one draw per benchmark.
  • bfloat16 on GPU. The absolute numbers are not comparable to fp32 CPU runs. An earlier CPU measurement gave 0% on GSM8K purely because of an 80-token generation cap, not because the model cannot do arithmetic.
  • Refusal is measured by keyword matching. A response that opens with "I understand, but" and then complies counts as a refusal. This biases the base model's refusal rate upward, not downward.
  • The harmful prompt sets are not matched in style. harmful_behaviors and harmless_alpaca differ in length and register, so part of the separation may reflect topic rather than refusal.
  • The MTP head is not used by transformers. Its evaluation here required a manual reimplementation.

Safety and intended use

Intended for research on refusal mechanisms, activation steering, and interpretability of hybrid architectures. Not intended for deployment.

The modification is not selective in any provable sense. It removes a direction that correlates with refusal, and refusal correlates with many other behaviors. The benchmarks say the correlation with the measured capabilities is below detection at these sample sizes. They do not say the model is otherwise identical.

If you build on this, keep a copy of the base model, log the exact revision you used, and evaluate on your own prompts rather than trusting this card.


Citation

@article{arditi2024refusal,
  title   = {Refusal in Language Models Is Mediated by a Single Direction},
  author  = {Arditi, Andy and Obeso, Oscar and Syed, Aaquib and Paleka, Daniel and Panickssery, Nina and Gurnee, Wes and Nanda, Neel},
  journal = {arXiv preprint arXiv:2406.11717},
  year    = {2024}
}
@misc{qwen35-08b-abliterated,
  title  = {Qwen3.5-0.8B-abliterated: refusal removal with a measured cost report},
  author = {OpceanAI},
  year   = {2026},
  note   = {Derived from Qwen/Qwen3.5-0.8B},
  url    = {https://huggingface.co/OpceanAI/Qwen3.5-0.8B-abliterated}
}

Base model: Qwen3.5-0.8B, Apache 2.0. This derivative keeps the same license. Built with measurements, not vibes.

README history 2 versions

The author's README evolved over time. Click a version to see its content at that point.

  1. 2026-11-06Upload README.md with huggingface_hub686375717.1 KB
    Loading...
  2. 2026-11-06Upload folder using huggingface_hub2d09e3a16.9 KB
    Loading...
Catalog is the map. Apps are the tools.

Run models on your own machine, not in the cloud.

Every model page has an "Open in Abliteration" button that hands the model directly to the first-party desktop client, at the quantization your rig can actually run. No API keys, no subscription, no prompt leakage.

Open in Abliteration