OrcaRouter Qwen3.8-Flash-Next-Uncensored — NVFP4 (GPTQ) for Strata
[!WARNING] Withdrawn from Strata NVFP4's installer (2026-10-10): as an agent, this abliterated build is much worse than the original Qwen.
- A multi-step Claude Code task (building an interactive 3D page), same prompt on both models: the original Qwen3.8-Flash-Next (our GPTQ of it) ran 175 steps, checking and fixing its work from screenshots, and gave a clearly better result. This build stopped after 10-70 steps (3 runs) and declared the work done.
- It closes its thinking sooner. Over 7,869 positions of the original model's thinking (teacher-forced), this pack raises the probability of
</think>by +0.12 nats on average.
- On a captured 72K-token Claude Code request (5 greedy runs each) it thought 997 tokens on average, the original 1,699.
- Its style of thinking is the same; it just stops earlier.
- The likely cause is OrcaRouter's weight edit: it removes the refusal direction from all 149 residual-writing matrices of every layer, including the late layers whose edit pushes
</think>.- What the installer offers instead. From Strata NVFP4 0.1.41-nvfp4.5:
- the original Qwen (
--family qwen-nvfp4-gptq), with an opt-in switch (--uncensored on, off by default);- the switch removes refusals at run time, in layers 8-33 only, and leaves the weights untouched;
- with thinking on it refused 0 of 104 English and 0 of 30 Ukrainian held-out harmful requests;
</think>+0.02 nats; thinking length as the original's.An existing install of this model keeps working, and the files here are unchanged.
OrcaRouter's abliterated Qwen3.8-Flash-Next with every routed expert in NVFP4, re-quantized from the BF16 checkpoint by GPTQ, packed for Strata NVFP4: the 125B hybrid MoE on one RTX 20-50 card (12 GB of VRAM or more) and 64 GB of RAM or more.
Installer: Strata NVFP4 v0.1.41-nvfp4.1 to .4 listed this repository as --family orca-nvfp4 (the default
from .3). From v0.1.41-nvfp4.5 the installer no longer offers it (see the warning above). To run this model by
hand, see Run it.
- Chain:
Qwen/Qwen3.8-Flash-Next→orcarouter/Qwen3.8-Flash-Next-Uncensored(abliteration, BF16) → this quantization. - Same size and the same decode cost as the ModelOpt NVFP4 experts (63.3 GiB, 4.5 bits a weight), about 33% of their error on held-out tokens: the same format, other codes and scales.
- End to end, an earlier build of the same recipe (2026-10-02, the fork's docs/NVFP4.md) had a median per-answer KL of 0.0070 against an all-Q8_0 reference where ModelOpt's experts had 0.0107 (65%), better in 12 of 12 prompts. This build was checked as described under Checks, not re-measured that way.
- Only for Strata NVFP4. The files are Strata's own runtime formats (an expert pack, GGUFs the fork reads, the MTP draft head). They do not load in transformers, vLLM or llama.cpp.
The model does not refuse. It is an abliterated fine-tune (the refusal direction was removed from the weights; see the base model's card). It will follow harmful requests. What it is used for is on whoever runs it.
Files
| file | size | Strata flag | what it is |
|---|---|---|---|
pack/experts.bin |
63.28 GiB | --pack pack |
the routed experts, 48 layers x 512, NVFP4 by GPTQ (this repo's point) |
pack/native_experts.txt |
1.6 KB | the experts' layout | |
pack/dense.bin, pack/index.txt |
1.43 GiB | weights the engine keeps in its own form: hyper-connections, routers, PLE key/value, indexer, DeltaNet gates | |
pack/tokenizer/ |
10.1 MB (9.6 MiB) | the server's tokenizer and chat template | |
orca-nvfp4-dense.gguf |
5.58 GiB | --native, --native-dense-gguf |
the model's metadata and dense projections (Q8_0 / BF16) and head, without the routed experts |
ple-fp8.gguf |
47.68 GiB | --ple-gguf |
the per-layer n-gram (PLE) table in FP8 E4M3 as Qwen ships it, read from the SSD |
token-embd-bf16.gguf |
1.18 GiB | --embd-gguf |
the token embedding in BF16 as shipped |
mtp/ |
0.77 GiB | --mtp mtp |
OrcaRouter's own MTP draft head (Q2_0 experts), for speculative decoding |
LICENSE, SHA256SUMS, SIZES.txt |
the license, the files' SHA-256 and sizes |
Which parts depend on the abliteration:
- Model-specific: the experts (
down_projwas edited in every layer;gate_up_projis Qwen's, but GPTQ fits the codes to this model's activations), the dense GGUF (o_proj,out_proj, the shared experts'down_proj,ple.value_projwere edited),pack/dense.bin, the token embedding (edited) and the MTP head. - The same as Qwen's original: the n-gram table in
ple-fp8.gguf(the abliteration does not touch it; 31 of the 33 checkpoint shards that hold it are byte-identical toQwen/Qwen3.8-Flash-Next, the other two also hold edited tensors),lm_head, the tokenizer, the chat template and the license.
The dense GGUF is the converted ModelOpt checkpoint's GGUF
(jpezzulli/OrcaRouter-Qwen3.8-Flash-Next-Uncensored-ModelOpt-NVFP4,
whose dense weights, PLE table, embedding and MTP head are OrcaRouter's BF16/FP8 tensors, excluded from
quantization) with its 144 routed-expert tensors (63.3 GiB) left out: next to pack/experts.bin the engine never
reads them. Every remaining tensor and every metadata key is byte-identical to that GGUF, and the engine's output
with it is bit-identical (below).
How it was quantized
NVFP4 stores a weight as a 4-bit E2M1 code times its 16-value block's FP8 (E4M3) scale times one FP32 scale per
expert matrix. ModelOpt's NVFP4 scales each block to its largest value and rounds every weight to the nearest code.
Here each expert was re-quantized from the BF16 checkpoint with tools/requant.py --method gptq from the fork:
- Calibration: the engine's own MoE inputs at every layer (
STRATA_DUMP_MOE_INPUT,STRATA_DUMP_MOE_LAYER=all) for 57.5K tokens: Ukrainian and English Wikipedia, llama.cpp and Rust sources, and 16 of the model's own chat answers (data/requant_calibin the fork), with the routing of each token. - Hessians: for each expert,
H = sum w^2 x x^Tover the tokens routed to it (wits routing weight: its output enters the residual timesw), mixed with the layer's average input as 256 pseudo-tokens so rarely used experts get a sensible one.down's Hessian is built fromsilu(gate x) * up xof the already quantized gate/up, so down corrects the error gate/up left. - GPTQ: columns left to right in blocks of 128, 1% damping; each column's rounding error is spread over the columns not yet quantized through the inverse Hessian.
- Block scales: each 16-column group's FP8 scale is chosen on the weights as GPTQ has updated them, among the codes for amax -> 6 and amax -> 4 ("four over six") and two neighbours of each, by the least squared error weighted by diag(H). The FP32 scale per expert matrix leaves 25% headroom so the updates do not saturate E4M3.
- Every routed expert is NVFP4 (no 8-bit layers): the pack is as large as ModelOpt's and a decode step costs the same. The shared experts, attention and DeltaNet projections are Q8_0 in the GGUF, as in the ModelOpt conversion.
Error against BF16
requant.py analyze: per layer, on held-out tokens (every 4th calibration token, not used for the Hessians), the
routed-weighted squared error of the experts' whole output down(silu(gate x) * up x) against BF16, relative to the
output's energy; summed over the 48 layers weighted by each layer's energy:
48 layers, 57551 tokens per layer (14387 held out)
| method | summed error (rel. MSE x energy) | energy-weighted rel. MSE | of RTN |
|---|---|---|---|
| RTN (ModelOpt's rounding) | 14030.55 | 0.01716 | 100.0% |
| per-block scale search | 8643.53 | 0.01057 | 61.6% |
| GPTQ + scale search (this pack) | 4683.86 | 0.00573 | 33.4% |
| GPTQ gate/up + Q8_0 down (reference, not used) | 1926.48 | 0.00236 | 13.7% |
| Q8_0 everything (reference) | 48.27 | 0.00006 | 0.3% |
GPTQ below RTN in 48 of 48 layers; ratio GPTQ/RTN per layer: min 0.21, median 0.39, max 0.46
Per layer| layer | RTN | search | GPTQ | GPTQ / RTN |
|---|---|---|---|---|
| 0 | 0.00958 | 0.00474 | 0.00204 | 0.21 |
| 1 | 0.01225 | 0.00711 | 0.00378 | 0.31 |
| 2 | 0.01081 | 0.00548 | 0.00343 | 0.32 |
| 3 | 0.01350 | 0.00780 | 0.00446 | 0.33 |
| 4 | 0.01052 | 0.00447 | 0.00219 | 0.21 |
| 5 | 0.01421 | 0.00889 | 0.00496 | 0.35 |
| 6 | 0.01424 | 0.00870 | 0.00512 | 0.36 |
| 7 | 0.01525 | 0.00994 | 0.00570 | 0.37 |
| 8 | 0.01545 | 0.01022 | 0.00603 | 0.39 |
| 9 | 0.01558 | 0.00989 | 0.00591 | 0.38 |
| 10 | 0.01670 | 0.01133 | 0.00690 | 0.41 |
| 11 | 0.01729 | 0.01181 | 0.00729 | 0.42 |
| 12 | 0.01761 | 0.01203 | 0.00759 | 0.43 |
| 13 | 0.01723 | 0.01174 | 0.00721 | 0.42 |
| 14 | 0.01562 | 0.01003 | 0.00613 | 0.39 |
| 15 | 0.01616 | 0.00929 | 0.00474 | 0.29 |
| 16 | 0.01738 | 0.01106 | 0.00597 | 0.34 |
| 17 | 0.01904 | 0.01316 | 0.00789 | 0.41 |
| 18 | 0.01878 | 0.01286 | 0.00810 | 0.43 |
| 19 | 0.02035 | 0.01410 | 0.00895 | 0.44 |
| 20 | 0.02009 | 0.01382 | 0.00878 | 0.44 |
| 21 | 0.01968 | 0.01347 | 0.00903 | 0.46 |
| 22 | 0.02003 | 0.01357 | 0.00924 | 0.46 |
| 23 | 0.02109 | 0.01410 | 0.00896 | 0.42 |
| 24 | 0.01830 | 0.01236 | 0.00750 | 0.41 |
| 25 | 0.01760 | 0.01158 | 0.00717 | 0.41 |
| 26 | 0.01925 | 0.01338 | 0.00859 | 0.45 |
| 27 | 0.01932 | 0.01342 | 0.00869 | 0.45 |
| 28 | 0.02053 | 0.01423 | 0.00954 | 0.46 |
| 29 | 0.01881 | 0.01301 | 0.00835 | 0.44 |
| 30 | 0.01617 | 0.00984 | 0.00609 | 0.38 |
| 31 | 0.01769 | 0.01069 | 0.00570 | 0.32 |
| 32 | 0.01874 | 0.01230 | 0.00707 | 0.38 |
| 33 | 0.01953 | 0.01351 | 0.00845 | 0.43 |
| 34 | 0.01804 | 0.01217 | 0.00727 | 0.40 |
| 35 | 0.01975 | 0.01349 | 0.00829 | 0.42 |
| 36 | 0.01810 | 0.01213 | 0.00659 | 0.36 |
| 37 | 0.01811 | 0.01205 | 0.00653 | 0.36 |
| 38 | 0.01756 | 0.01176 | 0.00704 | 0.40 |
| 39 | 0.01714 | 0.01066 | 0.00554 | 0.32 |
| 40 | 0.01745 | 0.01052 | 0.00590 | 0.34 |
| 41 | 0.01883 | 0.01209 | 0.00739 | 0.39 |
| 42 | 0.01919 | 0.01255 | 0.00723 | 0.38 |
| 43 | 0.01919 | 0.01260 | 0.00775 | 0.40 |
| 44 | 0.01906 | 0.01217 | 0.00700 | 0.37 |
| 45 | 0.01977 | 0.01248 | 0.00692 | 0.35 |
| 46 | 0.02032 | 0.01285 | 0.00656 | 0.32 |
| 47 | 0.01443 | 0.00754 | 0.00303 | 0.21 |
Checks
Strata NVFP4 0.1.40.3 on an RTX 5090 (32 GB) with 128 GB of RAM, the arguments under Run it
(--spec 6 --spec-min-p 0.7), the pack read from a second NVMe drive.
It answers. "Explain in detail how a hash table works ... at least 300 words" (no thinking): a correct 493-token answer that ends by itself (EOS), decoded at 188.7 tok/s (2.37 tokens per speculative round, 12.6 ms a round). A 2,100-token prompt (a CUDA source file cut off mid-line, with no question): prefill 2,763 tok/s; with
--stop-eosthe model completes the cut identifier (q2[l->q2[l0 /, as the file's pattern goes) and ends the user turn after 4 tokens. The same prompt run for 200 tokens without--stop-eos(the deterministic runs below) goes on into the assistant's turn, whose thinking correctly describes what the file implements (CUDA dot products for the q2_0 / IQ2 formats, taken from llama.cpp).The dense-only GGUF changes nothing.
orca-nvfp4-dense.ggufagainst the full GGUF it was cut from: the KV section (metadata, tokenizer) and all 1,367 kept tensors are byte-identical, the 144 dropped tensors are exactlyblk.*.ffn_{gate,up,down}_exps. With a fixed expert cache (--expert-cache 6000) and deterministic settings, 200 greedy tokens after the 2K prompt and the first token's full logits are bit-identical with either GGUF.A decode round costs the same as with ModelOpt's experts. Three interleaved pairs on the hash-table question, each answer to its end, expert cache auto (8,343 slots in every run), against ModelOpt's pack (the same GGUF, PLE, embedding and MTP head; only
experts.bindiffers):experts ms per round tokens per round tok/s ModelOpt NVFP4 12.55 ± 0.13 2.40 ± 0.05 191.6 ± 1.7 this GPTQ pack 12.55 ± 0.05 2.33 ± 0.01 185.6 ± 0.8 A round (one forward of the main model plus the drafts) costs exactly the same. The tokens per round depend on how many MTP drafts each answer's text lets through; in these three pairs they were 3% fewer with this pack (paired difference -0.075 ± 0.042), which three pairs cannot tell from the answers' own spread.
Run it
Build or download Strata NVFP4 (Windows, NVIDIA driver 580+; see its README for the requirements: RAM, pagefile, large pages). Then:
hf download Maximilian228/OrcaRouter-Qwen3.8-Flash-Next-Uncensored-NVFP4-GPTQ-Strata --local-dir models\orca-gptq
One-shot (prompt.txt holds token ids):
strata.exe --pack models\orca-gptq\pack ^
--native models\orca-gptq\orca-nvfp4-dense.gguf --native-dense-gguf models\orca-gptq\orca-nvfp4-dense.gguf ^
--ple-gguf models\orca-gptq\ple-fp8.gguf --embd-gguf models\orca-gptq\token-embd-bf16.gguf ^
--mtp models\orca-gptq\mtp --spec 6 --spec-min-p 0.7 --prefill auto ^
--expert-profile data\expert-profile.bin --expert-cache auto ^
--max-context 262144 --kv int8 --tokens-file prompt.txt --max-new 512 --stop-eos
--max-context 262144 fits a 32 GB card; with less VRAM lower it (the fork's README and setup use these):
| card's VRAM | --max-context |
|---|---|
| 32 GB | 262144 |
| 24 GB | 131072 |
| 16 GB | 65536 |
| 12 GB | 32768 |
data\expert-profile.bin ships with the engine. As a server (OpenAI and Anthropic APIs), put the same arguments in
the release's config\strata-nvfp4.json ("args") and point "tokenizer" at models/orca-gptq/pack/tokenizer.
Pictures need the image encoder (mmproj-f32.gguf, not in this repo: the release's prepare-model.cmd builds
it, or convert_hf_to_gguf.py --mmproj on the BF16 checkpoint); point the config's "vision" entry's "model" at
orca-nvfp4-dense.gguf (the encoder reads only its vocabulary). Without the encoder, drop --vision from the
arguments.
Already have the ModelOpt files from the release's prepare-model.cmd? Its ple-fp8.gguf and
token-embd-bf16.gguf hold the same tensors; skip them with
--exclude ple-fp8.gguf --exclude token-embd-bf16.gguf and point the flags at yours.
Reproduce
With the fork's tools and the BF16 checkpoint (hf download orcarouter/Qwen3.8-Flash-Next-Uncensored, 360 GB = 335 GiB;
the repository is gated with automatic approval, so accept its terms on its page and hf auth login first),
starting from the ModelOpt pack (packs\orca-nvfp4, the README's "Prepare the model"):
set STRATA_DUMP_MOE_INPUT=calib\d
set STRATA_DUMP_MOE_LAYER=all
strata.exe <the arguments above, --pack packs\orca-nvfp4> --tokens-file data\requant_calib\calib_uk.txt --max-new 1 (and en, code, chat)
.venv\Scripts\python tools\requant.py analyze --bf16 models\orca-bf16 --calib calib\d --out calib\errors.jsonl
echo {"default": {"gu": "nvfp4", "d": "nvfp4"}} > calib\plan_nvfp4.json
.venv\Scripts\python tools\requant.py pack --bf16 models\orca-bf16 --calib calib\d --plan calib\plan_nvfp4.json ^
--method gptq --base packs\orca-nvfp4 --out packs\orca-nvfp4-gptq4
The dump for this upload was taken with the engine running a GPTQ pack of the same model with Q8_0 down in 27
layers (packs\orca-nvfp4-gptq-q8d, the README's optional pack: the closest to BF16 there was), not with ModelOpt's
pack: the inputs of layer N depend on how layers 0..N-1 were quantized, and the closer they are to BF16, the closer
the Hessians are to the BF16 model's. A dump with ModelOpt's pack (the commands above) gives slightly different
Hessians and so slightly different codes, not a different method. The same analysis on the 2026-10-01 dump (from an
all-Q8_0 reference pack) gave the same picture: scale search 61.7%, GPTQ 33.5% of RTN (here 61.6% and 33.4%).
License
The Qwen Community License 1.0, as Qwen/Qwen3.8-Flash-Next and orcarouter/Qwen3.8-Flash-Next-Uncensored
ship it (the same LICENSE file; the OrcaRouter card's front matter says Apache 2.0, its LICENSE file does not).
Strata NVFP4 itself is MIT.