What is this?
gemma-4-e4b-it with its refusal reflex removed by editing the model's weights directly. No finetuning, no LoRA, no jailbreak prompts, no runtime tricks, just a standard checkpoint that drops in anywhere the original works, except it doesn't refuse.
Why it's better
- It's not a finetune. Finetuning to "uncensor" a model makes it dumber: it forgets facts and drifts into a recognizable style. Apostate never changes what the model knows; it removes only the refusal direction. The change to normal behavior is tiny: harmless KL ≈ 0.119 nats (near-zero).
- It's not a jailbreak. Nothing to paste, nothing that breaks on the next update. The behavior is permanent and built into the weights.
- It's surgical. A contrastive co-vector removes only the refusal component, not the helpful behavior entangled with it, so the model stays sharp instead of becoming a yes-machine.
- It's drop-in. Plain safetensors. Works in Transformers, vLLM, llama.cpp/GGUF, Ollama, and LM Studio.
Install & use
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "heterodoxin/gemma-4-e4b-it-apostate"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="auto", device_map="auto")
messages = [{"role": "user", "content": "Your prompt here"}]
text = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tok(text, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=512)
print(tok.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True))
device_map="auto" requires accelerate (pip install transformers accelerate). model_id can also be a local path to the downloaded model folder (the directory with config.json, not a single .safetensors file).
Prefer GGUF (llama.cpp / Ollama / LM Studio)? Quantized builds live at heterodoxin/gemma-4-e4b-it-apostate-gguf.
Why should I care?
- You want a model that answers instead of lecturing you or dodging with "I can't help with that."
- You're doing red-teaming or safety research and need a model that won't refuse your test set.
- You want gemma-4-e4b-it's full capability without the corporate guardrails, without the intelligence tax that finetuned "uncensored" models charge.
- You're writing fiction, exploring edgy topics, or just tired of being treated like you can't handle information.
⚠️ This model is uncensored: it will answer harmful and dangerous requests. You are responsible for how you use it.
Results
Held-out prompts from JailbreakBench and the harmful_behaviors test split. Refusal is scored by a classifier with a weak-compliance guard; KL measures how much the model's token distribution shifts on harmless prompts (lower = less collateral damage).
Table with columns: Metric, Base, Apostate| Metric | Base | Apostate |
|---|
| Refusal rate | 96.0% | 36.0% |
| Comply rate | n/a | 64.0% |
| Harmless KL (nats) | 0 | 0.119 |
How it works (the technical part)
Apostate finds the residual-stream direction most responsible for refusal and permanently projects it out of the weights, targeting the modules that write to the residual stream (attention output projections, MLP down-projections, and, on post-norm models like Gemma, the reader-side inputs).
The operator is a contrastive co-vector edit. Removing the refusal direction outright disturbs benign behavior; naively preserving all harmless variance along it leaves entangled refusal intact. Instead D = R − W, where the predictor W reproduces the harmless variance along R while being suppressed on harmful prompts: W = (AᵀA + γ·CᵀC + λI)⁻¹Aᵀb, A harmless and C harmful activations (both orthogonalized to R). The edit keeps the harmless-specific component and removes the component shared with refusal, driving refusal down while keeping harmless KL small. The refusal subspace is found via TPE search with causal layer-importance scoring.
License & credit