inspect-ai 0.3.94__py3-none-any.whl → 0.3.96__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. inspect_ai/_eval/loader.py +1 -1
  2. inspect_ai/_eval/task/run.py +12 -6
  3. inspect_ai/_util/exception.py +4 -0
  4. inspect_ai/_util/hash.py +39 -0
  5. inspect_ai/_util/local_server.py +16 -0
  6. inspect_ai/_util/path.py +22 -0
  7. inspect_ai/_util/trace.py +1 -1
  8. inspect_ai/_util/working.py +4 -0
  9. inspect_ai/_view/www/dist/assets/index.css +9 -9
  10. inspect_ai/_view/www/dist/assets/index.js +117 -120
  11. inspect_ai/_view/www/package.json +1 -1
  12. inspect_ai/_view/www/src/app/log-view/navbar/SecondaryBar.tsx +2 -2
  13. inspect_ai/_view/www/src/app/log-view/tabs/SamplesTab.tsx +1 -4
  14. inspect_ai/_view/www/src/app/samples/SamplesTools.tsx +3 -13
  15. inspect_ai/_view/www/src/app/samples/sample-tools/SelectScorer.tsx +45 -48
  16. inspect_ai/_view/www/src/app/samples/sample-tools/filters.ts +16 -15
  17. inspect_ai/_view/www/src/app/samples/sample-tools/sample-filter/SampleFilter.tsx +47 -75
  18. inspect_ai/_view/www/src/app/samples/sample-tools/sample-filter/completions.ts +9 -9
  19. inspect_ai/_view/www/src/app/types.ts +12 -2
  20. inspect_ai/_view/www/src/components/ExpandablePanel.module.css +1 -1
  21. inspect_ai/_view/www/src/components/ExpandablePanel.tsx +5 -5
  22. inspect_ai/_view/www/src/state/hooks.ts +19 -3
  23. inspect_ai/_view/www/src/state/logSlice.ts +23 -5
  24. inspect_ai/_view/www/yarn.lock +9 -9
  25. inspect_ai/agent/_bridge/patch.py +1 -3
  26. inspect_ai/agent/_types.py +1 -1
  27. inspect_ai/analysis/__init__.py +0 -0
  28. inspect_ai/analysis/beta/__init__.py +67 -0
  29. inspect_ai/analysis/beta/_dataframe/__init__.py +0 -0
  30. inspect_ai/analysis/beta/_dataframe/columns.py +145 -0
  31. inspect_ai/analysis/beta/_dataframe/evals/__init__.py +0 -0
  32. inspect_ai/analysis/beta/_dataframe/evals/columns.py +132 -0
  33. inspect_ai/analysis/beta/_dataframe/evals/extract.py +23 -0
  34. inspect_ai/analysis/beta/_dataframe/evals/table.py +177 -0
  35. inspect_ai/analysis/beta/_dataframe/events/__init__.py +0 -0
  36. inspect_ai/analysis/beta/_dataframe/events/columns.py +87 -0
  37. inspect_ai/analysis/beta/_dataframe/events/extract.py +26 -0
  38. inspect_ai/analysis/beta/_dataframe/events/table.py +100 -0
  39. inspect_ai/analysis/beta/_dataframe/extract.py +73 -0
  40. inspect_ai/analysis/beta/_dataframe/messages/__init__.py +0 -0
  41. inspect_ai/analysis/beta/_dataframe/messages/columns.py +60 -0
  42. inspect_ai/analysis/beta/_dataframe/messages/extract.py +21 -0
  43. inspect_ai/analysis/beta/_dataframe/messages/table.py +79 -0
  44. inspect_ai/analysis/beta/_dataframe/progress.py +26 -0
  45. inspect_ai/analysis/beta/_dataframe/record.py +377 -0
  46. inspect_ai/analysis/beta/_dataframe/samples/__init__.py +0 -0
  47. inspect_ai/analysis/beta/_dataframe/samples/columns.py +77 -0
  48. inspect_ai/analysis/beta/_dataframe/samples/extract.py +54 -0
  49. inspect_ai/analysis/beta/_dataframe/samples/table.py +370 -0
  50. inspect_ai/analysis/beta/_dataframe/util.py +160 -0
  51. inspect_ai/analysis/beta/_dataframe/validate.py +171 -0
  52. inspect_ai/log/_file.py +10 -3
  53. inspect_ai/log/_log.py +21 -1
  54. inspect_ai/model/_call_tools.py +2 -1
  55. inspect_ai/model/_model.py +6 -4
  56. inspect_ai/model/_openai_responses.py +17 -18
  57. inspect_ai/model/_providers/anthropic.py +30 -5
  58. inspect_ai/model/_providers/providers.py +1 -1
  59. inspect_ai/solver/_multiple_choice.py +4 -1
  60. inspect_ai/solver/_task_state.py +8 -4
  61. inspect_ai/tool/_mcp/_context.py +3 -5
  62. inspect_ai/tool/_mcp/_sandbox.py +17 -14
  63. inspect_ai/tool/_mcp/server.py +1 -1
  64. inspect_ai/tool/_tools/_think.py +1 -1
  65. inspect_ai/tool/_tools/_web_search/__init__.py +3 -0
  66. inspect_ai/tool/_tools/{_web_search.py → _web_search/_google.py} +56 -103
  67. inspect_ai/tool/_tools/_web_search/_tavily.py +77 -0
  68. inspect_ai/tool/_tools/_web_search/_web_search.py +85 -0
  69. inspect_ai/util/_sandbox/events.py +3 -2
  70. {inspect_ai-0.3.94.dist-info → inspect_ai-0.3.96.dist-info}/METADATA +9 -2
  71. {inspect_ai-0.3.94.dist-info → inspect_ai-0.3.96.dist-info}/RECORD +75 -46
  72. {inspect_ai-0.3.94.dist-info → inspect_ai-0.3.96.dist-info}/WHEEL +1 -1
  73. {inspect_ai-0.3.94.dist-info → inspect_ai-0.3.96.dist-info}/entry_points.txt +0 -0
  74. {inspect_ai-0.3.94.dist-info → inspect_ai-0.3.96.dist-info}/licenses/LICENSE +0 -0
  75. {inspect_ai-0.3.94.dist-info → inspect_ai-0.3.96.dist-info}/top_level.txt +0 -0
