Qwen3.8-Flash-Next Abliteration (refusal direction)

One refusal direction for Qwen3.8-Flash-Next, published as a Strata control vector. Load it and the model stops refusing. We wrote it for Strata. The vllm/patches/ folder carries the runtime patch of the same direction for vLLM.

CAUTION: This removes a safety behaviour. With the vector on, the model follows requests the stock model declines. You are responsible for what the model writes with it on.

The direction works with any model of the Qwen3.8-Flash-Next family: the base model, instruction-tuned models, quantized models, and finetunes of the same architecture. The vector has 2,560 values, so the model must have a residual stream of 2,560.

We tested the direction with these releases:

The list covers quantizations of the base model and a finetune (Swift 1.5).

Use it in Strata

Get the file

Put orcarouter.gguf in your own Strata folder, i.e. ~/Strata-data/abliteration/:

hf download Goghor/Strata-Qwen3.8-Flash-Next-Abliteration orcarouter.gguf --local-dir ~/Strata-data/abliteration

Set the engine flags

Put these three flags in the args array of strata-<model>.json:

"--control-vector-scaled", "~/Strata-data/abliteration/orcarouter.gguf:1.0",
"--cvec-mode", "project",
"--cvec-dir", "per-layer"

Switch it off for one request

A loaded vector is on for every request. Send "experimental_speed_projection": false in the sampling object. The server passes cvec=0 to the engine, and the Chat settings write the same switch. The switch drops the conversation cache once. Switched off, the answer is the stock model's answer, token for token. An engine with no loaded vector ignores the key.

Flags you can change

  1. --cvec-mode project is required. Additive mode adds the direction to the stream. That is not abliteration.
  2. --cvec-dir per-layer is the form of this file. The 47 layers carry the same vector, so single:1 gives the same result.
  3. --control-vector-layer-range A B selects the layers. Without it the engine steers layers 1 to 47. Strata's own refusal package for this model uses 4 to 44.
  4. The scale in FILE:SCALE is 1.0. A scale less than 1.0 is a partial projection.

Use it with vLLM

vllm/patches/ holds two git am patches for vLLM v0.30.0, commit ced6857afa0ea7b2e3f0846a62e1394e90f15607. They add a runtime projection at five points. The points are the token embeddings, the MTP embeddings, attn_out, mlp_out, and the PLE value after the kv_proj split.

Patch Size What it does
0001-qwen4_exp-add… 9,120 B Adds vllm/models/qwen4_exp/nvidia/abliteration.py and calls abliteration.project_ at the five points named above.
0002-qwen4_exp-abliteration-always… 2,764 B Registers _abliteration_r always, with zeros when the switch is off. ON and OFF then share one AOT compile cache.

The pair sits at the end of the 106-patch series of the source repository, so it needs that series. On 31 October 2026 we tested the pair alone on a stock v0.30.0 tree. git apply --check failed at model.py:554 and at mtp.py:60. --ignore-whitespace failed the same way. On top of the other 104 patches of that repository, both files passed git apply --check and applied with git am.

Build the tree in this order:

