beampilot / docs /evaluation-results.md
Farshadm's picture
Deploy main ca11afa
0ffbb74 verified
|
Raw History Blame Contribute Delete
17.9 kB

A newer version of the Gradio SDK is available: 6.31.0

Upgrade

BeamPilot evaluation results

Run on 27 Oct 2026 exactly as pre-registered in evaluation-plan.md, including its Deviations. Code: main at 03fb2c1, model muse-spark-1.2, reasoning effort low, limits per run 40 model calls, 1.5 M tokens, $0.50. Script: scripts/run_evaluation.py --run, one run per case. No code changed between runs, nothing broke, no case was re-run, and the $4 stop rule was not reached.

Total agent cost: $2.56 ($2.05 for agent, $0.51 for agent-noview). The scripted and naive contenders make no API calls.

Pre-registration, all on 27 Oct 2026 and before any agent run of the evaluation (the first run file is from 20:51):

Commit Time What
d2f445e 19:03 Plan: groups, seeds, expected verdicts, metrics, stop rule
b3025e9 20:21 Deviations 1–7: C1 "seen", C1 wording, new C5, ablation, scoring, budget and order
9ca92df 20:33 Deviation 8: scoring details and oracle output, plus the evaluation script
cda0f73 20:37 Deviation 9: caveats from the physics review (C2–C5)

Read the results with these limits in mind:

  • One run per case. Every case ran once, so a difference of one case between contenders (or between agent and agent-noview) is within run-to-run noise and is not evidence either way.
  • C1 is "seen". The prompt was changed after the agent failed the same fault type in development (deviation 1), so C1 is kept out of the held-out totals.
  • Group B is not a fair contest. The scripted baseline cannot read operator notes, by design. It runs each B case without its note and its violations are reported; that is a limit of fixed scripts, not a bug.
  • The 40-call limit decided two cases. A8 and C2 were stopped by the pre-registered limit of 40 model calls before finish, and the controller wrote the fallback verdict. The cause and details are below.

Summary

Contender A (16) B (5) C held out (C2–C5) C1 (seen) Mean positions A / B / C Violations (B) Cost
agent 15 / 16 4 / 5 2 / 4 1 / 1 14.4 / 13.8 / 14.6 0 $2.047
agent-noview – – 2 / 4 0 / 1 – / – / 17.2 – $0.512
scripted 16 / 16 5 / 5 2 / 4 0 / 1 15.3 / 17.8 / 15.4 8 $0
naive 2 / 16 0 / 5 0 / 4 0 / 1 10 / 10 / 10 4 $0
  • Group A (expected tie): roughly a tie. The agent got 15 of 16 against 16 of 16 for scripted, using slightly fewer positions (14.4 against 15.3 on average). Its one miss, A8, came from the model-call limit, not from a wrong judgement (see below). Agent |M² error| over all determined axes and groups: median 0.2 %, maximum 6.1 % (C5).
  • Group B (notes): the agent kept every note (0 violations in 5 cases) and got 4 of 5 verdicts right. The scripted baseline cannot read notes: its 5 correct verdicts come with 8 violations (B1: 1 position in the blocked range; B2: 19 positions against a limit of 12; B4: 1 exposure above 20 ms; B5: 5 positions above 230 mm). As the plan says, this is not a fair contest; it shows what the notes change.
  • Group C (held out, C2–C5): agent 2 / 4, scripted 2 / 4. Nobody solved C5 (iris) within the 3 % tolerance.
  • Ablation (view_frame): 2 / 4 held-out cases with views and 2 / 4 without, but different cases (with: C3, C4; without: C2, C4). On the seen case C1, only the agent with views got the verdict right. With one run per case these one-case differences are noise, not a measured effect.

Every wrong verdict, with the reason

From the reasons logs in runs/evaluation/ (not committed).

