Gemma-4 12B Coder — abliterated (weights, deprecated)
⚠️ Deprecated — do not use for new work. superseded by SFT v5 + abliterated — the same KL-guarded uncensoring applied on top of the SFT v5 tool-calling winner (no capability loss). Use that.
Replaced by
tpls/gemma-4-12B-coder-fable5-composer2.5-v1-sft-v5-abliterated.
Uncensored gemma-4 12B coder weights (safetensors) — for fine-tuning, merging, or quantizing.
Ready-to-serve GGUF quants: tpls/gemma-4-12B-coder-fable5-composer2.5-v1-abliterated-GGUF.
⚠️ Tool-calling needs the recovery shim. The model emits gemma-4's native tool markup, which
llama.cpp --jinjaunder-parses — wrap your endpoint with the tool-shim (see Tool-calling below) to get standardtool_calls.
At a glance
| Type | Model weights (safetensors) |
| Techniques | abliteration |
| Tool-calling | native markup — recover via the tool-shim (below); not yet gate-measured |
| Status | ⚠️ Deprecated → tpls/gemma-4-12B-coder-fable5-composer2.5-v1-sft-v5-abliterated |
| Use | GGUF quants: tpls/gemma-4-12B-coder-fable5-composer2.5-v1-abliterated-GGUF |
Use it — GGUF quantizations
Ready-to-serve GGUF quants live at tpls/gemma-4-12B-coder-fable5-composer2.5-v1-abliterated-GGUF
(llama.cpp / Ollama one-liners on that card). These are the safetensors weights, for
fine-tuning / merging / quantizing.
Tool-calling
Tool-calling works — but llama.cpp --jinja doesn't recognise gemma-4's native
tool-call markup, so the bare parser under-reports calls. The model is fine; the
parser is blind to the format. Recover standard tool_calls with a small serve-side
post-processor (no weight change, no latency beyond a regex scan).
Ready-to-use → tpls/gemma4-tool-shim — a drop-in
callback for OpenAI-compatible proxies, a standalone (dependency-free) example, and the pure
parser, all Apache-2.0, with the full recovery algorithm documented. Point your
OpenAI-compatible endpoint through it.
You send tools the usual OpenAI way (tools=[…]); the model emits native markup; the
shim turns it into a standard tool_calls object:
# model completion (raw):
<|tool_call>get_weather{"city": "Paris", "units": "celsius"}
// after the shim:
{"finish_reason": "tool_calls",
"message": {"role": "assistant", "content": null,
"tool_calls": [{"id": "call_0", "type": "function",
"function": {"name": "get_weather", "arguments": "{\"city\": \"Paris\", \"units\": \"celsius\"}"}}]}}
Intended use & limitations
Built for code generation and agentic tool use; serve locally via llama.cpp / Ollama, or use as a base to fine-tune / merge / quantize. Outputs can be wrong or fabricated — validate tool arguments before executing, and keep a human in the loop for anything consequential.
⚠️ Uncensored. For this variant the refusal direction has been ablated from the weights — safety guardrails are substantially removed and it will attempt requests a stock model would refuse. You are responsible for what you generate and how it's used; not suitable where refusal behaviour is itself a safety requirement.
Where this sits in the family
- base (upstream) —
yuxinlu1/gemma-4-12B-coder-fable5-composer2.5-v1
Provenance & reproduction
How this model was built — technique chain, training mix, and the exact knobs/pins, so the result is reproducible without any of our tooling.
Mechanics applied
| Step | Technique | What it does | Provenance |
|---|---|---|---|
| 1 | abliteration | refusal-direction ablation edits the weights to remove refusals | yuxinlu1/gemma-4-12B-coder-fable5-composer2.5-v1 |
1. abliteration
weight ablation degrades the canonical
<|tool_call>token — the model tends to leak calls as text markup, so the native llama.cpp parser may not fire. See the tool-call recovery note below to get structured calls back.
Part of the Gemma-4 12B Coder — archive (superseded) collection.
Something not right, or a request? Open a discussion — happy to help.