Files
Qwen2.5-Coder-32B-abliterated/README.md

96 lines
3.9 KiB
Markdown
Raw Normal View History

---
license: apache-2.0
base_model: Qwen/Qwen2.5-Coder-32B-Instruct
tags:
- abliterated
- uncensored
- code
- qwen2.5
- text-generation
pipeline_tag: text-generation
language:
- en
---
# Qwen2.5-Coder-32B-abliterated
An **abliterated** (uncensored) build of
[`Qwen/Qwen2.5-Coder-32B-Instruct`](https://huggingface.co/Qwen/Qwen2.5-Coder-32B-Instruct).
The model's refusal direction (Arditi et al. 2024, *"Refusal in LLMs is mediated
by a single direction"*) was estimated from contrasting harmful/harmless prompts
and **orthogonalized out of every residual-writing weight** (all attention
`o_proj`, all MLP `down_proj`, and token embeddings). This is a static weight
edit — no LoRA, no runtime hooks, no inference-time cost. Coding ability is
inherited from the base model.
- **GGUF (Q4_K_M) build:** [`TobiasLogic/Qwen2.5-Coder-32B-abliterated-GGUF`](https://huggingface.co/TobiasLogic/Qwen2.5-Coder-32B-abliterated-GGUF)
- **Method / reproducible pipeline:** see the GitHub repo linked below.
## Benchmarks
Coding capability scored with the official [EvalPlus](https://github.com/evalplus/evalplus) harness — greedy decoding, pass@1, every solution executed against unit tests. Both columns use the same harness, so it's a true apples-to-apples comparison against the full-precision base model.
![Coding benchmarks: pass@1](https://raw.githubusercontent.com/TobiasLogic/Qwen2.5-Coder-Abliterate/main/benchmark_chart.png)
| Benchmark | This model (abliterated, Q4_K_M) | Base Instruct (official BF16) |
|-----------|:--------------------------------:|:-----------------------------:|
| **HumanEval** | 89.6% | 92.7% |
| **HumanEval+** | 84.8% | 87.2% |
| **MBPP** | **91.3%** | 90.2% |
| **MBPP+** | **77.0%** | 75.1% |
**Abliteration removed refusals without breaking coding ability.** The uncensored 4-bit build stays within ~3 points of the base on HumanEval and **beats it on both MBPP variants** — average delta ≈ **−0.6 points** across the four benchmarks. Not bad for a 19 GB GGUF you can run on a single 24 GB GPU.
<sub>Base numbers: Qwen2.5-Coder-32B-Instruct, [tech report](https://arxiv.org/abs/2409.12186) Table 16. Measured 2026-07, Q4_K_M via Ollama.</sub>
## Refusal rate (held-out harmful eval)
| | refusal rate |
|--|--|
| base `Qwen2.5-Coder-32B-Instruct` | **96.9%** |
| this model | **0.0%** |
Selected layer 42; direction estimated from 256 harmful/harmless contrast pairs
and evaluated on a 32-prompt held-out harmful set. See `abliteration_info.json`
in this repo for the exact run metadata.
## Intended use
Local coding assistant / agent work where the base model's alignment layer
refuses legitimate requests (security research, exploit analysis, red-teaming,
uncensored creative writing). You are responsible for how you use it and for
complying with applicable law.
## Usage
Transformers:
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
m = "TobiasLogic/Qwen2.5-Coder-32B-abliterated"
tok = AutoTokenizer.from_pretrained(m)
model = AutoModelForCausalLM.from_pretrained(m, torch_dtype="bfloat16", device_map="auto")
msgs = [{"role": "user", "content": "Write a port scanner in Python."}]
ids = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt").to(model.device)
print(tok.decode(model.generate(ids, max_new_tokens=512)[0][ids.shape[1]:], skip_special_tokens=True))
```
GGUF (a `Q4_K_M` build is in the companion `-GGUF` repo) via Ollama:
```bash
ollama create qwen-coder-abliterated -f Modelfile
ollama run qwen-coder-abliterated
```
## Limitations
- Abliteration removes refusals but can slightly reduce quality vs. the base.
- It does not add knowledge or change biases beyond the refusal behavior.
- Some strongly-trained refusals may partially survive; a stronger system prompt
closes the gap.
## Method / reproducibility
Produced with the open pipeline `abliterate.py`. Base model is Apache-2.0, so
this derivative is Apache-2.0.