On July 7, 2026, Liquid AI published Antidoom — an open-source fix for doom loops: the failure mode where reasoning models repeat the same span ("Wait…", "Alternatively…", "So…") until the context window dies. The @liquidai thread frames it as surgical: retrain one overtrained token at the loop's start, leave the rest of the distribution alone.
For anyone running local Qwen reasoning models or small LFM checkpoints, this is the first production-oriented answer to a problem that looked like bad prompting — but is often distribution pathology at a single token position.
TL;DR
| Question | Answer (Liquid AI, July 2026) |
|---|---|
| Problem | Doom loops — repetitive degeneration on hard math/coding prompts |
| Method | FTPO (Final Token Preference Optimization) — DPO-family, one trailing token |
| LFM2.5-2.6B early | 10.2% → 1.4% loop rate; evals up (no new skills taught) |
| Qwen3.5-4B | 22.9% → 1% under greedy sampling |
| Loop starters | Often the, So, Alternatively, Wait, But |
| Train cost | ~1 hr dataset gen (8× MI325), ~1–2 hr LoRA train (1× MI325); tweet cites ~2 hr + 1–2 hr on H100 for 2–4B |
| Sampling after fix | Near-greedy often beats high temp once loops are gone |
| Code | github.com/Liquid4All/antidoom |
What is a doom loop?
Liquid AI's definition:
The model emits a span (often something like "Wait, let me reconsider…"), then repeats the same span again and again, until the context window is exhausted.
This is distinct from:
- Normal self-correction — a single "wait" that changes strategy
- Long reasoning — verbose but progressive chains
repetition_penaltyband-aids — inference-time reweighting that can hurt quality
Small thinking models loop more on long traces and hard problems per Liquid's prior LFM2.5-Thinking work.
HN and X reactions match lived experience: Claude Opus 4.8 users report surprise loops; local Qwen builders call Antidoom "finally usable."
Three mechanisms (why loops stick)
Liquid AI identifies a stack:
| # | Mechanism | Effect |
|---|---|---|
| 1 | Overtrained tokens + uncertainty | High-prior discourse markers (Wait, So, Alternatively) become fallback when stuck |
| 2 | Prior context reinforces | Each repeat makes the span more likely — probabilities climb toward 1 |
| 3 | Greedy / low-temp sampling | No exit when loop token dominates; high temp helps less once mechanism 2 saturates |
On an early LFM2.5-2.6B checkpoint, tokens starting loops:
| Token | Share of loop starts |
|---|---|
the | 11.39% |
So | 4.51% |
Alternatively | 3.22% |
Wait | 2.56% |
But | 2.46% |
Prior work Liquid cites: Wait, Wait, Wait… Why Do Reasoning Models Loop? (Pipis et al.), Circular Reasoning (Duan et al. — semantic repetition before textual repetition).
Antidoom pipeline — locate, pair, FTPO
1. Mine failures
- Prompt mix: LiquidAI/antidoom-mix-v1.0 — designed to elicit looping
- Generate at low temperature
- Loop detector: section repeats ≥4 times, ≥60 characters
- Target first token of first repeat
2. Build preference rows
At that position:
- Rejected: the loop-starting token
- Chosen: up to 20 plausible alternatives from top-k logprobs (filtered noise)
- Regularize so suppressing
Wait/So/thedoes not over-crush reasoning
3. FTPO training
Final Token Preference Optimization vs standard DPO:
| FTPO property | Why it matters |
|---|---|
| Trailing token only | Mid-generation surgical edit |
| Multiple chosen tokens | Avoid swapping one overtrained token for another |
| KL-like loss in logit space | Less gradient spill to rest of vocab |
| Two-part regularization | Chosen/rejected move freely; other logits stay near reference |
Practical hyperparameters (from blog):
- LoRA one epoch, rank 128–256 (attention + MLP +
lm_head) - LR ~4e-6 to 2e-5
- Early stop at
chosen_win ≈ 0.35— training longer creates new loops - Multiple Antidoom rounds may be needed as new failure tokens surface
Results
LFM2.5-2.6B early checkpoint
- Doom-loop rate: 10.2% → 1.4%
- Eval scores up across the board — attributed to fewer truncated-by-loop completions
- After Antidoom: performance drops at temp=1.0 (expected without loop-driven "exploration")
Qwen3.5-4B
- Doom-loop rate: 22.9% → 1% (greedy)
- Larger uplift than LFM — same temperature pattern: biggest win at low temp
Liquid AI's conclusion: the belief that reasoning models need high temperature may conflate exploration with escaping doom loops. Remove loops → near-greedy often optimal.
What Antidoom does not fix
From HN/X edge reports — worth tracking:
- Tool-calling stacks (e.g. OpenClaw) may need integration work — one user reported Antidoom breaks tool invocation patterns
- Not consciousness — loops are decoding pathology, not emergent inner life (AllTheTokens joke aside)
- Not RL replacement — RL can target loops but needs costly rollouts; Antidoom is cheap offline preference patch
For agent harnesses, pair Antidoom-tuned weights with loop engineering stop conditions — fixing generation pathology does not replace /goal evaluators.
How to run it
# Full pipeline: github.com/Liquid4All/antidoom
# 1. Generate doom-loop preference pairs (antidoom-mix-v1.0)
# 2. FTPO train with LoRA
# 3. Eval loop rate + downstream benchmarks
Liquid AI timing (blog / tweet):
| Stage | Hardware | ~Duration (2–4B) |
|---|---|---|
| Dataset generation | 8× H100 / MI325 | ~1–2 hours |
| FTPO training | 1× H100 / MI325 | ~1–2 hours |
Stops after collecting ~20k pairs (depends on base model loop rate).
Connection to Antislop
Antidoom adapts Antislop (Paech et al., ICLR 2026) — Liquid's framework for identifying and eliminating repetitive patterns in LMs. FTPO is the final-token specialization for reasoning-loop starts rather than generic slop phrases like "delve."
Same design philosophy as Antidoom's tweet:
The training teaches the model nothing new. It clears the looping that blocked answers the model could already produce.
Implications for local inference
| Before Antidoom | After Antidoom |
|---|---|
| Crank temperature to escape loops | Try near-greedy first |
| Blame prompt for "Wait Wait Wait" | Check loop rate on hard prompt mix |
repetition_penalty as default | Prefer distribution surgery at loop token |
| Small reasoning models "unusable" on hard tasks | Qwen3.5-4B class may recover lost accuracy |
Complements fix local LLM looping sampler advice — Antidoom attacks the model weights, not just decoding knobs.
Related on explainx.ai
- Fix local LLM looping — samplers & sandboxing — inference-side mitigations
- What is loop engineering? — agent stop conditions beyond decoding
- Claude Code loops official guide — turn-based vs
/goalloops - Fable inner voice / chain-of-thought leaks — different phenomenon (reasoning visibility, not repetition)
- Running SOTA LLMs locally — hardware context for fine-tune + inference
Official sources
- Reducing Doom Loops with FTPO — Liquid AI Blog
- @liquidai — Antidoom thread (July 7, 2026)
- github.com/Liquid4All/antidoom
- LiquidAI/antidoom-mix-v1.0
Loop rates, hyperparameters, and model checkpoints follow Liquid AI's July 7, 2026 blog. Reproduce on your checkpoint before shipping to production — over-training FTPO can introduce new loop tokens.
