inspect-ai 0.3.108__py3-none-any.whl → 0.3.109__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 (141) hide show
  1. inspect_ai/_eval/task/log.py +1 -1
  2. inspect_ai/_eval/task/run.py +1 -1
  3. inspect_ai/_util/dateutil.py +40 -0
  4. inspect_ai/_view/schema.py +11 -0
  5. inspect_ai/_view/www/CLAUDE.md +1 -1
  6. inspect_ai/_view/www/dist/assets/index.css +2068 -1796
  7. inspect_ai/_view/www/dist/assets/index.js +7951 -3643
  8. inspect_ai/_view/www/package.json +3 -2
  9. inspect_ai/_view/www/src/@types/log.d.ts +5 -5
  10. inspect_ai/_view/www/src/app/App.css +71 -4
  11. inspect_ai/_view/www/src/app/App.tsx +7 -0
  12. inspect_ai/_view/www/src/app/appearance/icons.ts +18 -2
  13. inspect_ai/_view/www/src/app/content/RenderedContent.tsx +7 -9
  14. inspect_ai/_view/www/src/app/log-list/LogItem.ts +18 -0
  15. inspect_ai/_view/www/src/app/log-list/LogListFooter.module.css +55 -0
  16. inspect_ai/_view/www/src/app/log-list/LogListFooter.tsx +67 -0
  17. inspect_ai/_view/www/src/app/log-list/LogPager.module.css +29 -0
  18. inspect_ai/_view/www/src/app/log-list/LogPager.tsx +134 -0
  19. inspect_ai/_view/www/src/app/log-list/LogsFilterInput.module.css +5 -0
  20. inspect_ai/_view/www/src/app/log-list/LogsFilterInput.tsx +31 -0
  21. inspect_ai/_view/www/src/app/log-list/LogsPanel.module.css +12 -0
  22. inspect_ai/_view/www/src/app/log-list/LogsPanel.tsx +178 -0
  23. inspect_ai/_view/www/src/app/log-list/grid/LogListGrid.module.css +115 -0
  24. inspect_ai/_view/www/src/app/log-list/grid/LogListGrid.tsx +304 -0
  25. inspect_ai/_view/www/src/app/log-list/grid/columns/CompletedDate.module.css +6 -0
  26. inspect_ai/_view/www/src/app/log-list/grid/columns/CompletedDate.tsx +64 -0
  27. inspect_ai/_view/www/src/app/log-list/grid/columns/EmptyCell.module.css +3 -0
  28. inspect_ai/_view/www/src/app/log-list/grid/columns/EmptyCell.tsx +7 -0
  29. inspect_ai/_view/www/src/app/log-list/grid/columns/FileName.module.css +20 -0
  30. inspect_ai/_view/www/src/app/log-list/grid/columns/FileName.tsx +52 -0
  31. inspect_ai/_view/www/src/app/log-list/grid/columns/Icon.module.css +11 -0
  32. inspect_ai/_view/www/src/app/log-list/grid/columns/Icon.tsx +35 -0
  33. inspect_ai/_view/www/src/app/log-list/grid/columns/Model.module.css +6 -0
  34. inspect_ai/_view/www/src/app/log-list/grid/columns/Model.tsx +34 -0
  35. inspect_ai/_view/www/src/app/log-list/grid/columns/Score.module.css +6 -0
  36. inspect_ai/_view/www/src/app/log-list/grid/columns/Score.tsx +61 -0
  37. inspect_ai/_view/www/src/app/log-list/grid/columns/Status.module.css +15 -0
  38. inspect_ai/_view/www/src/app/log-list/grid/columns/Status.tsx +95 -0
  39. inspect_ai/_view/www/src/app/log-list/grid/columns/Task.module.css +20 -0
  40. inspect_ai/_view/www/src/app/log-list/grid/columns/Task.tsx +50 -0
  41. inspect_ai/_view/www/src/app/log-list/grid/columns/columns.ts +27 -0
  42. inspect_ai/_view/www/src/app/log-view/LogView.tsx +2 -5
  43. inspect_ai/_view/www/src/app/log-view/LogViewContainer.tsx +4 -30
  44. inspect_ai/_view/www/src/app/log-view/LogViewLayout.tsx +5 -30
  45. inspect_ai/_view/www/src/app/log-view/tabs/TaskTab.tsx +4 -7
  46. inspect_ai/_view/www/src/app/log-view/{navbar → title-view}/PrimaryBar.module.css +2 -0
  47. inspect_ai/_view/www/src/app/log-view/{navbar → title-view}/PrimaryBar.tsx +3 -31
  48. inspect_ai/_view/www/src/app/log-view/{navbar → title-view}/ResultsPanel.tsx +7 -57
  49. inspect_ai/_view/www/src/app/log-view/{navbar → title-view}/ScoreGrid.tsx +2 -2
  50. inspect_ai/_view/www/src/app/log-view/{navbar → title-view}/SecondaryBar.tsx +7 -1
  51. inspect_ai/_view/www/src/app/log-view/{navbar/Navbar.tsx → title-view/TitleView.tsx} +3 -6
  52. inspect_ai/_view/www/src/app/navbar/Navbar.module.css +57 -0
  53. inspect_ai/_view/www/src/app/navbar/Navbar.tsx +117 -0
  54. inspect_ai/_view/www/src/app/navbar/useBreadcrumbTruncation.ts +128 -0
  55. inspect_ai/_view/www/src/app/plan/DatasetDetailView.tsx +3 -3
  56. inspect_ai/_view/www/src/app/plan/DetailStep.tsx +6 -6
  57. inspect_ai/_view/www/src/app/plan/PlanDetailView.module.css +1 -0
  58. inspect_ai/_view/www/src/app/plan/ScorerDetailView.tsx +1 -1
  59. inspect_ai/_view/www/src/app/routing/AppRouter.tsx +28 -4
  60. inspect_ai/_view/www/src/app/routing/RouteDispatcher.tsx +28 -0
  61. inspect_ai/_view/www/src/app/routing/sampleNavigation.ts +76 -7
  62. inspect_ai/_view/www/src/app/routing/url.ts +193 -20
  63. inspect_ai/_view/www/src/app/samples/SampleDisplay.tsx +3 -17
  64. inspect_ai/_view/www/src/app/samples/descriptor/score/ScoreDescriptor.tsx +1 -1
  65. inspect_ai/_view/www/src/app/samples/transcript/SubtaskEventView.tsx +2 -2
  66. inspect_ai/_view/www/src/app/samples/transcript/TranscriptPanel.tsx +2 -2
  67. inspect_ai/_view/www/src/app/samples/transcript/outline/tree-visitors.ts +5 -0
  68. inspect_ai/_view/www/src/app/samples/transcript/transform/treeify.ts +26 -10
  69. inspect_ai/_view/www/src/app/types.ts +21 -1
  70. inspect_ai/_view/www/src/client/api/api-http.ts +2 -1
  71. inspect_ai/_view/www/src/client/api/api-shared.ts +0 -32
  72. inspect_ai/_view/www/src/client/api/client-api.ts +1 -1
  73. inspect_ai/_view/www/src/client/remote/remoteLogFile.ts +38 -6
  74. inspect_ai/_view/www/src/components/TextInput.module.css +45 -0
  75. inspect_ai/_view/www/src/components/TextInput.tsx +52 -0
  76. inspect_ai/_view/www/src/constants.ts +18 -0
  77. inspect_ai/_view/www/src/img/inspect-16.svg +10 -0
  78. inspect_ai/_view/www/src/img/inspect-back.svg +5 -0
  79. inspect_ai/_view/www/src/img/inspect-file.svg +26 -0
  80. inspect_ai/_view/www/src/img/inspect-forward.svg +7 -0
  81. inspect_ai/_view/www/src/img/inspect-home.svg +18 -0
  82. inspect_ai/_view/www/src/scoring/metrics.ts +75 -0
  83. inspect_ai/_view/www/src/scoring/scores.ts +19 -0
  84. inspect_ai/_view/www/src/scoring/types.ts +11 -0
  85. inspect_ai/_view/www/src/state/appSlice.ts +27 -7
  86. inspect_ai/_view/www/src/state/clientEvents.ts +73 -0
  87. inspect_ai/_view/www/src/state/clientEventsService.ts +105 -0
  88. inspect_ai/_view/www/src/state/hooks.ts +118 -1
  89. inspect_ai/_view/www/src/state/log.ts +19 -0
  90. inspect_ai/_view/www/src/state/logPolling.ts +3 -1
  91. inspect_ai/_view/www/src/state/logSlice.ts +9 -0
  92. inspect_ai/_view/www/src/state/logsSlice.ts +157 -15
  93. inspect_ai/_view/www/src/state/samplePolling.ts +4 -2
  94. inspect_ai/_view/www/src/tests/utils/path.test.ts +3 -3
  95. inspect_ai/_view/www/src/utils/evallog.ts +31 -0
  96. inspect_ai/_view/www/src/utils/path.ts +28 -0
  97. inspect_ai/_view/www/src/utils/uri.ts +49 -0
  98. inspect_ai/_view/www/yarn.lock +54 -17
  99. inspect_ai/analysis/beta/_dataframe/util.py +106 -10
  100. inspect_ai/log/_recorders/buffer/database.py +55 -16
  101. inspect_ai/model/_model.py +1 -1
  102. inspect_ai/model/_providers/providers.py +2 -2
  103. inspect_ai/model/_providers/vertex.py +3 -0
  104. inspect_ai/tool/_mcp/_mcp.py +6 -1
  105. inspect_ai/tool/_mcp/sampling.py +8 -1
  106. inspect_ai/tool/_tools/_bash_session.py +3 -6
  107. inspect_ai/tool/_tools/_web_browser/_web_browser.py +3 -8
  108. inspect_ai/util/_anyio.py +12 -3
  109. {inspect_ai-0.3.108.dist-info → inspect_ai-0.3.109.dist-info}/METADATA +2 -2
  110. {inspect_ai-0.3.108.dist-info → inspect_ai-0.3.109.dist-info}/RECORD +124 -94
  111. inspect_ai/_util/datetime.py +0 -10
  112. inspect_ai/_view/www/src/app/content/MetaDataView.module.css +0 -35
  113. inspect_ai/_view/www/src/app/content/MetaDataView.tsx +0 -101
  114. inspect_ai/_view/www/src/app/log-view/utils.ts +0 -34
  115. inspect_ai/_view/www/src/app/sidebar/EvalStatus.module.css +0 -15
  116. inspect_ai/_view/www/src/app/sidebar/EvalStatus.tsx +0 -72
  117. inspect_ai/_view/www/src/app/sidebar/LogDirectoryTitleView.module.css +0 -16
  118. inspect_ai/_view/www/src/app/sidebar/LogDirectoryTitleView.tsx +0 -70
  119. inspect_ai/_view/www/src/app/sidebar/Sidebar.module.css +0 -77
  120. inspect_ai/_view/www/src/app/sidebar/Sidebar.tsx +0 -119
  121. inspect_ai/_view/www/src/app/sidebar/SidebarLogEntry.module.css +0 -29
  122. inspect_ai/_view/www/src/app/sidebar/SidebarLogEntry.tsx +0 -96
  123. inspect_ai/_view/www/src/app/sidebar/SidebarScoreView.module.css +0 -23
  124. inspect_ai/_view/www/src/app/sidebar/SidebarScoreView.tsx +0 -44
  125. inspect_ai/_view/www/src/app/sidebar/SidebarScoresView.module.css +0 -35
  126. inspect_ai/_view/www/src/app/sidebar/SidebarScoresView.tsx +0 -63
  127. inspect_ai/_view/www/src/state/logsPolling.ts +0 -118
  128. /inspect_ai/_view/www/src/app/log-view/{navbar → title-view}/ModelRolesView.module.css +0 -0
  129. /inspect_ai/_view/www/src/app/log-view/{navbar → title-view}/ModelRolesView.tsx +0 -0
  130. /inspect_ai/_view/www/src/app/log-view/{navbar → title-view}/ResultsPanel.module.css +0 -0
  131. /inspect_ai/_view/www/src/app/log-view/{navbar → title-view}/RunningStatusPanel.module.css +0 -0
  132. /inspect_ai/_view/www/src/app/log-view/{navbar → title-view}/RunningStatusPanel.tsx +0 -0
  133. /inspect_ai/_view/www/src/app/log-view/{navbar → title-view}/ScoreGrid.module.css +0 -0
  134. /inspect_ai/_view/www/src/app/log-view/{navbar → title-view}/SecondaryBar.module.css +0 -0
  135. /inspect_ai/_view/www/src/app/log-view/{navbar → title-view}/StatusPanel.module.css +0 -0
  136. /inspect_ai/_view/www/src/app/log-view/{navbar → title-view}/StatusPanel.tsx +0 -0
  137. /inspect_ai/_view/www/src/app/log-view/{navbar/Navbar.module.css → title-view/TitleView.module.css} +0 -0
  138. {inspect_ai-0.3.108.dist-info → inspect_ai-0.3.109.dist-info}/WHEEL +0 -0
  139. {inspect_ai-0.3.108.dist-info → inspect_ai-0.3.109.dist-info}/entry_points.txt +0 -0
  140. {inspect_ai-0.3.108.dist-info → inspect_ai-0.3.109.dist-info}/licenses/LICENSE +0 -0
  141. {inspect_ai-0.3.108.dist-info → inspect_ai-0.3.109.dist-info}/top_level.txt +0 -0
