diff --git a/src/components/legal/BenchmarkRunsHistory.tsx b/src/components/legal/BenchmarkRunsHistory.tsx
index 60e35d0b11..2e52b5e8ee 100644
--- a/src/components/legal/BenchmarkRunsHistory.tsx
+++ b/src/components/legal/BenchmarkRunsHistory.tsx
@@ -6,7 +6,6 @@ import { ExternalLink, Loader2, Repeat } from "lucide-react";
import Link from "next/link";
import { Badge } from "@/components/ui/badge";
import {
- PASS_BADGE_CLASS,
RUN_LIST_LIMIT,
SUMMARY_WINDOW,
WINDOW_OPTIONS,
@@ -604,7 +603,8 @@ export function BenchmarkRunsHistory({
Started |
Runner Status |
- Score |
+ Passed |
+ Failed |
|
+ Total |
Chat |
Report |
{isSuperAdmin && (
@@ -692,9 +693,12 @@ export function BenchmarkRunsHistory({
{/* Recursion re-runs now report post-fix scores back onto
- their run row; ScoreCell renders its own dash when no
+ their run row; PassedCountCell renders its own dash when no
score landed (older rows, fix-proposal stage). */}
-
+
+ |
+
+
|
@@ -702,6 +706,9 @@ export function BenchmarkRunsHistory({
|
|
+
+
+ |
e.stopPropagation()}>
{run.runType === "manual" ? (
@@ -867,41 +874,80 @@ function ChatCell({ run }: { run: BenchmarkRunListRow }) {
return —;
}
-function ScoreCell({ run }: { run: AdjustedRun }) {
+function hasScoreData(run: AdjustedRun): boolean {
const isActive =
run.status === WorkflowStatus.PENDING || run.status === WorkflowStatus.IN_PROGRESS;
+ return !isActive && typeof run.all_pass === "boolean";
+}
- // Neutral placeholder for in-progress runs and terminal runs with no score data.
- if (isActive || typeof run.all_pass !== "boolean") {
- return —;
+/** `n_passed` is undefined on rows with no score data. */
+function PassedCountCell({ run }: { run: AdjustedRun }) {
+ if (!hasScoreData(run)) {
+ return —;
+ }
+ if (run.n_passed === undefined) {
+ return (
+
+ n/a
+
+ );
+ }
+ if (run.n_passed === 0) {
+ return (
+
+ —
+
+ );
}
-
return (
-
- {run.n_passed !== undefined && run.n_total !== undefined && (
-
- {run.n_passed}/{run.n_total}
-
- )}
- {run.all_pass && (
-
- PASS
-
- )}
-
+ {run.n_passed}
+
);
}
-function hasScoreData(run: AdjustedRun): boolean {
- const isActive =
- run.status === WorkflowStatus.PENDING || run.status === WorkflowStatus.IN_PROGRESS;
- return !isActive && typeof run.all_pass === "boolean";
+/** `n_failed` is null when the breakdown is not computable — unknown, not zero. */
+function FailedCountCell({ run }: { run: AdjustedRun }) {
+ if (!hasScoreData(run)) {
+ return —;
+ }
+ if (run.n_failed === null) {
+ return (
+
+ n/a
+
+ );
+ }
+ if (run.n_failed === 0) {
+ return (
+
+ —
+
+ );
+ }
+ return (
+
+ {run.n_failed}
+
+ );
}
/** `n_contested` is undefined on output-ref/bail-out rows — unknown, not zero. */
@@ -976,6 +1022,42 @@ function DisputedCountCell({ run }: { run: AdjustedRun }) {
);
}
+/** `n_total` falls back to `roster_total` when the row's own denominator is unset. */
+function TotalCountCell({ run }: { run: AdjustedRun }) {
+ if (!hasScoreData(run)) {
+ return —;
+ }
+ const total = run.n_total ?? run.roster_total;
+ if (total === undefined) {
+ return (
+
+ n/a
+
+ );
+ }
+ if (total === 0) {
+ return (
+
+ —
+
+ );
+ }
+ return (
+
+ {total}
+
+ );
+}
+
/**
* Small badge marking a run whose task's EvalSet has recursion enabled.
* Links to the Recursion tab (same page, `?tab=recursion`) — clicks must not
|