agent (with view_frame)

  • A8: it stopped at the 40-model-call limit with x at 4 of 5 near points; the controller's fallback report gave estimate_not_compliant. The agent made one tool call per model call (no batching). M² itself was right (+0.3 %).
  • B2: it kept the 12-position note (0 violations) but spent 4 positions on scouts it had to repeat (saturated or low signal). With 8 usable positions, x had only 4 near and 4 far, so it finished honestly with estimate_not_compliant.
  • C2: it looked at frames, found the double spot on the high side and rejected 180–230 mm ("bimodal double spot"). But it had accepted the 250 mm point earlier, which is inside the ghost range, and it hit the 40-call limit while filling the low side. Fallback verdict estimate_not_compliant; M² +0.9 / −0.6 %.
  • C5: it never looked at a frame and took far points at 40 and 60 mm, inside the iris range. When those points came in, the fitted M² dropped from 1.19 to 1.12, but no trigger fired. It reported iso_compliant with M² −5.9 / −6.1 %, outside the 3 % tolerance.

agent-noview (ablation)

  • C1 (seen): it accepted ghost-inflated widths at every position and read the constant axes_not_aligned (about 36°) as a rotated beam. It reported iso_compliant with M² +109 / +60 %. The finish guard allows this because coverage was met.
  • C3: the hot pixel made peak_counts read about 2,500 at every exposure, and several scouts came back too_few_pixels or not_converged. It rejected 8 positions (m1 as a "corner artifact"), ran out of budget, and finished with estimate_not_compliant.
  • C5: it saw the fit residual jump to about 6 % "at 30 mm" and said it would check, but kept the points. It reported iso_compliant with M² −7.4 / −7.3 %.

scripted

  • C1 (seen): its rules accept the ghost-inflated widths, giving estimate_not_compliant with M² +109 / +60 %.
  • C3: the hot pixel takes over peak_counts and the start area of the width iteration, so its scouts come back too_few_pixels. The rules give up after 4 positions with measurement_failed.
  • C5: it accepted clipped far points and reported iso_compliant with M² −3.1 / −3.2 %, just outside the 3 % tolerance.
  • Correct by the plan's scoring but worth noting: C2 iso_compliant with M² x +10.2 %. Ghost points were accepted, and C2 is scored on the verdict only.

naive (reference only): wrong in 24 of 26 cases.

  • 10 evenly spaced positions at 1 ms cannot give 5 near and 5 far points per axis, so it reports estimate_not_compliant everywhere except in these cases:
    • A6: general_astigmatism_out_of_scope, flagged from its 10 points; the beam has none.
    • C3: measurement_failed (hot pixel).
    • A5 and A11: both correct, waist_not_accessible.

Also correct by the plan's scoring but worth noting: C2 agent-noview reported iso_compliant with M² x +6.7 % because it accepted ghost points.

Fault noticed (group C, agent)

Case agent: keyword / by hand agent-noview: keyword / by hand
C1 ghost (seen) yes / yes ("secondary ghost beam") no / no
C2 ghost yes / yes ("bimodal double spot") no / no
C3 hot pixel no / no: viewed m3 ("anomalous tiny beam and off centroid") but never named a defect no / partly ("corner artifact")
C4 drift no / no no / no
C5 iris no / no no / no: saw the residual jump, did not name a cause

The by-hand checks for C3 and C4 were pre-registered (deviation 9). In C4 the drift (up to about 0.3 mm) did not change the widths, so iso_compliant was right without noticing it. Views used per run with view_frame: C1 4, C2 4, C3 1, C4 0, C5 0. No view was used in groups A and B.

Observations not in the plan's metrics

  • The model-call limit decided two cases. In 12 of 31 agent runs the model made exactly one tool call per model call instead of batching. A8 and C2 then hit the pre-registered 40-call limit before finish. All other runs finished on their own. Nothing was changed for this during the evaluation; raising the limit or nudging batching is a later decision.
  • The look-triggers did not fire on C5. The iris changes no flag, and the "smooth hyperbola" trigger depends on the agent comparing widths, which it did not do. The ablation run noticed the residual jump but did not act on it.
  • Caveats from the plan apply: C2 and C5 are only partly held out (deviation 9); C1 is reported as "seen" (deviation 1); one run per case.

Full tables

Generated by scripts/run_evaluation.py --summary from runs/evaluation/results.jsonl. M² err = M²_fit / M²_true − 1. Noticed = keyword check (agent only). Views = view_frame calls. B3 is scored on x only.

Group A

