Zero Decode Tokens Is the Free Half. The 0.678 Is the Bill.
A restricted softmax puts all of its mass on your declared label set even when every label is wrong, so the endpoint swap takes a day and the confidence gate takes a quarter.
The four operations, and the two that bite
The scoring path is simple: resolve the token IDs for your labels, read the logits at those vocabulary positions, discard every other logit, softmax across the selected subset. Two consequences follow that the tutorial framing understates. First, raw logit magnitudes are model- and layernorm-dependent. The source's illustrative example uses logits of 8.2/5.5/4.8, producing 0.91/0.06/0.03; the actual run on Qwen/Qwen2.5-0.5B-Instruct produced 25.28/24.50/21.19. Every threshold you tune against one checkpoint is therefore non-transferable to the next. Second, normalizing only over declared choices guarantees the distribution sums to one even when the input belongs to none of your classes, so a security incident arriving at a billing/technical/account router gets routed confidently.
The tokenizer is the silent failure surface
Labels must resolve to exactly one token, which is why single letters with the semantics pushed into the prompt ("A = billing questions and payment problems") is the correct pattern — A/B/C resolve to [32]/[33]/[34] on this tokenizer. Two things break it without raising an error. Tokenizers often fold a leading space into the token, so 'A' and ' A' are different IDs. And the chat template can inject whitespace or control tokens at the answer position. A model swap silently re-points your scores at the wrong vocabulary entries and returns a perfectly well-formed distribution. That belongs in CI, not in a code review.
The source also never tests position bias. Letter-labeled multiple choice has a documented preference for early options, and scoring reads the very first next-token distribution, so there is no chain-of-thought to dilute the prior. The fix is uniquely cheap here: k zero-decode forward passes to marginalize over label permutations still undercuts a single generation call.
Where the evidence stops
The reported speed comparison is not procurement-grade. Two lanes of 100 cases each race on the same GPU under continuous batching behind a threading.Barrier(2), requests are issued sequentially within each lane, and the evidence is a video the author states was sped up after 8 seconds. No latency table, no throughput number, no aggregate accuracy — despite labeled expected answers existing in the dataset. The mechanism implies a large latency win (zero decode steps versus up to 32). Treat that as directional physics, not a measurement.
Three sources, one missing instrument
Computerworld's read on the McDonald's drive-thru retirement is the same finding from the deployment side: the system failed not because it made too many errors but because it could not tell which answers it did not trust. For any customer-facing decision model, that makes the metric stack expected calibration error, a coverage-risk curve, and escalation latency — not accuracy. Bloomberg's agent taxonomy adds the third axis: when two retrieved sources disagree on an attribute, that disagreement is a free unsupervised uncertainty signal, and silently picking one passes every faithfulness check you run.
Where the sources diverge matters. The scoring writeup offers a "top above 0.80, margin at least 0.20" heuristic; the deployment evidence says derive the operating point from a measured coverage-risk curve instead. The heuristic is a reasonable shape and an unvalidated magnitude. And before you buy a typed decision model for this — TLDR IT notes one reached nearly 13% of Vercel's paid teams inside 24 hours with no published benchmarks or ablations — run the three-way bake-off on your own traces against a fine-tuned small encoder and schema-constrained decoding on your incumbent.
The inference trick is free. The calibration layer is the product, and it lives in your code where it can be versioned and tuned to your loss function.
What to do
Add single-token label validation to CI this week: render the prompt through the model's chat template, tokenize the expected continuation with add_special_tokens false, fail the build on any multi-token label, and pin resolved token IDs per model version.
Fit a temperature and optional per-class bias on the restricted logits against a labeled holdout this sprint, then publish ECE, Brier score and a reliability diagram per model before any score is wired to an automated action.
Run a label-permutation invariance test on one production router this sprint — cycle the class-to-letter assignment and measure argmax agreement and score variance — and marginalize over permutations if unstable.