@@ -1,35 +0,0 @@
1
- .container {
2
- display: flex;
3
- flex-direction: row;
4
- flex-wrap: wrap;
5
- justify-content: flex-end;
6
- row-gap: 1em;
7
- }
8
-
9
- .scoreWrapper {
10
- display: flex;
11
- flex-direction: column;
12
- align-items: center;
13
- margin-left: 1em;
14
- }
15
-
16
- .metricName {
17
- width: 100%;
18
- font-weight: 300;
19
- border-bottom: solid var(--bs-border-color) 1px;
20
- }
21
-
22
- .metricReducer {
23
- width: 100%;
24
- font-weight: 300;
25
- }
26
-
27
- .metricValues {
28
- display: grid;
29
- grid-template-columns: max-content max-content;
30
- grid-gap: 0 0.3rem;
31
- }
32
-
33
- .metricValue {
34
- font-weight: 600;
35
- }
@@ -1,63 +0,0 @@
1
- import clsx from "clsx";
2
- import { FC, Fragment } from "react";
3
- import { Scores } from "../../@types/log";
4
- import { formatPrettyDecimal } from "../../utils/format";
5
- import { metricDisplayName } from "../log-view/utils";
6
- import styles from "./SidebarScoresView.module.css";
7
-
8
- interface SidebarScoresProps {
9
- scores: Scores;
10
- }
11
-
12
- export const SidebarScoresView: FC<SidebarScoresProps> = ({ scores }) => {
13
- const showReducer = scores.findIndex((score) => !!score.reducer) !== -1;
14
- return (
15
- <div className={styles.container}>
16
- {scores.map((score, idx) => {
17
- const name = score.name;
18
- const reducer = score.reducer;
19
- return (
20
- <div className={styles.scoreWrapper} key={`scorer-${name}-${idx}`}>
21
- <div
22
- className={clsx(
23
- "text-style-secondary",
24
- "text-style-label",
25
- "text-size-small",
26
- styles.metricName,
27
- )}
28
- >
29
- {name}
30
- </div>
31
- {showReducer ? (
32
- <div
33
- className={clsx(
34
- "text-size-small",
35
- "text-style-label",
36
- "text-style-secondary",
37
- styles.metricReducer,
38
- )}
39
- >
40
- {reducer || "default"}
41
- </div>
42
- ) : (
43
- ""
44
- )}
45
- <div className={clsx("text-size-small", styles.metricValues)}>
46
- {Object.keys(score.metrics).map((key) => {
47
- const metric = score.metrics[key];
48
- return (
49
- <Fragment key={key}>
50
- <div className={clsx()}>{metricDisplayName(metric)}</div>
51
- <div className={styles.metricValue}>
52
- {formatPrettyDecimal(metric.value)}
53
- </div>
54
- </Fragment>
55
- );
56
- })}
57
- </div>
58
- </div>
59
- );
60
- })}
61
- </div>
62
- );
63
- };
@@ -1,118 +0,0 @@
1
- import { EvalLogHeader, LogFiles } from "../client/api/types";
2
- import { createLogger } from "../utils/logger";
3
- import { createPolling } from "../utils/polling";
4
- import { StoreState } from "./store";
5
-
6
- // The logger
7
- const log = createLogger("logsPolling");
8
-
9
- export function createLogsPolling(
10
- get: () => StoreState,
11
- _set: (fn: (state: StoreState) => void) => void,
12
- ) {
13
- // Tracks the currently polling instance
14
- let currentPolling: ReturnType<typeof createPolling> | null = null;
15
-
16
- // Are we active
17
- let isActive = true;
18
-
19
- // Function to start polling for a specific log file
20
- const startPolling = (logFiles: LogFiles) => {
21
- // Get the api
22
- const api = get().api;
23
- if (!api) {
24
- throw new Error("Failed to start polling - no API");
25
- }
26
-
27
- // Stop any existing polling
28
- if (currentPolling) {
29
- currentPolling.stop();
30
- }
31
-
32
- // note that we're active
33
- isActive = true;
34
-
35
- log.debug("LOADING HEADERS");
36
- get().logsActions.setHeadersLoading(true);
37
-
38
- // Group into chunks
39
- const chunkSize = 8;
40
- const fileLists: string[][] = [];
41
-
42
- for (let i = 0; i < logFiles.files.length; i += chunkSize) {
43
- const chunk = logFiles.files
44
- .slice(i, i + chunkSize)
45
- .map((logFile) => logFile.name);
46
- fileLists.push(chunk);
47
- }
48
- const totalLen = fileLists.length;
49
-
50
- // Create a new polling instance
51
- currentPolling = createPolling(
52
- `LogHeaders`,
53
- async () => {
54
- if (!isActive) {
55
- get().logsActions.setHeadersLoading(false);
56
- return false; // Stop polling
57
- }
58
-
59
- log.debug(`POLL HEADERS`);
60
-
61
- const currentFileList = fileLists.shift();
62
- if (currentFileList) {
63
- log.debug(
64
- `LOADING ${totalLen - fileLists.length} of ${totalLen} CHUNKS`,
65
- );
66
- const headers = await api.get_log_headers(currentFileList);
67
- const updatedHeaders: Record<string, EvalLogHeader> = {};
68
-
69
- headers.forEach((header, index) => {
70
- const logFile = currentFileList[index];
71
- updatedHeaders[logFile] = header as EvalLogHeader;
72
- });
73
- get().logsActions.updateLogHeaders(updatedHeaders);
74
- } else {
75
- // Stop polling
76
- get().logsActions.setHeadersLoading(false);
77
- return false;
78
- }
79
-
80
- if (!isActive) {
81
- get().logsActions.setHeadersLoading(false);
82
- return false; // Stop polling
83
- }
84
-
85
- // Continue polling by default
86
- return true;
87
- },
88
- {
89
- maxRetries: 10,
90
- interval: 5,
91
- },
92
- );
93
-
94
- // Start the polling
95
- currentPolling.start();
96
- };
97
-
98
- // Stop polling
99
- const stopPolling = () => {
100
- if (currentPolling) {
101
- currentPolling.stop();
102
- currentPolling = null;
103
- }
104
- };
105
-
106
- // Method to call when component unmounts
107
- const cleanup = () => {
108
- log.debug(`CLEANUP`);
109
- isActive = false;
110
- stopPolling();
111
- };
112
-
113
- return {
114
- startPolling,
115
- stopPolling,
116
- cleanup,
117
- };
118
- }