Repository navigation
Run the Store evals on two agent models and show them side by side - #31
Merged
Merged
Conversation
…d model, smaller payload Observations carry the configured model alias as their slot (legacy anthropic/claude-haiku-4.5 maps into ~anthropic/claude-haiku-latest with the pinned id kept as resolvedModel), the resolved model when the runner recorded one, and the judge model from score metadata. Canonical selection is per day and model slot. The compact page model lists model slots with first day and resolved ids per day, the judge per day, and strips the shared trace URL prefix; score comments are embedded only where the page shows them. The rendered page is unchanged with one model; the embedded JSON shrinks by 31%. Part of #30. Claude-Session: https://claude.ai/code/session_01Gb2b7DMXcfsDdz6ALUWA3e
Model becomes a scope next to Team and Period. The All-models view keeps the same four columns: each task cell shows a cross-model badge (2/3 passed) with a per-model line, the 7-day track shows k/n when models disagreed, rows sort by failing attempts, and each evidence card shows the prompt once with failing models expanded and passing ones collapsed. Charts draw one line per model; before/after pools only models with eligible results on both sides and always lists every model. A models line and chart markers show when an alias or the judge resolved to a new version. A single model renders as before. The embedded JSON drops a further 17% by keeping disagreement scores and pass boilerplate out. Part of #30. Claude-Session: https://claude.ai/code/session_01Gb2b7DMXcfsDdz6ALUWA3e
Runner: preflight every model in the matrix (not only the first) and record the model the proxy answered with as resolvedModel on the experiment metadata and in OUTPUT. The model input is free text again so any OpenRouter id or ~vendor/model-latest alias works. Judge: resolve the judge alias once per batch, stamp judgeModelResolved into every score, and compare the resolved model for idempotency so an alias move re-judges instead of being skipped. JUDGE_IMPL_VERSION 0.4.1. Dockerfile: pin Claude Code 2.1.300 (the agent version is part of the measurement) and bump Codex to 0.162.1. Refs #30 Claude-Session: https://claude.ai/code/session_01Gb2b7DMXcfsDdz6ALUWA3e
The impl version is part of every online score id, so a bump would make the online judge re-score its backlog. Verdict logic is unchanged; the resolved-model metadata is additive, so the version stays. Claude-Session: https://claude.ai/code/session_01Gb2b7DMXcfsDdz6ALUWA3e
A passing result's comment restates the pass. Keep it only when the judge and the checks disagreed, where it explains the call. The page says "The task passed" / "Passed" instead. Live single-model page 1.85 MB -> 1.66 MB; the saving scales with the number of models. Claude-Session: https://claude.ai/code/session_01Gb2b7DMXcfsDdz6ALUWA3e
Langfuse prices a generation by matching its model name, so the alias (~anthropic/claude-haiku-latest) must not be what the generations carry. The harness gets the preflight's resolved id and stamps it on every turn generation; the agent is still launched with the configured id and the trace version keeps it for dashboards. Claude-Session: https://claude.ai/code/session_01Gb2b7DMXcfsDdz6ALUWA3e
The tabs name the models and "How this is measured" carries the resolved ids and the judge, so the standing "Models in latest run" line only took space. The move notice stays, and only on days a move is in the window. Claude-Session: https://claude.ai/code/session_01Gb2b7DMXcfsDdz6ALUWA3e
Both were standalone lines. They are now inline dropdowns after "N days available in this view", each opening a small panel under the line; the model updates one appears only when a model moved in the period. Claude-Session: https://claude.ai/code/session_01Gb2b7DMXcfsDdz6ALUWA3e
…ker change Marker labels now read "Haiku model changed 10/13" / "Haiku and judge models changed 10/13" / "marker 10/14"; a label that would overlap the previous one moves to a second row. A re-render scrolls to the evidence or the how section only when that target is new, so choosing a change-marker date no longer jumps to an open task. Claude-Session: https://claude.ai/code/session_01Gb2b7DMXcfsDdz6ALUWA3e
The dashed lines stay; a short label ("Model update 10/13", "Marker
10/14") shows on hover or focus. Markers on the same day share one hover
target with stacked labels. Details are in the Model updates menu.
Claude-Session: https://claude.ai/code/session_01Gb2b7DMXcfsDdz6ALUWA3e
In the all-models view a day where the models disagree is drawn as one colour segment per model in tab order, so the cell shows which model failed. The legend names the order. The k/n count stays in the tooltip and the date detail. Claude-Session: https://claude.ai/code/session_01Gb2b7DMXcfsDdz6ALUWA3e
Same pale fills, borders and symbols as single-outcome cells, at half width, instead of solid colour blocks. Claude-Session: https://claude.ai/code/session_01Gb2b7DMXcfsDdz6ALUWA3e
Contributor
Author
The fixed 205px column clipped the seventh day cell at viewports between 820 and 1050px; the column now takes its content width. Claude-Session: https://claude.ai/code/session_01Gb2b7DMXcfsDdz6ALUWA3e
RobertCrupa
reviewed
Oct 16, 2026
Contributor
There was a problem hiding this comment.
I ran a test against the mcp evals and it seems to break the langfuse traces, I no longer see the judge trace.
Here is the experiment
artogahr
added this pull request to stack #38
October 16, 2026 12:41
Contributor
Author
|
Could be because of #28, I'm running some tests now |
The judge got the keys only when they came in as inputs. A runner that used its own environment keys for another project (a local run, or a deployment with different keys than the judge) sent the judge to its own project, where the dataset run does not exist: 0 items, no scores, no error. Now the judge always receives the set the runner resolved; in production both Actors share the keys, so nothing changes there. (cherry picked from commit 6d213fe)
Contributor
Author
|
As I understand @RobertCrupa your local run failed since the keys were passed to the judge actor only if they were given to the eval actor as inputs. I changed it so that the keys are always passed on, even if they were given within the environment. Can you test again please? This was caused by #28 as I thought, since the default judge changed edit: this change also has some overlap with #15 but I think it's fine to include here |
RobertCrupa
approved these changes
Oct 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #30.
The suite can now run the same scenarios on several agent models each morning and the report shows them side by side. Models and the judge are OpenRouter moving aliases; the Actors record the concrete model behind each alias so a move is visible instead of silent.
Actors
resolvedModelon the experiment, in OUTPUT and on every per-turn generation (Langfuse prices by that name).judgeModelResolvedinto every score, and compares the resolved model for idempotency, so an alias move re-judges rather than being skipped.JUDGE_IMPL_VERSIONstays 0.4.0: verdict logic is unchanged and a bump would re-score the online judge's backlog.modelinput is free text again (the enum rejected every newer id). Descriptions explain aliases.Report
Rollout (after merge, separate)
Langfuse price definitions for the new concrete ids, one re-judge with Sonnet-latest under
candidate, then the daily schedule flips to~anthropic/claude-haiku-latest+~openai/gpt-luna-latestwith~anthropic/claude-sonnet-latestas judge.Tests: contract 26, judge 204, runner 54, report 28.
https://claude.ai/code/session_01Gb2b7DMXcfsDdz6ALUWA3e