Skip to content

Commit deee3fb

Browse files
committed
feat: add search to benchmark
1 parent d4b81c3 commit deee3fb

3 files changed

Lines changed: 36 additions & 3 deletions

File tree

mcp/benchmark/src/components/Sessions.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export function Sessions() {
1111
runs={state.runs}
1212
filteredRuns={state.filteredRuns}
1313
selected={state.selected}
14+
quickSearch={state.quickSearch}
1415
repoSearch={state.repoSearch}
1516
sourceFilter={state.sourceFilter}
1617
rangeFilter={state.rangeFilter}
@@ -19,6 +20,7 @@ export function Sessions() {
1920
sourceOptions={state.sourceOptions}
2021
load={state.load}
2122
loadDetail={state.loadDetail}
23+
setQuickSearch={state.setQuickSearch}
2224
setRepoSearch={state.setRepoSearch}
2325
setSourceFilter={state.setSourceFilter}
2426
setRangeFilter={state.setRangeFilter}

mcp/benchmark/src/components/sessions/SessionSidebar.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ interface SessionSidebarProps {
1010
runs: ProductionRun[];
1111
filteredRuns: ProductionRun[];
1212
selected: ProductionRun | null;
13+
quickSearch: string;
1314
repoSearch: string;
1415
sourceFilter: string;
1516
rangeFilter: "24h" | "7d" | "30d" | "all";
@@ -18,6 +19,7 @@ interface SessionSidebarProps {
1819
sourceOptions: string[];
1920
load: () => void;
2021
loadDetail: (run: ProductionRun) => void;
22+
setQuickSearch: (v: string) => void;
2123
setRepoSearch: (v: string) => void;
2224
setSourceFilter: (v: string) => void;
2325
setRangeFilter: (v: "24h" | "7d" | "30d" | "all") => void;
@@ -30,6 +32,7 @@ export function SessionSidebar({
3032
runs,
3133
filteredRuns,
3234
selected,
35+
quickSearch,
3336
repoSearch,
3437
sourceFilter,
3538
rangeFilter,
@@ -38,6 +41,7 @@ export function SessionSidebar({
3841
sourceOptions,
3942
load,
4043
loadDetail,
44+
setQuickSearch,
4145
setRepoSearch,
4246
setSourceFilter,
4347
setRangeFilter,
@@ -150,6 +154,12 @@ export function SessionSidebar({
150154
gap: "6px",
151155
}}
152156
>
157+
<input
158+
placeholder={"Search id, repo, model, prompt\u2026"}
159+
value={quickSearch}
160+
onChange={(e) => setQuickSearch(e.target.value)}
161+
style={inputStyle}
162+
/>
153163
<input
154164
placeholder={"Filter by repo\u2026"}
155165
value={repoSearch}
@@ -189,7 +199,8 @@ export function SessionSidebar({
189199
<option key={r} value={r} />
190200
))}
191201
</datalist>
192-
{(repoSearch ||
202+
{(quickSearch ||
203+
repoSearch ||
193204
sourceFilter !== "all" ||
194205
rangeFilter !== "all" ||
195206
dayFilter) && (

mcp/benchmark/src/hooks/useSessionsState.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export interface SessionsState {
1919
filteredRuns: ProductionRun[];
2020
selected: ProductionRun | null;
2121
annotations: Annotation[];
22+
quickSearch: string;
2223
repoSearch: string;
2324
sourceFilter: string;
2425
rangeFilter: "24h" | "7d" | "30d" | "all";
@@ -42,6 +43,7 @@ export interface SessionsState {
4243
toolCallId?: string,
4344
) => void;
4445
handleTurnToggle: (turnId: string) => void;
46+
setQuickSearch: (v: string) => void;
4547
setRepoSearch: (v: string) => void;
4648
setSourceFilter: (v: string) => void;
4749
setRangeFilter: (v: "24h" | "7d" | "30d" | "all") => void;
@@ -67,6 +69,9 @@ export function useSessionsState(): SessionsState {
6769
const [showSessionAnnotationForm, setShowSessionAnnotationForm] =
6870
useState(false);
6971
const [loading, setLoading] = useState(true);
72+
const [quickSearch, setQuickSearch] = useState(
73+
searchParams.get("q") || "",
74+
);
7075
const [repoSearch, setRepoSearch] = useState(
7176
searchParams.get("repo") || "",
7277
);
@@ -166,6 +171,7 @@ export function useSessionsState(): SessionsState {
166171
);
167172

168173
useEffect(() => {
174+
setQuickSearch(searchParams.get("q") || "");
169175
setRepoSearch(searchParams.get("repo") || "");
170176
setSourceFilter(searchParams.get("source") || "all");
171177
setRangeFilter(
@@ -176,12 +182,13 @@ export function useSessionsState(): SessionsState {
176182

177183
useEffect(() => {
178184
const nextParams = new URLSearchParams();
185+
if (quickSearch) nextParams.set("q", quickSearch);
179186
if (repoSearch) nextParams.set("repo", repoSearch);
180187
if (sourceFilter !== "all") nextParams.set("source", sourceFilter);
181188
if (rangeFilter !== "all") nextParams.set("range", rangeFilter);
182189
if (dayFilter) nextParams.set("day", dayFilter);
183190
setSearchParams(nextParams, { replace: true });
184-
}, [dayFilter, repoSearch, rangeFilter, setSearchParams, sourceFilter]);
191+
}, [dayFilter, quickSearch, repoSearch, rangeFilter, setSearchParams, sourceFilter]);
185192

186193
useEffect(() => {
187194
if (parsed.turns.length === 0) {
@@ -211,12 +218,23 @@ export function useSessionsState(): SessionsState {
211218
const rangeStart = getRangeStart(rangeFilter);
212219
if (rangeStart && new Date(r.timestamp).getTime() < rangeStart)
213220
return false;
221+
if (quickSearch) {
222+
const q = quickSearch.toLowerCase();
223+
const matches =
224+
r.id.toLowerCase().includes(q) ||
225+
r.repo.toLowerCase().includes(q) ||
226+
(r.source || "").toLowerCase().includes(q) ||
227+
(r.model || "").toLowerCase().includes(q) ||
228+
(r.user_prompt_preview || "").toLowerCase().includes(q);
229+
if (!matches) return false;
230+
}
214231
return true;
215232
}),
216-
[runs, dayFilter, repoSearch, rangeFilter, sourceFilter],
233+
[runs, dayFilter, quickSearch, repoSearch, rangeFilter, sourceFilter],
217234
);
218235

219236
const clearFilters = () => {
237+
setQuickSearch("");
220238
setRepoSearch("");
221239
setSourceFilter("all");
222240
setRangeFilter("all");
@@ -229,6 +247,7 @@ export function useSessionsState(): SessionsState {
229247
filteredRuns,
230248
selected,
231249
annotations,
250+
quickSearch,
232251
repoSearch,
233252
sourceFilter,
234253
rangeFilter,
@@ -248,6 +267,7 @@ export function useSessionsState(): SessionsState {
248267
loadDetail,
249268
handleAnnotate,
250269
handleTurnToggle,
270+
setQuickSearch,
251271
setRepoSearch,
252272
setSourceFilter,
253273
setRangeFilter,

0 commit comments

Comments
 (0)