Downloads · 30 days
21
7% of all-time downloads
ajh-code/Qwen3.8-27B-Escha-W2-16GBgpu-Abliterated-Uncensored
Qwen3.8-27B-Escha-W2-16GBgpu-Abliterated-Uncensored is a text generation model from ajh-code. Use it when you need the model to write or continue text. The card lists the license as apache-2.0.
A 23 KB runtime adapter that removes refusal from Escha W2 without touching the checkpoint. In my limited testing it showed no quality loss against the unmodified model, and on some measures scored higher — 0/64 refus…
Downloads · 30 days
21
7% of all-time downloads
All-time downloads
323
Public
Repo size
23 KB
Likes
1
Public
Click a slice to open those files.
.pt23 KB · 42%
From the Hugging Face model README
A 23 KB runtime adapter that removes refusal from Escha W2 without touching the checkpoint. In my limited testing it showed no quality loss against the unmodified model, and on some measures scored higher — 0/64 refusals at 30/45 on a paired capability suite, against 26/45 stock. That is a small sample and needs broader testing to confirm.
The packed W2 weights are never dequantised, edited or requantised. Load the adapter and the model is abliterated; unset one environment variable and it is bit-identical to stock.
Research artifact. Not for all audiences. This removes the model's refusal behaviour: it will answer requests it would normally decline, including harmful ones, and it will produce content many people will find offensive. It is published for research into how refusal is represented and what removing it costs. You are responsible for what you type into it and what you do with what comes out. Do not deploy it anywhere a refusal was doing real work.
| File | What it is |
|---|---|
ablit-beta.pt | the adapter (23 KB) |
chat_template_st.jinja | chat template patched for front ends that inject system messages |
eval/ | the two scoring scripts and their regression tests |
export ESCHA_ABLIT_RESIDUAL_STEER=1
export ESCHA_ABLIT_ADAPTER=/path/to/ablit-beta.pt
export PYTHONPATH=/path/to/abliteration # residual_steer_runtime.py
# then launch SGLang as usual
The gate is stored inside the adapter file, so it cannot be run ungated by
accident. To serve unabliterated, launch without ESCHA_ABLIT_ADAPTER.
Ordinary abliteration projects the refusal direction out of every token of every prompt. Refusal is conditional behaviour, so an unconditional linear edit necessarily damages the cases that never needed it — which is why abliterated models tend to lose instruction-following and formatting.
This adapter gates the projection on how much refusal a token actually carries:
h ← h − α · g(|h·r̂| / ‖h‖) · (h·r̂) · r̂ g = 0 below 0.07, ramping to 1
Measured on this checkpoint, harmless prompts sit at cosine 0.02–0.07 and harmful ones at 0.21–0.69, so the gate separates them cleanly: benign inputs come back bit-identical to stock rather than absorbing the same perturbation as a refusing one.
The direction is also orthogonalised against a measured language axis before use. The harmful and harmless prompt sets differ in language composition, which leaves a language component in the difference-of-means vector, and drift scales steeply with it (cosine 0.007 → 10/53 drifted responses, 0.027 → 21/53, 0.064 → 41/53). This step follows grimjim's Projected Abliteration, which orthogonalises against the harmless mean; here the confound removed is language.
n=64 held-out prompts per arm, scored by first-person refusal constructions rather than topic words. Capability is a 45-point paired suite (retrieval, ledger aggregation, rule following, code comprehension, record sorting, closed-form arithmetic) at 16K context, deterministic across repeats on this hardware.
| stock | abliterated | |
|---|---|---|
| refusal, thinking off | 51/64 | 0/64 |
| refusal, thinking on | 50/64 | 0/64 |
| capability suite | 26/45 | 30/45 |
| language drift, both modes | 0/53 | 0/53 |
| harmless prompts refused | 0/64 | 0/64 |
It also composes with the packed KVarN K4/V4 cache at 4K: output is character-identical to the uncompressed run with CUDA graphs on.
The base template raises System message must be at the beginning. whenever a
system-role message appears after the first turn, which SillyTavern and similar
front ends do routinely. chat_template_st.jinja is the same template with that
one check replaced by rendering the message as a normal system turn. Serve it with
--chat-template chat_template_st.jinja.
eval/check_language_drift.py is now a
release gate.CG-Ablit is open — use it, port it, build on it. The gating idea is not specific to this model or this checkpoint format: any refusal-direction ablation applies its edit to every token, and gating that edit on how much refusal a token actually carries is a general fix for the capability loss abliterated models are known for. If you use it, cite this repo.
@misc{ajhcode2026cgablit,
author = {ajh-code},
title = {CG-Ablit: Cosine-Gated Abliteration},
year = {2026},
howpublished = {\url{https://huggingface.co/ajh-code/Qwen3.8-27B-Escha-W2-16GBgpu-Abliterated-Uncensored}}
}
Apache-2.0, inheriting the base model's terms. Base model: EschaLabs/Qwen3.8-27B-Escha-W2. Refusal-direction method after Arditi et al. 2024; norm-preserving biprojection and the orthogonalisation step after grimjim.