@@ -23080,7 +23080,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
23080
23080
  pendingSampleSummaries: void 0,
23081
23081
  loadedLog: void 0,
23082
23082
  // Filter state
23083
- filter: {},
23083
+ filter: "",
23084
+ filterError: void 0,
23084
23085
  epoch: "all",
23085
23086
  sort: kDefaultSort,
23086
23087
  score: void 0,
@@ -23115,6 +23116,14 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
23115
23116
  setFilter: (filter) => set2((state) => {
23116
23117
  state.log.filter = filter;
23117
23118
  }),
23119
+ setFilterError: (error2) => set2((state) => {
23120
+ state.log.filterError = error2;
23121
+ }),
23122
+ clearFilterError: () => {
23123
+ set2((state) => {
23124
+ state.log.filterError = void 0;
23125
+ });
23126
+ },
23118
23127
  setEpoch: (epoch) => set2((state) => {
23119
23128
  state.log.epoch = epoch;
23120
23129
  }),
@@ -23128,7 +23137,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
23128
23137
  state.log.scores = scores2;
23129
23138
  }),
23130
23139
  resetFiltering: () => set2((state) => {
23131
- state.log.filter = {};
23140
+ state.log.filter = "";
23141
+ state.log.filterError = void 0;
23132
23142
  state.log.epoch = "all";
23133
23143
  state.log.sort = kDefaultSort;
23134
23144
  state.log.score = void 0;
@@ -24422,12 +24432,12 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
24422
24432
  }, [callback]);
24423
24433
  return elementRef;
24424
24434
  };
