inspect-ai 0.3.90__py3-none-any.whl → 0.3.92__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 (370) hide show
  1. inspect_ai/_cli/common.py +13 -0
  2. inspect_ai/_cli/eval.py +44 -0
  3. inspect_ai/_display/textual/widgets/samples.py +49 -4
  4. inspect_ai/_display/textual/widgets/vscode.py +4 -2
  5. inspect_ai/_eval/eval.py +41 -28
  6. inspect_ai/_eval/evalset.py +4 -0
  7. inspect_ai/_eval/loader.py +4 -5
  8. inspect_ai/_eval/registry.py +1 -1
  9. inspect_ai/_eval/run.py +6 -3
  10. inspect_ai/_eval/task/log.py +6 -0
  11. inspect_ai/_eval/task/run.py +108 -41
  12. inspect_ai/_eval/task/sandbox.py +19 -5
  13. inspect_ai/_util/_async.py +1 -1
  14. inspect_ai/_util/constants.py +1 -0
  15. inspect_ai/_util/environ.py +32 -0
  16. inspect_ai/_util/file.py +8 -1
  17. inspect_ai/_util/httpx.py +105 -22
  18. inspect_ai/_util/registry.py +83 -9
  19. inspect_ai/_util/text.py +81 -17
  20. inspect_ai/_util/transcript.py +9 -6
  21. inspect_ai/_util/vscode.py +7 -2
  22. inspect_ai/_view/schema.py +1 -1
  23. inspect_ai/_view/www/babel.config.js +11 -0
  24. inspect_ai/_view/www/dist/assets/index.css +3640 -3563
  25. inspect_ai/_view/www/dist/assets/index.js +59204 -52519
  26. inspect_ai/_view/www/eslint.config.mjs +10 -1
  27. inspect_ai/_view/www/jest.config.mjs +21 -0
  28. inspect_ai/_view/www/log-schema.json +111 -2
  29. inspect_ai/_view/www/package.json +19 -5
  30. inspect_ai/_view/www/src/{types → @types}/log.d.ts +95 -32
  31. inspect_ai/_view/www/{App.css → src/app/App.css} +22 -14
  32. inspect_ai/_view/www/src/app/App.tsx +168 -0
  33. inspect_ai/_view/www/src/{AppErrorBoundary.tsx → app/AppErrorBoundary.tsx} +1 -1
  34. inspect_ai/_view/www/src/{appearance → app/appearance}/icons.ts +1 -0
  35. inspect_ai/_view/www/src/{metadata → app/content}/RenderedContent.tsx +5 -5
  36. inspect_ai/_view/www/src/{workspace/WorkSpaceView.tsx → app/log-view/LogView.tsx} +59 -40
  37. inspect_ai/_view/www/src/app/log-view/LogViewContainer.tsx +159 -0
  38. inspect_ai/_view/www/src/app/log-view/LogViewLayout.tsx +109 -0
  39. inspect_ai/_view/www/src/{workspace → app/log-view}/error/TaskErrorPanel.tsx +3 -3
  40. inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/ModelRolesView.tsx +1 -1
  41. inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/Navbar.tsx +4 -4
  42. inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/PrimaryBar.tsx +8 -8
  43. inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/ResultsPanel.tsx +6 -6
  44. inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/RunningStatusPanel.tsx +1 -1
  45. inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/ScoreGrid.tsx +1 -1
  46. inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/SecondaryBar.tsx +8 -8
  47. inspect_ai/_view/www/src/{workspace → app/log-view}/tabs/InfoTab.tsx +35 -6
  48. inspect_ai/_view/www/src/app/log-view/tabs/JsonTab.tsx +136 -0
  49. inspect_ai/_view/www/src/{workspace → app/log-view}/tabs/SamplesTab.tsx +82 -73
  50. inspect_ai/_view/www/src/{workspace → app/log-view}/tabs/grouping.ts +3 -3
  51. inspect_ai/_view/www/src/{workspace → app/log-view}/tabs/types.ts +1 -1
  52. inspect_ai/_view/www/src/{plan → app/plan}/DatasetDetailView.tsx +2 -2
  53. inspect_ai/_view/www/src/{plan → app/plan}/DetailStep.tsx +1 -1
  54. inspect_ai/_view/www/src/{plan → app/plan}/ModelCard.tsx +4 -4
  55. inspect_ai/_view/www/src/{plan → app/plan}/PlanCard.tsx +2 -2
  56. inspect_ai/_view/www/src/{plan → app/plan}/PlanDetailView.tsx +5 -5
  57. inspect_ai/_view/www/src/{plan → app/plan}/SolverDetailView.tsx +1 -1
  58. inspect_ai/_view/www/src/app/routing/AppRouter.tsx +58 -0
  59. inspect_ai/_view/www/src/app/routing/navigationHooks.ts +182 -0
  60. inspect_ai/_view/www/src/app/routing/url.ts +43 -0
  61. inspect_ai/_view/www/src/{samples → app/samples}/InlineSampleDisplay.tsx +11 -27
  62. inspect_ai/_view/www/src/{samples → app/samples}/SampleDialog.tsx +36 -40
  63. inspect_ai/_view/www/src/{samples → app/samples}/SampleDisplay.module.css +4 -0
  64. inspect_ai/_view/www/src/{samples → app/samples}/SampleDisplay.tsx +116 -49
  65. inspect_ai/_view/www/src/{samples → app/samples}/SampleSummaryView.module.css +1 -1
  66. inspect_ai/_view/www/src/{samples → app/samples}/SampleSummaryView.tsx +29 -26
  67. inspect_ai/_view/www/src/{samples → app/samples}/SamplesTools.tsx +3 -3
  68. inspect_ai/_view/www/src/{samples → app/samples}/chat/ChatMessage.module.css +5 -2
  69. inspect_ai/_view/www/src/{samples → app/samples}/chat/ChatMessage.tsx +12 -4
  70. inspect_ai/_view/www/src/{samples → app/samples}/chat/ChatMessageRenderer.tsx +3 -3
  71. inspect_ai/_view/www/src/{samples → app/samples}/chat/ChatMessageRow.tsx +6 -1
  72. inspect_ai/_view/www/src/{samples → app/samples}/chat/ChatView.tsx +4 -2
  73. inspect_ai/_view/www/src/{samples → app/samples}/chat/ChatViewVirtualList.tsx +5 -3
  74. inspect_ai/_view/www/src/app/samples/chat/MessageContent.module.css +12 -0
  75. inspect_ai/_view/www/src/{samples → app/samples}/chat/MessageContent.tsx +11 -10
  76. inspect_ai/_view/www/src/app/samples/chat/MessageContents.module.css +7 -0
  77. inspect_ai/_view/www/src/{samples → app/samples}/chat/MessageContents.tsx +14 -8
  78. inspect_ai/_view/www/src/{samples → app/samples}/chat/messages.ts +2 -2
  79. inspect_ai/_view/www/src/app/samples/chat/tools/ToolCallView.module.css +7 -0
  80. inspect_ai/_view/www/src/{samples → app/samples}/chat/tools/ToolCallView.tsx +26 -27
  81. inspect_ai/_view/www/src/app/samples/chat/tools/ToolInput.module.css +19 -0
  82. inspect_ai/_view/www/src/{samples → app/samples}/chat/tools/ToolInput.tsx +3 -3
  83. inspect_ai/_view/www/src/{samples → app/samples}/chat/tools/ToolOutput.module.css +1 -0
  84. inspect_ai/_view/www/src/{samples → app/samples}/chat/tools/ToolOutput.tsx +1 -1
  85. inspect_ai/_view/www/src/{samples → app/samples}/chat/tools/ToolTitle.module.css +4 -0
  86. inspect_ai/_view/www/src/{samples → app/samples}/chat/tools/ToolTitle.tsx +2 -2
  87. inspect_ai/_view/www/src/{samples → app/samples}/chat/tools/tool.ts +1 -1
  88. inspect_ai/_view/www/src/app/samples/chat/types.ts +1 -0
  89. inspect_ai/_view/www/src/{samples → app/samples}/descriptor/samplesDescriptor.tsx +38 -15
  90. inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/BooleanScoreDescriptor.tsx +1 -1
  91. inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/CategoricalScoreDescriptor.tsx +2 -2
  92. inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/NumericScoreDescriptor.tsx +3 -3
  93. inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/ObjectScoreDescriptor.tsx +4 -4
  94. inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/OtherScoreDescriptor.tsx +2 -2
  95. inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/PassFailScoreDescriptor.tsx +2 -2
  96. inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/ScoreDescriptor.tsx +1 -1
  97. inspect_ai/_view/www/src/{samples → app/samples}/descriptor/types.ts +4 -3
  98. inspect_ai/_view/www/src/{samples → app/samples}/error/SampleErrorView.module.css +2 -1
  99. inspect_ai/_view/www/src/{samples → app/samples}/list/SampleHeader.tsx +3 -0
  100. inspect_ai/_view/www/src/{samples → app/samples}/list/SampleList.tsx +47 -33
  101. inspect_ai/_view/www/src/{samples → app/samples}/list/SampleRow.module.css +16 -0
  102. inspect_ai/_view/www/src/{samples → app/samples}/list/SampleRow.tsx +47 -20
  103. inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/SelectScorer.tsx +1 -1
  104. inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/SortFilter.tsx +4 -4
  105. inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/filters.ts +8 -6
  106. inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/sample-filter/SampleFilter.tsx +4 -3
  107. inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/sample-filter/completions.ts +1 -1
  108. inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/sample-filter/language.ts +1 -0
  109. inspect_ai/_view/www/src/{samples → app/samples}/sampleDataAdapter.ts +3 -3
  110. inspect_ai/_view/www/src/{samples → app/samples}/sampleLimit.ts +1 -1
  111. inspect_ai/_view/www/src/{samples → app/samples}/scores/SampleScores.tsx +1 -1
  112. inspect_ai/_view/www/src/{samples → app/samples}/scores/SampleScoresGrid.tsx +12 -11
  113. inspect_ai/_view/www/src/{samples → app/samples}/scores/SampleScoresView.tsx +6 -6
  114. inspect_ai/_view/www/src/{samples → app/samples}/transcript/ApprovalEventView.tsx +1 -1
  115. inspect_ai/_view/www/src/{samples → app/samples}/transcript/ErrorEventView.tsx +3 -3
  116. inspect_ai/_view/www/src/{samples → app/samples}/transcript/InfoEventView.tsx +4 -4
  117. inspect_ai/_view/www/src/{samples → app/samples}/transcript/InputEventView.tsx +3 -3
  118. inspect_ai/_view/www/src/{samples → app/samples}/transcript/LoggerEventView.tsx +3 -3
  119. inspect_ai/_view/www/src/{samples → app/samples}/transcript/ModelEventView.module.css +13 -7
  120. inspect_ai/_view/www/src/{samples → app/samples}/transcript/ModelEventView.tsx +49 -21
  121. inspect_ai/_view/www/src/{samples → app/samples}/transcript/SampleInitEventView.tsx +11 -9
  122. inspect_ai/_view/www/src/{samples → app/samples}/transcript/SampleLimitEventView.tsx +1 -1
  123. inspect_ai/_view/www/src/{samples → app/samples}/transcript/SandboxEventView.tsx +8 -6
  124. inspect_ai/_view/www/src/{samples → app/samples}/transcript/ScoreEventView.tsx +4 -4
  125. inspect_ai/_view/www/src/{samples → app/samples}/transcript/StepEventView.tsx +11 -3
  126. inspect_ai/_view/www/src/{samples → app/samples}/transcript/SubtaskEventView.tsx +2 -2
  127. inspect_ai/_view/www/src/{samples → app/samples}/transcript/ToolEventView.tsx +2 -2
  128. inspect_ai/_view/www/src/{samples → app/samples}/transcript/TranscriptView.module.css +8 -7
  129. inspect_ai/_view/www/src/{samples → app/samples}/transcript/TranscriptView.tsx +32 -114
  130. inspect_ai/_view/www/src/{samples → app/samples}/transcript/TranscriptVirtualListComponent.module.css +6 -5
  131. inspect_ai/_view/www/src/{samples → app/samples}/transcript/TranscriptVirtualListComponent.tsx +14 -2
  132. inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventPanel.tsx +2 -2
  133. inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventTimingPanel.tsx +1 -1
  134. inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/utils.ts +1 -1
  135. inspect_ai/_view/www/src/{samples → app/samples}/transcript/state/StateEventRenderers.tsx +23 -21
  136. inspect_ai/_view/www/src/{samples → app/samples}/transcript/state/StateEventRenders.module.css +7 -0
  137. inspect_ai/_view/www/src/{samples → app/samples}/transcript/state/StateEventView.tsx +2 -2
  138. inspect_ai/_view/www/src/app/samples/transcript/transform/fixups.ts +142 -0
  139. inspect_ai/_view/www/src/app/samples/transcript/transform/treeify.ts +39 -0
  140. inspect_ai/_view/www/src/{samples → app/samples}/transcript/types.ts +1 -1
  141. inspect_ai/_view/www/src/{workspace → app}/sidebar/EvalStatus.tsx +1 -1
  142. inspect_ai/_view/www/src/app/sidebar/LogDirectoryTitleView.module.css +16 -0
  143. inspect_ai/_view/www/src/app/sidebar/LogDirectoryTitleView.tsx +70 -0
  144. inspect_ai/_view/www/src/{workspace → app}/sidebar/Sidebar.module.css +8 -0
  145. inspect_ai/_view/www/src/{workspace → app}/sidebar/Sidebar.tsx +35 -17
  146. inspect_ai/_view/www/src/{workspace → app}/sidebar/SidebarLogEntry.tsx +1 -1
  147. inspect_ai/_view/www/src/{workspace → app}/sidebar/SidebarScoreView.tsx +2 -2
  148. inspect_ai/_view/www/src/{workspace → app}/sidebar/SidebarScoresView.tsx +2 -2
  149. inspect_ai/_view/www/src/{types.ts → app/types.ts} +18 -11
  150. inspect_ai/_view/www/src/{usage → app/usage}/ModelTokenTable.tsx +1 -1
  151. inspect_ai/_view/www/src/{usage → app/usage}/ModelUsagePanel.tsx +2 -2
  152. inspect_ai/_view/www/src/{usage → app/usage}/TokenTable.tsx +1 -1
  153. inspect_ai/_view/www/src/{usage → app/usage}/UsageCard.tsx +6 -6
  154. inspect_ai/_view/www/src/{api → client/api}/api-browser.ts +2 -2
  155. inspect_ai/_view/www/src/{api → client/api}/api-http.ts +3 -3
  156. inspect_ai/_view/www/src/{api → client/api}/api-vscode.ts +2 -2
  157. inspect_ai/_view/www/src/{api → client/api}/client-api.ts +6 -5
  158. inspect_ai/_view/www/src/{api → client/api}/index.ts +2 -2
  159. inspect_ai/_view/www/src/{api → client/api}/types.ts +4 -1
  160. inspect_ai/_view/www/src/{logfile → client/remote}/remoteLogFile.ts +3 -3
  161. inspect_ai/_view/www/src/{storage → client/storage}/index.ts +11 -5
  162. inspect_ai/_view/www/src/components/Card.tsx +1 -1
  163. inspect_ai/_view/www/src/components/CopyButton.tsx +1 -1
  164. inspect_ai/_view/www/src/components/DownloadButton.tsx +1 -1
  165. inspect_ai/_view/www/src/components/ErrorPanel.tsx +1 -1
  166. inspect_ai/_view/www/src/components/{ExpandablePanel.css → ExpandablePanel.module.css} +14 -11
  167. inspect_ai/_view/www/src/components/ExpandablePanel.tsx +16 -10
  168. inspect_ai/_view/www/src/components/FindBand.tsx +1 -1
  169. inspect_ai/_view/www/src/components/JsonPanel.css +2 -2
  170. inspect_ai/_view/www/src/components/LargeModal.tsx +12 -1
  171. inspect_ai/_view/www/src/components/LightboxCarousel.tsx +1 -1
  172. inspect_ai/_view/www/src/components/MarkdownDiv.tsx +3 -1
  173. inspect_ai/_view/www/src/components/MessageBand.tsx +1 -1
  174. inspect_ai/_view/www/src/components/NoContentsPanel.tsx +1 -1
  175. inspect_ai/_view/www/src/constants.ts +10 -9
  176. inspect_ai/_view/www/src/index.tsx +27 -11
  177. inspect_ai/_view/www/src/state/appSlice.ts +44 -5
  178. inspect_ai/_view/www/src/state/hooks.ts +30 -7
  179. inspect_ai/_view/www/src/state/logSlice.ts +7 -5
  180. inspect_ai/_view/www/src/state/logsPolling.ts +1 -1
  181. inspect_ai/_view/www/src/state/logsSlice.ts +18 -13
  182. inspect_ai/_view/www/src/state/samplePolling.ts +12 -12
  183. inspect_ai/_view/www/src/state/sampleSlice.ts +3 -5
  184. inspect_ai/_view/www/src/state/sampleUtils.ts +1 -1
  185. inspect_ai/_view/www/src/{scoring/utils.ts → state/scoring.ts} +2 -2
  186. inspect_ai/_view/www/src/state/store.ts +9 -7
  187. inspect_ai/_view/www/src/state/utils.ts +1 -1
  188. inspect_ai/_view/www/src/tests/README.md +49 -0
  189. inspect_ai/_view/www/src/tests/__mocks__/fileMock.js +1 -0
  190. inspect_ai/_view/www/src/tests/__mocks__/styleMock.js +1 -0
  191. inspect_ai/_view/www/src/tests/setupTests.mjs +1 -0
  192. inspect_ai/_view/www/src/tests/utils/base64.test.ts +23 -0
  193. inspect_ai/_view/www/src/tests/utils/format.test.ts +127 -0
  194. inspect_ai/_view/www/src/tests/utils/path.test.ts +54 -0
  195. inspect_ai/_view/www/src/utils/format.ts +8 -2
  196. inspect_ai/_view/www/src/utils/path.ts +14 -2
  197. inspect_ai/_view/www/src/utils/polling.ts +1 -2
  198. inspect_ai/_view/www/src/utils/uri.ts +32 -0
  199. inspect_ai/_view/www/yarn.lock +3310 -382
  200. inspect_ai/agent/_handoff.py +6 -3
  201. inspect_ai/agent/_human/agent.py +5 -3
  202. inspect_ai/agent/_human/install.py +16 -7
  203. inspect_ai/agent/_human/panel.py +14 -1
  204. inspect_ai/agent/_human/service.py +5 -1
  205. inspect_ai/agent/_react.py +161 -128
  206. inspect_ai/agent/_types.py +15 -4
  207. inspect_ai/approval/_policy.py +2 -2
  208. inspect_ai/log/_file.py +30 -11
  209. inspect_ai/log/_log.py +7 -1
  210. inspect_ai/log/_recorders/eval.py +3 -0
  211. inspect_ai/log/_recorders/types.py +1 -0
  212. inspect_ai/log/_samples.py +4 -0
  213. inspect_ai/model/_call_tools.py +33 -17
  214. inspect_ai/model/_generate_config.py +10 -2
  215. inspect_ai/model/_model.py +41 -21
  216. inspect_ai/model/_model_output.py +2 -1
  217. inspect_ai/model/_openai.py +10 -8
  218. inspect_ai/model/_openai_responses.py +95 -42
  219. inspect_ai/model/_providers/anthropic.py +14 -12
  220. inspect_ai/model/_providers/google.py +191 -95
  221. inspect_ai/model/_providers/hf.py +1 -1
  222. inspect_ai/model/_providers/mistral.py +2 -3
  223. inspect_ai/model/_providers/openai.py +54 -17
  224. inspect_ai/model/_providers/openai_o1.py +1 -1
  225. inspect_ai/model/_providers/openai_responses.py +28 -16
  226. inspect_ai/model/_providers/openrouter.py +14 -0
  227. inspect_ai/model/_providers/providers.py +2 -2
  228. inspect_ai/model/_providers/util/chatapi.py +17 -7
  229. inspect_ai/model/_providers/vllm.py +1 -1
  230. inspect_ai/scorer/_metric.py +17 -1
  231. inspect_ai/scorer/_model.py +51 -6
  232. inspect_ai/scorer/_scorer.py +1 -1
  233. inspect_ai/solver/_human_agent.py +3 -0
  234. inspect_ai/solver/_plan.py +1 -1
  235. inspect_ai/solver/_solver.py +1 -1
  236. inspect_ai/solver/_use_tools.py +14 -8
  237. inspect_ai/tool/__init__.py +16 -1
  238. inspect_ai/tool/_json_rpc_helpers.py +285 -0
  239. inspect_ai/tool/_mcp/__init__.py +13 -0
  240. inspect_ai/tool/_mcp/_context.py +14 -0
  241. inspect_ai/tool/_mcp/_mcp.py +293 -0
  242. inspect_ai/tool/_mcp/_sandbox.py +104 -0
  243. inspect_ai/tool/_mcp/_types.py +31 -0
  244. inspect_ai/tool/_mcp/connection.py +60 -0
  245. inspect_ai/tool/_mcp/sampling.py +118 -0
  246. inspect_ai/tool/_mcp/server.py +112 -0
  247. inspect_ai/tool/_mcp/tools.py +34 -0
  248. inspect_ai/tool/_tool.py +13 -0
  249. inspect_ai/tool/_tool_def.py +24 -7
  250. inspect_ai/tool/_tool_support_helpers.py +129 -153
  251. inspect_ai/tool/_tools/_bash_session.py +11 -11
  252. inspect_ai/tool/_tools/_text_editor.py +6 -6
  253. inspect_ai/tool/_tools/_web_browser/_web_browser.py +8 -8
  254. inspect_ai/util/_anyio.py +31 -20
  255. inspect_ai/util/_json.py +20 -2
  256. inspect_ai/util/_sandbox/context.py +18 -7
  257. inspect_ai/util/_sandbox/docker/compose.py +1 -1
  258. inspect_ai/util/_sandbox/docker/docker.py +92 -21
  259. inspect_ai/util/_sandbox/environment.py +33 -2
  260. inspect_ai/util/_sandbox/events.py +2 -2
  261. inspect_ai/util/_sandbox/service.py +13 -3
  262. {inspect_ai-0.3.90.dist-info → inspect_ai-0.3.92.dist-info}/METADATA +6 -2
  263. inspect_ai-0.3.92.dist-info/RECORD +732 -0
  264. {inspect_ai-0.3.90.dist-info → inspect_ai-0.3.92.dist-info}/WHEEL +1 -1
  265. inspect_ai/_view/www/src/App.tsx +0 -316
  266. inspect_ai/_view/www/src/samples/chat/MessageContent.module.css +0 -4
  267. inspect_ai/_view/www/src/samples/chat/MessageContents.module.css +0 -3
  268. inspect_ai/_view/www/src/samples/chat/tools/ToolCallView.module.css +0 -3
  269. inspect_ai/_view/www/src/samples/chat/tools/ToolInput.module.css +0 -14
  270. inspect_ai/_view/www/src/workspace/WorkSpace.tsx +0 -292
  271. inspect_ai/_view/www/src/workspace/sidebar/LogDirectoryTitleView.module.css +0 -5
  272. inspect_ai/_view/www/src/workspace/sidebar/LogDirectoryTitleView.tsx +0 -57
  273. inspect_ai/_view/www/src/workspace/tabs/JsonTab.tsx +0 -43
  274. inspect_ai-0.3.90.dist-info/RECORD +0 -705
  275. /inspect_ai/_view/www/src/{types → @types}/asciicinema-player.d.ts +0 -0
  276. /inspect_ai/_view/www/src/{types → @types}/jsondiffpatch.d.ts +0 -0
  277. /inspect_ai/_view/www/src/{types → @types}/markdown-it-katex.d.ts +0 -0
  278. /inspect_ai/_view/www/src/{types → @types}/prism.d.ts +0 -0
  279. /inspect_ai/_view/www/src/{appearance → app/appearance}/colors.ts +0 -0
  280. /inspect_ai/_view/www/src/{appearance → app/appearance}/fonts.ts +0 -0
  281. /inspect_ai/_view/www/src/{appearance → app/appearance}/styles.ts +0 -0
  282. /inspect_ai/_view/www/src/{metadata → app/content}/MetaDataGrid.tsx +0 -0
  283. /inspect_ai/_view/www/src/{metadata → app/content}/MetaDataView.module.css +0 -0
  284. /inspect_ai/_view/www/src/{metadata → app/content}/MetaDataView.tsx +0 -0
  285. /inspect_ai/_view/www/src/{metadata → app/content}/MetadataGrid.module.css +0 -0
  286. /inspect_ai/_view/www/src/{metadata → app/content}/RenderedContent.module.css +0 -0
  287. /inspect_ai/_view/www/src/{metadata → app/content}/types.ts +0 -0
  288. /inspect_ai/_view/www/src/{workspace/WorkSpaceView.module.css → app/log-view/LogView.module.css} +0 -0
  289. /inspect_ai/_view/www/src/{workspace → app/log-view}/error/TaskErrorPanel.module.css +0 -0
  290. /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/ModelRolesView.module.css +0 -0
  291. /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/Navbar.module.css +0 -0
  292. /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/PrimaryBar.module.css +0 -0
  293. /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/ResultsPanel.module.css +0 -0
  294. /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/RunningStatusPanel.module.css +0 -0
  295. /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/ScoreGrid.module.css +0 -0
  296. /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/SecondaryBar.module.css +0 -0
  297. /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/StatusPanel.module.css +0 -0
  298. /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/StatusPanel.tsx +0 -0
  299. /inspect_ai/_view/www/src/{workspace → app/log-view}/tabs/InfoTab.module.css +0 -0
  300. /inspect_ai/_view/www/src/{workspace → app/log-view}/tabs/JsonTab.module.css +0 -0
  301. /inspect_ai/_view/www/src/{workspace → app/log-view}/tabs/RunningNoSamples.module.css +0 -0
  302. /inspect_ai/_view/www/src/{workspace → app/log-view}/tabs/RunningNoSamples.tsx +0 -0
  303. /inspect_ai/_view/www/src/{workspace → app/log-view}/types.ts +0 -0
  304. /inspect_ai/_view/www/src/{workspace → app/log-view}/utils.ts +0 -0
  305. /inspect_ai/_view/www/src/{plan → app/plan}/DatasetDetailView.module.css +0 -0
  306. /inspect_ai/_view/www/src/{plan → app/plan}/DetailStep.module.css +0 -0
  307. /inspect_ai/_view/www/src/{plan → app/plan}/ModelCard.module.css +0 -0
  308. /inspect_ai/_view/www/src/{plan → app/plan}/PlanDetailView.module.css +0 -0
  309. /inspect_ai/_view/www/src/{plan → app/plan}/ScorerDetailView.module.css +0 -0
  310. /inspect_ai/_view/www/src/{plan → app/plan}/ScorerDetailView.tsx +0 -0
  311. /inspect_ai/_view/www/src/{plan → app/plan}/SolverDetailView.module.css +0 -0
  312. /inspect_ai/_view/www/src/{samples → app/samples}/InlineSampleDisplay.module.css +0 -0
  313. /inspect_ai/_view/www/src/{samples → app/samples}/chat/ChatMessageRow.module.css +0 -0
  314. /inspect_ai/_view/www/src/{samples → app/samples}/chat/ChatViewVirtualList.module.css +0 -0
  315. /inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/BooleanScoreDescriptor.module.css +0 -0
  316. /inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/ObjectScoreDescriptor.module.css +0 -0
  317. /inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/PassFailScoreDescriptor.module.css +0 -0
  318. /inspect_ai/_view/www/src/{samples → app/samples}/error/FlatSampleErrorView.module.css +0 -0
  319. /inspect_ai/_view/www/src/{samples → app/samples}/error/FlatSampleErrorView.tsx +0 -0
  320. /inspect_ai/_view/www/src/{samples → app/samples}/error/SampleErrorView.tsx +0 -0
  321. /inspect_ai/_view/www/src/{samples → app/samples}/error/error.ts +0 -0
  322. /inspect_ai/_view/www/src/{samples → app/samples}/list/SampleFooter.module.css +0 -0
  323. /inspect_ai/_view/www/src/{samples → app/samples}/list/SampleFooter.tsx +0 -0
  324. /inspect_ai/_view/www/src/{samples → app/samples}/list/SampleHeader.module.css +0 -0
  325. /inspect_ai/_view/www/src/{samples → app/samples}/list/SampleList.module.css +0 -0
  326. /inspect_ai/_view/www/src/{samples → app/samples}/list/SampleSeparator.module.css +0 -0
  327. /inspect_ai/_view/www/src/{samples → app/samples}/list/SampleSeparator.tsx +0 -0
  328. /inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/EpochFilter.module.css +0 -0
  329. /inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/EpochFilter.tsx +0 -0
  330. /inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/SelectScorer.module.css +0 -0
  331. /inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/SortFilter.module.css +0 -0
  332. /inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/sample-filter/SampleFilter.module.css +0 -0
  333. /inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/sample-filter/tokenize.ts +0 -0
  334. /inspect_ai/_view/www/src/{samples → app/samples}/scores/SampleScores.module.css +0 -0
  335. /inspect_ai/_view/www/src/{samples → app/samples}/scores/SampleScoresGrid.module.css +0 -0
  336. /inspect_ai/_view/www/src/{samples → app/samples}/scores/SampleScoresView.module.css +0 -0
  337. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/InfoEventView.module.css +0 -0
  338. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/LoggerEventView.module.css +0 -0
  339. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/SampleInitEventView.module.css +0 -0
  340. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/SandboxEventView.module.css +0 -0
  341. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/ScoreEventView.module.css +0 -0
  342. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/SubtaskEventView.module.css +0 -0
  343. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/ToolEventView.module.css +0 -0
  344. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventNav.module.css +0 -0
  345. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventNav.tsx +0 -0
  346. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventNavs.module.css +0 -0
  347. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventNavs.tsx +0 -0
  348. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventPanel.module.css +0 -0
  349. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventProgressPanel.module.css +0 -0
  350. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventProgressPanel.tsx +0 -0
  351. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventRow.module.css +0 -0
  352. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventRow.tsx +0 -0
  353. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventSection.module.css +0 -0
  354. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventSection.tsx +0 -0
  355. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventTimingPanel.module.css +0 -0
  356. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/state/StateDiffView.tsx +0 -0
  357. /inspect_ai/_view/www/src/{samples → app/samples}/transcript/state/StateEventView.module.css +0 -0
  358. /inspect_ai/_view/www/src/{workspace → app}/sidebar/EvalStatus.module.css +0 -0
  359. /inspect_ai/_view/www/src/{workspace → app}/sidebar/SidebarLogEntry.module.css +0 -0
  360. /inspect_ai/_view/www/src/{workspace → app}/sidebar/SidebarScoreView.module.css +0 -0
  361. /inspect_ai/_view/www/src/{workspace → app}/sidebar/SidebarScoresView.module.css +0 -0
  362. /inspect_ai/_view/www/src/{usage → app/usage}/ModelUsagePanel.module.css +0 -0
  363. /inspect_ai/_view/www/src/{usage → app/usage}/TokenTable.module.css +0 -0
  364. /inspect_ai/_view/www/src/{usage → app/usage}/UsageCard.module.css +0 -0
  365. /inspect_ai/_view/www/src/{api → client/api}/api-shared.ts +0 -0
  366. /inspect_ai/_view/www/src/{api → client/api}/jsonrpc.ts +0 -0
  367. /inspect_ai/_view/www/src/{logfile → client/remote}/remoteZipFile.ts +0 -0
  368. {inspect_ai-0.3.90.dist-info → inspect_ai-0.3.92.dist-info}/entry_points.txt +0 -0
  369. {inspect_ai-0.3.90.dist-info → inspect_ai-0.3.92.dist-info}/licenses/LICENSE +0 -0
  370. {inspect_ai-0.3.90.dist-info → inspect_ai-0.3.92.dist-info}/top_level.txt +0 -0
