webTLM demos / webLTM (opaque) / Visible Thinking / Real Retrofit →
recurrent-depth transformer · runs entirely in this tab

webLTM

A 600 KB model that answers by looping a single block in latent space instead of writing out its reasoning. Turn the depth knob up and it thinks longer — you'll never see a single token of that thinking, only the loop counter ticking and the final digits landing. That's not a UI choice: the architecture has no chain-of-thought channel to expose.

153K params 3 transformer blocks (prelude / core / coda) 597 KB weights no WebGPU, no download — plain JS
01

Give it a sum

Two numbers up to 5 digits each. The model never sees an intermediate carry, a scratchpad, or a reasoning token — only the input digits and, after r loops, the output digits.

+
thinking depth8
Carry Presets:

Loading 153K trained parameters…

02

Does more looping actually help?

Exact-match accuracy on held-out problems, by loop count and by how many digits the problem has. Trained only up to depth 8 (dashed) — past that the model is extrapolating, and you can see exactly where it stops paying off.

Accuracy vs. thinking depth

Harder (longer) problems need more loops before they saturate; easy ones peak almost immediately.

03

How it's built

prelude
embed digits, run once
→
core
re-run r×, latent state only
↻ ×r
→
coda
read out digits, once

The prelude embeds the input once. The core block then re-reads its own previous state r times — the original embedding is re-injected at every pass so the state doesn't drift as r grows, the trick that lets one set of weights work at any test-time depth. Only the coda's single pass is ever turned into logits. There is no step in between where a token could leak out, because no step in between produces tokens at all — the answer is predicted all at once, not word-by-word.