Downloads · 30 days
45.1K
58% of all-time downloads
JonathanColetti/Qwen3.8-27B-Uncensored
Qwen3.8-27B-Uncensored is a image-text-to-text model from JonathanColetti. Use it for the image-text-to-text task on the model card, and read the license before you ship it in a product. It is set up for transformers. The card lists the license as apache-2.0.
Qwen3.8-27B with refusal behaviour substantially reduced, not eliminated — see Measured behaviour for the numbers. Capabilities, training data, and architecture are otherwise unchanged.
Downloads · 30 days
45.1K
58% of all-time downloads
All-time downloads
77.4K
Public
Parameters
27.4B
55.6 GB on disk
Likes
120
Trending 5
Click a slice to open those files.
.safetensors55.6 GB · 100%
From the Hugging Face model README
Qwen3.8-27B with refusal behaviour substantially reduced, not eliminated — see Measured behaviour for the numbers. Capabilities, training data, and architecture are otherwise unchanged.
These are the bf16 safetensors. For local inference under llama.cpp, see JonathanColetti/Qwen3.8-27B-Uncensored-GGUF, which ships imatrix quantizations with the multi-token prediction head retained. Try it first in the demo Space.
The MTP head is present and verified. Abliteration drops the
mtp.*tensors: the model is re-saved through transformers, which does not carry the MTP module, whileconfig.jsonstill advertisesmtp_num_hidden_layers. All 15mtp.*tensors were grafted back from the base checkpoint and the inventory was asserted against the source before upload.
attn.o_proj and mlp.down_proj are modified, 64 modules each. The mtp.*
tensors are copied verbatim from the base checkpoint after merging.| Base | Qwen/Qwen3.8-27B |
| Architecture | Qwen3_5ForConditionalGeneration |
| Layers | 64 |
| Vocab | 248320 |
| MTP layers | 1 |
| Vision | yes |
| Context | 262144 |
| Precision | bf16 |
import torch
from transformers import AutoProcessor, AutoModelForImageTextToText
model_id = "JonathanColetti/Qwen3.8-27B-Uncensored"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForImageTextToText.from_pretrained(
model_id, dtype=torch.bfloat16, device_map="auto")
messages = [{"role": "user", "content": [{"type": "text", "text": "Hello"}]}]
inputs = processor.apply_chat_template(
messages, add_generation_prompt=True, tokenize=True,
return_dict=True, return_tensors="pt").to(model.device)
out = model.generate(**inputs, max_new_tokens=512)
print(processor.decode(out[0], skip_special_tokens=True))
bf16 needs roughly 55 GB of VRAM. The chat template opens a <think> block by default;
pass enable_thinking=False to apply_chat_template for direct answers. Qwen's
recommended sampling is temperature=1.0, top_p=0.95, top_k=20.
Benchmarked against the unmodified base model on identical settings. The delta is the figure that matters: it isolates what the weight edit cost.
| Task | Base | Uncensored | Δ |
|---|---|---|---|
| MMLU | 83.4 | 83.3 | -0.2 |
| ARC-Challenge | 58.9 | 57.7 | -1.2 |
| HellaSwag | 82.8 | 82.9 | +0.1 |
| Winogrande | 76.1 | 75.3 | -0.8 |
| Mean | -0.5 |
0-shot via lm-evaluation-harness, bf16, both models scored in the same session. Every delta is within or close to the reported standard error (MMLU ±0.30, ARC ±1.44, HellaSwag ±0.38, Winogrande ±1.21), so none is clearly separable from run-to-run noise.
These are 0-shot and are not comparable to Qwen's published scores, which use few-shot prompting. They are directly comparable to each other, which is the point. Note also that ARC-Challenge is low for a model at this MMLU — the base scores 58.9 under the same settings, so that is format sensitivity in a reasoning-tuned model, not abliteration damage.
What the benchmarks do not cover: no generative evaluation (GSM8K, HumanEval), no math or code, no multilingual, and the harness loads the text stack only — nothing here measures the vision tower or MTP speculative decoding.
| Measurement | Base model | This model |
|---|---|---|
| Refusals (100 held-out harmful prompts) | 98/100 | 12/100 |
| KL divergence vs base (first-token) | 0 | 0.1191 |
Search: 200 Heretic trials, 23 non-dominated points. The published model is the marked row.
| refusals | KL divergence | |
|---|---|---|
| 12/100 | 0.1191 | ← published |
| 13/100 | 0.1052 | |
| 19/100 | 0.0722 | |
| 23/100 | 0.0635 | |
| 26/100 | 0.0507 | |
| 27/100 | 0.0410 | |
| 35/100 | 0.0406 | |
| 36/100 | 0.0387 | |
| 41/100 | 0.0366 | |
| 44/100 | 0.0352 | |
| 46/100 | 0.0334 | |
| 48/100 | 0.0331 | |
| 51/100 | 0.0321 | |
| 52/100 | 0.0294 | |
| 60/100 | 0.0290 | |
| 76/100 | 0.0280 | |
| 77/100 | 0.0247 | |
| 83/100 | 0.0204 | |
| 86/100 | 0.0193 | |
| 91/100 | 0.0170 | |
| 96/100 | 0.0146 | |
| 97/100 | 0.0044 | |
| 98/100 | 0.0004 |
Refusal rate is the count of refusals over 100 held-out prompts from
mlabonne/harmful_behaviors
(test split) — explicitly harmful requests, not benign ones. So this number is not an
over-refusal rate: it does not tell you how often the model declines legitimate work. It
tells you how much of the original safety behaviour on harmful requests remains.
KL divergence is measured against the unmodified base model over first-token distributions, and is the optimizer's proxy for "how much did we damage the model". Lower is closer to base. It is a proxy, not a capability measurement — a low KL does not certify that reasoning or coding ability survived, and nothing here does certify that.
The two trade off against each other. The published point minimizes refusals, which is the
most aggressive end of the front and also the highest divergence on it. Points with
noticeably lower KL are available at a few more refusals; the full search is archived in
heretic-study/ if you want to
re-export one.
<think> block, so the evaluation closes it explicitly to score answers rather than
reasoning traces. With thinking enabled the refusal rate may differ, in either direction.Local inference and research. Not intended for deployment to third parties without your own safety layer.
Apache 2.0, inherited from Qwen/Qwen3.8-27B. The base model's license and acceptable use policy still apply to your use of this derivative.