inspect-ai 0.3.62__py3-none-any.whl → 0.3.63__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 (415) hide show
  1. inspect_ai/_cli/main.py +1 -1
  2. inspect_ai/_cli/trace.py +8 -0
  3. inspect_ai/_display/core/active.py +2 -3
  4. inspect_ai/_eval/eval.py +4 -4
  5. inspect_ai/_eval/evalset.py +6 -6
  6. inspect_ai/_eval/task/run.py +3 -0
  7. inspect_ai/_util/hash.py +1 -1
  8. inspect_ai/_view/www/.vscode/extensions.json +3 -0
  9. inspect_ai/_view/www/.vscode/settings.json +8 -0
  10. inspect_ai/_view/www/App.css +92 -29
  11. inspect_ai/_view/www/dist/assets/index.css +16637 -14676
  12. inspect_ai/_view/www/dist/assets/index.js +58897 -51440
  13. inspect_ai/_view/www/dist/index.html +1 -1
  14. inspect_ai/_view/www/index.html +2 -2
  15. inspect_ai/_view/www/log-schema.json +1 -0
  16. inspect_ai/_view/www/package.json +22 -4
  17. inspect_ai/_view/www/postcss.config.cjs +8 -9
  18. inspect_ai/_view/www/src/{App.mjs → App.tsx} +355 -365
  19. inspect_ai/_view/www/src/AppErrorBoundary.tsx +47 -0
  20. inspect_ai/_view/www/src/api/api-browser.ts +2 -2
  21. inspect_ai/_view/www/src/api/api-http.ts +3 -5
  22. inspect_ai/_view/www/src/api/api-vscode.ts +6 -6
  23. inspect_ai/_view/www/src/api/client-api.ts +4 -4
  24. inspect_ai/_view/www/src/api/index.ts +4 -4
  25. inspect_ai/_view/www/src/api/{Types.ts → types.ts} +25 -9
  26. inspect_ai/_view/www/src/appearance/colors.ts +9 -0
  27. inspect_ai/_view/www/src/appearance/fonts.ts +39 -0
  28. inspect_ai/_view/www/src/appearance/icons.ts +100 -0
  29. inspect_ai/_view/www/src/appearance/{Styles.mjs → styles.ts} +2 -32
  30. inspect_ai/_view/www/src/components/AnsiDisplay.tsx +198 -0
  31. inspect_ai/_view/www/src/components/AsciinemaPlayer.tsx +86 -0
  32. inspect_ai/_view/www/src/components/Card.css +60 -0
  33. inspect_ai/_view/www/src/components/Card.tsx +109 -0
  34. inspect_ai/_view/www/src/components/CopyButton.module.css +11 -0
  35. inspect_ai/_view/www/src/components/CopyButton.tsx +58 -0
  36. inspect_ai/_view/www/src/components/DownloadButton.css +4 -0
  37. inspect_ai/_view/www/src/components/DownloadButton.tsx +25 -0
  38. inspect_ai/_view/www/src/components/DownloadPanel.css +10 -0
  39. inspect_ai/_view/www/src/components/DownloadPanel.tsx +30 -0
  40. inspect_ai/_view/www/src/components/EmptyPanel.css +12 -0
  41. inspect_ai/_view/www/src/components/EmptyPanel.tsx +15 -0
  42. inspect_ai/_view/www/src/components/ErrorPanel.css +37 -0
  43. inspect_ai/_view/www/src/components/ErrorPanel.tsx +39 -0
  44. inspect_ai/_view/www/src/components/ExpandablePanel.css +40 -0
  45. inspect_ai/_view/www/src/components/ExpandablePanel.tsx +115 -0
  46. inspect_ai/_view/www/src/components/FindBand.css +49 -0
  47. inspect_ai/_view/www/src/components/FindBand.tsx +130 -0
  48. inspect_ai/_view/www/src/components/HumanBaselineView.css +41 -0
  49. inspect_ai/_view/www/src/components/HumanBaselineView.tsx +162 -0
  50. inspect_ai/_view/www/src/components/JsonPanel.css +20 -0
  51. inspect_ai/_view/www/src/components/JsonPanel.tsx +82 -0
  52. inspect_ai/_view/www/src/components/LabeledValue.css +20 -0
  53. inspect_ai/_view/www/src/components/LabeledValue.tsx +41 -0
  54. inspect_ai/_view/www/src/components/LargeModal.module.css +54 -0
  55. inspect_ai/_view/www/src/components/LargeModal.tsx +199 -0
  56. inspect_ai/_view/www/src/components/LightboxCarousel.css +95 -0
  57. inspect_ai/_view/www/src/components/LightboxCarousel.tsx +132 -0
  58. inspect_ai/_view/www/src/components/MarkdownDiv.css +3 -0
  59. inspect_ai/_view/www/src/components/MarkdownDiv.tsx +133 -0
  60. inspect_ai/_view/www/src/components/MessageBand.css +43 -0
  61. inspect_ai/_view/www/src/components/MessageBand.tsx +39 -0
  62. inspect_ai/_view/www/src/components/MorePopOver.tsx +67 -0
  63. inspect_ai/_view/www/src/components/NavPills.module.css +18 -0
  64. inspect_ai/_view/www/src/components/NavPills.tsx +99 -0
  65. inspect_ai/_view/www/src/components/ProgressBar.module.css +37 -0
  66. inspect_ai/_view/www/src/components/ProgressBar.tsx +22 -0
  67. inspect_ai/_view/www/src/components/TabSet.module.css +40 -0
  68. inspect_ai/_view/www/src/components/TabSet.tsx +200 -0
  69. inspect_ai/_view/www/src/components/ToolButton.css +3 -0
  70. inspect_ai/_view/www/src/components/ToolButton.tsx +27 -0
  71. inspect_ai/_view/www/src/components/VirtualList.module.css +19 -0
  72. inspect_ai/_view/www/src/components/VirtualList.tsx +292 -0
  73. inspect_ai/_view/www/src/{index.js → index.tsx} +45 -19
  74. inspect_ai/_view/www/src/{log → logfile}/remoteLogFile.ts +3 -7
  75. inspect_ai/_view/www/src/{utils/remoteZipFile.mjs → logfile/remoteZipFile.ts} +86 -80
  76. inspect_ai/_view/www/src/metadata/MetaDataGrid.tsx +83 -0
  77. inspect_ai/_view/www/src/metadata/MetaDataView.module.css +35 -0
  78. inspect_ai/_view/www/src/metadata/MetaDataView.tsx +95 -0
  79. inspect_ai/_view/www/src/metadata/MetadataGrid.module.css +15 -0
  80. inspect_ai/_view/www/src/metadata/RenderedContent.module.css +12 -0
  81. inspect_ai/_view/www/src/{components/RenderedContent/RenderedContent.mjs → metadata/RenderedContent.tsx} +92 -73
  82. inspect_ai/_view/www/src/metadata/types.ts +18 -0
  83. inspect_ai/_view/www/src/plan/DatasetDetailView.module.css +3 -0
  84. inspect_ai/_view/www/src/plan/DatasetDetailView.tsx +37 -0
  85. inspect_ai/_view/www/src/plan/DetailStep.module.css +9 -0
  86. inspect_ai/_view/www/src/plan/DetailStep.tsx +31 -0
  87. inspect_ai/_view/www/src/plan/PlanCard.tsx +28 -0
  88. inspect_ai/_view/www/src/plan/PlanDetailView.module.css +48 -0
  89. inspect_ai/_view/www/src/plan/PlanDetailView.tsx +309 -0
  90. inspect_ai/_view/www/src/plan/ScorerDetailView.module.css +3 -0
  91. inspect_ai/_view/www/src/plan/ScorerDetailView.tsx +30 -0
  92. inspect_ai/_view/www/src/plan/SolverDetailView.module.css +15 -0
  93. inspect_ai/_view/www/src/plan/SolverDetailView.tsx +32 -0
  94. inspect_ai/_view/www/src/samples/InlineSampleDisplay.module.css +8 -0
  95. inspect_ai/_view/www/src/samples/InlineSampleDisplay.tsx +53 -0
  96. inspect_ai/_view/www/src/samples/SampleDialog.tsx +122 -0
  97. inspect_ai/_view/www/src/samples/SampleDisplay.module.css +29 -0
  98. inspect_ai/_view/www/src/samples/SampleDisplay.tsx +326 -0
  99. inspect_ai/_view/www/src/samples/SampleSummaryView.module.css +24 -0
  100. inspect_ai/_view/www/src/samples/SampleSummaryView.tsx +175 -0
  101. inspect_ai/_view/www/src/samples/SamplesTools.tsx +60 -0
  102. inspect_ai/_view/www/src/samples/chat/ChatMessage.module.css +29 -0
  103. inspect_ai/_view/www/src/samples/chat/ChatMessage.tsx +76 -0
  104. inspect_ai/_view/www/src/samples/chat/ChatMessageRenderer.tsx +60 -0
  105. inspect_ai/_view/www/src/samples/chat/ChatMessageRow.module.css +9 -0
  106. inspect_ai/_view/www/src/samples/chat/ChatMessageRow.tsx +57 -0
  107. inspect_ai/_view/www/src/samples/chat/ChatView.tsx +46 -0
  108. inspect_ai/_view/www/src/samples/chat/ChatViewVirtualList.module.css +4 -0
  109. inspect_ai/_view/www/src/samples/chat/ChatViewVirtualList.tsx +58 -0
  110. inspect_ai/_view/www/src/samples/chat/MessageContent.module.css +4 -0
  111. inspect_ai/_view/www/src/samples/chat/MessageContent.tsx +143 -0
  112. inspect_ai/_view/www/src/samples/chat/MessageContents.module.css +3 -0
  113. inspect_ai/_view/www/src/samples/chat/MessageContents.tsx +131 -0
  114. inspect_ai/_view/www/src/samples/chat/messages.ts +112 -0
  115. inspect_ai/_view/www/src/samples/chat/tools/ToolCallView.tsx +145 -0
  116. inspect_ai/_view/www/src/samples/chat/tools/ToolInput.module.css +14 -0
  117. inspect_ai/_view/www/src/samples/chat/tools/ToolInput.tsx +86 -0
  118. inspect_ai/_view/www/src/samples/chat/tools/ToolOutput.module.css +19 -0
  119. inspect_ai/_view/www/src/samples/chat/tools/ToolOutput.tsx +53 -0
  120. inspect_ai/_view/www/src/samples/chat/tools/ToolTitle.module.css +4 -0
  121. inspect_ai/_view/www/src/samples/chat/tools/ToolTitle.tsx +18 -0
  122. inspect_ai/_view/www/src/samples/chat/tools/tool.ts +107 -0
  123. inspect_ai/_view/www/src/samples/descriptor/samplesDescriptor.tsx +363 -0
  124. inspect_ai/_view/www/src/samples/descriptor/score/BooleanScoreDescriptor.module.css +22 -0
  125. inspect_ai/_view/www/src/samples/descriptor/score/BooleanScoreDescriptor.tsx +26 -0
  126. inspect_ai/_view/www/src/samples/descriptor/score/CategoricalScoreDescriptor.tsx +18 -0
  127. inspect_ai/_view/www/src/samples/descriptor/score/NumericScoreDescriptor.tsx +27 -0
  128. inspect_ai/_view/www/src/samples/descriptor/score/ObjectScoreDescriptor.module.css +18 -0
  129. inspect_ai/_view/www/src/samples/descriptor/score/ObjectScoreDescriptor.tsx +71 -0
  130. inspect_ai/_view/www/src/samples/descriptor/score/OtherScoreDescriptor.tsx +20 -0
  131. inspect_ai/_view/www/src/samples/descriptor/score/PassFailScoreDescriptor.module.css +28 -0
  132. inspect_ai/_view/www/src/samples/descriptor/score/PassFailScoreDescriptor.tsx +81 -0
  133. inspect_ai/_view/www/src/samples/descriptor/score/ScoreDescriptor.tsx +99 -0
  134. inspect_ai/_view/www/src/samples/descriptor/types.ts +55 -0
  135. inspect_ai/_view/www/src/samples/error/FlatSampleErrorView.module.css +19 -0
  136. inspect_ai/_view/www/src/samples/error/FlatSampleErrorView.tsx +22 -0
  137. inspect_ai/_view/www/src/samples/error/SampleErrorView.module.css +17 -0
  138. inspect_ai/_view/www/src/samples/error/SampleErrorView.tsx +31 -0
  139. inspect_ai/_view/www/src/samples/error/error.ts +15 -0
  140. inspect_ai/_view/www/src/samples/list/SampleFooter.module.css +9 -0
  141. inspect_ai/_view/www/src/samples/list/SampleFooter.tsx +14 -0
  142. inspect_ai/_view/www/src/samples/list/SampleHeader.module.css +13 -0
  143. inspect_ai/_view/www/src/samples/list/SampleHeader.tsx +36 -0
  144. inspect_ai/_view/www/src/samples/list/SampleList.module.css +11 -0
  145. inspect_ai/_view/www/src/samples/list/SampleList.tsx +247 -0
  146. inspect_ai/_view/www/src/samples/list/SampleRow.module.css +33 -0
  147. inspect_ai/_view/www/src/samples/list/SampleRow.tsx +98 -0
  148. inspect_ai/_view/www/src/samples/list/SampleSeparator.module.css +6 -0
  149. inspect_ai/_view/www/src/samples/list/SampleSeparator.tsx +24 -0
  150. inspect_ai/_view/www/src/samples/sample-tools/EpochFilter.module.css +9 -0
  151. inspect_ai/_view/www/src/samples/sample-tools/EpochFilter.tsx +51 -0
  152. inspect_ai/_view/www/src/samples/sample-tools/SelectScorer.module.css +16 -0
  153. inspect_ai/_view/www/src/samples/sample-tools/SelectScorer.tsx +173 -0
  154. inspect_ai/_view/www/src/samples/sample-tools/SortFilter.module.css +9 -0
  155. inspect_ai/_view/www/src/samples/sample-tools/SortFilter.tsx +182 -0
  156. inspect_ai/_view/www/src/samples/{tools/filters.mjs → sample-tools/filters.ts} +86 -81
  157. inspect_ai/_view/www/src/samples/sample-tools/sample-filter/SampleFilter.module.css +16 -0
  158. inspect_ai/_view/www/src/samples/sample-tools/sample-filter/SampleFilter.tsx +288 -0
  159. inspect_ai/_view/www/src/samples/sample-tools/sample-filter/completions.ts +346 -0
  160. inspect_ai/_view/www/src/samples/sample-tools/sample-filter/language.ts +19 -0
  161. inspect_ai/_view/www/src/samples/sample-tools/sample-filter/tokenize.ts +97 -0
  162. inspect_ai/_view/www/src/samples/{SampleLimit.mjs → sampleLimit.ts} +3 -6
  163. inspect_ai/_view/www/src/samples/scores/SampleScoreView.module.css +53 -0
  164. inspect_ai/_view/www/src/samples/scores/SampleScoreView.tsx +168 -0
  165. inspect_ai/_view/www/src/samples/scores/SampleScores.module.css +5 -0
  166. inspect_ai/_view/www/src/samples/scores/SampleScores.tsx +37 -0
  167. inspect_ai/_view/www/src/samples/transcript/ApprovalEventView.tsx +66 -0
  168. inspect_ai/_view/www/src/samples/transcript/ErrorEventView.tsx +51 -0
  169. inspect_ai/_view/www/src/samples/transcript/InfoEventView.module.css +3 -0
  170. inspect_ai/_view/www/src/samples/transcript/InfoEventView.tsx +54 -0
  171. inspect_ai/_view/www/src/samples/transcript/InputEventView.tsx +48 -0
  172. inspect_ai/_view/www/src/samples/transcript/LoggerEventView.module.css +6 -0
  173. inspect_ai/_view/www/src/samples/transcript/LoggerEventView.tsx +36 -0
  174. inspect_ai/_view/www/src/samples/transcript/ModelEventView.module.css +43 -0
  175. inspect_ai/_view/www/src/samples/transcript/ModelEventView.tsx +223 -0
  176. inspect_ai/_view/www/src/samples/transcript/SampleInitEventView.module.css +23 -0
  177. inspect_ai/_view/www/src/samples/transcript/SampleInitEventView.tsx +108 -0
  178. inspect_ai/_view/www/src/samples/transcript/SampleLimitEventView.tsx +75 -0
  179. inspect_ai/_view/www/src/samples/transcript/SampleTranscript.tsx +22 -0
  180. inspect_ai/_view/www/src/samples/transcript/ScoreEventView.module.css +15 -0
  181. inspect_ai/_view/www/src/samples/transcript/ScoreEventView.tsx +100 -0
  182. inspect_ai/_view/www/src/samples/transcript/StepEventView.tsx +171 -0
  183. inspect_ai/_view/www/src/samples/transcript/SubtaskEventView.module.css +19 -0
  184. inspect_ai/_view/www/src/samples/transcript/SubtaskEventView.tsx +133 -0
  185. inspect_ai/_view/www/src/samples/transcript/ToolEventView.module.css +10 -0
  186. inspect_ai/_view/www/src/samples/transcript/ToolEventView.tsx +91 -0
  187. inspect_ai/_view/www/src/samples/transcript/TranscriptView.module.css +49 -0
  188. inspect_ai/_view/www/src/samples/transcript/TranscriptView.tsx +449 -0
  189. inspect_ai/_view/www/src/samples/transcript/event/EventNav.module.css +5 -0
  190. inspect_ai/_view/www/src/samples/transcript/event/EventNav.tsx +43 -0
  191. inspect_ai/_view/www/src/samples/transcript/event/EventNavs.module.css +3 -0
  192. inspect_ai/_view/www/src/samples/transcript/event/EventNavs.tsx +38 -0
  193. inspect_ai/_view/www/src/samples/transcript/event/EventPanel.module.css +25 -0
  194. inspect_ai/_view/www/src/samples/transcript/event/EventPanel.tsx +190 -0
  195. inspect_ai/_view/www/src/samples/transcript/event/EventRow.module.css +13 -0
  196. inspect_ai/_view/www/src/samples/transcript/event/EventRow.tsx +32 -0
  197. inspect_ai/_view/www/src/samples/transcript/event/EventSection.module.css +8 -0
  198. inspect_ai/_view/www/src/samples/transcript/event/EventSection.tsx +29 -0
  199. inspect_ai/_view/www/src/samples/transcript/state/StateDiffView.tsx +67 -0
  200. inspect_ai/_view/www/src/samples/transcript/state/StateEventRenderers.tsx +274 -0
  201. inspect_ai/_view/www/src/samples/transcript/state/StateEventRenders.module.css +10 -0
  202. inspect_ai/_view/www/src/samples/transcript/state/StateEventView.module.css +9 -0
  203. inspect_ai/_view/www/src/samples/transcript/state/{StateEventView.mjs → StateEventView.tsx} +148 -110
  204. inspect_ai/_view/www/src/samples/transcript/types.ts +58 -0
  205. inspect_ai/_view/www/src/types/log.d.ts +1 -0
  206. inspect_ai/_view/www/src/types/prism.d.ts +11 -0
  207. inspect_ai/_view/www/src/types.ts +71 -0
  208. inspect_ai/_view/www/src/usage/ModelTokenTable.tsx +22 -0
  209. inspect_ai/_view/www/src/usage/ModelUsagePanel.module.css +24 -0
  210. inspect_ai/_view/www/src/usage/ModelUsagePanel.tsx +95 -0
  211. inspect_ai/_view/www/src/usage/TokenTable.module.css +17 -0
  212. inspect_ai/_view/www/src/usage/TokenTable.tsx +91 -0
  213. inspect_ai/_view/www/src/usage/UsageCard.module.css +15 -0
  214. inspect_ai/_view/www/src/usage/UsageCard.tsx +67 -0
  215. inspect_ai/_view/www/src/utils/attachments.ts +42 -0
  216. inspect_ai/_view/www/src/utils/{Base64.mjs → base64.ts} +1 -6
  217. inspect_ai/_view/www/src/{components/Browser.mjs → utils/browser.ts} +0 -1
  218. inspect_ai/_view/www/src/utils/debugging.ts +28 -0
  219. inspect_ai/_view/www/src/utils/dom.ts +30 -0
  220. inspect_ai/_view/www/src/utils/format.ts +194 -0
  221. inspect_ai/_view/www/src/utils/git.ts +7 -0
  222. inspect_ai/_view/www/src/utils/html.ts +6 -0
  223. inspect_ai/_view/www/src/utils/http.ts +14 -0
  224. inspect_ai/_view/www/src/utils/{Path.mjs → path.ts} +2 -9
  225. inspect_ai/_view/www/src/utils/{Print.mjs → print.ts} +34 -26
  226. inspect_ai/_view/www/src/utils/queue.ts +51 -0
  227. inspect_ai/_view/www/src/utils/sync.ts +114 -0
  228. inspect_ai/_view/www/src/utils/{Type.mjs → type.ts} +3 -6
  229. inspect_ai/_view/www/src/utils/vscode.ts +13 -0
  230. inspect_ai/_view/www/src/workspace/WorkSpace.tsx +324 -0
  231. inspect_ai/_view/www/src/workspace/WorkSpaceView.module.css +33 -0
  232. inspect_ai/_view/www/src/workspace/WorkSpaceView.tsx +160 -0
  233. inspect_ai/_view/www/src/workspace/error/TaskErrorPanel.module.css +3 -0
  234. inspect_ai/_view/www/src/workspace/error/TaskErrorPanel.tsx +28 -0
  235. inspect_ai/_view/www/src/workspace/navbar/Navbar.module.css +54 -0
  236. inspect_ai/_view/www/src/workspace/navbar/Navbar.tsx +68 -0
  237. inspect_ai/_view/www/src/workspace/navbar/PrimaryBar.module.css +52 -0
  238. inspect_ai/_view/www/src/workspace/navbar/PrimaryBar.tsx +113 -0
  239. inspect_ai/_view/www/src/workspace/navbar/ResultsPanel.module.css +67 -0
  240. inspect_ai/_view/www/src/workspace/navbar/ResultsPanel.tsx +156 -0
  241. inspect_ai/_view/www/src/workspace/navbar/SecondaryBar.module.css +28 -0
  242. inspect_ai/_view/www/src/workspace/navbar/SecondaryBar.tsx +222 -0
  243. inspect_ai/_view/www/src/workspace/navbar/StatusPanel.module.css +14 -0
  244. inspect_ai/_view/www/src/workspace/navbar/StatusPanel.tsx +61 -0
  245. inspect_ai/_view/www/src/workspace/sidebar/EvalStatus.module.css +15 -0
  246. inspect_ai/_view/www/src/workspace/sidebar/EvalStatus.tsx +71 -0
  247. inspect_ai/_view/www/src/workspace/sidebar/LogDirectoryTitleView.module.css +5 -0
  248. inspect_ai/_view/www/src/workspace/sidebar/LogDirectoryTitleView.tsx +56 -0
  249. inspect_ai/_view/www/src/workspace/sidebar/Sidebar.module.css +68 -0
  250. inspect_ai/_view/www/src/workspace/sidebar/Sidebar.tsx +85 -0
  251. inspect_ai/_view/www/src/workspace/sidebar/SidebarLogEntry.module.css +29 -0
  252. inspect_ai/_view/www/src/workspace/sidebar/SidebarLogEntry.tsx +95 -0
  253. inspect_ai/_view/www/src/workspace/sidebar/SidebarScoreView.module.css +23 -0
  254. inspect_ai/_view/www/src/workspace/sidebar/SidebarScoreView.tsx +41 -0
  255. inspect_ai/_view/www/src/workspace/sidebar/SidebarScoresView.module.css +35 -0
  256. inspect_ai/_view/www/src/workspace/sidebar/SidebarScoresView.tsx +61 -0
  257. inspect_ai/_view/www/src/workspace/tabs/InfoTab.tsx +80 -0
  258. inspect_ai/_view/www/src/workspace/tabs/JsonTab.module.css +5 -0
  259. inspect_ai/_view/www/src/workspace/tabs/JsonTab.tsx +46 -0
  260. inspect_ai/_view/www/src/workspace/tabs/SamplesTab.tsx +204 -0
  261. inspect_ai/_view/www/src/workspace/tabs/grouping.ts +195 -0
  262. inspect_ai/_view/www/src/workspace/tabs/types.ts +19 -0
  263. inspect_ai/_view/www/src/workspace/types.ts +10 -0
  264. inspect_ai/_view/www/tsconfig.json +23 -9
  265. inspect_ai/_view/www/vite.config.js +8 -17
  266. inspect_ai/_view/www/yarn.lock +627 -556
  267. inspect_ai/dataset/_dataset.py +36 -0
  268. inspect_ai/dataset/_sources/csv.py +8 -0
  269. inspect_ai/dataset/_sources/file.py +4 -0
  270. inspect_ai/dataset/_sources/hf.py +11 -1
  271. inspect_ai/dataset/_sources/json.py +8 -0
  272. inspect_ai/log/_log.py +3 -6
  273. inspect_ai/log/_message.py +1 -1
  274. inspect_ai/log/_recorders/json.py +5 -7
  275. inspect_ai/model/_call_tools.py +2 -1
  276. inspect_ai/model/_providers/anthropic.py +3 -3
  277. inspect_ai/model/_providers/openai_o1.py +3 -5
  278. inspect_ai/model/_providers/openrouter.py +86 -0
  279. inspect_ai/model/_providers/providers.py +11 -0
  280. inspect_ai/scorer/_answer.py +7 -7
  281. inspect_ai/scorer/_classification.py +34 -18
  282. inspect_ai/scorer/_common.py +2 -8
  283. inspect_ai/solver/_multiple_choice.py +24 -9
  284. inspect_ai/tool/__init__.py +2 -0
  285. inspect_ai/tool/{beta → _tools}/_computer/_computer.py +2 -5
  286. inspect_ai/tool/_tools/_computer/_resources/tool/__init__.py +0 -0
  287. inspect_ai/tool/{beta → _tools}/_computer/_resources/tool/_x11_client.py +1 -1
  288. inspect_ai/tool/_tools/_computer/_resources/tool/requirements.txt +0 -0
  289. inspect_ai/tool/_tools/_execute.py +8 -2
  290. inspect_ai/tool/beta.py +3 -0
  291. inspect_ai/util/_sandbox/docker/docker.py +32 -85
  292. inspect_ai/util/_sandbox/self_check.py +124 -16
  293. {inspect_ai-0.3.62.dist-info → inspect_ai-0.3.63.dist-info}/METADATA +2 -1
  294. inspect_ai-0.3.63.dist-info/RECORD +618 -0
  295. inspect_ai/_view/www/src/Register.mjs +0 -3
  296. inspect_ai/_view/www/src/Types.mjs +0 -38
  297. inspect_ai/_view/www/src/appearance/Colors.mjs +0 -27
  298. inspect_ai/_view/www/src/appearance/Fonts.mjs +0 -66
  299. inspect_ai/_view/www/src/appearance/Icons.mjs +0 -240
  300. inspect_ai/_view/www/src/components/AnsiDisplay.mjs +0 -184
  301. inspect_ai/_view/www/src/components/AppErrorBoundary.mjs +0 -34
  302. inspect_ai/_view/www/src/components/AsciiCinemaPlayer.mjs +0 -74
  303. inspect_ai/_view/www/src/components/Card.mjs +0 -126
  304. inspect_ai/_view/www/src/components/ChatView.mjs +0 -441
  305. inspect_ai/_view/www/src/components/CopyButton.mjs +0 -48
  306. inspect_ai/_view/www/src/components/Dialog.mjs +0 -61
  307. inspect_ai/_view/www/src/components/DownloadButton.mjs +0 -15
  308. inspect_ai/_view/www/src/components/DownloadPanel.mjs +0 -29
  309. inspect_ai/_view/www/src/components/EmptyPanel.mjs +0 -23
  310. inspect_ai/_view/www/src/components/ErrorPanel.mjs +0 -66
  311. inspect_ai/_view/www/src/components/ExpandablePanel.mjs +0 -136
  312. inspect_ai/_view/www/src/components/FindBand.mjs +0 -157
  313. inspect_ai/_view/www/src/components/HumanBaselineView.mjs +0 -168
  314. inspect_ai/_view/www/src/components/JsonPanel.mjs +0 -61
  315. inspect_ai/_view/www/src/components/LabeledValue.mjs +0 -32
  316. inspect_ai/_view/www/src/components/LargeModal.mjs +0 -190
  317. inspect_ai/_view/www/src/components/LightboxCarousel.mjs +0 -217
  318. inspect_ai/_view/www/src/components/MarkdownDiv.mjs +0 -118
  319. inspect_ai/_view/www/src/components/MessageBand.mjs +0 -48
  320. inspect_ai/_view/www/src/components/MessageContent.mjs +0 -111
  321. inspect_ai/_view/www/src/components/MetaDataGrid.mjs +0 -92
  322. inspect_ai/_view/www/src/components/MetaDataView.mjs +0 -109
  323. inspect_ai/_view/www/src/components/MorePopOver.mjs +0 -50
  324. inspect_ai/_view/www/src/components/NavPills.mjs +0 -63
  325. inspect_ai/_view/www/src/components/ProgressBar.mjs +0 -51
  326. inspect_ai/_view/www/src/components/RenderedContent/ChatMessageRenderer.mjs +0 -54
  327. inspect_ai/_view/www/src/components/RenderedContent/Types.mjs +0 -19
  328. inspect_ai/_view/www/src/components/TabSet.mjs +0 -184
  329. inspect_ai/_view/www/src/components/ToolButton.mjs +0 -16
  330. inspect_ai/_view/www/src/components/Tools.mjs +0 -376
  331. inspect_ai/_view/www/src/components/VirtualList.mjs +0 -280
  332. inspect_ai/_view/www/src/components/ansi-output.js +0 -932
  333. inspect_ai/_view/www/src/json/JsonTab.mjs +0 -48
  334. inspect_ai/_view/www/src/log-reader/Log-Reader.mjs +0 -25
  335. inspect_ai/_view/www/src/log-reader/Native-Log-Reader.mjs +0 -13
  336. inspect_ai/_view/www/src/log-reader/Open-AI-Log-Reader.mjs +0 -263
  337. inspect_ai/_view/www/src/navbar/Navbar.mjs +0 -418
  338. inspect_ai/_view/www/src/navbar/SecondaryBar.mjs +0 -175
  339. inspect_ai/_view/www/src/plan/PlanCard.mjs +0 -418
  340. inspect_ai/_view/www/src/samples/SampleDialog.mjs +0 -123
  341. inspect_ai/_view/www/src/samples/SampleDisplay.mjs +0 -516
  342. inspect_ai/_view/www/src/samples/SampleError.mjs +0 -99
  343. inspect_ai/_view/www/src/samples/SampleList.mjs +0 -427
  344. inspect_ai/_view/www/src/samples/SampleScoreView.mjs +0 -172
  345. inspect_ai/_view/www/src/samples/SampleScores.mjs +0 -34
  346. inspect_ai/_view/www/src/samples/SampleTranscript.mjs +0 -20
  347. inspect_ai/_view/www/src/samples/SamplesDescriptor.mjs +0 -771
  348. inspect_ai/_view/www/src/samples/SamplesTab.mjs +0 -399
  349. inspect_ai/_view/www/src/samples/SamplesTools.mjs +0 -64
  350. inspect_ai/_view/www/src/samples/tools/EpochFilter.mjs +0 -38
  351. inspect_ai/_view/www/src/samples/tools/SampleFilter.mjs +0 -756
  352. inspect_ai/_view/www/src/samples/tools/SelectScorer.mjs +0 -141
  353. inspect_ai/_view/www/src/samples/tools/SortFilter.mjs +0 -151
  354. inspect_ai/_view/www/src/samples/transcript/ApprovalEventView.mjs +0 -71
  355. inspect_ai/_view/www/src/samples/transcript/ErrorEventView.mjs +0 -44
  356. inspect_ai/_view/www/src/samples/transcript/EventPanel.mjs +0 -271
  357. inspect_ai/_view/www/src/samples/transcript/EventRow.mjs +0 -46
  358. inspect_ai/_view/www/src/samples/transcript/EventSection.mjs +0 -33
  359. inspect_ai/_view/www/src/samples/transcript/InfoEventView.mjs +0 -59
  360. inspect_ai/_view/www/src/samples/transcript/InputEventView.mjs +0 -44
  361. inspect_ai/_view/www/src/samples/transcript/LoggerEventView.mjs +0 -32
  362. inspect_ai/_view/www/src/samples/transcript/ModelEventView.mjs +0 -216
  363. inspect_ai/_view/www/src/samples/transcript/SampleInitEventView.mjs +0 -107
  364. inspect_ai/_view/www/src/samples/transcript/SampleLimitEventView.mjs +0 -74
  365. inspect_ai/_view/www/src/samples/transcript/ScoreEventView.mjs +0 -100
  366. inspect_ai/_view/www/src/samples/transcript/StepEventView.mjs +0 -187
  367. inspect_ai/_view/www/src/samples/transcript/SubtaskEventView.mjs +0 -133
  368. inspect_ai/_view/www/src/samples/transcript/ToolEventView.mjs +0 -88
  369. inspect_ai/_view/www/src/samples/transcript/TranscriptView.mjs +0 -459
  370. inspect_ai/_view/www/src/samples/transcript/Types.mjs +0 -44
  371. inspect_ai/_view/www/src/samples/transcript/state/StateDiffView.mjs +0 -53
  372. inspect_ai/_view/www/src/samples/transcript/state/StateEventRenderers.mjs +0 -254
  373. inspect_ai/_view/www/src/sidebar/Sidebar.mjs +0 -418
  374. inspect_ai/_view/www/src/usage/ModelTokenTable.mjs +0 -72
  375. inspect_ai/_view/www/src/usage/UsageCard.mjs +0 -159
  376. inspect_ai/_view/www/src/utils/Format.mjs +0 -260
  377. inspect_ai/_view/www/src/utils/Git.mjs +0 -12
  378. inspect_ai/_view/www/src/utils/Html.mjs +0 -21
  379. inspect_ai/_view/www/src/utils/attachments.mjs +0 -31
  380. inspect_ai/_view/www/src/utils/debugging.mjs +0 -23
  381. inspect_ai/_view/www/src/utils/http.mjs +0 -18
  382. inspect_ai/_view/www/src/utils/queue.mjs +0 -67
  383. inspect_ai/_view/www/src/utils/sync.mjs +0 -101
  384. inspect_ai/_view/www/src/workspace/TaskErrorPanel.mjs +0 -17
  385. inspect_ai/_view/www/src/workspace/WorkSpace.mjs +0 -516
  386. inspect_ai/tool/beta/__init__.py +0 -5
  387. inspect_ai-0.3.62.dist-info/RECORD +0 -481
  388. /inspect_ai/{tool/beta/_computer/_resources/tool/__init__.py → _view/www/src/components/MorePopOver.css} +0 -0
  389. /inspect_ai/_view/www/src/{constants.mjs → constants.ts} +0 -0
  390. /inspect_ai/{tool/beta/_computer/_resources/tool/requirements.txt → _view/www/src/workspace/tabs/InfoTab.module.css} +0 -0
  391. /inspect_ai/tool/{beta → _tools}/_computer/__init__.py +0 -0
  392. /inspect_ai/tool/{beta → _tools}/_computer/_common.py +0 -0
  393. /inspect_ai/tool/{beta → _tools}/_computer/_computer_split.py +0 -0
  394. /inspect_ai/tool/{beta → _tools}/_computer/_resources/Dockerfile +0 -0
  395. /inspect_ai/tool/{beta → _tools}/_computer/_resources/README.md +0 -0
  396. /inspect_ai/tool/{beta → _tools}/_computer/_resources/entrypoint/entrypoint.sh +0 -0
  397. /inspect_ai/tool/{beta → _tools}/_computer/_resources/entrypoint/novnc_startup.sh +0 -0
  398. /inspect_ai/tool/{beta → _tools}/_computer/_resources/entrypoint/x11vnc_startup.sh +0 -0
  399. /inspect_ai/tool/{beta → _tools}/_computer/_resources/entrypoint/xfce_startup.sh +0 -0
  400. /inspect_ai/tool/{beta → _tools}/_computer/_resources/entrypoint/xvfb_startup.sh +0 -0
  401. /inspect_ai/tool/{beta → _tools}/_computer/_resources/image_home_dir/.config/Code/User/globalStorage/state.vscdb +0 -0
  402. /inspect_ai/tool/{beta → _tools}/_computer/_resources/image_home_dir/.config/Code/User/settings.json +0 -0
  403. /inspect_ai/tool/{beta → _tools}/_computer/_resources/image_home_dir/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml +0 -0
  404. /inspect_ai/tool/{beta → _tools}/_computer/_resources/image_home_dir/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-screensaver.xml +0 -0
  405. /inspect_ai/tool/{beta → _tools}/_computer/_resources/image_home_dir/Desktop/Firefox Web Browser.desktop +0 -0
  406. /inspect_ai/tool/{beta → _tools}/_computer/_resources/image_home_dir/Desktop/Terminal.desktop +0 -0
  407. /inspect_ai/tool/{beta → _tools}/_computer/_resources/image_home_dir/Desktop/Visual Studio Code.desktop +0 -0
  408. /inspect_ai/tool/{beta → _tools}/_computer/_resources/tool/_logger.py +0 -0
  409. /inspect_ai/tool/{beta → _tools}/_computer/_resources/tool/_run.py +0 -0
  410. /inspect_ai/tool/{beta → _tools}/_computer/_resources/tool/_tool_result.py +0 -0
  411. /inspect_ai/tool/{beta → _tools}/_computer/_resources/tool/computer_tool.py +0 -0
  412. {inspect_ai-0.3.62.dist-info → inspect_ai-0.3.63.dist-info}/LICENSE +0 -0
  413. {inspect_ai-0.3.62.dist-info → inspect_ai-0.3.63.dist-info}/WHEEL +0 -0
  414. {inspect_ai-0.3.62.dist-info → inspect_ai-0.3.63.dist-info}/entry_points.txt +0 -0
  415. {inspect_ai-0.3.62.dist-info → inspect_ai-0.3.63.dist-info}/top_level.txt +0 -0