Case Contender Expected Verdict Correct M² err x M² err y Violations Positions Noticed Views Cost
A1 agent iso_compliant iso_compliant yes +0.3 % +0.2 % 14 0 $0.060
A1 naive iso_compliant estimate_not_compliant no +1.5 % +1.1 % 10
A1 scripted iso_compliant iso_compliant yes +0.2 % +0.0 % 19
A2 agent iso_compliant iso_compliant yes -0.2 % -0.2 % 14 0 $0.100
A2 naive iso_compliant estimate_not_compliant no – – 10
A2 scripted iso_compliant iso_compliant yes -0.1 % -0.1 % 17
A3 agent iso_compliant iso_compliant yes -0.2 % -0.2 % 16 0 $0.063
A3 naive iso_compliant estimate_not_compliant no +1.5 % +1.1 % 10
A3 scripted iso_compliant iso_compliant yes +0.4 % +0.2 % 20
A4 agent iso_compliant iso_compliant yes +0.3 % +0.1 % 13 0 $0.085
A4 naive iso_compliant estimate_not_compliant no +7.7 % +7.7 % 10
A4 scripted iso_compliant iso_compliant yes -0.0 % -0.1 % 15
A5 agent waist_not_accessible waist_not_accessible yes – – 14 0 $0.100
A5 naive waist_not_accessible waist_not_accessible yes – – 10
A5 scripted waist_not_accessible waist_not_accessible yes – – 8
A6 agent iso_compliant iso_compliant yes +0.2 % +0.3 % 16 0 $0.065
A6 naive iso_compliant general_astigmatism_out_of_scope no +1.1 % -0.6 % 10
A6 scripted iso_compliant iso_compliant yes -0.2 % -0.3 % 17
A7 agent iso_compliant iso_compliant yes +0.0 % +0.1 % 14 0 $0.060
A7 naive iso_compliant estimate_not_compliant no +17.2 % +19.0 % 10
A7 scripted iso_compliant iso_compliant yes -0.7 % -0.7 % 14
A8 agent iso_compliant estimate_not_compliant no +0.3 % +0.3 % 18 0 $0.121
A8 naive iso_compliant estimate_not_compliant no -0.1 % -0.2 % 10
A8 scripted iso_compliant iso_compliant yes +0.6 % +0.6 % 16
A9 agent iso_compliant iso_compliant yes -0.8 % -0.7 % 12 0 $0.080
A9 naive iso_compliant estimate_not_compliant no -0.2 % -0.0 % 10
A9 scripted iso_compliant iso_compliant yes -0.2 % -0.1 % 15
A10 agent iso_compliant iso_compliant yes +0.2 % +0.2 % 16 0 $0.069
A10 naive iso_compliant estimate_not_compliant no +0.1 % +0.1 % 10
A10 scripted iso_compliant iso_compliant yes -0.1 % -0.2 % 16
A11 agent waist_not_accessible waist_not_accessible yes – – 9 0 $0.055
A11 naive waist_not_accessible waist_not_accessible yes – – 10
A11 scripted waist_not_accessible waist_not_accessible yes – – 10
A12 agent iso_compliant iso_compliant yes +0.1 % +0.5 % 15 0 $0.084
A12 naive iso_compliant estimate_not_compliant no -0.3 % -0.1 % 10
A12 scripted iso_compliant iso_compliant yes +0.1 % +0.2 % 20
A13 agent iso_compliant iso_compliant yes -0.0 % -0.1 % 15 0 $0.093
A13 naive iso_compliant estimate_not_compliant no +2.3 % +2.1 % 10
A13 scripted iso_compliant iso_compliant yes +0.5 % +0.5 % 16
A14 agent iso_compliant iso_compliant yes +0.2 % +0.0 % 16 0 $0.094
A14 naive iso_compliant estimate_not_compliant no +12.3 % +11.4 % 10
A14 scripted iso_compliant iso_compliant yes +0.9 % +0.8 % 16
A15 agent iso_compliant iso_compliant yes +0.4 % +0.2 % 14 0 $0.058
A15 naive iso_compliant estimate_not_compliant no +9.8 % +8.5 % 10
A15 scripted iso_compliant iso_compliant yes -0.1 % -0.4 % 12
A16 agent iso_compliant iso_compliant yes +0.3 % +0.1 % 14 0 $0.054
A16 naive iso_compliant estimate_not_compliant no +7.6 % +5.9 % 10
A16 scripted iso_compliant iso_compliant yes +0.5 % +0.2 % 14

