› A look inside the scope
»What's the capital of France?
REASONING
The user is asking a simple factual question about geography. France's capital is well known…
ANSWER · UNDERLINE = CONFIDENCE · HOVER A TOKEN
LOGIT-LENS TRAJECTORY · “·Paris” · HOVER A LAYER
A static rendering of the live instrument — the real thing streams this from an actual forward pass on your prompt, token by token.
The pipeline
prompt→
chat template→
prime KV cache→
generate token→
read 28 layers→
stream live
What you see
01Architecture flow
The model's actual decoder stack, lit up block by block as each token is generated — click a block for its internal circuit (attention → residual → MLP → residual).
02Generation timeline
Reasoning and answer tokens as a running transcript, each underlined by confidence. Replay the whole run, scrub with the keyboard, or jump straight to the model's shakiest decisions.
03Logit-lens trajectory & heatmap
The model's best guess read off every layer for the selected token — watch the prediction sharpen from noise to a locked-in answer as depth increases.
04Next-token candidates
The real distribution behind the chosen token: what it picked, how sure it was, and the runner-up it almost said instead.
05Attention attribution
Which earlier tokens actually drove a decision — attention rollout across all layers, a single raw layer, or arcs drawn straight onto the timeline.
06Shareable card
One-click PNG of the current Q&A, branded and watermarked, plus dynamic OG images so shared links unfurl with the prediction.
Run it locally
The live app needs a running backend (Qwen3-1.7B on CPU) and frontend. The fastest path is Docker:
# clone & start git clone https://github.com/baselhusam/llm-xray cd llm-xray make up # build + start backend + frontend # open http://localhost:3000
First boot downloads the Qwen3-1.7B weights once (~4 GB, cached afterwards). See the repo README for the two-terminal dev setup without Docker.