24425
- const expandableBordered = "_expandableBordered_1wpxz_1";
24426
- const expandableCollapsed = "_expandableCollapsed_1wpxz_13";
24427
- const moreToggle = "_moreToggle_1wpxz_17";
24428
- const bordered = "_bordered_1wpxz_24";
24429
- const moreToggleContainer = "_moreToggleContainer_1wpxz_28";
24430
- const moreToggleButton = "_moreToggleButton_1wpxz_39";
24435
+ const expandableBordered = "_expandableBordered_59eal_1";
24436
+ const expandableCollapsed = "_expandableCollapsed_59eal_13";
24437
+ const moreToggle = "_moreToggle_59eal_17";
24438
+ const bordered = "_bordered_59eal_24";
24439
+ const moreToggleContainer = "_moreToggleContainer_59eal_28";
24440
+ const moreToggleButton = "_moreToggleButton_59eal_39";
24431
24441
  const styles$1j = {
24432
24442
  expandableBordered,
24433
24443
  expandableCollapsed,
@@ -24440,15 +24450,16 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
24440
24450
  ({ id, collapse, border, lines = 15, children: children2, className: className2 }) => {
24441
24451
  const [collapsed, setCollapsed] = useCollapsedState(id, collapse);
24442
24452
  const [showToggle, setShowToggle] = reactExports.useState(false);
24443
- const lineHeightRef = reactExports.useRef(0);
24453
+ const baseFontSizeRef = reactExports.useRef(0);
24444
24454
  const checkOverflow = reactExports.useCallback(
24445
24455
  (entry2) => {
24446
24456
  const element = entry2.target;
24447
- if (!lineHeightRef.current) {
24457
+ if (baseFontSizeRef.current === 0) {
24448
24458
  const computedStyle = window.getComputedStyle(element);
24449
- lineHeightRef.current = parseInt(computedStyle.lineHeight) || 16;
24459
+ const rootFontSize = parseFloat(computedStyle.fontSize);
24460
+ baseFontSizeRef.current = rootFontSize;
24450
24461
  }
24451
- const maxCollapsedHeight = lines * lineHeightRef.current;
24462
+ const maxCollapsedHeight = baseFontSizeRef.current * lines;
24452
24463
  const contentHeight = element.scrollHeight;
24453
24464
  setShowToggle(contentHeight > maxCollapsedHeight);
24454
24465
  },
@@ -41943,7 +41954,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
41943
41954
  has_retries: sample2.retries !== void 0 && sample2.retries > 0
41944
41955
  };
41945
41956
  };
41946
- const scoreFilterItems = (evalDescriptor) => {
41957
+ const sampleFilterItems = (evalDescriptor) => {
41947
41958
  const items = [];
41948
41959
  const bannedShortNames = bannedShortScoreNames(evalDescriptor.scores);
41949
41960
  const valueToString = (value2) => typeof value2 === "string" ? `"${value2}"` : String(value2);
@@ -42090,7 +42101,8 @@ categories: ${categories.join(" ")}`;
42090
42101
  }
42091
42102
  };
42092
42103
  const filterSamples = (evalDescriptor, samples, filterValue) => {
42093
- var error2 = void 0;
42104
+ let error2 = void 0;
42105
+ let errorCount = 0;
42094
42106
  const result2 = samples.filter((sample2) => {
42095
42107
  if (filterValue) {
42096
42108
  const { matches, error: sampleError } = filterExpression(
@@ -42099,12 +42111,15 @@ categories: ${categories.join(" ")}`;
42099
42111
  filterValue
42100
42112
  );
42101
42113
  error2 || (error2 = sampleError);
42114
+ if (sampleError) {
42115
+ errorCount++;
42116
+ }
42102
42117
  return matches;
42103
42118
  } else {
42104
42119
  return true;
42105
42120
  }
42106
42121
  });
42107
- return { result: result2, error: error2 };
42122
+ return { result: result2, error: error2, allErrors: errorCount === samples.length };
42108
42123
  };
42109
42124
  const flex$1 = "_flex_1kye9_1";
42110
42125
  const label$7 = "_label_1kye9_5";
