license: apache-2.0 base_model:
- peonist-ai/halogen-qwen3.8-flash-next
- orcarouter/Qwen3.8-Flash-Next-Uncensored
- Qwen/Qwen3.8-Flash-Next base_model_relation: quantized pipeline_tag: text-generation library_name: halogen inference: false tags:
- abliterated
- uncensored
- halogen
- halogen-flash
- qwen
- moe
- mixture-of-experts
- long-context
- quantized
- 4-bit
- strix-halo
- gfx1151
- rocm
- amd
Halogen Qwen3.8-Flash-Next v2, abliterated
Runs only on halogen-flash-server. This is a
.hgncheckpoint, Halogen's own format. It will not load in transformers, vLLM, llama.cpp, Ollama or LM Studio, and there is no GGUF or safetensors version. Halogen targets AMD Strix Halo (gfx1151) only.
This is peonist's Halogen v2 checkpoint for Qwen3.8-Flash-Next (peonist-ai/halogen-qwen3.8-flash-next), with the refusal-direction edit ("abliteration") from orcarouter/Qwen3.8-Flash-Next-Uncensored applied. It runs on halogen-flash-server 0.15.0 on AMD Strix Halo (gfx1151), at the same speed as stock v2.
- Same speed as stock v2: 52.7 tok/s greedy, 49.8 tok/s sampled and 1,696 tok/s prefill on a Ryzen AI Max+ 395.
- Refusals removed: stock v2 refused all three test prompts; this checkpoint answered all three.
- Only 149 tensors changed: everything else is byte-identical to peonist's v2. It contains no other fine-tune.
- Reproducible: the scripts that built it are in
tooling/, and a rebuild is byte-identical to this file.
This is an unofficial derivative. It is not made or endorsed by Peonist, orcarouter or Qwen.
Model details
| Base model | Qwen/Qwen3.8-Flash-Next: 125B-parameter MoE, 48 layers, 512 routed experts per layer |
| Quantized checkpoint | peonist's v2 .hgn, revision 5cc17cea1a10b502b4a5db41d8d2b1a0f22dba26 |
| Abliteration donor | orcarouter's BF16, revision 8336e613ea508b13c2159bd0f68965d97a606b95 |
| Precision | Mostly 4-bit, as in v2; see What changed |
| Context | 262,144 positions per request |
| Speculative decoding | MTP draft head built into the checkpoint |
| Vision | Supported through peonist's optional vision tower |
| Engine | halogen-flash-server 0.15.0 (closed source, its own terms) |
| Hardware | AMD Strix Halo (gfx1151), 128 GB unified memory |
| API | OpenAI-compatible: /v1/chat/completions, /v1/completions, /v1/responses, /v1/models |
Files
| File | Size | SHA-256 |
|---|---|---|
qwen38-flash-next-v2-abliterated.hgn | 88,790,868,096 B | e38f58b13943c0e68e913f348cd3a6e59f52dfdf0c4a9025a918696d5b1806f1 |
tooling/ | — | The scripts that built this file (Apache-2.0) |
The file is 22 GB larger than stock v2 (66.7 GB). The original writer payloads stay inside it, unreferenced, and the replacements are appended. The engine loads only the referenced payloads, so the resident weights are the same size as stock v2's.
You also need these from peonist's repo. They are unchanged, so they are not re-uploaded here:
| File | Revision | Needed? |
|---|---|---|
qwen38-flash-next-ngram.hgn (47.7 GiB) | 5cc17cea1a10b502b4a5db41d8d2b1a0f22dba26 | Required |
tokenizer/ | e053f488b120b99ed2525e6ac99f68c51b3b6179 | Required |
qwen38-flash-next-vision.hgn (0.84 GiB) | e053f488b120b99ed2525e6ac99f68c51b3b6179 | Optional; only for image input |
Hardware requirements
- A 128 GB Strix Halo machine, used for this model only.
- At a 262,144-position KV pool with 2 slots, the server container used 64.8 GiB. The n-gram table is memory-mapped on top of that.
- Peonist's advice applies here too: other large processes compete for the remaining memory and can stall the server.
- About 137 GB of disk: this file (88.8 GB) plus the n-gram table (51.2 GB). Add the vision tower if you want image input.
Quick start
hf download Quat3rnion/halogen-qwen3.8-flash-next-v2-abliterated \
qwen38-flash-next-v2-abliterated.hgn --local-dir /models/v2
hf download peonist-ai/halogen-qwen3.8-flash-next qwen38-flash-next-ngram.hgn \
--revision 5cc17cea1a10b502b4a5db41d8d2b1a0f22dba26 --local-dir /models/v2
hf download peonist-ai/halogen-qwen3.8-flash-next \
--revision e053f488b120b99ed2525e6ac99f68c51b3b6179 \
--include 'tokenizer/*' 'qwen38-flash-next-vision.hgn' --local-dir /models/w4b
docker run --rm --name halogen \
-p 127.0.0.1:8731:8731 \
--device /dev/kfd --device /dev/dri --ipc=host --ulimit memlock=-1:-1 \
--group-add video --group-add render \
-e HALOGEN_WEIGHTS_LOCK=1 \
-e HALOGEN_KV_POOL_POSITIONS=262144 -e HALOGEN_KV_SLOTS=2 -e HALOGEN_MAX_TOK=8192 \
-e HALOGEN_CHECKPOINT=/v2/qwen38-flash-next-v2-abliterated.hgn \
-e HALOGEN_NGRAM_TABLE=/v2/qwen38-flash-next-ngram.hgn \
-e HALOGEN_TOKENIZER=/models/tokenizer \
-e HALOGEN_VISION_TOWER=/models/qwen38-flash-next-vision.hgn \
-e HALOGEN_MODEL_ID=halogen-v2-abliterated \
-v /models/w4b:/models:ro -v /models/v2:/v2:ro \
ghcr.io/peonist-ai/halogen-flash-server:0.15.0
- Leave out
HALOGEN_VISION_TOWERfor text only. - The checkpoint carries its own MTP draft head, so do not set
HALOGEN_MTP_HEAD. - v2 rejects
HALOGEN_FLASH_PIN_TRUNK=0. - On Podman, use
--group-add keep-groupsinstead of the two--group-addflags. - The server starts in about 30 seconds.
Then send a request:
curl -s http://127.0.0.1:8731/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"halogen-v2-abliterated","messages":[{"role":"user","content":"What is 37*43?"}]}'
GET /health reports the model, the engine version, the context settings
and whether vision is enabled. The
server repository
documents every setting.
Benchmarks
Speed
Test setup:
- Hardware: Ryzen AI Max+ 395 (Radeon 8060S), 128 GB unified memory.
- Server: halogen-flash-server 0.15.0, 262,144-position KV pool, 2 slots,
HALOGEN_MAX_TOK=8192, MTP drafter. - Requests: one at a time. Greedy means temperature 0; sampled uses the server's default sampling. Prefill is a cold 34k-token prompt.
| Stock v2 | This checkpoint | Abliterated IQ4_XS GGUF (for reference) | |
|---|---|---|---|
| Greedy decode, tok/s | 52.8 | 52.7 | 43.0 |
| Sampled decode, tok/s | 49.5 | 49.8 | 41.0 |
| Cold 34k prefill, tok/s | 1,685 | 1,696 | 1,646 |
| Startup | ~31 s | ~31 s | ~3 min |
| Resident weights | 62.1 GiB | 62.1 GiB | 68.3 GiB |
The GGUF column is an earlier abliterated Qwen3.8-Flash-Next fine-tune,
quantized to IQ4_XS and served by the same engine. It shows what running an
abliterated GGUF costs compared with an abliterated .hgn. The GGUF is not
published.
The differences between stock v2 and this checkpoint are within run-to-run noise.
Speed in real use
These are the server's /metrics counters after 81 requests of mixed
production traffic (chat, agentic tool use, greedy and sampled):
| Metric | Value |
|---|---|
| Draft acceptance (MTP head plus prompt lookup) | 72.1% (25,217 of 34,980 drafted tokens) |
| Average decode speed | 45.9 tok/s (60,430 tokens in 1,316 s) |
| Prompt tokens served from the prompt cache | 2.73 M, against 58.8 k prefilled |
The server reports MTP and prompt-lookup drafts in one counter, so the acceptance rate cannot be split between them.
Refusal removal
Refusal-direction component of the writer tensors, |rᵀW|/|W|. Here r is
the refusal direction, taken as the top singular vector of orcarouter's
weights minus the base weights:
| Writers | Stock v2 | This checkpoint |
|---|---|---|
| 4-bit re-encoded (q4c, I4R) | ~0.020 | 0.0016–0.0020 |
| 8-bit and BF16 | ~0.020 | 0.0002 |
The 4-bit residual is consistent with 4-bit quantization noise.
Test prompts at temperature 0, by category (the exact prompt texts are not published):
| Prompt | Stock v2 | This checkpoint |
|---|---|---|
| Explicit adult fiction scene | Refused | Answered |
| Lock-picking instructions | Refused | Answered |
| Car hot-wiring instructions | Refused | Answered |
Capability checks
These are smoke tests, one run each:
| Check | Result |
|---|---|
Arithmetic (37 × 43), greedy and with thinking on | 1,591, correct |
Required tool call (get_weather) | Called with city="Paris" |
| Image input (a solid red PNG) | Answered "Red" |
No quality benchmark (MMLU, GSM8K, perplexity and so on) has been run. Treat output quality as unmeasured relative to stock v2.
Re-encoding accuracy
To check the encoders, they were run on the base model's weights and compared with peonist's own payloads for the same tensors. The table shows relative L2 weight error:
| Store | Peonist's payload | This tooling |
|---|---|---|
| q8g64 | — | Byte-identical to peonist's |
| q4c | 0.087 | 0.083 |
| I4R (routed experts) | 0.116 | 0.097 |
HT → q4c, o_proj (layer 3) | 0.0872 | 0.0826 |
HT → q4c, linear_attn.out_proj (layer 0) | 0.0897 | 0.0852 |
HT → q4c, shared-expert down_proj (layer 0) | 0.0913 | 0.0872 |
Lower weight error does not guarantee better output. Peonist's I4R rounding is calibration-aware and optimizes something other than weight error.
What changed
orcarouter's BF16 model differs from base Qwen3.8-Flash-Next in exactly 149 residual-writer tensors. Scanning all 1,658 tensors confirmed this. The build takes those 149 tensors from orcarouter's BF16 and encodes each into the store v2 uses for that tensor:
| v2 store | Written as | Tensors |
|---|---|---|
| I4R (routed experts) | I4R, round-to-nearest, with v2's own sign and scale planes | 48 routed down_proj |
| HT | q4c, with the codebooks from peonist's w4b checkpoint. No HT encoder exists, and the engine accepts q4c in these slots at unchanged speed. | 12 o_proj, 36 linear_attn.out_proj, 48 shared-expert down_proj |
| q4c | q4c, with v2's codebook for that tensor | MTP routed down_proj, embed_tokens |
| q8g64 | q8g64 | MTP o_proj, MTP shared-expert down_proj |
| bf16 | Raw BF16 | layers.1.ple.value_proj |
Every other payload, including the MTP head's remaining tensors, is peonist's v2 byte for byte.
Reproduce
tooling/README.md lists every input with its pinned revision, the disk, RAM
and time needed, and notes on the reverse-engineered v2 store formats. In
outline:
python3 tooling/halogen_v2_abliterate.py build \
--v2 qwen38-flash-next-v2.hgn \
--donor orcarouter-bf16/ \
--codebook-from qwen38-flash-next-w4b.hgn \
--out qwen38-flash-next-v2-abliterated.hgn --workers 8
The build took about 57 minutes on the machine above. Its output was byte-identical to this file. The same tool can re-apply the donor's edit to a future v2 checkpoint, as long as the store layout stays compatible. It refuses to run on formats it doesn't recognize.
Limitations
- The HT writers are stored as q4c, which uses a different 4-bit grid from peonist's HT.
- The I4R writers use round-to-nearest. Peonist's I4R codes use calibration-aware rounding, which this build does not reproduce.
- Refusal removal was tested on three prompts. It is not guaranteed for every prompt, and the model may still refuse some requests.
- Output quality has not been benchmarked against stock v2.
- The file only works with the Halogen engine. It was tested on 0.15.0 only.
Intended use and responsibility
This model has had its refusal behavior removed. It can produce content that the base model would decline to produce.
- If you deploy it to other people, add your own moderation and abuse-prevention layers.
- You are responsible for complying with the license and with the laws that apply to you.
- The uploader accepts no liability for misuse.
License and attribution
Apache License 2.0, inherited from the upstream models:
- Qwen/Qwen3.8-Flash-Next: the base model.
- peonist-ai/halogen-qwen3.8-flash-next: the v2 checkpoint. Its unmodified tensors are redistributed here.
- orcarouter/Qwen3.8-Flash-Next-Uncensored: the abliteration writer values.
Modification notice: the 149 tensors listed above were replaced with values re-quantized from orcarouter's weights. "halogen" is a trademark of Peonist, LLC. The name is used here only to identify the compatible engine and file format. The halogen-flash-server engine is closed source and distributed under its own terms.
The v2 format notes build on jtsylve/hgn-spec 1.0.1.