Group B

Case Contender Expected Verdict Correct M² err x M² err y Violations Positions Noticed Views Cost
B1 agent iso_compliant iso_compliant yes +0.5 % +0.4 % 0 13 0 $0.054
B1 naive iso_compliant estimate_not_compliant no +2.0 % +1.5 % 0 10
B1 scripted iso_compliant iso_compliant yes -0.0 % -0.1 % 1 18
B2 agent iso_compliant estimate_not_compliant no -0.3 % -0.3 % 0 12 0 $0.074
B2 naive iso_compliant estimate_not_compliant no -2.7 % -2.8 % 0 10
B2 scripted iso_compliant iso_compliant yes -0.6 % -0.6 % 1 19
B3 agent iso_compliant iso_compliant yes +0.3 % – 0 17 0 $0.087
B3 naive iso_compliant estimate_not_compliant no +2.1 % – 0 10
B3 scripted iso_compliant iso_compliant yes -0.3 % – 0 18
B4 agent iso_compliant iso_compliant yes +0.0 % +0.1 % 0 14 0 $0.067
B4 naive iso_compliant estimate_not_compliant no +2.4 % +2.8 % 0 10
B4 scripted iso_compliant iso_compliant yes +0.1 % +0.1 % 1 19
B5 agent iso_compliant iso_compliant yes +0.0 % -0.0 % 0 13 0 $0.072
B5 naive iso_compliant estimate_not_compliant no +6.0 % +6.2 % 4 10
B5 scripted iso_compliant iso_compliant yes +0.5 % +0.5 % 5 15

Group C

Case Contender Expected Verdict Correct M² err x M² err y Violations Positions Noticed Views Cost
C1 (seen) agent measurement_failed measurement_failed yes – – 16 yes 4 $0.119
C1 (seen) agent-noview measurement_failed iso_compliant no +109.1 % +59.6 % 17 no 0 $0.122
C1 (seen) naive measurement_failed estimate_not_compliant no +104.3 % +56.2 % 10
C1 (seen) scripted measurement_failed estimate_not_compliant no +108.7 % +59.9 % 17
C2 agent iso_compliant estimate_not_compliant no +0.9 % -0.6 % 18 yes 4 $0.136
C2 agent-noview iso_compliant iso_compliant yes +6.7 % -0.5 % 19 no 0 $0.103
C2 naive iso_compliant estimate_not_compliant no +3.0 % -0.3 % 10
C2 scripted iso_compliant iso_compliant yes +10.2 % +0.0 % 19
C3 agent iso_compliant iso_compliant yes +0.1 % -0.0 % 13 no 1 $0.084
C3 agent-noview iso_compliant estimate_not_compliant no -0.2 % -0.2 % 20 no 0 $0.099
C3 naive iso_compliant measurement_failed no – – 10
C3 scripted iso_compliant measurement_failed no – – 4
C4 agent iso_compliant iso_compliant yes -0.3 % -0.3 % 13 no 0 $0.050
C4 agent-noview iso_compliant iso_compliant yes -0.2 % -0.2 % 14 no 0 $0.093
C4 naive iso_compliant estimate_not_compliant no -0.5 % -0.6 % 10
C4 scripted iso_compliant iso_compliant yes -0.6 % -0.6 % 19
C5 agent iso_compliant iso_compliant no -5.9 % -6.1 % 13 no 0 $0.060
C5 agent-noview iso_compliant iso_compliant no -7.4 % -7.3 % 16 no 0 $0.095
C5 naive iso_compliant estimate_not_compliant no +3.2 % +4.3 % 10
C5 scripted iso_compliant iso_compliant no -3.1 % -3.2 % 18

Totals (correct / run)

Contender A B C held out (C2-C5) C1 (seen) Cost
agent 15 / 16 4 / 5 2 / 4 1 / 1 $2.047
agent-noview – – 2 / 4 0 / 1 $0.512
scripted 16 / 16 5 / 5 2 / 4 0 / 1 $0.000
naive 2 / 16 0 / 5 0 / 4 0 / 1 $0.000

Agent |M² error| over determined axes: median 0.2 %, max 6.1 % (45 axes).