@@ -42381,12 +42396,22 @@ categories: ${categories.join(" ")}`;
42381
42396
  const evalDescriptor = useEvalDescriptor();
42382
42397
  const sampleSummaries = useSampleSummaries();
42383
42398
  const filter = useStore((state) => state.log.filter);
42399
+ const setFilterError = useStore((state) => state.logActions.setFilterError);
42400
+ const clearFilterError = useStore(
42401
+ (state) => state.logActions.clearFilterError
42402
+ );
42384
42403
  const epoch = useStore((state) => state.log.epoch);
42385
42404
  const sort = useStore((state) => state.log.sort);
42386
42405
  const samplesDescriptor = useSampleDescriptor();
42387
42406
  const score2 = useScore();
42388
42407
  return reactExports.useMemo(() => {
42389
- const prefiltered = evalDescriptor && filter.value ? filterSamples(evalDescriptor, sampleSummaries, filter.value).result : sampleSummaries;
42408
+ const { result: result2, error: error2, allErrors } = evalDescriptor && filter ? filterSamples(evalDescriptor, sampleSummaries, filter) : { result: sampleSummaries, error: void 0, allErrors: false };
42409
+ if (error2 && allErrors) {
42410
+ setFilterError(error2);
42411
+ } else {
42412
+ clearFilterError();
42413
+ }
42414
+ const prefiltered = error2 === void 0 || !allErrors ? result2 : sampleSummaries;
42390
42415
  const filtered = epoch && epoch !== "all" ? prefiltered.filter((sample2) => epoch === String(sample2.epoch)) : prefiltered;
42391
42416
  const sorted = samplesDescriptor ? sortSamples(sort, filtered, samplesDescriptor, score2) : filtered;
42392
42417
  return [...sorted];
@@ -42394,6 +42419,8 @@ categories: ${categories.join(" ")}`;
42394
42419
  evalDescriptor,
42395
42420
  sampleSummaries,
42396
42421
  filter,
42422
+ setFilterError,
42423
+ clearFilterError,
42397
42424
  epoch,
42398
42425
  sort,
42399
42426
  samplesDescriptor,
