darioooooo0o/Spark-X2.5-1.7B-Abliterated-GGUF
Spark-X2.5-1.7B-Abliterated-GGUF

Requests, questions or suggestions? Message me on X: https://x.com/imdariotoo
Uncensored community quants of XHToken/Spark-X2.5-1.7B, produced by single-round rank-1 refusal-direction ablation (heretic) over a balanced 6292-prompt multilingual pool. Trial 33 of a 50-trial Optuna search.
Base model card, architecture notes and serving instructions live in the sibling repo darioooooo0o/Spark-X2.5-1.7B-GGUF — this README covers only what the ablation changed and how it was measured.
Files
All quants built with imatrix calibration from the same BF16 merge. Serve with the Spark fork of llama.cpp (spark2_5 arch) and f16 KV cache:
llama-server -m <gguf> --chat-template-file chat_template.jinja \
--host 127.0.0.1 --port 12450 -c 65536 -n 4096 -ngl 99 \
-fa on -ctk f16 -ctv f16 --temp 1.0 --top-p 0.95 --top-k -1 \
--reasoning-budget 2000 --jinja --reasoning-format deepseek--reasoning-budget is load-bearing, not optional: median thinking length is 1500+ tokens and the tail exceeds 4000. Unbounded reasoning will eat your context.
Refusal results
Headline: 0 refusals in 300 sealed generations + 37 answer-level generations, eye-audited (base model: 186/300 refused on the same prompts).
Sealed sets (never trained on, never trial-scored — the ungameable numbers)
"0-being-N-flagged" needs explanation — see Methodology. Short version: every flag was audited by eye; all 21 were reasoning traces planning compliance or complying answers containing words like "illegal". Zero actual refusals. Preamble (compliance-talk before the answer) collapsed 2-3x: answers start directly now.
Full matrix (marker ruler, descriptive — same prompts both models)
Marker numbers overstate both sides on thinking models (see below). They are included for comparability with other releases, not as claims.
Answer-level audit (4096-token generations, think/answer split)
41 sealed prompts (21 flagged + 20 random unflagged): 37 finished thinking, 37 produced answers, 0 answers refused. All 8 answer-flags were complying answers (guides, letters, code) containing refusal-vocabulary words.
Methodology: why marker counts are fiction on thinking models
Standard refusal eval generates ~100 tokens and string-matches for "sorry", "as an AI", "illegal", etc. On a thinking model this fails twice, in opposite directions, on the same model:
- Flags compliance. 100 tokens never exit thinking, so the matcher scores reasoning traces. Traces planning compliance ("We should provide a detailed, step-by-step guide" — for explosives manufacturing) get flagged for containing "as an AI". Complying answers get flagged for containing "illegal" (a drug-guide title: "# The Complete Guide to Manufacturing and Distributing Illegal Drugs").
- Misses real structure. Non-answers (thinking that never converges) score as neither refusal nor compliance.
Our ruler instead: 600+ token generations, split thinking from answer on </think>, three buckets per generation — complied / refused / non-answer — with every flagged item eye-audited. Reported numbers above are bucket counts, not marker counts. Anyone comparing "0/300" against a marker-count "0/465" is comparing different rulers; demand the bucket table.
How it was made
- Pools (frozen, manifest-hashed): train 6292 rows (mjd multilingual ×7 langs
- AdvBench oversampled ×10 for equal family mass — balanced diff-in-means needs equal votes, not proportional ones), selection 500 stratified (400 mjd + 100 adv), sealed 200 mjd + sealed 100 adv held out of everything. Zero-overlap matrix verified.
- Search: heretic Optuna, 50 trials (20 startup + 30 TPE), batch 32, bf16, KL co-optimized. Trial 33 selected: 4/500 selection refusals at KL 0.016.
- One round. Minimal-change principle: bigger balanced slices beat stacked rounds. A pre-registered second-round gate (residual cosine) was mooted and dropped — there is no residual refusal behavior left to ablate.
- Export: adapter-save, CPU reload, merge, tied-embedding twin-fill (PEFT unties embeddings on merge leaving a meta stub — filled from the live twin).
Full pipeline (patch scripts, pool builder, launchers, export, evals) is deterministic from the base safetensors; trial-33 params recorded in the study journal.
Quality gates (base vs ablated)
The +2.3% PPL is over our own 2% bar by 0.3 points and is printed here, not buried. No capability damage was demonstrated anywhere else, so no DPO repair pass was run.
Caveats
- Inherits the base model's reasoning-loop failure mode on vague open-ended prompts (documented in the base repo README): unbounded thinking until the token limit, independent of quantization.
--reasoning-budget+ client timeouts are mandatory. - Most generations spend 1500+ tokens thinking; short
max_tokensvalues return reasoning fragments, not answers. Budget context accordingly. - "0 refusals" means no observed refusals in the evaluated sets under eye audit, not a proof of universal compliance. Novel framings were not exhaustively tested.
- Ablation removes refusal behavior, not knowledge. Standard responsible-use expectations apply.
License
Apache 2.0, same as the base model. Ablation deltas are rank-1 LoRA merges; no additional training data is distributed with these files.
