One prompt, start to finish — deepseek-r1:8b
The same story as The Journey, told for an 8-billion-parameter model we don't own the weights of. Prompt: "The capital of France is". Every number below is real — captured across two separate traces of the same prompt — and one gap is named honestly where the data genuinely runs out.
Prompt → tokens
llama.cpp's own eval-callback, run natively via WSL against Ollama's downloaded weights, printed the real input token ids before doing anything else:
Ġ, a newline becomes Ċ, and whole words like " problem" can be a single token — boundaries a trained vocabulary chooses, not ones a person would draw by hand.Tokens → logits
Same method as tiny-shakespeare: the real ggml op graph, captured by running eval-callback against this exact prompt on the actual downloaded weights. 1,266 real operations fire across 36 layers — over six times tiny-shakespeare's depth. The spine:
Op 1266: 151,936 real numbers — one per vocabulary entry, versus tiny-shakespeare's 65. Same kind of number, same kind of op, 2337× the vocabulary to score.
Logits → a token
A second, separate trace — this time through Ollama's own API with logprobs requested — captured the real softmax output for this exact prompt. The top candidate for the very first generated token:
<think> — a stronger behavioral constraint than tiny-shakespeare's statistical pattern, but mechanically identical: a token in a fixed vocabulary, scored by softmax, drawn by the same sampler.Repeat, 58 more times
Same pipeline, run again for each new token. The real text this call produced:
message.reasoning<think>Okay, the user is asking for the capital of France. Let me start by recalling the basic facts. I know Paris is the capital, but I should double-check to be sure. Right, it's definitely Paris. Now, I need to think about why the user is asking this.
'b' at 3.6% mid-sentence. This window just happened not to.What this explains
The same split as tiny-shakespeare's journey, holding at 15x the scale. We can say exactly why <think> opened this response: a real forward pass produced real logits, softmax turned them into a 100.000% probability, and the sampler drew it. We cannot say why the trained weights represent "this looks like a question I should reason about" in any conceptual sense — and the one honest gap above (unreadable token ids) is a small preview of a much larger one: at 4096 hidden dimensions and 36 layers, there is far more happening per token than at tiny-shakespeare's 384 and 6.
<think> tag is not a separate mechanism — it is one entry in the same fixed vocabulary as every other token, sampled the same way.