Results
These are our own evals on one box, October 2026, with stock and this model served by the same vLLM 0.31 (XPU)
build and flags. The sample sizes are small, so read single-digit differences as noise.
Table with columns: stock gpt-oss-20b, this model | stock gpt-oss-20b | this model |
|---|
| repetition loops, 200 held-out prompts, effort medium | 17/200 (8.5%) | 0/200 |
| repetition loops, same 200, effort high | 79/200 (39.5%) | 2/200 (1.0%) |
| graded accuracy, 700 items (GSM8K, MATH-500, MMLU, CommonsenseQA), medium | 78.4% | 83.0% |
| code inside a tool call (PTC probe), 72 calls, medium | 57/72 | 57/72 |
| multi-turn streaming tool sessions (2 × 16), format faults | 0 | 0 |
| coding-agent tasks in our agent harness, 28 each, verified on disk | 17 pass | 20 pass |
- Graded eval: paired on the same 700 items, this model fixes 47 and breaks 15 (McNemar p < 0.001). Many of the
fixes are items where stock looped or ran out of tokens.
- Soak: this model has served as our live gpt-oss for coding agents since October 17, 2026. A 4-hour, 16-stream
soak answered 5,180 requests with one proxy error and no server errors, and about 0.1% of its generations looped.
- Speed: unchanged. The tensors and shapes are identical to stock, and its replies are shorter: median 305
completion tokens on the loop set at medium, against 418 for stock.
Use
It's a drop-in replacement for openai/gpt-oss-20b, with the same harmony chat format, tokenizer and chat template.
vllm serve <this repo> --served-model-name gpt-oss --tool-call-parser openai --enable-auto-tool-choice \ --reasoning-parser openai_gptoss
- Sampling: OpenAI's recommendation for gpt-oss, temperature 1.0 and top_p 1.0.
- Reasoning effort: medium is the best balance. At high effort, stock gpt-oss-20b loops often. This model rarely
does, but it still reasons long, so give it a generous
max_tokens.
- Tool calls: for a strict tool-call grammar and an effort cap on vLLM 0.31, see the cookbook's
gptoss031 plugin.
What changed in the weights
- LoRA: rank 256, alpha 128, on attention
q_proj, k_proj, v_proj and o_proj in all 24 layers. The
learning rate was 1.5e-5, with early stop at step 25.
- Merge: we merged it as
W + (alpha/r)·B·A, in fp32, into the bf16 attention tensors: 96 tensors. The MXFP4
experts, embeddings, router and lm_head are the original bytes.
- Training data: 2,959 preference pairs. Each pair is a loop-start token (rejected) against the model's own
top-logprob alternatives (chosen). They were mined from
antidoom-mix-v1.0 prompts at medium and high effort,
including tool-calling coding tasks rendered with the exact serving chat template.
- Training hardware: two Intel Arc Pro B70s, bf16, eager attention, max sequence length 5,120.
The unmerged adapter is in adapter/. Its target is the bf16 attention weights of openai/gpt-oss-20b.
To apply it to the MXFP4 checkpoint yourself, use the cookbook's antidoom/merge_into_mxfp4.py.
Limitations
- Small evals: all numbers come from our own evals, run once, on Intel XPU with vLLM 0.31. We did not test other
GPUs or engines.
- Narrated tool calls: like stock, inside a long agent prompt the model sometimes writes a tool call or an
invented result as text instead of calling the tool. Our tests point to two agent-harness messages as the trigger:
a mid-turn user-role status note, and a tool result that sounds like the task is finished. Changing those two
messages fixed most of it. Training against it broke other behaviour. The cookbook's
docs/AGENT-HARNESS.md
covers this.
- Same base: knowledge, safety behaviour and everything else are stock gpt-oss-20b's. OpenAI's
gpt-oss usage policy applies.
Credits
- Liquid AI: Antidoom (Apache-2.0), the loop detector, the pair mining,
the FTPO trainer and the antidoom-mix prompt set. It builds on Antislop by Sam
Paech et al.
- OpenAI: gpt-oss-20b (Apache-2.0) and the harmony format.
- Claude (Anthropic): ported the trainer to Intel XPU, ran the mining, training and evaluations, and wrote this
card, through Claude Code.
License
Apache 2.0, the same as the base model.