---
title: "Agentic Developer: Zero to Advanced, Part 8: Tool Design"
subtitle: "Plain code, a small typed model, or a language model? Three kinds of tool, measured head to head on two real calls from the Part 7 pipeline."
author: "Hasan Goni"
date: 2026-10-17
date-modified: 2026-10-18
categories: [agentic-ai, python, computer-vision, evaluation]
toc: true
series:
name: "Agentic Developer: Zero to Advanced"
number: 8
---
:::{.callout-tip}
This post is part of the [Agentic Developer: Zero to Advanced](index.qmd) series. It follows on
from [Part 7 -- the inspection pipeline](07-the-inspection-pipeline.qmd), and it is the fourth post of
[Arc 2, the agent loop](index.qmd#arc-2-the-agent-loop).
:::
::: {.callout-note}
**Rewritten on 2026-10-18** on the synthetic void dataset, with fresh runs of every experiment and
rebuilt animations. The first version used GDXray images that I may not redistribute. Several findings
changed, and I say which ones where they appear. Two stories from the first run (the token-probability
bug and the Laya CPU fallback) happened on that data, and I kept them because the lessons still hold.
:::
Part 7 ended with a result I did not expect: asked to classify boxes, the language model added nothing
over a one-line contrast rule. That raises a design question this post tries to answer with
measurements instead of opinions: **for each step of a pipeline, what kind of tool should it be?**
There are three candidates. **Plain code** (a rule). A **small typed model**, which reads text and
answers a typed question ("yes or no", "pick one of these") with a probability, and never writes a
word. And a **language model**. I put all three behind one interface and ran them on two real
calls from the Part 7 pipeline, on the same held-out images as before.
One thing to say up front. The roadmap promised a head-to-head between TypeSafe's hosted **Jev** and
the open-source **Laya**. I could only run Laya. I never had a Jev API key, so the comparison here is
**a rule, Laya, and the local Qwen3-Coder**. Jev's adapter is written and not run, and the post says
exactly where that leaves things.
```{=html}
<div style="margin:1em 0;">
<button id="toggle-outputs" type="button" style="padding:6px 14px;border:1px solid #1971c2;border-radius:4px;background:#1971c2;color:white;cursor:pointer;">Show all outputs</button>
<span style="color:#666;font-size:0.9em;margin-left:8px;">Outputs are collapsed by default. Each one is the real captured output of the code above it.</span>
</div>
<script>
(function(){
var b = document.getElementById("toggle-outputs"), open = false;
b.onclick = function(){
open = !open;
document.querySelectorAll("details.out").forEach(function(d){ d.open = open; });
b.textContent = open ? "Hide all outputs" : "Show all outputs";
};
})();
</script>
```
## Three kinds of tool
Every step in Part 7 was one of two kinds: plain Python (detect, measure, rules, decide), or a language
model (classify, report). Here is the third kind, and what each one costs per call, measured on this
machine (an NVIDIA GB10 shared with two vLLM servers):
| | Plain code | Typed model (Laya) | Language model (Qwen3-Coder-30B) |
|---|---|---|---|
| It gives you | an exact answer | a typed answer and a probability | words, about anything |
| One call | **40 ns** | **17 to 20 ms** on the GPU, 523 ms on a CPU | 198 to 564 ms for a one-number answer, **2.4 s** to write a note |
| Tokens | 0 | 0 | 79 to 171 per answer, **243** per note |
| Can write prose | no | no, it never generates text | **yes**, and that is the only job only it can do |
```{=html}
<video controls preload="metadata" playsinline style="width:100%;max-width:760px;display:block;margin:1em auto;border-radius:6px;">
<source src="videos/part8-tools.mp4" type="video/mp4">
</video>
```
*Daily-life version:* a calculator, a clerk who fills in a form, and a writer. The calculator is
instant and never wrong, but only does arithmetic. The clerk reads a page and ticks boxes, fast and
cheap, but can only tick. The writer can say anything, which is exactly why you do not ask the writer to
tick boxes you could have ticked by rule.
The three numbers that matter in practice are very different in size: nanoseconds, milliseconds,
seconds. From a rule check to writing one note is a factor of about **61 million** (40 ns against 2.4 s).
## What a typed model is
Laya ([Apache-2.0](https://huggingface.co/convaiinnovations/laya), `pip install laya`) takes a **state**
(text or JSON) and **typed questions**, and returns typed answers with probabilities in one forward pass.
Its question types are `noul` (is this statement true? gives a probability), `choice` (pick one option,
gives a probability per option) and `score`. Because it only ever scores options, there is nothing to
parse and nothing to hallucinate. One call:
```{.python filename="notebooks/agentic-zero-to-advanced/typed_models.py"}
class LayaJudge:
def noul(self, state, instruction) -> Result:
ans, ms = self._predict(state, {"q": {"type": "noul", "instructions": instruction}})
return Result(p=float(ans["q"]["noul"]), ms=ms, tokens=0)
```
Two things from its own README that I want to keep in view. The shipped checkpoints are weak
**zero-shot** on its own benchmark (the base checkpoint scores 0.362 on typed decisions, below the
majority-class baseline of 0.461), and the accuracy jump comes from **fine-tuning**. And its comparison
numbers against Jev are third-party figures it says it never measured. I used the shipped checkpoints
as they come, zero-shot, and I did not fine-tune.
## One interface, so the experiment cannot cheat
If each judge is called its own way, the way it is called decides the result. So all of them sit behind
the same two methods, `noul` and `choice`, and return a probability plus the latency and token count of
that call. For the language model there are **two ways to get a probability out of a text generator**,
and they are different judges:
- **"Number":** ask it to write `{"probability": 0.8}`. This is what Part 7 did.
- **"Token probability":** force a one-word answer and read the probability of `yes` against `no`
straight from the model's output.
```{.python filename="notebooks/agentic-zero-to-advanced/typed_models.py"}
@staticmethod
def _token_probs(r) -> dict[str, float]:
"""Probability mass per normalised token. "Yes", " yes" and "yes" are the same answer, so their
probabilities ADD UP (an earlier version kept only the last variant it saw)."""
out: dict[str, float] = {}
for t in r.choices[0].logprobs.content[0].top_logprobs:
k = t.token.strip().lower()
out[k] = out.get(k, 0.0) + math.exp(t.logprob)
return out
```
That docstring is a scar. My first version of this function built a dict from the token list, so when the
model's top tokens included both `Yes` and `yes`, **the smaller probability overwrote the larger one**. The
numbers looked plausible and were wrong. I noticed because I spot-checked individual answers: for a note
that said, in so many words, *"The inspection escalated because candidate 2 is uncertain"*, the model gave
P(escalated) = 0.02. After the fix, the same judge read that question at **95.8%** instead of 57.9%. (That was in the first run, on the GDXray version, and it is why the fix is in the code.)
Lesson: summary metrics will not tell you your harness is broken. Look at individual answers.
A second harness trap: Laya silently falls back to the CPU if putting the model on the GPU fails, with a
warning. On this shared-memory machine it failed with a spurious "out of memory" unless CUDA was
initialised first. My first latency numbers were therefore CPU numbers, hundreds of milliseconds. The adapter now
refuses to continue if the model is not where I asked for it.
## Experiment A: is this box a real defect?
This is the call that `classify` made in Part 7, now a pure judgment with an exact answer for every box:
the detector produced **1,059** boxes on the first 200 dev images and the first 200 held-out images, **203**
of them real. Same protocol as before: the dev images are where I pick any threshold (**546 boxes, 122 real**),
the held-out images are where I report (**513 boxes, 81 real**, a base rate of 15.8%). I asked each judge the same
question, once bare and once with the guidance from Part 7 written into the question ("brighter boxes are
real more often: above contrast 30 about 7 in 10 ...").
I report a **ranking score** (AUC: the chance a random real box gets a higher probability than a random
false alarm, 0.5 is a coin flip), plus calibration and an operating point, because accuracy alone is
useless at a 16% base rate. I also bootstrapped the ranking scores over held-out images, because a
difference of a few hundredths on 81 real boxes can be nothing.
| Judge (held-out boxes) | Ranking score, no guidance | Ranking score, + guidance (95% interval) | Brier skill (+ guidance) | Calibration error (+ guidance) | At the dev threshold: flagged / real | One call | Tokens |
|---|---|---|---|---|---|---|---|
| **Rule** (contrast at least 8) | n/a | 0.641 (0.59 to 0.68) | n/a | n/a | 290 / **65** | 40 ns | 0 |
| Typed model, Laya | 0.430 | 0.604 (0.54 to 0.68) | +0.04 | 0.028 | 223 / 46 | 20 ms | 0 |
| Typed model, `typed-decisions` | 0.457 | 0.478 | +0.02 | 0.050 | 498 / 79 | 22 ms | 0 |
| Typed model, `multilingual` | 0.307 | 0.378 | -0.76 | 0.128 | 513 / 81 | 21 ms | 0 |
| LLM, writes a number | 0.358 | **0.697** (0.64 to 0.76) | **+0.21** | **0.013** | 64 / 37 | 564 ms | 171 |
| LLM, token probability | 0.671 | 0.643 (0.57 to 0.72) | +0.08 | 0.126 | 252 / 52 | 216 ms | 146 |
```{=html}
<video controls preload="metadata" playsinline style="width:100%;max-width:760px;display:block;margin:1em auto;border-radius:6px;">
<source src="videos/part8-box.mp4" type="video/mp4">
</video>
```
What I read from this, with the most solid points first:
- **Nobody beats the rule by a margin I can resolve.** The best ranking score is the LLM writing a number
(0.697), against 0.641 for a one-line rule. Paired over images, the difference is +0.056 with an interval of
-0.014 to +0.132, which includes zero. Laya with guidance is -0.037 (-0.101 to +0.029), the token-probability
LLM +0.002. With 81 real boxes I cannot rank these four. The rule costs 40 nanoseconds and 0 tokens; the LLM
variant that scored best costs 564 ms and 171 tokens.
- **Guidance helps some judges and not others.** It lifts the LLM-number judge from 0.358 (worse than a coin flip, a
prior that is wrong in the other direction from Part 5's) to 0.697, and Laya from 0.430 to 0.604. It does
nothing for the token-probability LLM (0.671 bare, 0.643 guided, inside each other's intervals). In the first
version of this post guidance helped every judge. Here the model's own prior about brightness is closer to
right, so the bare token-probability judge is already decent.
- **The fine-tuned and multilingual checkpoints do not transfer.** `typed-decisions` was trained on other typed
decisions (invoices, security incidents, customer service) and sits at chance (0.478). `multilingual` is below
chance (0.378). They flag every box at the dev threshold (513 of 513).
- **Laya's probabilities are honest and nearly useless.** Every guided Laya probability on the held-out boxes
sits between **4.7% and 49.6%**, the median for real boxes is 13.9% and for false alarms 12.5%. At 50% it flags
nothing at all, so its accuracy of 84% is just the majority class. At the threshold I picked on dev it flags
223 boxes and 46 are real (precision 20.6%, recall 56.8%).
- **The best calibrated judge is the LLM writing a number**, with a calibration error of 0.013 and a Brier skill of
+0.21 (how much better than always predicting the base rate), the only judge that is clearly better than
that baseline. In the first version the LLM's numbers were overconfident. That changed, and I do not know
why: same model, same prompt style, different data. Fitting one temperature on dev to recalibrate does not
help it (+0.17).
- **It does offer a different operating point.** At the dev threshold (0.30) the LLM number flags 64 boxes and 37
are real: precision 57.8%, recall 45.7%. The rule cannot offer that, because it only says yes or no, and its
one point is 290 flagged, 65 real (precision 22.4%, recall 80.2%). Whether you want the first or the second
is a decision about how many false alarms a human can tolerate, not a ranking-score question.
Here are all 1,059 boxes and all seven judge variants. Pick one, drag the threshold, and watch the dev and held-out rows
move apart:
```{=html}
<style>
#jt{max-width:760px;margin:1.2em auto;font-family:system-ui,sans-serif;font-size:0.9em;}
#jt .row{display:flex;align-items:center;gap:10px;margin:8px 0;flex-wrap:wrap;}
#jt .row label{min-width:150px;}
#jt select{flex:1;min-width:260px;padding:6px;border-radius:5px;border:1px solid #888;background:rgba(128,128,128,0.12);color:inherit;}
#jt input[type=range]{flex:1;min-width:200px;}
#jt .v{min-width:56px;text-align:right;font-variant-numeric:tabular-nums;font-weight:600;}
#jt .btns{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0;}
#jt button{padding:6px 12px;border:1px solid #888;border-radius:5px;background:rgba(128,128,128,0.12);cursor:pointer;color:inherit;}
#jt table{width:100%;border-collapse:collapse;margin-top:10px;font-variant-numeric:tabular-nums;}
#jt th,#jt td{padding:6px 8px;border-bottom:1px solid rgba(128,128,128,0.35);text-align:right;}
#jt th:first-child,#jt td:first-child{text-align:left;}
#jt tr.test td{font-weight:600;background:rgba(25,113,194,0.10);}
#jt svg{width:100%;height:auto;display:block;margin-top:10px;}
#jt .note{margin-top:8px;color:#777;font-size:0.9em;}
</style>
<div id="jt">
<div class="row"><label for="jt-judge">judge</label><select id="jt-judge"></select></div>
<div class="row"><label for="jt-thr">flag a box when its probability is at least</label><input type="range" id="jt-thr" min="0" max="1" step="0.005" value="0.5"><span class="v" id="jt-thrv"></span></div>
<div class="btns"><button id="jt-dev">Best threshold on the dev images</button><button id="jt-half">Back to 50%</button></div>
<svg viewBox="0 0 640 130" role="img" aria-label="Each held-out box as a dot at the probability the judge gave it; green dots are real defects; a vertical line marks the threshold"><g id="jt-dots"></g><line id="jt-line" y1="10" y2="104" stroke="#1971c2" stroke-width="2.5"/>
<text x="10" y="124" fill="currentColor" font-size="11">0%</text><text x="610" y="124" fill="currentColor" font-size="11">100%</text><text x="320" y="124" fill="currentColor" font-size="11" text-anchor="middle">probability the judge gave (held-out boxes, green = real defect)</text></svg>
<table>
<thead><tr><th>boxes</th><th>flagged</th><th>real among flagged</th><th>of real</th><th>precision</th><th>recall</th></tr></thead>
<tbody id="jt-body"></tbody>
</table>
<div class="note">Every one of the 1,059 boxes is here with its real label. Dev images are where thresholds are chosen, held-out images are the test. Only 81 real boxes are in the held-out set, so one box moves precision by a point or more.</div>
</div>
<script>
(function(){
var D = {"y":[0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0],"split":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"judges":[{"name":"rule: contrast at least 8","p":[0.0,0.0,0.0,0.0,1.0,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,0.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,0.0,0.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,0.0,1.0,0.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,0.0,0.0,1.0,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,1.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,1.0,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,0.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,1.0,1.0,0.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,1.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,0.0,0.0,1.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,1.0,0.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,0.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,1.0,0.0,1.0,1.0,1.0,1.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,1.0,0.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0]},{"name":"typed model (Laya), no guidance","p":[0.241,0.219,0.042,0.05,0.051,0.056,0.071,0.286,0.07,0.761,0.04,0.046,0.053,0.697,0.09,0.079,0.285,0.037,0.032,0.548,0.049,0.037,0.441,0.063,0.033,0.038,0.039,0.08,0.072,0.061,0.066,0.097,0.053,0.046,0.045,0.244,0.071,0.039,0.044,0.04,0.048,0.044,0.045,0.066,0.082,0.07,0.079,0.069,0.057,0.108,0.051,0.086,0.042,0.065,0.058,0.058,0.045,0.048,0.056,0.035,0.314,0.053,0.041,0.102,0.067,0.081,0.08,0.63,0.056,0.402,0.081,0.447,0.073,0.082,0.061,0.033,0.077,0.075,0.3,0.066,0.071,0.079,0.067,0.066,0.07,0.696,0.721,0.407,0.4,0.74,0.726,0.217,0.815,0.241,0.736,0.548,0.368,0.217,0.339,0.549,0.843,0.706,0.072,0.1,0.078,0.09,0.061,0.037,0.054,0.041,0.072,0.506,0.047,0.048,0.071,0.314,0.095,0.047,0.052,0.066,0.077,0.052,0.053,0.056,0.055,0.101,0.251,0.079,0.067,0.043,0.07,0.046,0.056,0.039,0.067,0.066,0.051,0.228,0.837,0.615,0.738,0.441,0.711,0.775,0.377,0.739,0.774,0.077,0.059,0.082,0.03,0.073,0.303,0.112,0.085,0.07,0.056,0.058,0.056,0.034,0.054,0.094,0.382,0.061,0.038,0.079,0.07,0.076,0.056,0.052,0.734,0.56,0.524,0.048,0.085,0.24,0.043,0.077,0.046,0.04,0.042,0.091,0.038,0.614,0.053,0.056,0.052,0.029,0.852,0.465,0.545,0.425,0.684,0.551,0.643,0.822,0.76,0.649,0.805,0.832,0.399,0.74,0.754,0.056,0.056,0.037,0.085,0.091,0.041,0.054,0.06,0.035,0.066,0.354,0.474,0.038,0.035,0.059,0.027,0.076,0.069,0.032,0.048,0.67,0.076,0.451,0.03,0.063,0.051,0.079,0.042,0.033,0.056,0.047,0.055,0.04,0.07,0.05,0.067,0.204,0.725,0.048,0.044,0.303,0.034,0.055,0.051,0.067,0.282,0.735,0.553,0.074,0.044,0.293,0.275,0.067,0.03,0.078,0.615,0.064,0.237,0.04,0.786,0.225,0.058,0.056,0.068,0.076,0.039,0.062,0.068,0.068,0.234,0.308,0.056,0.751,0.048,0.087,0.113,0.04,0.111,0.084,0.659,0.699,0.086,0.079,0.788,0.033,0.614,0.04,0.079,0.075,0.068,0.085,0.144,0.752,0.036,0.067,0.245,0.071,0.07,0.024,0.038,0.053,0.58,0.459,0.056,0.105,0.052,0.043,0.052,0.041,0.079,0.051,0.049,0.08,0.038,0.037,0.068,0.277,0.053,0.048,0.068,0.076,0.069,0.075,0.064,0.093,0.064,0.053,0.059,0.067,0.069,0.057,0.078,0.065,0.1,0.077,0.554,0.066,0.482,0.757,0.756,0.079,0.056,0.092,0.053,0.07,0.411,0.066,0.055,0.081,0.072,0.037,0.032,0.071,0.068,0.057,0.057,0.326,0.495,0.774,0.403,0.677,0.516,0.671,0.201,0.667,0.517,0.589,0.195,0.348,0.815,0.81,0.613,0.623,0.666,0.72,0.266,0.528,0.073,0.042,0.067,0.039,0.05,0.061,0.066,0.061,0.054,0.042,0.057,0.047,0.384,0.056,0.07,0.077,0.078,0.04,0.04,0.08,0.072,0.061,0.061,0.606,0.044,0.038,0.812,0.054,0.578,0.048,0.106,0.071,0.025,0.032,0.528,0.045,0.055,0.067,0.794,0.04,0.132,0.085,0.08,0.083,0.035,0.053,0.417,0.038,0.1,0.039,0.058,0.089,0.206,0.047,0.059,0.117,0.073,0.732,0.204,0.495,0.536,0.206,0.288,0.045,0.046,0.061,0.05,0.321,0.509,0.216,0.062,0.06,0.045,0.082,0.074,0.033,0.085,0.395,0.768,0.075,0.058,0.538,0.393,0.224,0.049,0.079,0.361,0.074,0.571,0.716,0.378,0.243,0.073,0.076,0.073,0.05,0.11,0.825,0.606,0.047,0.7,0.035,0.039,0.055,0.077,0.051,0.049,0.038,0.053,0.058,0.039,0.049,0.065,0.04,0.031,0.058,0.057,0.079,0.084,0.062,0.034,0.071,0.073,0.106,0.056,0.07,0.466,0.035,0.057,0.038,0.365,0.039,0.081,0.048,0.074,0.04,0.066,0.052,0.573,0.265,0.087,0.041,0.071,0.788,0.04,0.045,0.067,0.074,0.042,0.076,0.569,0.479,0.058,0.062,0.788,0.753,0.206,0.644,0.065,0.045,0.51,0.05,0.07,0.035,0.872,0.524,0.067,0.083,0.063,0.069,0.045,0.08,0.06,0.751,0.05,0.078,0.036,0.407,0.06,0.066,0.058,0.063,0.038,0.05,0.051,0.065,0.073,0.066,0.053,0.285,0.659,0.048,0.048,0.057,0.059,0.072,0.076,0.074,0.062,0.707,0.061,0.253,0.053,0.469,0.682,0.053,0.248,0.602,0.064,0.053,0.053,0.04,0.041,0.088,0.044,0.053,0.099,0.048,0.105,0.038,0.047,0.047,0.44,0.441,0.47,0.601,0.756,0.768,0.356,0.654,0.822,0.523,0.058,0.086,0.04,0.071,0.043,0.62,0.425,0.059,0.048,0.033,0.033,0.052,0.691,0.06,0.563,0.033,0.783,0.247,0.694,0.064,0.062,0.082,0.064,0.066,0.052,0.063,0.062,0.066,0.056,0.096,0.05,0.039,0.046,0.053,0.042,0.41,0.756,0.264,0.255,0.504,0.532,0.047,0.053,0.391,0.046,0.266,0.696,0.073,0.081,0.07,0.086,0.049,0.295,0.211,0.253,0.095,0.035,0.043,0.056,0.062,0.076,0.082,0.06,0.06,0.041,0.056,0.078,0.073,0.68,0.314,0.316,0.539,0.265,0.106,0.309,0.716,0.044,0.052,0.725,0.271,0.702,0.051,0.406,0.054,0.055,0.059,0.056,0.034,0.061,0.077,0.731,0.74,0.069,0.042,0.086,0.045,0.034,0.071,0.067,0.044,0.045,0.068,0.099,0.819,0.111,0.053,0.06,0.066,0.575,0.057,0.048,0.063,0.088,0.071,0.077,0.078,0.092,0.078,0.071,0.036,0.041,0.091,0.075,0.032,0.046,0.054,0.06,0.083,0.045,0.066,0.057,0.041,0.066,0.078,0.074,0.042,0.066,0.057,0.056,0.09,0.07,0.072,0.472,0.811,0.046,0.084,0.051,0.087,0.051,0.079,0.281,0.092,0.062,0.062,0.07,0.091,0.05,0.073,0.069,0.055,0.442,0.423,0.767,0.611,0.445,0.203,0.733,0.802,0.235,0.81,0.172,0.793,0.444,0.381,0.599,0.806,0.705,0.693,0.293,0.716,0.063,0.052,0.098,0.032,0.074,0.055,0.05,0.077,0.043,0.063,0.08,0.32,0.623,0.044,0.049,0.053,0.035,0.057,0.691,0.047,0.041,0.697,0.081,0.102,0.754,0.33,0.201,0.073,0.067,0.067,0.068,0.06,0.074,0.269,0.074,0.251,0.2,0.069,0.699,0.367,0.251,0.373,0.058,0.721,0.569,0.062,0.066,0.048,0.071,0.283,0.326,0.058,0.034,0.084,0.055,0.045,0.05,0.113,0.092,0.435,0.3,0.408,0.062,0.104,0.063,0.46,0.05,0.07,0.057,0.047,0.039,0.036,0.692,0.045,0.191,0.291,0.218,0.711,0.036,0.067,0.062,0.047,0.065,0.226,0.067,0.062,0.042,0.043,0.032,0.034,0.041,0.083,0.067,0.079,0.05,0.037,0.079,0.089,0.053,0.273,0.012,0.061,0.053,0.072,0.272,0.061,0.075,0.047,0.079,0.063,0.052,0.079,0.076,0.109,0.068,0.081,0.312,0.059,0.054,0.046,0.737,0.078,0.064,0.648,0.279,0.058,0.033,0.052,0.042,0.079,0.749,0.072,0.066,0.04,0.064,0.765,0.074,0.081,0.068,0.442,0.047,0.095,0.068,0.059,0.356,0.036,0.058,0.053,0.307,0.06,0.074,0.066,0.076,0.041,0.033,0.065,0.051,0.062,0.217,0.06,0.066,0.052,0.788,0.407,0.539,0.474,0.039,0.048,0.07,0.071,0.1,0.07,0.052,0.069,0.777,0.059,0.065,0.514,0.032,0.27,0.05,0.063,0.037,0.069,0.042,0.043,0.061,0.188,0.791,0.089,0.048,0.322,0.45,0.541,0.093,0.032,0.065,0.098,0.576,0.27,0.297,0.084,0.051,0.072,0.043,0.057,0.059,0.627,0.377,0.459,0.409,0.702,0.311,0.06,0.056,0.608,0.594,0.068,0.078,0.057,0.067,0.042,0.075,0.083,0.058,0.056,0.064,0.297,0.553,0.047,0.056,0.103,0.08,0.066,0.063,0.105,0.104,0.058,0.048,0.067,0.068,0.081,0.038,0.057,0.652,0.07,0.031,0.05,0.043,0.058,0.056,0.044,0.75,0.553,0.053,0.329,0.05,0.046,0.06,0.033,0.031,0.057,0.052,0.038,0.068,0.048,0.04]},{"name":"typed model (Laya), + guidance","p":[0.092,0.116,0.113,0.152,0.13,0.12,0.124,0.095,0.135,0.105,0.134,0.145,0.129,0.106,0.159,0.151,0.115,0.114,0.122,0.114,0.121,0.141,0.1,0.19,0.252,0.131,0.151,0.128,0.114,0.11,0.137,0.129,0.131,0.129,0.111,0.121,0.317,0.12,0.161,0.181,0.149,0.139,0.118,0.087,0.112,0.124,0.134,0.117,0.118,0.233,0.133,0.146,0.137,0.108,0.143,0.135,0.131,0.123,0.156,0.133,0.094,0.129,0.199,0.119,0.326,0.132,0.161,0.114,0.138,0.112,0.151,0.114,0.148,0.165,0.2,0.144,0.118,0.127,0.132,0.148,0.196,0.128,0.122,0.266,0.12,0.081,0.092,0.111,0.117,0.108,0.124,0.11,0.103,0.1,0.14,0.115,0.13,0.119,0.112,0.128,0.1,0.103,0.096,0.139,0.336,0.123,0.375,0.195,0.142,0.103,0.161,0.116,0.141,0.124,0.124,0.098,0.121,0.136,0.128,0.172,0.158,0.122,0.134,0.145,0.13,0.169,0.109,0.131,0.117,0.105,0.13,0.26,0.131,0.166,0.143,0.115,0.124,0.101,0.098,0.113,0.098,0.126,0.083,0.116,0.124,0.102,0.083,0.123,0.164,0.118,0.114,0.121,0.078,0.125,0.118,0.121,0.137,0.15,0.142,0.122,0.183,0.166,0.076,0.15,0.161,0.131,0.153,0.132,0.116,0.179,0.112,0.109,0.115,0.12,0.174,0.107,0.149,0.136,0.119,0.135,0.159,0.312,0.146,0.141,0.12,0.179,0.122,0.184,0.131,0.119,0.116,0.12,0.116,0.124,0.102,0.104,0.07,0.087,0.096,0.117,0.127,0.11,0.118,0.117,0.172,0.145,0.153,0.106,0.114,0.136,0.114,0.124,0.143,0.09,0.132,0.123,0.126,0.106,0.117,0.179,0.136,0.122,0.142,0.087,0.192,0.105,0.145,0.159,0.128,0.421,0.158,0.112,0.163,0.136,0.117,0.166,0.111,0.166,0.198,0.128,0.119,0.143,0.135,0.128,0.125,0.124,0.105,0.183,0.13,0.113,0.118,0.116,0.13,0.086,0.097,0.143,0.127,0.15,0.117,0.161,0.112,0.104,0.12,0.124,0.188,0.116,0.232,0.157,0.131,0.121,0.121,0.133,0.104,0.093,0.116,0.115,0.144,0.181,0.159,0.136,0.284,0.22,0.099,0.114,0.126,0.183,0.083,0.132,0.09,0.155,0.132,0.12,0.154,0.114,0.144,0.118,0.129,0.114,0.103,0.145,0.128,0.107,0.128,0.118,0.121,0.129,0.108,0.182,0.141,0.127,0.214,0.118,0.151,0.118,0.135,0.136,0.125,0.144,0.148,0.134,0.241,0.136,0.172,0.142,0.151,0.208,0.147,0.094,0.179,0.119,0.113,0.125,0.179,0.142,0.13,0.134,0.215,0.127,0.123,0.14,0.1,0.091,0.099,0.179,0.292,0.165,0.143,0.121,0.146,0.118,0.114,0.14,0.118,0.177,0.16,0.114,0.104,0.136,0.145,0.109,0.084,0.131,0.116,0.126,0.121,0.113,0.093,0.106,0.111,0.106,0.121,0.129,0.102,0.096,0.095,0.107,0.112,0.11,0.114,0.119,0.093,0.135,0.148,0.118,0.128,0.141,0.13,0.139,0.17,0.156,0.131,0.125,0.106,0.129,0.098,0.128,0.121,0.185,0.124,0.137,0.155,0.189,0.157,0.133,0.167,0.128,0.095,0.537,0.121,0.19,0.164,0.121,0.143,0.127,0.1,0.137,0.1,0.128,0.124,0.242,0.164,0.121,0.131,0.182,0.176,0.119,0.102,0.121,0.123,0.188,0.144,0.143,0.119,0.131,0.103,0.151,0.152,0.091,0.118,0.122,0.126,0.126,0.119,0.133,0.131,0.133,0.148,0.103,0.13,0.117,0.16,0.105,0.129,0.118,0.136,0.137,0.152,0.123,0.097,0.103,0.153,0.113,0.112,0.107,0.113,0.124,0.116,0.152,0.118,0.115,0.139,0.121,0.115,0.135,0.214,0.155,0.07,0.108,0.119,0.106,0.135,0.123,0.121,0.173,0.141,0.2,0.134,0.143,0.126,0.154,0.198,0.155,0.124,0.107,0.136,0.155,0.099,0.166,0.214,0.124,0.158,0.139,0.118,0.155,0.181,0.128,0.122,0.149,0.128,0.109,0.107,0.106,0.162,0.161,0.113,0.14,0.102,0.126,0.109,0.112,0.16,0.144,0.117,0.107,0.126,0.147,0.132,0.149,0.134,0.111,0.121,0.096,0.15,0.151,0.107,0.1,0.113,0.092,0.106,0.188,0.102,0.102,0.191,0.13,0.123,0.116,0.132,0.159,0.134,0.132,0.141,0.157,0.201,0.107,0.225,0.146,0.132,0.106,0.104,0.16,0.113,0.139,0.138,0.132,0.105,0.205,0.167,0.121,0.496,0.138,0.111,0.119,0.234,0.123,0.148,0.138,0.148,0.123,0.101,0.109,0.211,0.094,0.115,0.098,0.1,0.242,0.134,0.112,0.122,0.148,0.258,0.123,0.124,0.273,0.127,0.121,0.176,0.12,0.152,0.123,0.15,0.136,0.093,0.11,0.114,0.117,0.104,0.108,0.131,0.126,0.084,0.118,0.155,0.14,0.132,0.125,0.119,0.136,0.128,0.154,0.132,0.11,0.137,0.128,0.098,0.114,0.114,0.126,0.105,0.104,0.107,0.183,0.117,0.361,0.139,0.127,0.123,0.124,0.146,0.186,0.156,0.131,0.132,0.118,0.175,0.139,0.157,0.114,0.097,0.131,0.114,0.129,0.12,0.124,0.132,0.106,0.124,0.105,0.121,0.13,0.127,0.12,0.137,0.156,0.108,0.137,0.141,0.461,0.116,0.161,0.181,0.473,0.133,0.17,0.142,0.153,0.177,0.156,0.117,0.134,0.12,0.101,0.09,0.13,0.081,0.047,0.122,0.112,0.131,0.108,0.125,0.077,0.119,0.127,0.135,0.125,0.158,0.138,0.123,0.148,0.127,0.13,0.112,0.116,0.117,0.12,0.177,0.139,0.175,0.129,0.114,0.122,0.127,0.158,0.163,0.124,0.104,0.126,0.116,0.154,0.104,0.121,0.11,0.111,0.104,0.14,0.178,0.167,0.12,0.119,0.164,0.116,0.107,0.189,0.167,0.213,0.142,0.111,0.107,0.447,0.105,0.14,0.137,0.121,0.167,0.156,0.11,0.133,0.107,0.234,0.153,0.147,0.146,0.247,0.119,0.107,0.128,0.161,0.107,0.145,0.184,0.124,0.135,0.122,0.12,0.173,0.166,0.147,0.11,0.099,0.138,0.058,0.131,0.124,0.097,0.098,0.121,0.118,0.107,0.101,0.118,0.089,0.108,0.071,0.119,0.101,0.152,0.08,0.119,0.104,0.118,0.117,0.151,0.118,0.137,0.119,0.137,0.115,0.129,0.127,0.131,0.132,0.129,0.103,0.103,0.138,0.128,0.118,0.175,0.134,0.102,0.177,0.113,0.099,0.119,0.086,0.095,0.107,0.131,0.113,0.125,0.111,0.137,0.116,0.153,0.124,0.152,0.114,0.116,0.122,0.132,0.114,0.117,0.117,0.147,0.104,0.105,0.099,0.112,0.139,0.165,0.129,0.13,0.117,0.147,0.122,0.125,0.114,0.111,0.139,0.148,0.093,0.104,0.092,0.122,0.13,0.117,0.118,0.115,0.105,0.111,0.132,0.115,0.158,0.12,0.122,0.139,0.101,0.092,0.094,0.111,0.232,0.152,0.117,0.119,0.102,0.11,0.11,0.138,0.141,0.147,0.155,0.196,0.108,0.243,0.13,0.121,0.119,0.18,0.165,0.142,0.086,0.127,0.143,0.118,0.204,0.103,0.111,0.158,0.139,0.117,0.163,0.135,0.13,0.098,0.13,0.155,0.162,0.102,0.13,0.095,0.127,0.095,0.114,0.109,0.097,0.128,0.107,0.108,0.128,0.113,0.217,0.111,0.102,0.142,0.138,0.127,0.14,0.157,0.144,0.146,0.119,0.14,0.078,0.121,0.16,0.114,0.148,0.188,0.163,0.098,0.154,0.142,0.154,0.111,0.128,0.122,0.167,0.155,0.117,0.122,0.14,0.136,0.162,0.111,0.104,0.12,0.123,0.143,0.114,0.136,0.121,0.189,0.153,0.147,0.121,0.087,0.126,0.157,0.112,0.133,0.13,0.114,0.127,0.104,0.193,0.192,0.132,0.13,0.136,0.111,0.139,0.195,0.099,0.091,0.117,0.225,0.146,0.131,0.104,0.085,0.133,0.121,0.19,0.136,0.129,0.138,0.149,0.131,0.095,0.108,0.11,0.113,0.106,0.102,0.189,0.117,0.103,0.113,0.121,0.116,0.121,0.147,0.118,0.16,0.172,0.178,0.145,0.11,0.104,0.11,0.151,0.241,0.148,0.141,0.104,0.121,0.063,0.099,0.151,0.199,0.166,0.121,0.109,0.141,0.124,0.117,0.12,0.109,0.117,0.117,0.15,0.156,0.162,0.117,0.11,0.121,0.102,0.198,0.144,0.157,0.137,0.175,0.129,0.159,0.175,0.392,0.133,0.152]},{"name":"LLM writes a number, no guidance","p":[0.85,0.85,0.65,0.65,0.75,0.75,0.3,0.85,0.3,0.85,0.85,0.85,0.2,0.1,0.3,0.3,0.85,0.75,0.75,0.85,0.3,0.25,0.1,0.85,0.3,0.85,0.85,0.85,0.85,0.3,0.85,0.3,0.3,0.2,0.3,0.3,0.3,0.75,0.3,0.3,0.2,0.3,0.85,0.85,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.85,0.3,0.85,0.85,0.3,0.85,0.85,0.95,0.85,0.85,0.85,0.85,0.85,0.85,0.3,0.85,0.75,0.85,0.85,0.2,0.3,0.3,0.3,0.3,0.65,0.3,0.85,0.85,0.3,0.3,0.85,0.85,0.2,0.2,0.2,0.2,0.2,0.2,0.75,0.3,0.85,0.85,0.2,0.85,0.3,0.85,0.3,0.3,0.2,0.3,0.3,0.85,0.2,0.3,0.3,0.3,0.3,0.85,0.85,0.1,0.85,0.85,0.85,0.85,0.3,0.3,0.75,0.75,0.75,0.75,0.3,0.75,0.3,0.3,0.85,0.85,0.75,0.85,0.85,0.1,0.85,0.2,0.85,0.85,0.85,0.2,0.85,0.2,0.2,0.75,0.2,0.85,0.85,0.2,0.3,0.85,0.3,0.2,0.3,0.3,0.85,0.2,0.2,0.3,0.3,0.2,0.2,0.3,0.3,0.3,0.85,0.3,0.65,0.75,0.3,0.3,0.3,0.3,0.85,0.3,0.85,0.3,0.85,0.1,0.3,0.3,0.85,0.75,0.3,0.3,0.3,0.85,0.85,0.2,0.85,0.3,0.3,0.2,0.3,0.2,0.85,0.3,0.2,0.3,0.85,0.3,0.3,0.2,0.85,0.1,0.85,0.3,0.65,0.75,0.3,0.3,0.3,0.75,0.3,0.75,0.2,0.85,0.85,0.2,0.3,0.85,0.3,0.3,0.3,0.75,0.3,0.2,0.3,0.3,0.75,0.25,0.3,0.3,0.3,0.3,0.2,0.85,0.85,0.3,0.3,0.3,0.3,0.85,0.85,0.3,0.3,0.3,0.2,0.85,0.85,0.3,0.3,0.3,0.2,0.3,0.85,0.85,0.85,0.3,0.75,0.3,0.3,0.3,0.2,0.85,0.2,0.2,0.3,0.3,0.3,0.3,0.2,0.3,0.3,0.3,0.85,0.85,0.75,0.1,0.3,0.3,0.3,0.25,0.85,0.85,0.3,0.2,0.3,0.3,0.2,0.85,0.85,0.3,0.3,0.3,0.3,0.75,0.3,0.2,0.3,0.3,0.3,0.85,0.85,0.75,0.3,0.65,0.3,0.85,0.2,0.3,0.2,0.85,0.85,0.85,0.3,0.3,0.3,0.2,0.75,0.2,0.85,0.1,0.85,0.85,0.3,0.3,0.3,0.85,0.3,0.2,0.3,0.3,0.75,0.2,0.3,0.85,0.75,0.3,0.75,0.2,0.1,0.3,0.2,0.2,0.2,0.3,0.3,0.75,0.85,0.2,0.85,0.3,0.65,0.75,0.3,0.3,0.3,0.85,0.3,0.3,0.75,0.3,0.2,0.1,0.2,0.2,0.2,0.75,0.2,0.85,0.2,0.2,0.2,0.2,0.85,0.85,0.2,0.3,0.85,0.2,0.2,0.3,0.85,0.3,0.3,0.75,0.85,0.85,0.2,0.3,0.2,0.3,0.85,0.85,0.2,0.2,0.3,0.3,0.3,0.3,0.75,0.85,0.85,0.3,0.3,0.3,0.3,0.85,0.3,0.25,0.2,0.3,0.85,0.85,0.3,0.65,0.3,0.3,0.75,0.2,0.3,0.3,0.3,0.2,0.3,0.3,0.2,0.75,0.2,0.3,0.3,0.3,0.3,0.2,0.85,0.75,0.2,0.3,0.75,0.85,0.2,0.2,0.3,0.3,0.2,0.3,0.3,0.3,0.85,0.2,0.3,0.85,0.3,0.65,0.85,0.65,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.85,0.95,0.85,0.75,0.3,0.3,0.65,0.3,0.3,0.2,0.85,0.2,0.3,0.3,0.3,0.3,0.2,0.3,0.3,0.2,0.85,0.85,0.2,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.2,0.3,0.75,0.65,0.85,0.3,0.1,0.85,0.3,0.3,0.75,0.3,0.3,0.2,0.3,0.3,0.75,0.2,0.75,0.3,0.85,0.3,0.85,0.75,0.3,0.85,0.85,0.85,0.85,0.3,0.2,0.3,0.3,0.3,0.85,0.3,0.3,0.3,0.1,0.85,0.85,0.3,0.3,0.2,0.85,0.85,0.85,0.2,0.85,0.3,0.3,0.95,0.85,0.3,0.85,0.3,0.3,0.3,0.3,0.75,0.2,0.3,0.2,0.3,0.2,0.3,0.85,0.85,0.85,0.85,0.85,0.3,0.75,0.85,0.85,0.85,0.85,0.1,0.85,0.85,0.85,0.85,0.85,0.85,0.85,0.85,0.3,0.75,0.85,0.85,0.85,0.85,0.3,0.3,0.2,0.3,0.75,0.65,0.2,0.85,0.85,0.2,0.3,0.75,0.3,0.3,0.3,0.85,0.85,0.2,0.85,0.3,0.2,0.85,0.85,0.85,0.85,0.95,0.1,0.85,0.3,0.3,0.85,0.3,0.1,0.1,0.3,0.85,0.85,0.3,0.3,0.95,0.85,0.2,0.3,0.85,0.3,0.3,0.75,0.85,0.85,0.3,0.3,0.85,0.2,0.3,0.3,0.3,0.85,0.75,0.95,0.85,0.85,0.85,0.2,0.85,0.3,0.85,0.3,0.2,0.65,0.3,0.95,0.2,0.85,0.2,0.3,0.3,0.3,0.3,0.65,0.3,0.2,0.3,0.65,0.85,0.85,0.85,0.3,0.75,0.65,0.3,0.75,0.3,0.3,0.3,0.3,0.85,0.2,0.85,0.2,0.85,0.3,0.85,0.2,0.3,0.2,0.2,0.85,0.3,0.85,0.85,0.75,0.3,0.85,0.3,0.3,0.3,0.75,0.2,0.85,0.3,0.3,0.3,0.85,0.3,0.3,0.75,0.2,0.3,0.75,0.3,0.3,0.3,0.85,0.85,0.3,0.2,0.85,0.3,0.85,0.3,0.85,0.85,0.3,0.75,0.3,0.3,0.85,0.85,0.3,0.3,0.3,0.3,0.2,0.85,0.1,0.85,0.85,0.85,0.85,0.3,0.3,0.85,0.85,0.85,0.85,0.3,0.3,0.3,0.3,0.85,0.85,0.3,0.3,0.85,0.3,0.65,0.85,0.3,0.2,0.2,0.3,0.3,0.3,0.85,0.2,0.75,0.3,0.2,0.85,0.2,0.85,0.2,0.2,0.3,0.2,0.1,0.2,0.3,0.1,0.1,0.85,0.3,0.85,0.2,0.2,0.3,0.3,0.3,0.2,0.3,0.3,0.3,0.85,0.85,0.75,0.3,0.3,0.3,0.2,0.3,0.92,0.3,0.3,0.85,0.3,0.3,0.3,0.85,0.85,0.3,0.3,0.3,0.85,0.3,0.3,0.3,0.3,0.75,0.3,0.75,0.3,0.3,0.85,0.1,0.3,0.2,0.3,0.85,0.85,0.3,0.85,0.85,0.75,0.3,0.3,0.75,0.85,0.2,0.3,0.65,0.2,0.75,0.75,0.75,0.2,0.85,0.75,0.2,0.3,0.75,0.3,0.2,0.2,0.85,0.85,0.85,0.85,0.3,0.85,0.2,0.85,0.3,0.75,0.85,0.3,0.3,0.85,0.85,0.95,0.85,0.85,0.3,0.3,0.3,0.3,0.65,0.3,0.2,0.3,0.3,0.3,0.3,0.3,0.2,0.25,0.3,0.85,0.3,0.3,0.85,0.85,0.85,0.75,0.3,0.75,0.2,0.85,0.3,0.3,0.3,0.3,0.3,0.3,0.2,0.75,0.3,0.75,0.3,0.75,0.2,0.2,0.3,0.3,0.2,0.3,0.75,0.3,0.1,0.85,0.85,0.3,0.85,0.85,0.65,0.2,0.3,0.95,0.3,0.3,0.3,0.3,0.2,0.65,0.3,0.3,0.85,0.3,0.3,0.3,0.3,0.85,0.75,0.3,0.65,0.85,0.85,0.85,0.85,0.75,0.95,0.75,0.2,0.3,0.2,0.75,0.3,0.3,0.3,0.2,0.85,0.2,0.92,0.3,0.3,0.85,0.85,0.85,0.65,0.85,0.85,0.3,0.85,0.85,0.2,0.85,0.85,0.3,0.3,0.75,0.85,0.85,0.3,0.3,0.3,0.3,0.85,0.3,0.2,0.3,0.85,0.85,0.3,0.2,0.85,0.85,0.85,0.85,0.85,0.2,0.75,0.3,0.75,0.85,0.3,0.85,0.2,0.85,0.85,0.3,0.3,0.3,0.3,0.65,0.3,0.75,0.3,0.3,0.2,0.3,0.85,0.85,0.65,0.1,0.3,0.85,0.85,0.85,0.2,0.75,0.75,0.85,0.85,0.3,0.85,0.75,0.85,0.3,0.85,0.85,0.85,0.2,0.25,0.75,0.3,0.3,0.3,0.3,0.85,0.85,0.85,0.85,0.85,0.3,0.2]},{"name":"LLM writes a number, + guidance","p":[0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.7,0.7,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.7,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.3,0.1,0.1,0.1,0.9,0.1,0.7,0.7,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.3,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.7,0.7,0.1,0.1,0.1,0.1,0.7,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.7,0.1,0.7,0.1,0.7,0.1,0.7,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.7,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.7,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.3,0.1,0.7,0.1,0.1,0.1,0.1,0.7,0.1,0.7,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.3,0.7,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.15,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.6,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.3,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.7,0.1,0.3,0.7,0.1,0.1,0.1,0.1,0.7,0.1,0.7,0.1,0.7,0.7,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.7,0.7,0.1,0.1,0.1,0.1,0.7,0.1,0.7,0.1,0.7,0.1,0.7,0.1,0.7,0.1,0.7,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.3,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.7,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.7,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.7,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.7,0.1,0.3,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.3,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.3,0.1,0.7,0.1,0.7,0.7,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.7,0.7,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.3,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.7,0.3,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.3,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.3,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.7,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.7,0.1,0.1,0.1,0.1,0.7,0.7,0.7,0.1,0.1,0.1,0.7,0.1,0.1,0.7,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.7,0.1,0.1,0.7,0.1,0.7,0.7,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.3,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.7,0.1,0.1,0.7,0.7,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.15,0.15,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.7,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.7,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1]},{"name":"LLM token probability, no guidance","p":[0.002,0.004,0.182,0.376,0.777,0.377,0.023,0.001,0.498,0.014,0.095,0.014,0.499,0.003,0.148,0.06,0.002,0.562,0.963,0.119,0.095,0.047,0.002,0.095,0.32,0.148,0.009,0.029,0.437,0.561,0.148,0.436,0.73,0.029,0.5,0.014,0.377,0.904,0.037,0.011,0.047,0.181,0.148,0.037,0.497,0.148,0.377,0.621,0.319,0.011,0.06,0.319,0.002,0.622,0.924,0.029,0.148,0.321,0.014,0.037,0.002,0.002,0.076,0.023,0.095,0.023,0.148,0.06,0.32,0.003,0.223,0.148,0.119,0.147,0.007,0.678,0.375,0.06,0.0,0.009,0.622,0.436,0.037,0.011,0.011,0.001,0.009,0.005,0.001,0.095,0.029,0.222,0.076,0.023,0.009,0.002,0.001,0.001,0.005,0.002,0.001,0.011,0.075,0.023,0.268,0.037,0.377,0.029,0.222,0.037,0.148,0.002,0.223,0.002,0.047,0.0,0.182,0.32,0.73,0.776,0.88,0.377,0.5,0.777,0.182,0.009,0.0,0.095,0.438,0.562,0.06,0.0,0.095,0.005,0.014,0.06,0.5,0.029,0.001,0.014,0.005,0.037,0.06,0.007,0.001,0.001,0.004,0.269,0.059,0.182,0.221,0.268,0.001,0.076,0.221,0.222,0.148,0.037,0.148,0.147,0.499,0.181,0.005,0.06,0.076,0.622,0.047,0.562,0.148,0.182,0.001,0.0,0.0,0.147,0.5,0.009,0.499,0.437,0.037,0.182,0.148,0.119,0.147,0.0,0.182,0.119,0.5,0.498,0.002,0.001,0.011,0.001,0.005,0.0,0.004,0.0,0.001,0.0,0.002,0.0,0.002,0.001,0.009,0.119,0.377,0.622,0.018,0.06,0.32,0.499,0.376,0.32,0.18,0.002,0.0,0.268,0.73,0.047,0.06,0.181,0.06,0.777,0.222,0.037,0.147,0.001,0.677,0.076,0.32,0.119,0.037,0.679,0.023,0.076,0.679,0.076,0.561,0.06,0.269,0.001,0.009,0.88,0.562,0.047,0.817,0.182,0.268,0.047,0.001,0.007,0.002,0.148,0.321,0.029,0.0,0.499,0.817,0.095,0.002,0.047,0.003,0.023,0.005,0.029,0.047,0.148,0.018,0.562,0.119,0.62,0.029,0.095,0.0,0.002,0.816,0.004,0.06,0.728,0.119,0.73,0.119,0.438,0.001,0.005,0.06,0.182,0.007,0.076,0.0,0.268,0.119,0.881,0.119,0.076,0.0,0.06,0.731,0.076,0.001,0.047,0.003,0.437,0.498,0.182,0.018,0.001,0.014,0.06,0.118,0.037,0.004,0.223,0.881,0.851,0.433,0.499,0.32,0.047,0.321,0.0,0.222,0.004,0.029,0.181,0.037,0.001,0.56,0.0,0.376,0.319,0.076,0.73,0.222,0.076,0.095,0.268,0.06,0.037,0.001,0.148,0.011,0.182,0.037,0.147,0.023,0.32,0.023,0.562,0.002,0.731,0.621,0.047,0.06,0.095,0.561,0.148,0.32,0.319,0.075,0.002,0.0,0.009,0.002,0.0,0.002,0.004,0.047,0.007,0.014,0.001,0.001,0.009,0.037,0.002,0.002,0.009,0.002,0.002,0.095,0.014,0.06,0.094,0.001,0.32,0.047,0.076,0.003,0.037,0.029,0.076,0.095,0.095,0.023,0.32,0.003,0.619,0.319,0.095,0.267,0.622,0.223,0.777,0.222,0.011,0.119,0.777,0.014,0.003,0.011,0.498,0.011,0.003,0.119,0.73,0.001,0.182,0.268,0.0,0.002,0.095,0.148,0.499,0.182,0.095,0.851,0.435,0.029,0.047,0.119,0.775,0.094,0.222,0.007,0.377,0.817,0.148,0.435,0.001,0.0,0.018,0.007,0.047,0.001,0.376,0.317,0.182,0.095,0.0,0.009,0.003,0.095,0.437,0.223,0.32,0.047,0.119,0.904,0.001,0.002,0.437,0.182,0.037,0.0,0.003,0.817,0.222,0.076,0.622,0.001,0.06,0.002,0.003,0.018,0.222,0.182,0.776,0.001,0.018,0.011,0.32,0.269,0.377,0.029,0.037,0.181,0.181,0.376,0.268,0.222,0.147,0.047,0.119,0.182,0.32,0.32,0.146,0.181,0.002,0.005,0.001,0.001,0.002,0.014,0.182,0.182,0.023,0.002,0.32,0.023,0.562,0.029,0.73,0.147,0.321,0.076,0.377,0.499,0.22,0.002,0.001,0.378,0.222,0.148,0.001,0.147,0.268,0.437,0.222,0.268,0.037,0.002,0.0,0.377,0.94,0.377,0.0,0.003,0.0,0.5,0.5,0.029,0.007,0.32,0.497,0.0,0.001,0.148,0.731,0.014,0.029,0.118,0.06,0.182,0.0,0.318,0.119,0.222,0.029,0.005,0.438,0.182,0.011,0.095,0.047,0.182,0.32,0.076,0.004,0.002,0.076,0.0,0.182,0.001,0.119,0.009,0.321,0.023,0.06,0.095,0.004,0.499,0.004,0.009,0.004,0.001,0.029,0.009,0.002,0.561,0.561,0.147,0.498,0.269,0.119,0.018,0.32,0.777,0.095,0.319,0.221,0.269,0.047,0.018,0.095,0.023,0.029,0.005,0.002,0.0,0.001,0.0,0.0,0.731,0.018,0.06,0.0,0.32,0.001,0.0,0.319,0.004,0.005,0.222,0.037,0.0,0.023,0.095,0.376,0.029,0.06,0.004,0.268,0.029,0.119,0.029,0.731,0.002,0.269,0.018,0.622,0.047,0.009,0.146,0.011,0.023,0.182,0.002,0.011,0.0,0.003,0.06,0.037,0.007,0.148,0.002,0.001,0.095,0.001,0.0,0.06,0.037,0.221,0.002,0.952,0.014,0.005,0.011,0.148,0.029,0.001,0.011,0.32,0.499,0.181,0.679,0.73,0.148,0.037,0.118,0.037,0.003,0.001,0.0,0.0,0.007,0.007,0.0,0.377,0.119,0.148,0.001,0.014,0.001,0.0,0.0,0.076,0.119,0.06,0.029,0.06,0.562,0.182,0.014,0.0,0.375,0.561,0.376,0.269,0.147,0.269,0.437,0.269,0.268,0.777,0.076,0.005,0.119,0.438,0.029,0.029,0.002,0.014,0.777,0.321,0.001,0.622,0.037,0.0,0.075,0.095,0.047,0.119,0.06,0.014,0.222,0.06,0.181,0.5,0.076,0.269,0.047,0.182,0.119,0.076,0.62,0.182,0.023,0.002,0.002,0.047,0.119,0.148,0.014,0.561,0.001,0.0,0.06,0.119,0.014,0.32,0.118,0.011,0.002,0.002,0.009,0.268,0.497,0.076,0.06,0.221,0.88,0.007,0.029,0.023,0.018,0.018,0.002,0.002,0.0,0.005,0.001,0.014,0.014,0.003,0.0,0.001,0.011,0.007,0.001,0.005,0.007,0.001,0.014,0.319,0.436,0.267,0.095,0.005,0.06,0.561,0.011,0.004,0.148,0.037,0.011,0.777,0.376,0.148,0.009,0.679,0.004,0.266,0.011,0.095,0.095,0.002,0.018,0.001,0.011,0.182,0.377,0.562,0.561,0.182,0.268,0.001,0.047,0.001,0.004,0.268,0.009,0.009,0.005,0.005,0.731,0.002,0.009,0.85,0.373,0.621,0.731,0.005,0.014,0.376,0.377,0.047,0.952,0.499,0.777,0.182,0.095,0.0,0.014,0.023,0.621,0.437,0.32,0.002,0.009,0.011,0.269,0.003,0.076,0.0,0.002,0.148,0.009,0.018,0.011,0.0,0.268,0.731,0.119,0.002,0.047,0.0,0.076,0.777,0.678,0.119,0.561,0.94,0.731,0.002,0.037,0.182,0.377,0.377,0.377,0.06,0.003,0.0,0.678,0.318,0.679,0.014,0.001,0.0,0.095,0.561,0.007,0.06,0.148,0.037,0.095,0.047,0.181,0.148,0.119,0.268,0.562,0.047,0.0,0.677,0.377,0.011,0.023,0.776,0.268,0.817,0.621,0.18,0.0,0.182,0.622,0.118,0.321,0.011,0.376,0.023,0.377,0.005,0.375,0.023,0.182,0.029,0.005,0.119,0.147,0.376,0.005,0.076,0.437,0.023,0.014,0.029,0.318,0.622,0.621,0.148,0.0,0.002,0.047,0.817,0.0,0.014,0.023,0.001,0.223,0.622,0.182,0.095,0.014,0.269,0.731,0.777,0.003,0.268,0.076,0.014,0.095,0.029,0.377,0.269,0.679,0.075,0.001,0.003,0.148,0.0,0.002,0.561,0.777,0.095,0.002,0.007,0.047,0.731,0.181,0.007,0.095,0.011,0.004,0.075,0.119,0.095,0.562,0.023,0.011,0.0,0.0,0.095,0.011,0.06,0.018,0.269,0.436,0.002,0.001,0.076,0.06,0.06,0.622,0.005,0.148,0.037,0.264,0.32,0.047,0.029,0.011,0.023,0.029,0.029,0.622,0.009,0.147,0.0,0.0,0.002,0.014,0.014,0.002,0.729,0.924,0.222,0.001,0.148,0.005,0.499,0.014,0.182,0.014,0.018,0.0,0.148,0.904,0.018,0.88,0.095,0.499,0.495,0.018,0.148,0.881,0.002,0.005,0.499,0.0]},{"name":"LLM token probability, + guidance","p":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.011,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.731,0.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.729,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.999,0.0,0.0,0.0,0.0,0.0,0.002,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.002,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.047,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.023,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.622,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.731,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.001,0.001,0.0,0.0,0.0,0.0,0.731,0.0,0.119,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.011,0.0,0.0,0.0,0.904,0.0,0.0,0.0,0.0,0.0,0.0,0.007,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.002,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.0,0.0,0.0,0.0,0.999,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.905,0.076,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.003,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.003,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,0.0,0.999,0.0,0.0,0.018,0.0,0.005,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.037,0.0,0.001,0.0,0.0,0.378,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.023,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.223,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.002,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]}]};
var $ = function(id){ return document.getElementById(id); };
var sel = $("jt-judge"), J = 0, TOT = [0, 0];
D.judges.forEach(function(j, i){ var o = document.createElement("option"); o.value = i; o.textContent = j.name; sel.appendChild(o); });
D.y.forEach(function(y, i){ TOT[D.split[i]] += y; });
function pct(a, b){ return b ? (100 * a / b).toFixed(1) + "%" : "n/a"; }
function stats(split, thr){
var p = D.judges[J].p, f = 0, tp = 0;
for (var i = 0; i < p.length; i++){ if (D.split[i] !== split) continue; if (p[i] >= thr){ f++; tp += D.y[i]; } }
return {f: f, tp: tp};
}
function bestDev(){
var p = D.judges[J].p, cand = [], best = -1, bt = 0.5;
for (var i = 0; i < p.length; i++) if (D.split[i] === 0) cand.push(p[i]);
cand.sort(function(a, b){ return a - b; });
cand.forEach(function(t){ var s = stats(0, t), f1 = s.tp ? 2 * s.tp / (s.f + TOT[0]) : 0; if (f1 >= best){ best = f1; bt = t; } });
return bt;
}
function render(){
var thr = +$("jt-thr").value; $("jt-thrv").textContent = (100 * thr).toFixed(1) + "%";
var names = ["dev images", "held-out images"], html = "";
[0, 1].forEach(function(s){
var x = stats(s, thr), n = D.y.filter(function(_, i){ return D.split[i] === s; }).length;
html += '<tr class="' + (s ? "test" : "") + '"><td>' + names[s] + " (" + n + ")</td><td>" + x.f + "</td><td>" + x.tp + "</td><td>of " + TOT[s] + "</td><td>" + pct(x.tp, x.f) + "</td><td>" + pct(x.tp, TOT[s]) + "</td></tr>";
});
$("jt-body").innerHTML = html;
var g = $("jt-dots"), p = D.judges[J].p, out = "", k = 0;
for (var i = 0; i < p.length; i++){
if (D.split[i] !== 1) continue;
var x = 10 + 620 * p[i], seed = ((i * 2654435761) % 1000) / 1000, y = 16 + seed * 82;
out += D.y[i] ? '<circle cx="' + x.toFixed(1) + '" cy="' + y.toFixed(1) + '" r="5" fill="#51b45c" stroke="#fff" stroke-width="1.2"/>'
: '<circle cx="' + x.toFixed(1) + '" cy="' + y.toFixed(1) + '" r="2" fill="#888" opacity="0.6"/>';
}
g.innerHTML = out; $("jt-line").setAttribute("x1", 10 + 620 * thr); $("jt-line").setAttribute("x2", 10 + 620 * thr);
}
sel.onchange = function(){ J = +sel.value; render(); };
$("jt-thr").addEventListener("input", render);
$("jt-dev").onclick = function(){ $("jt-thr").value = bestDev(); render(); };
$("jt-half").onclick = function(){ $("jt-thr").value = 0.5; render(); };
sel.value = 2; J = 2; render();
})();
</script>
```
## Experiment B: reading the notes
The second call is the opposite kind: free text in, typed facts out. Part 7's report node writes a note per
flagged image. I took all **520** notes the model wrote in Part 7's six model runs, and asked three questions about
each note, with the answer taken from the **structured record** the note was written from, not from
labelling the prose: *was the image escalated? is any kept box uncertain? how many boxes were kept?*
| Judge (520 real notes) | Escalated? | Uncertain? | How many kept? | One call |
|---|---|---|---|---|
| Chance (majority class) | 0.554 | 0.562 | 0.558 | |
| Typed model, Laya | **0.990** | 0.871 | 0.681 | **21 ms** (31 ms for the count) |
| Typed model, `typed-decisions` | 0.973 | 0.925 | 0.623 | 21 ms |
| Typed model, `multilingual` | 0.933 | 0.627 | 0.585 | 9 ms |
| LLM, writes a number | 0.715 | **0.933** | **0.937** | 509 to 2,711 ms |
| LLM, token probability | 0.771 | 0.931 | 0.925 | 157 to 225 ms |
The pattern is different from the first run, and the difference is the most interesting part. On
**escalated?** the small typed model is nearly perfect (99%) and the language model is poor (71.5% and 77.1%).
On **counting** ("how many boxes does this note say were kept?") the typed model is clearly worse (68% against
92.5 to 93.7%). The LLM's escalate errors are almost all one mistake: of its 148 wrong answers (writing a number),
**146 were "yes, escalated" on a note whose record says it was not**. Many of those notes say, in so many
words, "received a review verdict", and it still gave 0.8 or 0.9. I did not test whether a different wording of
the question fixes that. So the boundary is not "typed models wobble at counting" alone: a language model can
fail a tick-box question too, and a typed model can ace it, depending on how the question sits next to the text.
## Putting it to work: a guard on the report note
Part 7 found one problem in the model-written notes that the id check cannot see: wording. A natural use for a fast,
free typed reader is a **guard**: after the model writes the note, let Laya read it, and if what it reads
disagrees with the record, throw the note away and use the template.
```{=html}
<video controls preload="metadata" playsinline style="width:100%;max-width:760px;display:block;margin:1em auto;border-radius:6px;">
<source src="videos/part8-notes.mp4" type="video/mp4">
</video>
```
I ran that on all 520 notes with Laya's answers to the two yes-or-no questions. It agreed with the record on
**448** notes and disagreed on **72** (13.8%). Then I audited the 72. I read the first 36 in full next to their
records, and the other 36 by their opening lines plus a keyword scan for "uncertain", "low confidence" and "escalat".
The categories are assigned by rules that check the note text, and `video_facts_p8.py` asserts them:
- **65** were Laya calling a perfectly good note *uncertain*, where the note says "confident defect" and names a
box at confidence 0.6 to 0.9. The record has no uncertain box, and the note never says "uncertain". Laya was wrong.
- **5** were Laya reading "escalated" into a note that says "received a review verdict" in so many words. Laya was wrong.
- **2** are ambiguous: the note says the image was escalated because **too many boxes** survived, which is not the
same as an uncertain box, and Laya said an uncertain box exists.
- **0** were real flaws in a note, meaning a case where the record says uncertain or escalated and Laya said no.
So **70 of the 72 flags were the guard's own mistakes, 2 were arguable, and the guard found no real problem**.
In the first version it found two real omissions; here the notes did not contain one that Laya caught. The existing id check
from Part 7 flagged none of the 520 notes. The reason is a base rate. When the writer is almost always right,
a checker that is 86% right on these questions mostly flags good notes. I did not audit the 448 notes it passed, so
I cannot tell you how many problems it missed. As built, I would not ship this guard. A tuned or fine-tuned
checker, or a stricter threshold on its probabilities, might change that. I did not test either.
## Jev: what I could not do
The roadmap asked for Jev against Laya. Jev is TypeSafe's hosted "System One" model, in early access. Its public
page says it returns typed decisions with calibrated probabilities and lists input at $42 per billion tokens
(that is $0.042 per million, the same figure Laya's README quotes). The pages I could read do not document the HTTP API
or how to get a key, and I did not have one. I did not sign up for early access on anyone's behalf.
What I did instead: `typed_models.py` has a `JevJudge` that posts to `/v1/systemone` with a `state` and `questions`,
the request shape Laya's own `laya-serve` says it mirrors. That is the unverified part: I wrote it from Laya's README and Jev's public
page, and it has **never been run**. If you have access, set `TYPESAFE_BASE_URL` and `TYPESAFE_API_KEY` and run
`uv run python typed_eval.py jev AB`; the two experiments would then produce a Jev row in exactly the same tables.
Until someone does, any claim about Jev in this series is a claim about its page, not about its behaviour. That includes the
third-party numbers in Laya's README, which I did not reproduce.
## So which tool for which step?
```{=html}
<video controls preload="metadata" playsinline style="width:100%;max-width:760px;display:block;margin:1em auto;border-radius:6px;">
<source src="videos/part8-choose.mp4" type="video/mp4">
</video>
```
| If the step is... | Use | Because (measured here) |
|---|---|---|
| **numbers** you can write a rule for | a rule | indistinguishable from the best model on the box call (0.641 against 0.697, interval includes zero), 40 ns, 0 tokens, exact and testable |
| reading **text** into a typed answer | a small typed model, checked on your own question | 21 ms and no tokens; 99% on "escalated?" where the LLM got 72 to 77%; worse at counting (68% against 93%); zero-shot it needs the guidance in the question |
| **writing** | the language model, with code owning the facts | the only one that can write; 2.4 s and 243 tokens per note |
And in all cases, measure on **your** labeled data with held-out cases, and do not stop at calibration. A model that
never says "yes" can have a lovely calibration error.
In the pipeline from Part 7, this says: keep `measure`, `rules` and `decide` as code; use a rule for the box call
(the best LLM judge was not resolvably better, and costs 216 to 564 ms and 146 to 171 tokens per box; the typed models did
not match it); keep the LLM for `report`. A typed model reading text is a good fit for tick-box questions about free text,
and in my tests it did **not** earn a place guarding the note. One thing the LLM-number judge does offer is a well-calibrated
probability, which is what a review-versus-escalate threshold (Part 9) would want.
## Jargon, explained simply
**Typed model.** A model that answers a fixed kind of question (yes/no, pick one, score) with a probability, and
cannot generate free text.
*Daily-life version:* a multiple-choice exam versus an essay. You can mark one by machine.
**Calibration.** Whether a stated probability matches reality: of all the things said to be 80% likely, about
80% should happen.
*Daily-life version:* a weather forecaster who says "30% rain" on 100 days, and it rains on about 30.
**ECE (expected calibration error).** The average gap between stated confidence and actual accuracy. Lower is better, and a
model that always says "about 6%" on a 6%-prevalence problem scores well.
**AUC (ranking score).** Of all pairs of one real box and one false alarm, how often the real one gets the higher probability. 0.5 is a coin flip, 1 is perfect.
*Daily-life version:* shuffle a pile of sick and healthy patients' charts: does the test rank the sick ones higher?
**Brier skill.** How much better your probabilities are than always predicting the base rate. Zero means no better; negative means worse.
**Token probability (logprob).** The model's own probability for the next word. Reading it is different from asking the model to *say* a number.
**Base rate.** How common the thing is. A checker that is 92% right is poor at finding something that happens 1% of the time.
*Daily-life version:* an airport scanner that is right 92% of the time, in a queue where nearly nobody has a weapon.
**Guard.** A cheap check that reads another step's output before it is trusted.
## What I did not do
- **Jev was not run.** No API key. The adapter exists and is unverified. Nothing here says how Jev compares.
- **Laya was zero-shot.** I used the three shipped checkpoints as they come and did not fine-tune, which Laya's own README says is where accuracy comes from. A fine-tuned Laya might beat these numbers, or might not.
- **81 real held-out boxes.** Every precision and ranking figure moves by a point or more if a box moves. I bootstrapped the ranking scores over images and every difference from the rule has an interval that includes zero. No interval on the other columns.
- **One dataset, and no inspector notes.** The dataset has no human-written notes, so experiment B reads the pipeline's own model-written notes. The roadmap's example, reading an inspector's note for a solder void, I did not test. That is the setting where I would most expect a typed model to earn its place.
- **The answers in B come from the record.** If the model wrote a note unfaithfully, "the note says X" and "the record says X" could differ and I would count it against the reader. That is why I audited the 72 disagreements, but I read 36 in full and the other 36 by their opening lines and a keyword scan, and I did not read the 448 agreements.
- **The LLM's weak "escalated?" score is untested for cause.** I saw that 146 of its 148 errors are false "yes", and I did not try another wording of the question.
- **The thresholds were chosen on 546 dev boxes** with 122 real ones, then applied to the held-out boxes.
- **Latencies** are warm, sequential, on a GPU shared with two vLLM servers; the CPU number depends on its thread count (20 here). The LLM numbers include a network hop to a local server.
- **I used one local LLM** (Qwen3-Coder-30B) at temperature 0 for the judge calls, with one prompt per question. A different prompt or model could move its numbers, as the token-probability bug showed.
- **The videos** are made with two tools on purpose: Manim for the data chapter (real per-box probabilities), Motion Canvas for the card-and-flow chapters, all in my cloned warm voice. They were checked by transcript and extracted frames, not by ear.
## Reproduce this yourself
```{=html}
<details>
<summary><strong>Show reproduce commands</strong></summary>
```
```bash
cd quarto_blog_hasan/notebooks/agentic-zero-to-advanced
uv sync # laya (and torch) are in pyproject.toml now
# local vLLM on :8000 serving qwen3-coder, as in Parts 3-7
uv run python typed_eval_data.py # the two evaluation sets (needs Part 7's pipeline_graph.py run first)
uv run python typed_eval.py band A # the rule
uv run python typed_eval.py laya-english,laya-typed-decisions,laya-multilingual AB # GPU, about 5 min each
uv run python typed_eval.py llm-verbalized,llm-logprob AB # ~10 min each
uv run python typed_eval.py jev AB # only with TYPESAFE_BASE_URL and TYPESAFE_API_KEY set
uv run python typed_costs.py # what each kind of tool costs per call
uv run python typed_summary.py # the tables above
uv run python typed_bootstrap.py # the intervals on the box-call ranking scores
uv run python typed_guard.py laya-english # the 72 disagreements, printed next to their records
```
```{=html}
</details>
```
## What's next
Further reading: Laya's [README](https://huggingface.co/convaiinnovations/laya) documents its question types and
fine-tuning notebook, and [Jev's page](https://typesafe.ai) describes the hosted alternative.
Part 9 makes `escalate` real: the graph pauses before the risky step and waits for a human, using the checkpointer from Part 6.
The probabilities from this post are what a threshold there would be set on, which is exactly why it matters that
Laya's were honest and flat, and the LLM's were sharp and overconfident.