Skip to content

Commit de3513a

Browse files
author
Dylan Huang
committed
everything is rollout id basd
1 parent 7887ddd commit de3513a

File tree

5 files changed

+64
-31
lines changed

5 files changed

+64
-31
lines changed

vite-app/src/App.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ const App = observer(() => {
4242
return EvaluationRowSchema.parse(log);
4343
});
4444
console.log("initialize_logs", rows);
45-
state.setDataset(rows);
45+
state.upsertRows(rows);
4646
} else if (update.type === "log") {
4747
const row: EvaluationRow = EvaluationRowSchema.parse(update.row);
4848
console.log("log", row);
49-
state.setDataset([row]);
49+
state.upsertRows([row]);
5050
}
5151
} catch (error) {
5252
console.error("Failed to parse WebSocket message:", error);

vite-app/src/GlobalState.tsx

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,35 +3,45 @@ import type { EvaluationRow } from "./types/eval-protocol";
33

44
export class GlobalState {
55
isConnected: boolean = false;
6+
// rollout_id -> EvaluationRow
67
dataset: Record<string, EvaluationRow> = {};
8+
// rollout_id -> expanded
79
expandedRows: Record<string, boolean> = {};
810

911
constructor() {
1012
makeAutoObservable(this);
1113
}
1214

13-
setDataset(dataset: EvaluationRow[]) {
14-
// Create new dataset object to avoid multiple re-renders
15+
upsertRows(dataset: EvaluationRow[]) {
1516
dataset.forEach((row) => {
16-
this.dataset[row.input_metadata.row_id] = row;
17+
if (!row.rollout_id) {
18+
return;
19+
}
20+
this.dataset[row.rollout_id] = row;
1721
});
1822
}
1923

20-
toggleRowExpansion(rowId: string) {
21-
if (this.expandedRows[rowId]) {
22-
this.expandedRows[rowId] = false;
24+
toggleRowExpansion(rolloutId?: string) {
25+
if (!rolloutId) {
26+
return;
27+
}
28+
if (this.expandedRows[rolloutId]) {
29+
this.expandedRows[rolloutId] = false;
2330
} else {
24-
this.expandedRows[rowId] = true;
31+
this.expandedRows[rolloutId] = true;
2532
}
2633
}
2734

28-
isRowExpanded(rowId: string): boolean {
29-
return this.expandedRows[rowId];
35+
isRowExpanded(rolloutId?: string): boolean {
36+
if (!rolloutId) {
37+
return false;
38+
}
39+
return this.expandedRows[rolloutId];
3040
}
3141

3242
setAllRowsExpanded(expanded: boolean) {
33-
Object.keys(this.dataset).forEach((rowId) => {
34-
this.expandedRows[rowId] = expanded;
43+
Object.keys(this.dataset).forEach((rolloutId) => {
44+
this.expandedRows[rolloutId] = expanded;
3545
});
3646
}
3747

vite-app/src/components/Dashboard.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ const Dashboard = observer(({ onRefresh }: DashboardProps) => {
5656

5757
const flattened = useMemo(() => {
5858
const flattenedDataset = state.sortedDataset.map((row) => flattenJson(row));
59-
console.log(flattenedDataset);
6059
return flattenedDataset;
6160
}, [state.sortedDataset]);
6261

vite-app/src/components/EvaluationRow.tsx

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@ import StatusIndicator from "./StatusIndicator";
66
import { state } from "../App";
77

88
// Small, focused components following "dereference values late" principle
9-
const ExpandIcon = observer(({ rowId }: { rowId: string }) => {
10-
const isExpanded = state.isRowExpanded(rowId);
9+
const ExpandIcon = observer(({ rolloutId }: { rolloutId?: string }) => {
10+
if (!rolloutId) {
11+
throw new Error("Rollout ID is required");
12+
}
13+
const isExpanded = state.isRowExpanded(rolloutId);
1114
return (
1215
<div className="w-4 h-4 flex items-center justify-center">
1316
<svg
@@ -47,9 +50,18 @@ const RowStatus = observer(
4750
)
4851
);
4952

50-
const RowId = observer(({ rowId }: { rowId: string }) => (
51-
<span className="font-mono text-gray-900 whitespace-nowrap">{rowId}</span>
52-
));
53+
const RolloutId = observer(
54+
({ rolloutId: rolloutId }: { rolloutId?: string }) => {
55+
if (!rolloutId) {
56+
return null;
57+
}
58+
return (
59+
<span className="font-mono text-gray-900 whitespace-nowrap">
60+
{rolloutId}
61+
</span>
62+
);
63+
}
64+
);
5365

5466
const RowModel = observer(({ model }: { model: string | undefined }) => (
5567
<span className="text-gray-900 truncate block">{model || "N/A"}</span>
@@ -116,6 +128,18 @@ const InputMetadataSection = observer(
116128
)
117129
);
118130

131+
const IdSection = observer(({ data }: { data: EvaluationRowType }) => (
132+
<MetadataSection
133+
title="IDs"
134+
data={{
135+
rollout_id: data.rollout_id,
136+
cohort_id: data.cohort_id,
137+
invocation_id: data.invocation_id,
138+
run_id: data.run_id,
139+
}}
140+
/>
141+
));
142+
119143
const ToolsSection = observer(
120144
({ data }: { data: EvaluationRowType["tools"] }) => (
121145
<MetadataSection title="Tools" data={data} />
@@ -130,6 +154,7 @@ const ChatInterfaceSection = observer(
130154

131155
const ExpandedContent = observer(
132156
({
157+
row,
133158
messages,
134159
eval_metadata,
135160
evaluation_result,
@@ -138,6 +163,7 @@ const ExpandedContent = observer(
138163
input_metadata,
139164
tools,
140165
}: {
166+
row: EvaluationRowType;
141167
messages: EvaluationRowType["messages"];
142168
eval_metadata: EvaluationRowType["eval_metadata"];
143169
evaluation_result: EvaluationRowType["evaluation_result"];
@@ -157,6 +183,7 @@ const ExpandedContent = observer(
157183
<div className="w-[500px] flex-shrink-0 space-y-3">
158184
<EvalMetadataSection data={eval_metadata} />
159185
<EvaluationResultSection data={evaluation_result} />
186+
<IdSection data={row} />
160187
<GroundTruthSection data={ground_truth} />
161188
<UsageStatsSection data={usage} />
162189
<InputMetadataSection data={input_metadata} />
@@ -169,10 +196,10 @@ const ExpandedContent = observer(
169196

170197
export const EvaluationRow = observer(
171198
({ row }: { row: EvaluationRowType; index: number }) => {
172-
const rowId = row.input_metadata.row_id;
173-
const isExpanded = state.isRowExpanded(rowId);
199+
const rolloutId = row.rollout_id;
200+
const isExpanded = state.isRowExpanded(rolloutId);
174201

175-
const toggleExpanded = () => state.toggleRowExpansion(rowId);
202+
const toggleExpanded = () => state.toggleRowExpansion(rolloutId);
176203

177204
return (
178205
<>
@@ -183,7 +210,7 @@ export const EvaluationRow = observer(
183210
>
184211
{/* Expand/Collapse Icon */}
185212
<td className="px-3 py-3 w-8">
186-
<ExpandIcon rowId={rowId} />
213+
<ExpandIcon rolloutId={rolloutId} />
187214
</td>
188215

189216
{/* Name */}
@@ -199,9 +226,9 @@ export const EvaluationRow = observer(
199226
/>
200227
</td>
201228

202-
{/* Row ID */}
229+
{/* Rollout ID */}
203230
<td className="px-3 py-3 text-xs">
204-
<RowId rowId={row.input_metadata.row_id} />
231+
<RolloutId rolloutId={row.rollout_id} />
205232
</td>
206233

207234
{/* Model */}
@@ -225,6 +252,7 @@ export const EvaluationRow = observer(
225252
<tr>
226253
<td colSpan={8} className="p-0">
227254
<ExpandedContent
255+
row={row}
228256
messages={row.messages}
229257
eval_metadata={row.eval_metadata}
230258
evaluation_result={row.evaluation_result}

vite-app/src/components/EvaluationTable.tsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,7 @@ const TableBody = observer(() => {
66
return (
77
<tbody className="divide-y divide-gray-200">
88
{state.sortedDataset.map((row, index) => (
9-
<EvaluationRow
10-
key={row.input_metadata.row_id}
11-
row={row}
12-
index={index}
13-
/>
9+
<EvaluationRow key={row.rollout_id} row={row} index={index} />
1410
))}
1511
</tbody>
1612
);
@@ -34,7 +30,7 @@ export const EvaluationTable = observer(() => {
3430
Status
3531
</th>
3632
<th className="px-3 py-2 text-left text-xs font-semibold text-gray-700">
37-
Row ID
33+
Rollout ID
3834
</th>
3935
<th className="px-3 py-2 text-left text-xs font-semibold text-gray-700">
4036
Model

0 commit comments

Comments
 (0)