@@ -1,72 +0,0 @@
1
- import { html } from "htm/preact";
2
- import { FontSize, TextStyle } from "../appearance/Fonts.mjs";
3
- import { ModelUsagePanel } from "./UsageCard.mjs";
4
-
5
- export const ModelTokenTable = ({ model_usage, style }) => {
6
- return html`
7
- <${TokenTable} style=${style}>
8
- <${TokenHeader}/>
9
- <tbody>
10
- ${Object.keys(model_usage).map((key) => {
11
- return html`<${TokenRow} model=${key} usage=${model_usage[key]} />`;
12
- })}
13
- </tbody>
14
- </${TokenTable}>
15
- `;
16
- };
17
-
18
- const TokenTable = ({ style, children }) => {
19
- return html`<table
20
- class="table table-sm"
21
- style=${{
22
- width: "100%",
23
- fontSize: FontSize.smaller,
24
- marginTop: "0.7rem",
25
- ...style,
26
- }}
27
- >
28
- ${children}
29
- </table>`;
30
- };
31
-
32
- const thStyle = {
33
- padding: 0,
34
- fontWeight: 300,
35
- fontSize: FontSize.small,
36
- ...TextStyle.label,
37
- ...TextStyle.secondary,
38
- };
39
-
40
- const TokenHeader = () => {
41
- return html`<thead>
42
- <tr>
43
- <td></td>
44
- <td
45
- colspan="3"
46
- align="center"
47
- class="card-subheading"
48
- style=${{
49
- paddingBottom: "0.7rem",
50
- fontSize: FontSize.small,
51
- ...TextStyle.label,
52
- ...TextStyle.secondary,
53
- }}
54
- >
55
- Tokens
56
- </td>
57
- </tr>
58
- <tr>
59
- <th style=${thStyle}>Model</th>
60
- <th style=${thStyle}>Usage</th>
61
- </tr>
62
- </thead>`;
63
- };
64
-
65
- const TokenRow = ({ model, usage }) => {
66
- return html`<tr>
67
- <td>${model}</td>
68
- <td>
69
- <${ModelUsagePanel} usage=${usage} />
70
- </td>
71
- </tr>`;
72
- };
@@ -1,159 +0,0 @@
1
- //@ts-check
2
- import { html } from "htm/preact";
3
-
4
- import { ApplicationIcons } from "../appearance/Icons.mjs";
5
- import { FontSize, TextStyle } from "../appearance/Fonts.mjs";
6
- import { formatDuration, formatNumber } from "../utils/Format.mjs";
7
- import { Card, CardHeader, CardBody } from "../components/Card.mjs";
8
- import { MetaDataView } from "../components/MetaDataView.mjs";
9
- import { ModelTokenTable } from "./ModelTokenTable.mjs";
10
-
11
- const kUsageCardBodyId = "usage-card-body";
12
-
13
- /**
14
- * Renders the UsageCard component.
15
- *
16
- * @param {Object} props - The parameters for the component.
17
- * @param {import("../types/log").EvalStats} props.stats - The identifier for this view
18
- * @returns {import("preact").JSX.Element | string} The UsageCard component.
19
- */
20
- export const UsageCard = ({ stats }) => {
21
- if (!stats) {
22
- return "";
23
- }
24
-
25
- const totalDuration = formatDuration(
26
- new Date(stats.started_at),
27
- new Date(stats.completed_at),
28
- );
29
- const usageMetadataStyle = {
30
- fontSize: FontSize.smaller,
31
- };
32
-
33
- return html`
34
-
35
- <${Card}>
36
- <${CardHeader} icon=${ApplicationIcons.usage} label="Usage"/>
37
- <${CardBody} id=${kUsageCardBodyId} style=${{
38
- paddingTop: "0",
39
- paddingBottom: "0",
40
- borderTop: "solid var(--bs-border-color) 1px",
41
- }}>
42
- <div style=${{
43
- paddingTop: "0",
44
- paddingBottom: "1em",
45
- marginLeft: "0",
46
- display: "flex",
47
- }}>
48
-
49
- <div style=${{ flex: "1 1 40%", marginRight: "1em" }}>
50
- <div style=${{ marginTop: "1em", fontSize: FontSize.smaller, ...TextStyle.label, ...TextStyle.secondary }}>Duration</div>
51
- <${MetaDataView}
52
- entries="${{
53
- ["Start"]: new Date(stats.started_at).toLocaleString(),
54
- ["End"]: new Date(stats.completed_at).toLocaleString(),
55
- ["Duration"]: totalDuration,
56
- }}"
57
- tableOptions="borderless,sm"
58
- style=${usageMetadataStyle}
59
- />
60
- </div>
61
-
62
- <div style=${{ flex: "1 1 60%" }}>
63
- <${ModelTokenTable} model_usage=${stats.model_usage}/>
64
- </div>
65
- </div>
66
- </${CardBody}>
67
- </${Card}>
68
- `;
69
- };
70
-
71
- /**
72
- * Renders the ModelUsagePanel component.
73
- *
74
- * @param {Object} props - The parameters for the component.
75
- * @param {import("../types/log").ModelUsage1} props.usage - The identifier for this view
76
- * @returns {import("preact").JSX.Element | string} The ModelUsagePanel component.
77
- */
78
- export const ModelUsagePanel = ({ usage }) => {
79
- if (!usage) {
80
- return "";
81
- }
82
-
83
- const rows = [
84
- {
85
- label: "input",
86
- value: usage.input_tokens,
87
- secondary: false,
88
- },
89
- ];
90
-
91
- if (usage.input_tokens_cache_read) {
92
- rows.push({
93
- label: "cache_read",
94
- value: usage.input_tokens_cache_read,
95
- secondary: true,
96
- });
97
- }
98
-
99
- if (usage.input_tokens_cache_write) {
100
- rows.push({
101
- label: "cache_write",
102
- value: usage.input_tokens_cache_write,
103
- secondary: true,
104
- });
105
- }
106
-
107
- rows.push({
108
- label: "Output",
109
- value: usage.output_tokens,
110
- secondary: false,
111
- bordered: true,
112
- });
113
-
114
- rows.push({
115
- label: "---",
116
- value: undefined,
117
- secondary: false,
118
- });
119
-
120
- rows.push({
121
- label: "Total",
122
- value: usage.total_tokens,
123
- secondary: false,
124
- });
125
-
126
- return html` <div
127
- style=${{
128
- display: "grid",
129
- gridTemplateColumns: "0 auto auto",
130
- columnGap: "0.5em",
131
- fontSize: FontSize.small,
132
- }}
133
- >
134
- ${rows.map((row) => {
135
- if (row.label === "---") {
136
- return html`<div
137
- style=${{
138
- gridColumn: "-1/1",
139
- height: "1px",
140
- backgroundColor: "var(--bs-light-border-subtle)",
141
- }}
142
- ></div>`;
143
- } else {
144
- return html`
145
- <div
146
- style=${{
147
- ...TextStyle.label,
148
- ...TextStyle.secondary,
149
- gridColumn: row.secondary ? "2" : "1/3",
150
- }}
151
- >
152
- ${row.label}
153
- </div>
154
- <div style=${{ gridColumn: "3" }}>${formatNumber(row.value)}</div>
155
- `;
156
- }
157
- })}
158
- </div>`;
159
- };
@@ -1,260 +0,0 @@
1
- // @ts-check
2
- import { html } from "htm/preact";
3
-
4
- /**
5
- * Converts an array or a single value to a comma-separated string.
6
- *
7
- * @param {(string|string[])} val - The value to be converted. Can be a string or an array of strings.
8
- * @returns {string} - A comma-separated string.
9
- */
10
- export const arrayToString = (val) => {
11
- val = Array.isArray(val) ? val : [val];
12
- return val.join(", ");
13
- };
14
-
15
- /**
16
- * Gets a string for a sample input.
17
- *
18
- * @param {(string|Array.<import("../types/log").ChatMessageUser | import("../types/log").ChatMessageSystem | import("../types/log").ChatMessageAssistant | import("../types/log").ChatMessageTool>)} input - The input to process. Can be a string or an array of objects containing a content string.
19
- * @returns {(string[])} - The processed string or an array of strings.
20
- */
21
- export const inputString = (input) => {
22
- if (typeof input === "string") {
23
- return [input];
24
- } else {
25
- return input.map((inp) => {
26
- if (typeof inp === "string") {
27
- return inp;
28
- } else {
29
- const content = inp.content;
30
- if (typeof content === "string") {
31
- return content;
32
- } else {
33
- const result = content.map((con) => {
34
- if (con.type === "text") {
35
- return con.text;
36
- } else {
37
- return "";
38
- }
39
- });
40
- return result.join("\n");
41
- }
42
- }
43
- });
44
- }
45
- };
46
-
47
- /**
48
- * Formats dataset information into a string.
49
- *
50
- * @param {string} name - The name of the dataset.
51
- * @param {number} samples - The total number of samples in the dataset.
52
- * @param {number} epochs - The number of epochs.
53
- * @returns {string} - A formatted string describing the dataset.
54
- */
55
- export const formatDataset = (name, samples, epochs) => {
56
- const perEpochSamples = epochs > 0 ? samples / epochs : samples;
57
- return `${name ? "— " : ""}${perEpochSamples + " "}${epochs > 1 ? `x ${epochs} ` : ""}${samples === 1 ? "sample" : "samples"}`;
58
- };
59
-
60
- /**
61
- * Extracts and trims the user prompt from a sample input.
62
- *
63
- * @param {import("../types/log").EvalSample} sample - The sample containing input data.
64
- * @returns {(string | Array<string|import("preact").JSX.Element>)} - The trimmed user prompt or an array of contents if the input is an array.
65
- */
66
- export const userPromptForSample = (sample) => {
67
- if (sample) {
68
- if (typeof sample.input == "string") {
69
- return sample.input.trim();
70
- } else if (Array.isArray(sample.input)) {
71
- const userPrompt = sample.input.find((message) => message.role == "user");
72
- if (userPrompt) {
73
- const contents = userPrompt.content;
74
- if (Array.isArray(contents)) {
75
- const results = [];
76
- for (const content of contents) {
77
- if (content.type === "text") {
78
- results.push(content.text);
79
- } else {
80
- results.push(
81
- html`<img
82
- src="${content.image}"
83
- style=${{
84
- maxWidth: "400px",
85
- border: "solid var(--bs-border-color) 1px",
86
- }}
87
- />`,
88
- );
89
- }
90
- }
91
- return results;
92
- } else {
93
- return contents.trim();
94
- }
95
- }
96
- }
97
- }
98
- return "";
99
- };
100
-
101
- /**
102
- * Formats a score with specific HTML based on its value.
103
- *
104
- * @param {string} score - The score to format.
105
- * @returns {import("preact").JSX.Element|string} The formatted score as an HTML template or the original score if not "C" or "I".
106
- */
107
- export const formatScore = (score) => {
108
- // Circle with single letter
109
- if (score === "C") {
110
- return html`<span class="circle-border score-green">C</span>`;
111
- } else if (score === "I") {
112
- return html`<span class="circle-border score-red">I</span>`;
113
- } else {
114
- return score;
115
- }
116
- };
117
-
118
- /**
119
- * Formats a duration given in seconds into a human-readable string.
120
- *
121
- * @param {number} seconds - The duration in seconds.
122
- * @returns {string} - The formatted time string.
123
- */
124
- export const formatTime = (seconds) => {
125
- if (seconds < 60) {
126
- return `${seconds} sec`;
127
- } else if (seconds < 60 * 60) {
128
- return `${Math.floor(seconds / 60)} min ${seconds % 60} sec`;
129
- } else if (seconds < 60 * 60 * 24) {
130
- const hours = Math.floor(seconds / (60 * 60));
131
- const minutes = Math.floor((seconds % (60 * 60)) / 60);
132
- const remainingSeconds = seconds % 60;
133
- return `${hours} hr ${minutes} min ${remainingSeconds} sec`;
134
- } else {
135
- const days = Math.floor(seconds / (60 * 60 * 24));
136
- const hours = Math.floor((seconds % (60 * 60 * 24)) / (60 * 60));
137
- const minutes = Math.floor((seconds % (60 * 60)) / 60);
138
- const remainingSeconds = seconds % 60;
139
- return `${days} days ${hours} hr ${minutes} min ${remainingSeconds} sec`;
140
- }
141
- };
142
-
143
- /**
144
- * Formats a number to a string with specific decimal places for prettiness.
145
- *
146
- * @param {number} num - The number to format.
147
- * @returns {string} - The formatted number as a string.
148
- */
149
- export function formatPrettyDecimal(num) {
150
- const numDecimalPlaces = num.toString().includes(".")
151
- ? num.toString().split(".")[1].length
152
- : 0;
153
-
154
- if (numDecimalPlaces === 0) {
155
- return num.toFixed(1);
156
- } else if (numDecimalPlaces > 3) {
157
- return num.toFixed(3);
158
- } else {
159
- return num.toString();
160
- }
161
- }
162
-
163
- /**
164
- * Formats a number to a string without trailing zeroes after the decimal point.
165
- *
166
- * @param {number} num - The number to format.
167
- * @returns {string|number} - The formatted number as a string, or the original input if it's not a number.
168
- */
169
- export function formatDecimalNoTrailingZeroes(num) {
170
- // This isn't a number, continue
171
- if (typeof num !== "number") {
172
- return num;
173
- }
174
-
175
- if (num.toString().includes(".")) {
176
- const decimal = num.toString().split(".")[1];
177
- const trimmed = decimal.replace(/\.?0+$/, "");
178
- return num.toFixed(trimmed.length);
179
- } else {
180
- return num.toFixed(0);
181
- }
182
- }
183
-
184
- /**
185
- * Converts a string to title case.
186
- *
187
- * @param {string} str - The string to convert.
188
- * @returns {string} - The string in title case.
189
- */
190
- export function toTitleCase(str) {
191
- return str
192
- .split(" ")
193
- .map((w) => w[0].toUpperCase() + w.substr(1).toLowerCase())
194
- .join(" ");
195
- }
196
-
197
- /**
198
- * Formats a number to a string without trailing zeroes after the decimal point.
199
- *
200
- * @param {number} num - The number to format.
201
- * @returns {string|number} - The formatted number as a string, or the original input if it's not a number.
202
- */
203
- export function formatNoDecimal(num) {
204
- // This isn't a number, continue
205
- if (typeof num !== "number") {
206
- return num;
207
- }
208
-
209
- // Round to a whole number
210
- const rounded = Math.round(num);
211
- return rounded.toFixed(0);
212
- }
213
-
214
- /**
215
- * Formats a number to a string without trailing zeroes after the decimal point.
216
- *
217
- * @param {number} num - The number to format.
218
- * @returns {string} - The formatted number as a string
219
- */
220
- export function formatNumber(num) {
221
- return num.toLocaleString(navigator.language, {
222
- minimumFractionDigits: 0,
223
- maximumFractionDigits: 5,
224
- });
225
- }
226
-
227
- /**
228
- * Formats a number to a string without trailing zeroes after the decimal point.
229
- *
230
- * @param {Date} date - The number to format.
231
- * @returns {string} - The formatted number as a string
232
- */
233
- export function formatDateTime(date) {
234
- const options = {
235
- year: "2-digit",
236
- month: "2-digit",
237
- day: "2-digit",
238
- hour: "numeric",
239
- minute: "2-digit",
240
- second: "2-digit",
241
- hour12: true,
242
- };
243
-
244
- // Use the default system locale and timezone
245
- // @ts-ignore
246
- return new Intl.DateTimeFormat(undefined, options).format(date);
247
- }
248
-
249
- /**
250
- * Returns the formatted duration between two dates
251
- *
252
- * @param {Date} start - The starting date/time to format.
253
- * @param {Date} end - The starting date/time to format.
254
- * @returns {string} - The formatted number as a string
255
- */
256
- export function formatDuration(start, end) {
257
- const durationMs = end.getTime() - start.getTime();
258
- const durationSec = durationMs / 1000;
259
- return formatTime(durationSec);
260
- }
@@ -1,12 +0,0 @@
1
- // @ts-check
2
- /**
3
- * Generates a GitHub commit URL based on the repository origin URL and the commit hash.
4
- *
5
- * @param {string} origin - The origin URL of the GitHub repository.
6
- * @param {string} commit - The commit hash.
7
- * @returns {string} - The generated GitHub commit URL.
8
- */
9
- export const ghCommitUrl = (origin, commit) => {
10
- const baseUrl = origin.replace(/\.git$/, "");
11
- return `${baseUrl}/commit/${commit}`;
12
- };
@@ -1,21 +0,0 @@
1
- // @ts-check
2
-
3
- /**
4
- * Escapes special characters in a string to make it safe for use in a CSS selector.
5
- *
6
- * @param {string} id - The string (usually an id or class name) to be escaped for use in a CSS selector.
7
- * @returns {string} - The escaped string safe for use in `querySelector` or `querySelectorAll`.
8
- */
9
- export function escapeSelector(id) {
10
- return id.replace(/([ #.;,?!+*~'":^$[\]()=>|/\\])/g, "\\$1");
11
- }
12
-
13
- // Determine the capabilities
14
- // If this is vscode, check for the version meta
15
- // so we know it supports downloads
16
- export const isVscode = () => {
17
- const bodyEl = document.querySelector("body");
18
- return !!bodyEl.getAttributeNames().find((attr) => {
19
- return attr.includes("data-vscode-");
20
- });
21
- };
@@ -1,31 +0,0 @@
1
- /**
2
- * Resolves individual value
3
- *
4
- * @param {any} value - The value to resolve.
5
- * @param {Record<string,string>} attachments - The transcript events to display.
6
- * @returns {any} Value with resolved content.
7
- */
8
- export const resolveAttachments = (value, attachments) => {
9
- const kContentProtocol = "tc://";
10
- const kAttachmentProtocol = "attachment://";
11
-
12
- if (Array.isArray(value)) {
13
- return value.map((v) => resolveAttachments(v, attachments));
14
- } else if (value && typeof value === "object") {
15
- /** @type {Record<string, unknown>} */
16
- const resolvedObject = {};
17
- for (const key of Object.keys(value)) {
18
- //@ts-ignore
19
- resolvedObject[key] = resolveAttachments(value[key], attachments);
20
- }
21
- return resolvedObject;
22
- } else if (typeof value === "string") {
23
- if (value.startsWith(kContentProtocol)) {
24
- value = value.replace(kContentProtocol, kAttachmentProtocol);
25
- }
26
- if (value.startsWith(kAttachmentProtocol)) {
27
- return attachments[value.replace(kAttachmentProtocol, "")];
28
- }
29
- }
30
- return value;
31
- };
@@ -1,23 +0,0 @@
1
- export function printCircularReferences(obj) {
2
- const seenObjects = new WeakMap();
3
-
4
- function detect(value, path = "") {
5
- if (typeof value === "object" && value !== null) {
6
- if (seenObjects.has(value)) {
7
- console.log(
8
- `Circular reference detected at path: ${seenObjects.get(value)}`,
9
- );
10
- return;
11
- }
12
- seenObjects.set(value, path);
13
-
14
- for (const key in value) {
15
- if (Object.prototype.hasOwnProperty.call(value, key)) {
16
- detect(value[key], `${path}.${key}`);
17
- }
18
- }
19
- }
20
- }
21
-
22
- detect(obj, "root");
23
- }
@@ -1,18 +0,0 @@
1
- //@ts-check
2
-
3
- /**
4
- * Fetches a range of bytes from a remote resource and returns it as a `Uint8Array`.
5
- *
6
- * @param {string} url - The URL of the remote resource to fetch.
7
- * @param {number} start - The starting byte position of the range to fetch.
8
- * @param {number} end - The ending byte position of the range to fetch.
9
- * @returns {Promise<Uint8Array>} A promise that resolves to a `Uint8Array` containing the fetched byte range.
10
- * @throws {Error} If there is an issue with the network request.
11
- */
12
- export const fetchRange = async (url, start, end) => {
13
- const response = await fetch(url, {
14
- headers: { Range: `bytes=${start}-${end}` },
15
- });
16
- const arrayBuffer = await response.arrayBuffer();
17
- return new Uint8Array(arrayBuffer);
18
- };
@@ -1,67 +0,0 @@
1
- /**
2
- * A class that manages asynchronous task execution with a limit on concurrent tasks.
3
- */
4
- export class AsyncQueue {
5
- /**
6
- * Creates an instance of AsyncQueue.
7
- * @param {number} [concurrentLimit=6] - The maximum number of tasks that can run concurrently.
8
- */
9
- constructor(concurrentLimit = 6) {
10
- /**
11
- * The maximum number of concurrent tasks.
12
- * @type {number}
13
- */
14
- this.concurrentLimit = concurrentLimit;
15
-
16
- /**
17
- * The queue of tasks waiting to be executed.
18
- * @type {Array<Function>}
19
- */
20
- this.queue = [];
21
-
22
- /**
23
- * The count of currently running tasks.
24
- * @type {number}
25
- */
26
- this.runningCount = 0;
27
- }
28
-
29
- /**
30
- * Adds a task to the queue and runs it if the concurrency limit allows.
31
- * @param {Function} task - The task to be executed asynchronously. This should be a function that returns a promise.
32
- * @returns {Promise<*>} - A promise that resolves with the result of the task or rejects if the task throws an error.
33
- */
34
- async enqueue(task) {
35
- return new Promise((resolve, reject) => {
36
- this.queue.push(async () => {
37
- try {
38
- const result = await task();
39
- resolve(result);
40
- } catch (error) {
41
- reject(error);
42
- } finally {
43
- this.runningCount--;
44
- this.runNext();
45
- }
46
- });
47
-
48
- if (this.runningCount < this.concurrentLimit) {
49
- this.runNext();
50
- }
51
- });
52
- }
53
-
54
- /**
55
- * Runs the next task in the queue if there are available slots for concurrent execution.
56
- * @private
57
- */
58
- runNext() {
59
- if (this.queue.length > 0 && this.runningCount < this.concurrentLimit) {
60
- const task = this.queue.shift();
61
- if (task) {
62
- this.runningCount++;
63
- task();
64
- }
65
- }
66
- }
67
- }