@@ -44311,7 +44338,7 @@ categories: ${categories.join(" ")}`;
44311
44338
  if (!evalDescriptor) {
44312
44339
  return null;
44313
44340
  }
44314
- const items = scoreFilterItems(evalDescriptor);
44341
+ const items = sampleFilterItems(evalDescriptor);
44315
44342
  return /* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: { position: "relative" }, children: Array.from(items).map((item2, index2, array) => /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
44316
44343
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { title: item2.tooltip, children: item2.canonicalName }),
44317
44344
  index2 < array.length - 1 ? ", " : ""
@@ -81301,14 +81328,6 @@ Supported expressions:
81301
81328
  overflow: "hidden"
81302
81329
  }
81303
81330
  });
81304
- const getFilteringResult = (evalDescriptor, sampleSummaries, filterValue) => {
81305
- const { result: result2, error: error2 } = filterSamples(
81306
- evalDescriptor,
81307
- sampleSummaries,
81308
- filterValue
81309
- );
81310
- return { numSamples: result2.length, error: error2 };
81311
- };
81312
81331
  const ensureOneLine = (tr2) => {
81313
81332
  const newDoc = tr2.newDoc.toString();
81314
81333
  if (!newDoc.includes("\n")) return tr2;
@@ -81337,11 +81356,7 @@ Supported expressions:
81337
81356
  }
81338
81357
  ];
81339
81358
  };
81340
- const SampleFilter = ({
81341
- samples,
81342
- scoreFilter,
81343
- setScoreFilter
81344
- }) => {
81359
+ const SampleFilter = () => {
81345
81360
  const editorRef = reactExports.useRef(null);
81346
81361
  const editorViewRef = reactExports.useRef(null);
81347
81362
  const linterCompartment = reactExports.useRef(new Compartment());
@@ -81349,41 +81364,50 @@ Supported expressions:
81349
81364
  const updateListenerCompartment = reactExports.useRef(new Compartment());
81350
81365
  const evalDescriptor = useEvalDescriptor();
81351
81366
  const filterItems = reactExports.useMemo(
81352
- () => evalDescriptor ? scoreFilterItems(evalDescriptor) : [],
81367
+ () => evalDescriptor ? sampleFilterItems(evalDescriptor) : [],
81353
81368
  [evalDescriptor]
81354
81369
  );
81355
- const [filteringResultInstant, setFilteringResultInstant] = reactExports.useState(null);
81356
- const handleFocus = (event, view) => {
81370
+ const filter = useStore((state) => state.log.filter);
81371
+ const filterError = useStore((state) => state.log.filterError);
81372
+ const setFilter = useStore((state) => state.logActions.setFilter);
81373
+ const handleFocus = reactExports.useCallback((event, view) => {
81357
81374
  if (event.isTrusted && view.state.doc.toString() === "") {
81358
81375
  setTimeout(() => startCompletion(view), 0);
81359
81376
  }
81360
- };
81361
- const makeAutocompletion = () => autocompletion({
81362
- override: [(context) => getCompletions(context, filterItems)],
81363
- activateOnCompletion: (c2) => c2.label.endsWith(" ")
81364
- });
81365
- const makeLinter = () => linter((view) => getLints(view, filteringResultInstant == null ? void 0 : filteringResultInstant.error));
81366
- const makeUpdateListener = () => EditorView.updateListener.of((update) => {
81367
- if (update.docChanged && evalDescriptor) {
81368
- const newValue = update.state.doc.toString();
81369
- const filteringResult = getFilteringResult(
81370
- evalDescriptor,
81371
- samples,
81372
- newValue
81373
- );
81374
- if (!filteringResult.error) {
81375
- setScoreFilter({ value: newValue });
81377
+ }, []);
81378
+ const makeAutocompletion = reactExports.useCallback(
81379
+ () => autocompletion({
81380
+ override: [(context) => getCompletions(context, filterItems)],
81381
+ activateOnCompletion: (c2) => c2.label.endsWith(" ")
81382
+ }),
81383
+ []
81384
+ );
81385
+ const makeLinter = reactExports.useCallback(
81386
+ () => linter((view) => getLints(view, filterError)),
81387
+ [filterError]
81388
+ );
81389
+ const debounceSetFilter = reactExports.useCallback(
81390
+ debounce$1((value2) => {
81391
+ setFilter(value2);
81392
+ }, 200),
81393
+ [setFilter]
81394
+ );
81395
+ const makeUpdateListener = reactExports.useCallback(
81396
+ () => EditorView.updateListener.of((update) => {
81397
+ if (update.docChanged && evalDescriptor) {
81398
+ const newValue = update.state.doc.toString();
81399
+ debounceSetFilter(newValue);
81376
81400
  }
81377
- setFilteringResultInstant(filteringResult);
81378
- }
81379
- });
81401
+ }),
81402
+ [setFilter]
81403
+ );
81380
81404
  reactExports.useEffect(() => {
81381
81405
  var _a2;
81382
81406
  (_a2 = editorViewRef.current) == null ? void 0 : _a2.destroy();
81383
81407
  editorViewRef.current = new EditorView({
81384
81408
  parent: editorRef.current ?? void 0,
81385
81409
  state: EditorState.create({
81386
- doc: scoreFilter.value || "",
81410
+ doc: filter || "",
81387
81411
  extensions: [
81388
81412
  minimalSetup,
81389
81413
  bracketMatching(),
@@ -81406,20 +81430,15 @@ Supported expressions:
81406
81430
  reactExports.useEffect(() => {
81407
81431
  if (!editorViewRef.current) return;
81408
81432
  const currentValue = editorViewRef.current.state.doc.toString();
81409
- if (scoreFilter.value === currentValue) return;
81410
- if (evalDescriptor) {
81411
- setFilteringResultInstant(
81412
- getFilteringResult(evalDescriptor, samples, scoreFilter.value || "")
81413
- );
81414
- }
81433
+ if (filter === currentValue) return;
81415
81434
  editorViewRef.current.dispatch({
81416
81435
  changes: {
81417
81436
  from: 0,
81418
81437
  to: currentValue.length,
81419
- insert: scoreFilter.value || ""
81438
+ insert: filter || ""
81420
81439
  }
81421
81440
  });
81422
- }, [evalDescriptor, scoreFilter.value]);
81441
+ }, [filter]);
81423
81442
  reactExports.useEffect(() => {
81424
81443
  var _a2;
81425
81444
  (_a2 = editorViewRef.current) == null ? void 0 : _a2.dispatch({
@@ -81437,7 +81456,7 @@ Supported expressions:
81437
81456
  (_a2 = editorViewRef.current) == null ? void 0 : _a2.dispatch({
81438
81457
  effects: linterCompartment.current.reconfigure(makeLinter())
81439
81458
  });
81440
- }, [filteringResultInstant == null ? void 0 : filteringResultInstant.error]);
81459
+ }, [filterError]);
81441
81460
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { display: "flex" }, children: [
81442
81461
  /* @__PURE__ */ jsxRuntimeExports.jsx(
81443
81462
  "span",
@@ -81456,10 +81475,7 @@ Supported expressions:
81456
81475
  "div",
81457
81476
  {
81458
81477
  ref: editorRef,
81459
- className: clsx(
81460
- (filteringResultInstant == null ? void 0 : filteringResultInstant.error) && "filter-pending",
81461
- styles$9.input
81462
- )
81478
+ className: clsx(filterError && "filter-pending", styles$9.input)
81463
81479
  }
81464
81480
  ),
81465
81481
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -81487,20 +81503,16 @@ Supported expressions:
81487
81503
  score: score2,
81488
81504
  setScore
81489
81505
  }) => {
81490
- const scorers = scores2.reduce((accum, scorer2) => {
81491
- if (!accum.find((sc) => {
81492
- return scorer2.scorer === sc.scorer;
81493
- })) {
81494
- accum.push(scorer2);
81495
- }
81496
- return accum;
81497
- }, []);
81498
- const handleSelectScore = reactExports.useCallback(
81499
- (index2) => {
81500
- setScore(scores2[index2]);
81501
- },
81502
- [setScore, scores2]
81503
- );
81506
+ const scorers = reactExports.useMemo(() => {
81507
+ return scores2.reduce((accum, scorer2) => {
81508
+ if (!accum.find((sc) => {
81509
+ return scorer2.scorer === sc.scorer;
81510
+ })) {
81511
+ accum.push(scorer2);
81512
+ }
81513
+ return accum;
81514
+ }, []);
81515
+ }, [scores2]);
81504
81516
  if (scorers.length === 1) {
81505
81517
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: styles$8.flex, children: [
81506
81518
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -81520,8 +81532,8 @@ Supported expressions:
81520
81532
  ScoreSelector,
81521
81533
  {
81522
81534
  scores: scores2,
81523
- selectedIndex: scoreIndex(scores2, score2),
81524
- setSelectedIndex: handleSelectScore
81535
+ selectedScore: score2,
81536
+ setSelectedScore: setScore
81525
81537
  }
81526
81538
  )
81527
81539
  ] });
@@ -81548,8 +81560,8 @@ Supported expressions:
81548
81560
  ScorerSelector,
81549
81561
  {
81550
81562
  scorers,
81551
- selectedIndex: scorerIndex(scorers, score2),
81552
- setSelectedIndex: handleSelectScore
81563
+ selectedScore: score2,
81564
+ setSelectedScore: setScore
81553
81565
  }
81554
81566
  ),
81555
81567
  scorerScores.length > 1 ? /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -81557,8 +81569,8 @@ Supported expressions:
81557
81569
  {
81558
81570
  className: clsx(styles$8.secondSel),
81559
81571
  scores: scorerScores,
81560
- selectedIndex: scoreIndex(scorerScores, score2),
81561
- setSelectedIndex: handleSelectScore
81572
+ selectedScore: score2,
81573
+ setSelectedScore: setScore
81562
81574
  }
81563
81575
  ) : void 0
81564
81576
  ] });
@@ -81566,17 +81578,20 @@ Supported expressions:
81566
81578
  };
81567
81579
  const ScoreSelector = ({
81568
81580
  scores: scores2,
81569
- selectedIndex,
81570
- setSelectedIndex,
81581
+ selectedScore,
81582
+ setSelectedScore,
81571
81583
  className: className2
81572
81584
  }) => {
81573
81585
  const handleChange = reactExports.useCallback(
81574
81586
  (e) => {
81575
81587
  const sel = e.target;
81576
- setSelectedIndex(sel.selectedIndex);
81588
+ setSelectedScore(scores2[sel.selectedIndex]);
81577
81589
  },
81578
- [setSelectedIndex]
81590
+ [setSelectedScore, scores2]
81579
81591
  );
81592
+ const index2 = scores2.findIndex((sc) => {
81593
+ return selectedScore && sc.name === selectedScore.name && sc.scorer === selectedScore.scorer;
81594
+ });
81580
81595
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
81581
81596
  "select",
81582
81597
  {
@@ -81587,7 +81602,7 @@ Supported expressions:
81587
81602
  className2
81588
81603
  ),
81589
81604
  "aria-label": ".select-scorer-label",
81590
- value: scores2[selectedIndex].name,
81605
+ value: scores2[index2].name,
81591
81606
  onChange: handleChange,
81592
81607
  children: scores2.map((score2) => {
81593
81608
  return /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: score2.name, children: score2.name }, score2.name);
@@ -81597,22 +81612,25 @@ Supported expressions:
81597
81612
  };
81598
81613
  const ScorerSelector = ({
81599
81614
  scorers,
81600
- selectedIndex,
81601
- setSelectedIndex
81615
+ selectedScore,
81616
+ setSelectedScore
81602
81617
  }) => {
81603
81618
  const handleChange = reactExports.useCallback(
81604
81619
  (e) => {
81605
81620
  const sel = e.target;
81606
- setSelectedIndex(sel.selectedIndex);
81621
+ setSelectedScore(scorers[sel.selectedIndex]);
81607
81622
  },
81608
- [setSelectedIndex]
81623
+ [setSelectedScore, scorers]
81609
81624
  );
81625
+ const index2 = scorers.findIndex((sc) => {
81626
+ return selectedScore && sc.scorer === selectedScore.scorer;
81627
+ });
81610
81628
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
81611
81629
  "select",
81612
81630
  {
81613
81631
  className: clsx("form-select", "form-select-sm", "text-size-smaller"),
81614
81632
  "aria-label": ".epoch-filter-label",
81615
- value: scorers[selectedIndex].scorer,
81633
+ value: scorers[index2].scorer,
81616
81634
  onChange: handleChange,
81617
81635
  children: scorers.map((scorer2) => {
81618
81636
  return /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: scorer2.scorer, children: scorer2.scorer }, scorer2.scorer);
@@ -81620,16 +81638,8 @@ Supported expressions:
81620
81638
  }
81621
81639
  );
81622
81640
  };
81623
- const scoreIndex = (scores2, score2) => scores2.findIndex((sc) => {
81624
- return score2 && sc.name === score2.name && sc.scorer === score2.scorer;
81625
- });
81626
- const scorerIndex = (scores2, score2) => scores2.findIndex((sc) => {
81627
- return score2 && sc.scorer === score2.scorer;
81628
- });
81629
- const SampleTools = ({ samples }) => {
81641
+ const SampleTools = () => {
81630
81642
  const selectedLogSummary = useStore((state) => state.log.selectedLogSummary);
81631
- const filter = useStore((state) => state.log.filter);
81632
- const setFilter = useStore((state) => state.logActions.setFilter);
81633
81643
  const scores2 = useScores();
81634
81644
  const score2 = useScore();
81635
81645
  const setScore = useStore((state) => state.logActions.setScore);
@@ -81639,14 +81649,7 @@ Supported expressions:
81639
81649
  const setSort = useStore((state) => state.logActions.setSort);
81640
81650
  const epochs = (selectedLogSummary == null ? void 0 : selectedLogSummary.eval.config.epochs) || 1;
81641
81651
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
81642
- /* @__PURE__ */ jsxRuntimeExports.jsx(
81643
- SampleFilter,
81644
- {
81645
- samples,
81646
- scoreFilter: filter,
81647
- setScoreFilter: setFilter
81648
- }
81649
- ),
81652
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SampleFilter, {}),
81650
81653
  (scores2 == null ? void 0 : scores2.length) > 1 ? /* @__PURE__ */ jsxRuntimeExports.jsx(SelectScorer, { scores: scores2, score: score2, setScore }) : void 0,
81651
81654
  epochs > 1 ? /* @__PURE__ */ jsxRuntimeExports.jsx(EpochFilter, { epoch, setEpoch, epochs }) : void 0,
81652
81655
  /* @__PURE__ */ jsxRuntimeExports.jsx(SortFilter, { sort, setSort, epochs })
@@ -82342,13 +82345,7 @@ Supported expressions:
82342
82345
  running: evalStatus === "started"
82343
82346
  },
82344
82347
  tools: () => !samplesDescriptor ? void 0 : totalSampleCount === 1 ? [/* @__PURE__ */ jsxRuntimeExports.jsx(ScoreFilterTools, {})] : [
82345
- /* @__PURE__ */ jsxRuntimeExports.jsx(
82346
- SampleTools,
82347
- {
82348
- samples: sampleSummaries || []
82349
- },
82350
- "sample-tools"
82351
- ),
82348
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SampleTools, {}, "sample-tools"),
82352
82349
  evalStatus === "started" && !streamSamples && /* @__PURE__ */ jsxRuntimeExports.jsx(
82353
82350
  ToolButton,
82354
82351
  {
@@ -86,7 +86,7 @@
86
86
  "prismjs": "^1.30.0",
87
87
  "react": "^19.0.0",
88
88
  "react-dom": "^19.0.0",
89
- "react-router-dom": "^7.5.2",
89
+ "react-router-dom": "^7.5.3",
90
90
  "react-virtuoso": "^4.12.6",
91
91
  "zustand": "^5.0.3"
92
92
  }
@@ -8,7 +8,7 @@ import {
8
8
  EvalStats,
9
9
  } from "../../../@types/log";
10
10
  import { EvalDescriptor } from "../../../app/samples/descriptor/types";
11
- import { scoreFilterItems } from "../../../app/samples/sample-tools/filters";
11
+ import { sampleFilterItems } from "../../../app/samples/sample-tools/filters";
12
12
  import { ExpandablePanel } from "../../../components/ExpandablePanel";
13
13
  import { LabeledValue } from "../../../components/LabeledValue";
14
14
  import { useEvalDescriptor } from "../../../state/hooks";
@@ -181,7 +181,7 @@ const ScorerSummary: FC<ScoreSummaryProps> = ({ evalDescriptor }) => {
181
181
  return null;
182
182
  }
183
183
 
184
- const items = scoreFilterItems(evalDescriptor);
184
+ const items = sampleFilterItems(evalDescriptor);
185
185
  return (
186
186
  <span style={{ position: "relative" }}>
187
187
  {Array.from(items).map((item, index, array) => (
@@ -50,10 +50,7 @@ export const useSamplesTabConfig = (
50
50
  : totalSampleCount === 1
51
51
  ? [<ScoreFilterTools />]
52
52
  : [
53
- <SampleTools
54
- samples={sampleSummaries || []}
55
- key="sample-tools"
56
- />,
53
+ <SampleTools key="sample-tools" />,
57
54
  evalStatus === "started" && !streamSamples && (
58
55
  <ToolButton
59
56
  key="refresh"
@@ -1,6 +1,5 @@
1
1
  import { FC } from "react";
2
2
  import { Fragment } from "react/jsx-runtime";
3
- import { SampleSummary } from "../../client/api/types";
4
3
  import { useScore, useScores } from "../../state/hooks";
5
4
  import { useStore } from "../../state/store";
6
5
  import { EpochFilter } from "./sample-tools/EpochFilter";
@@ -8,16 +7,11 @@ import { SampleFilter } from "./sample-tools/sample-filter/SampleFilter";
8
7
  import { SelectScorer } from "./sample-tools/SelectScorer";
9
8
  import { SortFilter } from "./sample-tools/SortFilter";
10
9
 
11
- interface SampleToolsProps {
12
- samples: SampleSummary[];
13
- }
10
+ interface SampleToolsProps {}
14
11
 
15
- export const SampleTools: FC<SampleToolsProps> = ({ samples }) => {
12
+ export const SampleTools: FC<SampleToolsProps> = () => {
16
13
  const selectedLogSummary = useStore((state) => state.log.selectedLogSummary);
17
14
 
18
- const filter = useStore((state) => state.log.filter);
19
- const setFilter = useStore((state) => state.logActions.setFilter);
20
-
21
15
  const scores = useScores();
22
16
  const score = useScore();
23
17
  const setScore = useStore((state) => state.logActions.setScore);
@@ -29,11 +23,7 @@ export const SampleTools: FC<SampleToolsProps> = ({ samples }) => {
29
23
  const epochs = selectedLogSummary?.eval.config.epochs || 1;
30
24
  return (
31
25
  <Fragment>
32
- <SampleFilter
33
- samples={samples}
34
- scoreFilter={filter}
35
- setScoreFilter={setFilter}
36
- />
26
+ <SampleFilter />
37
27
  {scores?.length > 1 ? (
38
28
  <SelectScorer scores={scores} score={score} setScore={setScore} />
39
29
  ) : undefined}