git init vllm && cd vllm
git fetch --depth 1 https://github.com/vllm-project/vllm.git refs/tags/v0.30.0:refs/heads/v0300
git checkout v0300
git am --keep-non-patch /path/to/qwen38-flash-next-2x3090/patches/*.patch

That series already includes these two files. Add the two files here only to a tree of the other 104 patches:

git am --keep-non-patch /path/to/vllm/patches/0001-*.patch /path/to/vllm/patches/0002-*.patch

Before you build, test the fit with git apply --check on the two files.

Set the direction with the env var, then build vLLM from the patched tree:

export QWEN38_ABLITERATION=/path/to/orcarouter.json

The variable takes a JSON file, a safetensors file, or a bare name. The JSON file needs a refusal_direction list, and the safetensors file needs a refusal_direction tensor. A bare name resolves to /opt/qwen38/abliteration/<name>.json. The vector must have 2,560 values, and the load normalises it. An empty value, 0, or an unset variable leaves the model stock. The switch is global. It has no per-request form.

The source project measured the switch on 2x RTX 3090. The verify-step time with it off equals the time with it on: 24.1-27.0 ms. Eight mild prompts went from 7 refusals to 0 refusals. See benchmarks/2026-10-02/ in that repository.

Files

File Size What it is
orcarouter.gguf 483,520 B The direction as a control-vector GGUF: 47 tensors direction.1 .. direction.47, 2,560 F32 values each. Load this file in Strata.
orcarouter.json 44,246 B The same direction in JSON: one unit vector, its source, and the checks of the recovery. Input for the Strata tool.
config/strata-cvec-flags.json 781 B The engine flags with notes.
examples/check.txt 2,013 B Transcript of the reproduce run, with the measure commands and their output.
vllm/patches/0001-*.patch 9,120 B The vLLM runtime patch: QWEN38_ABLITERATION, five projection points.
vllm/patches/0002-*.patch 2,764 B Registers the direction buffer always, so ON and OFF share one compile cache.
LICENSE.md 3,089 B License and attribution.

Reproduce the GGUF

python ~/Strata/tools/json_to_cvec_gguf.py orcarouter.json -o ~/Strata-data/abliteration/orcarouter.gguf

A regenerated file is not byte-identical to the shipped one. The normalisation rounds in float32, and the rounding depends on the numpy build. examples/check.txt measures cos 1.0 and a max element diff of 3e-08 against the shipped file. All 47 tensors of the shipped file are byte-identical to each other.

The method

This file holds the refusal direction of Qwen3.8-Flash-Next: 2,560 values, unit length. Strata applies it as a projection after the FFN write of each steered layer, on every hyper-connection stream:

h <- h - (h . v) v      with v = the unit direction

The sign of the vector does not matter. The projection removes the component on the line, in both directions.

Where this direction comes from

The recovery is a weight diff, not an activation probe. The release orcarouter/Qwen3.8-Flash-Next-Uncensored, revision e096800036ec20da7e2442dcd4044a004d4e99fa, edits 149 tensors. scripts/extract_refusal_direction.py in the qwen38-flash-next-2x3090 repository reads about 83 MB of it by HTTP range requests. It takes the top left singular vector of W - W' for four edited matrices, with one untouched tensor as control. The release is gated, so your Hugging Face account must accept the terms of OrcaRouter first.

The JSON records the checks of that recovery:

Check Result
Untouched control tensor layers.3.self_attn.k_proj byte-identical to the base checkpoint
Each edit W - W' is rank-1 second singular value 0.88-0.98% of the first
One direction for all four tensors abs cos 0.999993-0.999999
Re-apply W - r(r^T W) to the base weights 87.6-92.9% of elements bit-identical to the release

What it costs

The engine adds one dot product and one rank-1 update per token, per steered layer. Strata measures 0.2-0.4% per token for its own control vector of this model (docs/DETAILS.md, "Experimental speed projection"). We have no speed measure and no quality measure for this vector in Strata.

The change is narrower than a weight edit. Strata projects the residual stream after the FFN write. It does not project the token embeddings or the PLE value. The published release edits those weights too.

Our GGUF and Strata's speed projection vector (data/experimental-speed-projection/Qwen3.8-Flash-Next-experimental-speed-projection.gguf) are different vectors: cos 0.141. That package reports a refusal rate of 1 of 50 against 50 of 50 on its own test set. On 2,557 teacher-forced tokens its mean KL from the stock model is 0.063 nats.

License

  • The direction, the JSON and the GGUF: Qwen Community License 1.0. The direction derives from the model weights and from the activations of the model. See LICENSE.md.
  • The converter tools/json_to_cvec_gguf.py and the control-vector hooks are MIT work of the Strata project, Copyright (c) 2026 Niko1221 and the Strata contributors.

Source

@article{arditi2024refusal,
  title   = {Refusal in Language Models Is Mediated by a Single Direction},
  author  = {Arditi, Alessandro and Obeso, Juan Stam and Syed, Ailidh and Paleka, Daniel and
             Panickssery, Afonso and Gurnee, Wes and Nanda, Neel},
  journal = {arXiv preprint arXiv:2406.11717},
  year    = {2024}
}
Downloads last month
53
GGUF
Model size
120k params
Architecture
controlvector
Hardware compatibility
Log In to add your hardware

We're not able to determine the quantization variants.

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Goghor/Strata-Qwen3.8-Flash-Next-Abliteration

Finetuned
(114)
this model

Paper for Goghor/Strata-Qwen3.8-Flash-Next-Abliteration