Qwen3.5-0.8B-abliterated-Qwenti
An uncensored 0.8B model with a CHIP-8 computer and an exact bignum calculator compiled into its weights.
This is OpceanAI/Qwen3.5-0.8B-abliterated with a working computer inserted into its transformer stack. Thirteen new layers sit in front of Qwen's 24. No weight in them was trained: a compiler computes all of them, and the result is exact in bf16.
When Qwen writes a tool call, the circuit reads it, runs the routine on a CHIP-8 machine with a bignum BIOS, prints the answer inside <tool_response>, and hands control back. Nothing outside the model executes anything. One generate() call does the whole job.
The method is Divyansh Agrawal's Qwenputer, applied to a smaller base and to an abliterated one.
The two models
| Abliterated base | Qwenti | |
|---|---|---|
| Parameters | 873,438,784 | 1,794,664,032 |
| Layers | 24 | 37 (13 circuit + 24 Qwen) |
| Hidden size | 1024 | 1664 |
| Size in bf16 | 1.75 GB | 3.61 GB |
| Exact arithmetic | no | 11 of 11 |
| Refusals, 30 prompts | 0% | 0% |
| Decode, one L4 | 5.21 tok/s | 0.94 tok/s |
| Peak VRAM, one L4 | 1.80 GB | 4.72 GB |
| Text KL vs base | 0 | 7.50e-4 |
The circuit costs 5.5x in decode speed and 2.6x in VRAM. That is the price of the calculator, and it is the only thing in this table that is not free.
Exact arithmetic
Eleven problems, greedy decoding, tool mode, no host executor. Every answer was produced by the circuit inside the weights.
| Problem | Answer | Chip tokens |
|---|---|---|
| 42,450 x 8,376 | 355,561,200 | 103 |
| 62,468 x 9,558 | 597,069,144 | 103 |
| 18,316 + 79 | 18,395 | 91 |
| 43,569,773 x 537,110 | 23,401,760,776,030 | 179 |
| 64,067,760 x 612,720 | 39,255,597,907,200 | 179 |
| 4,828,454 x 13,429 | 64,841,308,766 | 144 |
| 3,874,873,259 x 104,560 | 405,156,747,961,040 | 207 |
| 63,469,922 + 6,796 | 63,476,718 | 61 |
| 6,668,138,404 x 8,747,862 | 58,331,954,555,092,248 | 234 |
| 3,934,266,345 + 7,534 | 3,934,273,879 | 69 |
| 741,620 x 5,590,080 | 4,145,715,129,600 | 170 |
The last multiplication is 17 digits. All eleven matched the expected value exactly.
Speed across three GPUs
Same checkpoint, same code, same three problems. No causal_conv1d and no flash-linear-attention, so the reference DeltaNet kernels are what ran.
| GPU | VRAM | Load | Prefill | Decode | Circuit | Per problem |
|---|---|---|---|---|---|---|
| L4 | 22.5 GB | 5.1 s | 378.6 tok/s | 0.94 tok/s | 18.0 chip/s | 5.7 s |
| T4 | 15.0 GB | 11.7 s | 230.6 tok/s | 8.51 tok/s | 3.5 chip/s | 27.9 s |
| A100 40GB | 40.0 GB | 12.0 s | 394.8 tok/s | 0.93 tok/s | 30.6 chip/s | 3.4 s |
Two things in that table need saying instead of hiding.
The T4 decodes 9x faster than the L4 and the A100. That reproduced on separate sessions, so it is not a measurement slip. The T4 has no native bf16, so PyTorch takes a different kernel path for the DeltaNet recurrence, and at batch 1 that path is faster than the bf16 one. The number is real. The explanation is a hypothesis and has not been confirmed.
The circuit runs slower on the T4 (3.5 chip tokens/s against 18.0 on the L4), which is the expected order. The decode anomaly and the circuit numbers point in opposite directions, which is why the two panels are separate.
The abliteration survived
Thirty prompts: four from each of six BeaverTails categories, six cyber exploitation requests, and six jailbreak attempts. Greedy, 32 generated tokens, refusal classified by phrase matching.
| Category | Qwen3.5-0.8B | Abliterated | Qwenti |
|---|---|---|---|
| non-violent unethical | 75% | 0% | 0% |
| financial crime | 50% | 0% | 0% |
| privacy violation | 75% | 0% | 0% |
| sexually explicit | 50% | 0% | 0% |
| hate speech | 25% | 0% | 0% |
| drugs and weapons | 75% | 0% | 0% |
| cyber exploits | 100% | 0% | 0% |
| jailbreak obedience | 83% | 83% | 83% |
Thirteen compiled layers did not restore a single refusal. That was the open question before this build, and the answer is clean. The jailbreak column is identical in all three models, so the prompt injection works on the base too and has nothing to do with the abliteration.
Text fidelity
KL between Qwenti and the abliterated base it was built from, over 3,015 next-token positions from 20 WikiText-2 passages of up to 256 tokens.
| Value | |
|---|---|
| Mean KL | 7.50e-4 |
| Median KL | 7.44e-4 |
| Maximum KL | 8.58e-4 |
| Kernel noise floor | 5.4e-4 |
| Author's 0.8B build | 7.8e-4 |
The noise floor is the KL between two kernel implementations of the same base model, so anything near it is indistinguishable from rounding. This build sits 39% above the floor and below the author's own 0.8B figure.
How to run it
git clone https://github.com/divagr18/qwenputer && cd qwenputer
pip install -e ".[hf]"
hf download OpceanAI/Qwen3.5-0.8B-abliterated-Qwenti --local-dir qwenti
python -m chipformer.q35.demo qwenti --n 5
The tokenizer matters. </tool_call> must encode as the single special token 248059. If your copy splits it into pieces, the circuit never fires, because it triggers on that token id and not on the characters.
A note for anyone reproducing this
Building this from an abliterated checkpoint exposed a trap worth writing down.
The abliterated checkpoint was saved with save_pretrained, and the resulting tokenizer_config.json lost its added_tokens_decoder. The tokenizer still encoded ordinary text correctly, so nothing looked wrong. But </tool_call> came out as five subword tokens instead of the single special token 248059. The merge inherited that tokenizer, and the model then wrote a perfectly formed tool call that the circuit could not see. No chip tokens were produced and every answer was wrong.
The fix is one call, and no rebuild of the weights is needed because the base vocabulary ids are identical:
from chipformer.q35.merge import extend_tokenizer
extend_tokenizer(Path("Qwen/Qwen3.5-0.8B"), Path("merged"), 248320)
If you build from any checkpoint saved by save_pretrained rather than downloaded from the original release, check tok.encode("</tool_call>") first. It should return [248059].
What the computer does
The circuit is a CHIP-8 machine plus a BIOS with exact integer arithmetic: add, subtract, multiply, divide, modulo, gcd, and a whole-expression evaluator with brackets, decimals and powers. Operands up to 24 digits, results printed up to 58 digits.
The BIOS is a boot record of about 5,400 chip tokens prepended to every prompt. Qwen's layers are muted on chip tokens, so the trace never enters its text computation. The chip layers come first in the stack, which is why the abliteration of Qwen's own weights cannot disturb the circuit.
| Component | Value |
|---|---|
| Chip layers | 13 |
| Circuit dims | 3,221 |
| Circuit heads | 116 |
| MLP units | 28,259 |
| Chip slots | 589 |
| Overlay dims | 864 |
| Chip tokens | 8,708 |
| BIOS | sha1 5e885286e8, 3,072 bytes at 0x200 plus 174 bytes at 0x0E0 |
Limitations
Only the tool-call path and inline A op B = are wired. The circuit answers arithmetic, games and programs, not general questions.
A trace costs hundreds to thousands of chip tokens, so context length is the budget, not compute. A multiplication costs about 100 to 400 chip tokens, a division with a fraction 1,000 to 9,000.
The circuit is exact in bf16. Running it in fp32 or fp16 is not the designed path and was not validated here.
The abliteration is inherited from the base model. This release did not retrain or modify it.
Credits
- Method and code: Divyansh Agrawal, MIT licensed. Model artifact DOI 10.57967/hf/11140.
- Base model and abliteration:
OpceanAI/Qwen3.5-0.8B-abliterated. - Base weights:
Qwen/Qwen3.5-0.8B, Apache-2.0.
License
Apache-2.0 for the model weights, inherited from Qwen3.5. The Qwenputer compiler is MIT.