625 karma · joined August 17, 2012
Collection: https://huggingface.co/collections/TrevorJS/gemma-4-uncensor...
Code: https://github.com/TrevorS/gemma-4-abliteration
Results
Refusal rates from 686 prompts across 4 datasets (JailbreakBench, tulu-harmbench, NousResearch, mlabonne). Manually audited — most flagged refusals are actually the model complying with a disclaimer attached.
E2B (2.3B): 98% → 0.4%, KL Div 0.346
E4B (4.5B): 99% → 0.7%, KL Div 0.068
26B MoE: 98% → 0.7%, KL Div 0.090
31B: 100% → 3.2%, KL Div 0.124
26B MoEStandard abliteration only touches dense layers, which gets you from 98% -> 29% on the MoE. The remaining refusals are in the expert weights. Used Expert-Granular Abliteration (EGA, concept from OBLITERATUS [1]) with norm-preserving biprojection [2] on each of the 128 expert slices per layer. That gets it to 3%.
[1] https://github.com/elder-plinius/OBLITERATUS
[2] https://huggingface.co/blog/grimjim/abliteration-biprojectio...
How it was built
Set up an automated research loop -- an AI agent reads the current results and idea backlog, picks the next experiment, runs it on the GPU, records results, and repeats. It ran 22 experiments across the 4 models, discovered the false-positive problem in standard refusal markers, built the cross-dataset evaluation, and implemented the MoE expert abliteration when dense-only wasn't enough.
Full experiment history and code in the repo.
Downloads
Each model has bf16 safetensors + GGUF (Q4_K_M, Q8_0):
E2B bf16: https://huggingface.co/TrevorJS/gemma-4-E2B-it-uncensored
E2B GGUF: https://huggingface.co/TrevorJS/gemma-4-E2B-it-uncensored-GGUF
E4B bf16: https://huggingface.co/TrevorJS/gemma-4-E4B-it-uncensored
E4B GGUF: https://huggingface.co/TrevorJS/gemma-4-E4B-it-uncensored-GGUF
26B bf16: https://huggingface.co/TrevorJS/gemma-4-26B-A4B-it-uncensored
26B GGUF: https://huggingface.co/TrevorJS/gemma-4-26B-A4B-it-uncensored-GGUF
31B bf16: https://huggingface.co/TrevorJS/gemma-4-31B-it-uncensored
31B GGUF: https://huggingface.co/TrevorJS/gemma-4-31B-it-uncensored-GGUF
Quick start: llama-server -hf TrevorJS/gemma-4-26B-A4B-it-uncensored-GGUF -c 8192After some performance improvements, it is realtime on my DGX Spark with an RTF of .416 -- now getting ~19.5 tokens per second. Check it out, see if it's better for you.
Here are the latest benchmarks running on DGX Spark:
https://github.com/TrevorS/voxtral-mini-realtime-rs#benchmar...
Depending on your hardware, the model is definitely real time (able to transcribe audio faster than the length of the audio).
FP8: https://huggingface.co/Qwen/Qwen3-Coder-Next-FP8
Sequential (single request)
Prompt Gen Prompt Processing Token Gen
Tokens Tokens (tokens/sec) (tokens/sec)
------ ------ ----------------- -----------
521 49 3,157 44.2
1,033 83 3,917 43.7
2,057 77 3,937 43.6
4,105 77 4,453 43.2
8,201 77 4,710 42.2
Parallel (concurrent requests)
pp4096+tg128 (4K context, 128 gen):
n t/s
-- ----
1 28.5
2 39.0
4 50.4
8 57.5
16 61.4
32 62.0
pp8192+tg128 (8K context, 128 gen):
n t/s
-- ----
1 21.6
2 27.1
4 31.9
8 32.7
16 33.7
32 31.7I wanted to see if Claude Code could port the HF / MLX implementation to llama.cpp and it was successful -- in my mind that's wild!
I also learned a ton about GPU programming, how omni models work, and refined my approach to planning large projects with automated end to end integration tests.
The PR was mostly to let people know about the code and weights, since there are quite a few comments requesting support:
rhizome search --limit 2 "pull apart"
Model already exists at \~/.rhizome/models/bge-small-en-v1.5.onnx
\~/Projects/rhizome/src/chunking.rs:458\:fn rust\_no\_structural\_items\_fallback() {
\~/Projects/rhizome/src/lib.rs:2\:pub mod chunking;It's pretty fun :)
https://huggingface.co/TrevorJS/check-amount-deverbalizer-sm...
The first big project I worked on was to develop a call detail record (CDR) search tool.
This tool was used to help locate a missing family who had been lost in the Nevada wilderness for more than 48 hours: https://www.cnn.com/2013/12/11/us/nevada-family-found-alive/...