@@ -1,12 +1,12 @@
1
- import { TabPanel, TabSet } from "../components/TabSet";
2
- import { MetaDataView } from "../metadata/MetaDataView";
1
+ import { TabPanel, TabSet } from "../../components/TabSet";
2
+ import { MetaDataView } from "../content/MetaDataView";
3
3
 
4
- import { escapeSelector } from "../utils/html";
5
- import { isVscode } from "../utils/vscode";
4
+ import { escapeSelector } from "../../utils/html";
5
+ import { isVscode } from "../../utils/vscode";
6
6
 
7
+ import { ANSIDisplay } from "../../components/AnsiDisplay";
8
+ import { ToolButton } from "../../components/ToolButton";
7
9
  import { ApplicationIcons } from "../appearance/icons";
8
- import { ANSIDisplay } from "../components/AnsiDisplay";
9
- import { ToolButton } from "../components/ToolButton";
10
10
 
11
11
  import clsx from "clsx";
12
12
  import {
@@ -17,10 +17,12 @@ import {
17
17
  useCallback,
18
18
  useMemo,
19
19
  } from "react";
20
- import { SampleSummary } from "../api/types";
21
- import { Card, CardBody, CardHeader } from "../components/Card";
22
- import { JSONPanel } from "../components/JsonPanel";
23
- import { NoContentsPanel } from "../components/NoContentsPanel";
20
+ import { useNavigate, useParams } from "react-router-dom";
21
+ import { EvalSample, Events } from "../../@types/log";
22
+ import { SampleSummary } from "../../client/api/types";
23
+ import { Card, CardBody, CardHeader } from "../../components/Card";
24
+ import { JSONPanel } from "../../components/JsonPanel";
25
+ import { NoContentsPanel } from "../../components/NoContentsPanel";
24
26
  import {
25
27
  kSampleErrorTabId,
26
28
  kSampleJsonTabId,
@@ -28,13 +30,13 @@ import {
28
30
  kSampleMetdataTabId,
29
31
  kSampleScoringTabId,
30
32
  kSampleTranscriptTabId,
31
- } from "../constants";
32
- import { useSampleSummaries } from "../state/hooks";
33
- import { useStore } from "../state/store";
34
- import { EvalSample, Events } from "../types/log";
33
+ } from "../../constants";
34
+ import { useFilteredSamples, useSampleData } from "../../state/hooks";
35
+ import { useStore } from "../../state/store";
36
+ import { formatTime } from "../../utils/format";
37
+ import { printHeadingHtml, printHtml } from "../../utils/print";
38
+ import { sampleUrl } from "../routing/url";
35
39
  import { ModelTokenTable } from "../usage/ModelTokenTable";
36
- import { formatTime } from "../utils/format";
37
- import { printHeadingHtml, printHtml } from "../utils/print";
38
40
  import { ChatViewVirtualList } from "./chat/ChatViewVirtualList";
39
41
  import { messagesFromEvents } from "./chat/messages";
40
42
  import styles from "./SampleDisplay.module.css";
@@ -44,32 +46,38 @@ import { TranscriptVirtualList } from "./transcript/TranscriptView";
44
46
 
45
47
  interface SampleDisplayProps {
46
48
  id: string;
47
- sample?: EvalSample;
48
- selectedTab?: string;
49
- setSelectedTab: (tab: string) => void;
50
49
  scrollRef: RefObject<HTMLDivElement | null>;
51
- runningEvents?: Events;
52
50
  }
53
51
 
54
52
  /**
55
53
  * Component to display a sample with relevant context and visibility control.
56
54
  */
57
- export const SampleDisplay: FC<SampleDisplayProps> = ({
58
- id,
59
- sample,
60
- selectedTab,
61
- setSelectedTab,
62
- scrollRef,
63
- runningEvents: runningSampleData,
64
- }) => {
55
+ export const SampleDisplay: FC<SampleDisplayProps> = ({ id, scrollRef }) => {
65
56
  // Tab ids
66
57
  const baseId = `sample-dialog`;
67
- const sampleSummaries = useSampleSummaries();
58
+ const filteredSamples = useFilteredSamples();
68
59
  const selectedSampleIndex = useStore(
69
60
  (state) => state.log.selectedSampleIndex,
70
61
  );
71
62
 
72
- const sampleSummary = sampleSummaries[selectedSampleIndex];
63
+ const sampleData = useSampleData();
64
+ const sample = sampleData.sample;
65
+ const runningSampleData = sampleData.running;
66
+
67
+ // Selected tab handling
68
+ const selectedTab = useStore((state) => state.app.tabs.sample);
69
+ const setSelectedTab = useStore((state) => state.appActions.setSampleTab);
70
+
71
+ // Get sample tab from URL if available
72
+ const { sampleTabId } = useParams<{ sampleTabId?: string }>();
73
+
74
+ // Use sampleTabId from URL if available, otherwise use the one from state
75
+ const effectiveSelectedTab = sampleTabId || selectedTab;
76
+
77
+ // Navigation hook for URL updates
78
+ const navigate = useNavigate();
79
+
80
+ const sampleSummary = filteredSamples[selectedSampleIndex];
73
81
 
74
82
  // Consolidate the events and messages into the proper list
75
83
  // whether running or not
@@ -84,13 +92,42 @@ export const SampleDisplay: FC<SampleDisplayProps> = ({
84
92
  }
85
93
  }, [sample?.messages, runningSampleData]);
86
94
 
95
+ // Get all URL parameters at component level
96
+ const {
97
+ logPath: urlLogPath,
98
+ tabId: urlTabId,
99
+ sampleId: urlSampleId,
100
+ epoch: urlEpoch,
101
+ } = useParams<{
102
+ logPath?: string;
103
+ tabId?: string;
104
+ sampleId?: string;
105
+ epoch?: string;
106
+ }>();
107
+
87
108
  // Tab selection
88
- const onSelectedTab = (e: MouseEvent<HTMLElement>) => {
89
- const el = e.currentTarget as HTMLElement;
90
- const id = el.id;
91
- setSelectedTab(id);
92
- return false;
93
- };
109
+ const onSelectedTab = useCallback(
110
+ (e: MouseEvent<HTMLElement>) => {
111
+ const el = e.currentTarget as HTMLElement;
112
+ const id = el.id;
113
+ setSelectedTab(id);
114
+
115
+ // Use navigation hook to update URL with tab
116
+ if (id !== sampleTabId && urlLogPath) {
117
+ const url = sampleUrl(urlLogPath, urlSampleId, urlEpoch, id);
118
+ navigate(url);
119
+ }
120
+ },
121
+ [
122
+ sampleTabId,
123
+ urlLogPath,
124
+ urlTabId,
125
+ urlSampleId,
126
+ urlEpoch,
127
+ navigate,
128
+ setSelectedTab,
129
+ ],
130
+ );
94
131
 
95
132
  const sampleMetadatas = metadataViewsForSample(`${baseId}-${id}`, sample);
96
133
 
@@ -134,7 +171,8 @@ export const SampleDisplay: FC<SampleDisplayProps> = ({
134
171
  title="Transcript"
135
172
  onSelected={onSelectedTab}
136
173
  selected={
137
- selectedTab === kSampleTranscriptTabId || selectedTab === undefined
174
+ effectiveSelectedTab === kSampleTranscriptTabId ||
175
+ effectiveSelectedTab === undefined
138
176
  }
139
177
  scrollable={false}
140
178
  >
@@ -152,7 +190,7 @@ export const SampleDisplay: FC<SampleDisplayProps> = ({
152
190
  className={clsx("sample-tab", styles.fullWidth, styles.chat)}
153
191
  title="Messages"
154
192
  onSelected={onSelectedTab}
155
- selected={selectedTab === kSampleMessagesTabId}
193
+ selected={effectiveSelectedTab === kSampleMessagesTabId}
156
194
  scrollable={false}
157
195
  >
158
196
  <ChatViewVirtualList
@@ -171,7 +209,7 @@ export const SampleDisplay: FC<SampleDisplayProps> = ({
171
209
  className="sample-tab"
172
210
  title="Scoring"
173
211
  onSelected={onSelectedTab}
174
- selected={selectedTab === kSampleScoringTabId}
212
+ selected={effectiveSelectedTab === kSampleScoringTabId}
175
213
  >
176
214
  <SampleScoresView sample={sample} />
177
215
  </TabPanel>
@@ -180,7 +218,7 @@ export const SampleDisplay: FC<SampleDisplayProps> = ({
180
218
  className={clsx("sample-tab")}
181
219
  title="Metadata"
182
220
  onSelected={onSelectedTab}
183
- selected={selectedTab === kSampleMetdataTabId}
221
+ selected={effectiveSelectedTab === kSampleMetdataTabId}
184
222
  >
185
223
  {sampleMetadatas.length > 0 ? (
186
224
  <div className={clsx(styles.metadataPanel)}>{sampleMetadatas}</div>
@@ -188,19 +226,48 @@ export const SampleDisplay: FC<SampleDisplayProps> = ({
188
226
  <NoContentsPanel text="No metadata" />
189
227
  )}
190
228
  </TabPanel>
191
- {sample?.error ? (
229
+ {sample?.error ||
230
+ (sample?.error_retries && sample?.error_retries.length > 0) ? (
192
231
  <TabPanel
193
232
  id={kSampleErrorTabId}
194
233
  className="sample-tab"
195
- title="Error"
234
+ title="Errors"
196
235
  onSelected={onSelectedTab}
197
- selected={selectedTab === kSampleErrorTabId}
236
+ selected={effectiveSelectedTab === kSampleErrorTabId}
198
237
  >
199
- <div className={clsx(styles.padded)}>
200
- <ANSIDisplay
201
- output={sample.error.traceback_ansi}
202
- className={clsx("text-size-small", styles.ansi)}
203
- />
238
+ <div className={clsx(styles.error)}>
239
+ {sample?.error ? (
240
+ <Card key={`sample-error}`}>
241
+ <CardHeader label={`Sample Error`} />
242
+ <CardBody>
243
+ <ANSIDisplay
244
+ output={sample.error.traceback_ansi}
245
+ className={clsx("text-size-small", styles.ansi)}
246
+ style={{
247
+ fontSize: "clamp(0.4rem, calc(0.15em + 1vw), 0.8rem)",
248
+ margin: "0.5em 0",
249
+ }}
250
+ />
251
+ </CardBody>
252
+ </Card>
253
+ ) : undefined}
254
+ {sample.error_retries?.map((retry, index) => {
255
+ return (
256
+ <Card key={`sample-retry-error-${index}`}>
257
+ <CardHeader label={`Attempt ${index + 1}`} />
258
+ <CardBody>
259
+ <ANSIDisplay
260
+ output={retry.traceback_ansi}
261
+ className={clsx("text-size-small", styles.ansi)}
262
+ style={{
263
+ fontSize: "clamp(0.4rem, calc(0.15em + 1vw), 0.8rem)",
264
+ margin: "0.5em 0",
265
+ }}
266
+ />
267
+ </CardBody>
268
+ </Card>
269
+ );
270
+ })}
204
271
  </div>
205
272
  </TabPanel>
206
273
  ) : null}
@@ -209,7 +276,7 @@ export const SampleDisplay: FC<SampleDisplayProps> = ({
209
276
  className={"sample-tab"}
210
277
  title="JSON"
211
278
  onSelected={onSelectedTab}
212
- selected={selectedTab === kSampleJsonTabId}
279
+ selected={effectiveSelectedTab === kSampleJsonTabId}
213
280
  >
214
281
  {!sample ? (
215
282
  <NoContentsPanel text="JSON not available" />
@@ -8,7 +8,7 @@
8
8
 
9
9
  .grid {
10
10
  display: grid;
11
- grid-column-gap: 0.5em;
11
+ grid-column-gap: 1em;
12
12
  border-bottom: solid var(--bs-border-color) 1px;
13
13
  margin-bottom: 1em;
14
14
  padding: 0em 1em 1em 1em;
@@ -1,12 +1,12 @@
1
1
  import clsx from "clsx";
2
- import { MarkdownDiv } from "../components/MarkdownDiv";
3
- import { EvalSample, Target, TotalTime, WorkingTime } from "../types/log";
4
- import { arrayToString, formatTime, inputString } from "../utils/format";
2
+ import { EvalSample, Target, TotalTime, WorkingTime } from "../../@types/log";
3
+ import { MarkdownDiv } from "../../components/MarkdownDiv";
4
+ import { arrayToString, formatTime, inputString } from "../../utils/format";
5
5
  import { FlatSampleError } from "./error/FlatSampleErrorView";
6
6
 
7
7
  import { FC, ReactNode } from "react";
8
- import { SampleSummary } from "../api/types";
9
- import { useSampleDescriptor, useScore } from "../state/hooks";
8
+ import { SampleSummary } from "../../client/api/types";
9
+ import { useSampleDescriptor, useScore } from "../../state/hooks";
10
10
  import styles from "./SampleSummaryView.module.css";
11
11
  import { SamplesDescriptor } from "./descriptor/samplesDescriptor";
12
12
 
@@ -30,6 +30,7 @@ interface SampleFields {
30
30
  target: Target;
31
31
  answer?: string;
32
32
  limit?: string;
33
+ retries?: number;
33
34
  working_time?: WorkingTime;
34
35
  total_time?: TotalTime;
35
36
  error?: string;
@@ -38,7 +39,7 @@ interface SampleFields {
38
39
  function isEvalSample(
39
40
  sample: SampleSummary | EvalSample,
40
41
  ): sample is EvalSample {
41
- return "choices" in sample && Array.isArray((sample as EvalSample).choices);
42
+ return "store" in sample;
42
43
  }
43
44
 
44
45
  const resolveSample = (
@@ -64,6 +65,9 @@ const resolveSample = (
64
65
  const working_time = isEvalSample(sample) ? sample.working_time : undefined;
65
66
  const total_time = isEvalSample(sample) ? sample.total_time : undefined;
66
67
  const error = isEvalSample(sample) ? sample.error?.message : undefined;
68
+ const retries = isEvalSample(sample)
69
+ ? sample.error_retries?.length
70
+ : sample.retries;
67
71
 
68
72
  return {
69
73
  id: sample.id,
@@ -71,6 +75,7 @@ const resolveSample = (
71
75
  target,
72
76
  answer,
73
77
  limit,
78
+ retries,
74
79
  working_time,
75
80
  total_time,
76
81
  error,
@@ -91,23 +96,12 @@ export const SampleSummaryView: FC<SampleSummaryViewProps> = ({
91
96
  }
92
97
  const fields = resolveSample(sample, sampleDescriptor);
93
98
 
94
- const input =
95
- sampleDescriptor?.messageShape.normalized.input > 0
96
- ? Math.max(0.15, sampleDescriptor.messageShape.normalized.input)
97
- : 0;
98
- const target =
99
- sampleDescriptor?.messageShape.normalized.target > 0
100
- ? Math.max(0.15, sampleDescriptor.messageShape.normalized.target)
101
- : 0;
102
- const answer =
103
- sampleDescriptor?.messageShape.normalized.answer > 0
104
- ? Math.max(0.15, sampleDescriptor.messageShape.normalized.answer)
105
- : 0;
106
99
  const limitSize =
107
100
  sampleDescriptor?.messageShape.normalized.limit > 0
108
101
  ? Math.max(0.15, sampleDescriptor.messageShape.normalized.limit)
109
102
  : 0;
110
- const timeSize = fields.working_time || fields.total_time ? 0.15 : 0;
103
+ const retrySize =
104
+ sampleDescriptor?.messageShape.normalized.retries > 0 ? 6 : 0;
111
105
  const idSize = Math.max(
112
106
  2,
113
107
  Math.min(10, sampleDescriptor?.messageShape.raw.id),
@@ -124,7 +118,7 @@ export const SampleSummaryView: FC<SampleSummaryViewProps> = ({
124
118
  columns.push({
125
119
  label: "Input",
126
120
  value: <MarkdownDiv markdown={fields.input.join(" ")} />,
127
- size: `${input}fr`,
121
+ size: `minmax(auto, 5fr)`,
128
122
  clamp: true,
129
123
  });
130
124
 
@@ -137,7 +131,7 @@ export const SampleSummaryView: FC<SampleSummaryViewProps> = ({
137
131
  className={clsx("no-last-para-padding", styles.target)}
138
132
  />
139
133
  ),
140
- size: `${target}fr`,
134
+ size: `minmax(auto, 3fr)`,
141
135
  clamp: true,
142
136
  });
143
137
  }
@@ -147,13 +141,13 @@ export const SampleSummaryView: FC<SampleSummaryViewProps> = ({
147
141
  label: "Answer",
148
142
  value: sample ? (
149
143
  <MarkdownDiv
150
- markdown={fields.answer}
144
+ markdown={fields.answer || ""}
151
145
  className={clsx("no-last-para-padding", styles.answer)}
152
146
  />
153
147
  ) : (
154
148
  ""
155
149
  ),
156
- size: `${answer}fr`,
150
+ size: `minmax(auto, 5fr)`,
157
151
  clamp: true,
158
152
  });
159
153
  }
@@ -169,7 +163,7 @@ export const SampleSummaryView: FC<SampleSummaryViewProps> = ({
169
163
  columns.push({
170
164
  label: "Time",
171
165
  value: formatTime(fields.total_time),
172
- size: `${timeSize}fr`,
166
+ size: `fit-content(10rem)`,
173
167
  center: true,
174
168
  title: toolTip(fields.working_time),
175
169
  });
@@ -179,7 +173,16 @@ export const SampleSummaryView: FC<SampleSummaryViewProps> = ({
179
173
  columns.push({
180
174
  label: "Limit",
181
175
  value: fields.limit,
182
- size: `${limitSize}fr`,
176
+ size: `fit-content(10rem)`,
177
+ center: true,
178
+ });
179
+ }
180
+
181
+ if (fields?.retries && retrySize > 0) {
182
+ columns.push({
183
+ label: "Retries",
184
+ value: fields.retries,
185
+ size: `fit-content(${retrySize}rem)`,
183
186
  center: true,
184
187
  });
185
188
  }
@@ -192,7 +195,7 @@ export const SampleSummaryView: FC<SampleSummaryViewProps> = ({
192
195
  sampleDescriptor?.evalDescriptor.score(sample, currentScore)?.render() ||
193
196
  ""
194
197
  ),
195
- size: "minmax(2em, 30em)",
198
+ size: "fit-content(15em)",
196
199
  center: true,
197
200
  });
198
201
 
@@ -1,8 +1,8 @@
1
1
  import { FC } from "react";
2
2
  import { Fragment } from "react/jsx-runtime";
3
- import { SampleSummary } from "../api/types";
4
- import { useScore, useScores } from "../state/hooks";
5
- import { useStore } from "../state/store";
3
+ import { SampleSummary } from "../../client/api/types";
4
+ import { useScore, useScores } from "../../state/hooks";
5
+ import { useStore } from "../../state/store";
6
6
  import { EpochFilter } from "./sample-tools/EpochFilter";
7
7
  import { SampleFilter } from "./sample-tools/sample-filter/SampleFilter";
8
8
  import { SelectScorer } from "./sample-tools/SelectScorer";
@@ -1,11 +1,14 @@
1
1
  .message {
2
2
  font-weight: 300;
3
- padding-bottom: 0.5em;
4
3
  margin-left: 0;
5
4
  margin-right: 0;
6
5
  white-space: normal;
7
6
  }
8
7
 
8
+ .padded {
9
+ padding-bottom: 1em;
10
+ }
11
+
9
12
  .systemRole {
10
13
  opacity: 0.7;
11
14
  }
@@ -15,7 +18,7 @@
15
18
  grid-template-columns: max-content auto;
16
19
  column-gap: 0.3em;
17
20
  font-weight: 500;
18
- margin-bottom: 0.5em;
21
+ margin-bottom: 0.3em;
19
22
  }
20
23
 
21
24
  .messageContents {
@@ -1,22 +1,24 @@
1
1
  import clsx from "clsx";
2
2
  import { FC } from "react";
3
- import ExpandablePanel from "../../components/ExpandablePanel";
4
3
  import {
5
4
  ChatMessageAssistant,
6
5
  ChatMessageSystem,
7
6
  ChatMessageTool,
8
7
  ChatMessageUser,
9
- } from "../../types/log";
8
+ } from "../../../@types/log";
9
+ import ExpandablePanel from "../../../components/ExpandablePanel";
10
10
  import styles from "./ChatMessage.module.css";
11
11
  import { MessageContents } from "./MessageContents";
12
12
  import { iconForMsg } from "./messages";
13
+ import { ChatViewToolCallStyle } from "./types";
13
14
 
14
15
  interface ChatMessageProps {
15
16
  id: string;
16
17
  message: ChatMessageAssistant | ChatMessageSystem | ChatMessageUser;
17
18
  toolMessages: ChatMessageTool[];
18
19
  indented?: boolean;
19
- toolCallStyle: "compact" | "complete";
20
+ toolCallStyle: ChatViewToolCallStyle;
21
+ padded?: boolean;
20
22
  }
21
23
 
22
24
  export const ChatMessage: FC<ChatMessageProps> = ({
@@ -25,6 +27,7 @@ export const ChatMessage: FC<ChatMessageProps> = ({
25
27
  toolMessages,
26
28
  indented,
27
29
  toolCallStyle,
30
+ padded,
28
31
  }) => {
29
32
  const collapse = message.role === "system" || message.role === "user";
30
33
  return (
@@ -33,6 +36,7 @@ export const ChatMessage: FC<ChatMessageProps> = ({
33
36
  message.role,
34
37
  "text-size-base",
35
38
  styles.message,
39
+ padded ? styles.padded : undefined,
36
40
  message.role === "system" ? styles.systemRole : undefined,
37
41
  )}
38
42
  >
@@ -46,7 +50,11 @@ export const ChatMessage: FC<ChatMessageProps> = ({
46
50
  indented ? styles.indented : undefined,
47
51
  )}
48
52
  >
49
- <ExpandablePanel id={`${id}-message`} collapse={collapse} lines={15}>
53
+ <ExpandablePanel
54
+ id={`${id}-message`}
55
+ collapse={collapse}
56
+ lines={collapse ? 15 : 25}
57
+ >
50
58
  <MessageContents
51
59
  id={`${id}-contents`}
52
60
  key={`${id}-contents`}
@@ -1,12 +1,12 @@
1
1
  import { FC } from "react";
2
- import { NavPills } from "../../components/NavPills.tsx";
3
- import { Buckets, ContentRenderer } from "../../metadata/types.ts";
4
2
  import {
5
3
  ChatMessageAssistant,
6
4
  ChatMessageSystem,
7
5
  ChatMessageTool,
8
6
  ChatMessageUser,
9
- } from "../../types/log";
7
+ } from "../../../@types/log";
8
+ import { NavPills } from "../../../components/NavPills.tsx";
9
+ import { Buckets, ContentRenderer } from "../../content/types.ts";
10
10
  import { ChatView } from "./ChatView";
11
11
 
12
12
  /**
@@ -4,13 +4,15 @@ import { ChatMessage } from "./ChatMessage";
4
4
  import { FC } from "react";
5
5
  import styles from "./ChatMessageRow.module.css";
6
6
  import { ResolvedMessage } from "./messages";
7
+ import { ChatViewToolCallStyle } from "./types";
7
8
 
8
9
  interface ChatMessageRowProps {
9
10
  parentName: string;
10
11
  number?: number;
11
12
  resolvedMessage: ResolvedMessage;
12
- toolCallStyle: "compact" | "complete";
13
+ toolCallStyle: ChatViewToolCallStyle;
13
14
  indented?: boolean;
15
+ padded?: boolean;
14
16
  }
15
17
 
16
18
  /**
@@ -22,6 +24,7 @@ export const ChatMessageRow: FC<ChatMessageRowProps> = ({
22
24
  resolvedMessage,
23
25
  toolCallStyle,
24
26
  indented,
27
+ padded,
25
28
  }) => {
26
29
  if (number) {
27
30
  return (
@@ -41,6 +44,7 @@ export const ChatMessageRow: FC<ChatMessageRowProps> = ({
41
44
  toolMessages={resolvedMessage.toolMessages}
42
45
  indented={indented}
43
46
  toolCallStyle={toolCallStyle}
47
+ padded={padded}
44
48
  />
45
49
  </div>
46
50
  );
@@ -52,6 +56,7 @@ export const ChatMessageRow: FC<ChatMessageRowProps> = ({
52
56
  toolMessages={resolvedMessage.toolMessages}
53
57
  indented={indented}
54
58
  toolCallStyle={toolCallStyle}
59
+ padded={padded}
55
60
  />
56
61
  );
57
62
  }
@@ -1,13 +1,14 @@
1
1
  import clsx from "clsx";
2
2
  import { FC } from "react";
3
- import { Messages } from "../../types/log";
3
+ import { Messages } from "../../../@types/log";
4
4
  import { ChatMessageRow } from "./ChatMessageRow";
5
5
  import { resolveMessages } from "./messages";
6
+ import { ChatViewToolCallStyle } from "./types";
6
7
 
7
8
  interface ChatViewProps {
8
9
  id?: string;
9
10
  messages: Messages;
10
- toolCallStyle?: "compact" | "complete";
11
+ toolCallStyle?: ChatViewToolCallStyle;
11
12
  title?: string;
12
13
  indented?: boolean;
13
14
  numbered?: boolean;
@@ -39,6 +40,7 @@ export const ChatView: FC<ChatViewProps> = ({
39
40
  resolvedMessage={msg}
40
41
  indented={indented}
41
42
  toolCallStyle={toolCallStyle}
43
+ padded={index < collapsedMessages.length - 1}
42
44
  />
43
45
  );
44
46
  })}
@@ -1,16 +1,17 @@
1
1
  import { FC, memo, ReactNode, RefObject, useMemo } from "react";
2
- import { Messages } from "../../types/log";
2
+ import { Messages } from "../../../@types/log";
3
3
 
4
4
  import { ChatMessageRow } from "./ChatMessageRow";
5
5
  import { ResolvedMessage, resolveMessages } from "./messages";
6
6
 
7
- import { LiveVirtualList } from "../../components/LiveVirtualList";
7
+ import { LiveVirtualList } from "../../../components/LiveVirtualList";
8
+ import { ChatViewToolCallStyle } from "./types";
8
9
 
9
10
  interface ChatViewVirtualListProps {
10
11
  id: string;
11
12
  className?: string | string[];
12
13
  messages: Messages;
13
- toolCallStyle: "compact" | "complete";
14
+ toolCallStyle: ChatViewToolCallStyle;
14
15
  indented: boolean;
15
16
  numbered?: boolean;
16
17
  scrollRef?: RefObject<HTMLDivElement | null>;
@@ -46,6 +47,7 @@ export const ChatViewVirtualList: FC<ChatViewVirtualListProps> = memo(
46
47
  resolvedMessage={item}
47
48
  indented={indented}
48
49
  toolCallStyle={toolCallStyle}
50
+ padded={index < collapsedMessages.length - 1}
49
51
  />
50
52
  );
51
53
  };
@@ -0,0 +1,12 @@
1
+ .contentImage {
2
+ max-width: 800px;
3
+ border: solid var(--bs-border-color) 1px;
4
+ }
5
+
6
+ .reasoning {
7
+ border: solid var(--bs-light-border-subtle) 1px;
8
+ padding: 1em;
9
+ margin-bottom: 0.5em;
10
+ background-color: var(--bs-light-bg-subtle);
11
+ border-radius: var(--bs-border-radius);
12
+ }