inspect-ai 0.3.62__py3-none-any.whl → 0.3.64__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.
- inspect_ai/_cli/cache.py +8 -7
- inspect_ai/_cli/common.py +0 -12
- inspect_ai/_cli/eval.py +32 -4
- inspect_ai/_cli/info.py +1 -0
- inspect_ai/_cli/list.py +1 -1
- inspect_ai/_cli/log.py +2 -0
- inspect_ai/_cli/main.py +1 -1
- inspect_ai/_cli/sandbox.py +4 -1
- inspect_ai/_cli/score.py +181 -32
- inspect_ai/_cli/trace.py +10 -0
- inspect_ai/_cli/view.py +4 -2
- inspect_ai/_display/core/active.py +2 -3
- inspect_ai/_display/core/config.py +7 -1
- inspect_ai/_display/textual/widgets/samples.py +4 -3
- inspect_ai/_display/textual/widgets/sandbox.py +6 -0
- inspect_ai/_eval/eval.py +104 -101
- inspect_ai/_eval/evalset.py +75 -75
- inspect_ai/_eval/loader.py +122 -12
- inspect_ai/_eval/registry.py +1 -1
- inspect_ai/_eval/run.py +14 -0
- inspect_ai/_eval/score.py +125 -36
- inspect_ai/_eval/task/log.py +105 -4
- inspect_ai/_eval/task/results.py +92 -38
- inspect_ai/_eval/task/run.py +9 -2
- inspect_ai/_eval/task/sandbox.py +35 -2
- inspect_ai/_eval/task/task.py +49 -46
- inspect_ai/_util/constants.py +1 -1
- inspect_ai/_util/content.py +8 -0
- inspect_ai/_util/error.py +2 -0
- inspect_ai/_util/file.py +15 -1
- inspect_ai/_util/hash.py +1 -1
- inspect_ai/_util/logger.py +4 -2
- inspect_ai/_util/registry.py +7 -1
- inspect_ai/_view/view.py +1 -2
- inspect_ai/_view/www/.vscode/extensions.json +3 -0
- inspect_ai/_view/www/.vscode/settings.json +8 -0
- inspect_ai/_view/www/App.css +97 -29
- inspect_ai/_view/www/README.md +1 -1
- inspect_ai/_view/www/dist/assets/index.css +16663 -14674
- inspect_ai/_view/www/dist/assets/index.js +58808 -51348
- inspect_ai/_view/www/dist/index.html +1 -1
- inspect_ai/_view/www/index.html +2 -2
- inspect_ai/_view/www/log-schema.json +87 -73
- inspect_ai/_view/www/package.json +22 -4
- inspect_ai/_view/www/postcss.config.cjs +8 -9
- inspect_ai/_view/www/src/{App.mjs → App.tsx} +356 -365
- inspect_ai/_view/www/src/AppErrorBoundary.tsx +47 -0
- inspect_ai/_view/www/src/api/api-browser.ts +2 -2
- inspect_ai/_view/www/src/api/api-http.ts +3 -5
- inspect_ai/_view/www/src/api/api-vscode.ts +6 -6
- inspect_ai/_view/www/src/api/client-api.ts +4 -4
- inspect_ai/_view/www/src/api/index.ts +4 -4
- inspect_ai/_view/www/src/api/{Types.ts → types.ts} +25 -9
- inspect_ai/_view/www/src/appearance/colors.ts +9 -0
- inspect_ai/_view/www/src/appearance/fonts.ts +39 -0
- inspect_ai/_view/www/src/appearance/icons.ts +100 -0
- inspect_ai/_view/www/src/appearance/{Styles.mjs → styles.ts} +2 -32
- inspect_ai/_view/www/src/components/AnsiDisplay.tsx +198 -0
- inspect_ai/_view/www/src/components/AsciinemaPlayer.tsx +86 -0
- inspect_ai/_view/www/src/components/Card.css +60 -0
- inspect_ai/_view/www/src/components/Card.tsx +109 -0
- inspect_ai/_view/www/src/components/CopyButton.module.css +11 -0
- inspect_ai/_view/www/src/components/CopyButton.tsx +58 -0
- inspect_ai/_view/www/src/components/DownloadButton.css +4 -0
- inspect_ai/_view/www/src/components/DownloadButton.tsx +25 -0
- inspect_ai/_view/www/src/components/DownloadPanel.css +10 -0
- inspect_ai/_view/www/src/components/DownloadPanel.tsx +30 -0
- inspect_ai/_view/www/src/components/EmptyPanel.css +12 -0
- inspect_ai/_view/www/src/components/EmptyPanel.tsx +15 -0
- inspect_ai/_view/www/src/components/ErrorPanel.css +37 -0
- inspect_ai/_view/www/src/components/ErrorPanel.tsx +39 -0
- inspect_ai/_view/www/src/components/ExpandablePanel.css +40 -0
- inspect_ai/_view/www/src/components/ExpandablePanel.tsx +115 -0
- inspect_ai/_view/www/src/components/FindBand.css +49 -0
- inspect_ai/_view/www/src/components/FindBand.tsx +130 -0
- inspect_ai/_view/www/src/components/HumanBaselineView.css +41 -0
- inspect_ai/_view/www/src/components/HumanBaselineView.tsx +162 -0
- inspect_ai/_view/www/src/components/JsonPanel.css +20 -0
- inspect_ai/_view/www/src/components/JsonPanel.tsx +82 -0
- inspect_ai/_view/www/src/components/LabeledValue.css +20 -0
- inspect_ai/_view/www/src/components/LabeledValue.tsx +41 -0
- inspect_ai/_view/www/src/components/LargeModal.module.css +54 -0
- inspect_ai/_view/www/src/components/LargeModal.tsx +189 -0
- inspect_ai/_view/www/src/components/LightboxCarousel.css +95 -0
- inspect_ai/_view/www/src/components/LightboxCarousel.tsx +132 -0
- inspect_ai/_view/www/src/components/MarkdownDiv.css +3 -0
- inspect_ai/_view/www/src/components/MarkdownDiv.tsx +133 -0
- inspect_ai/_view/www/src/components/MessageBand.css +43 -0
- inspect_ai/_view/www/src/components/MessageBand.tsx +39 -0
- inspect_ai/_view/www/src/components/MorePopOver.css +0 -0
- inspect_ai/_view/www/src/components/MorePopOver.tsx +67 -0
- inspect_ai/_view/www/src/components/NavPills.module.css +18 -0
- inspect_ai/_view/www/src/components/NavPills.tsx +101 -0
- inspect_ai/_view/www/src/components/ProgressBar.module.css +37 -0
- inspect_ai/_view/www/src/components/ProgressBar.tsx +22 -0
- inspect_ai/_view/www/src/components/TabSet.module.css +40 -0
- inspect_ai/_view/www/src/components/TabSet.tsx +215 -0
- inspect_ai/_view/www/src/components/ToolButton.css +3 -0
- inspect_ai/_view/www/src/components/ToolButton.tsx +27 -0
- inspect_ai/_view/www/src/components/VirtualList.module.css +19 -0
- inspect_ai/_view/www/src/components/VirtualList.tsx +292 -0
- inspect_ai/_view/www/src/{index.js → index.tsx} +45 -19
- inspect_ai/_view/www/src/{log → logfile}/remoteLogFile.ts +3 -8
- inspect_ai/_view/www/src/{utils/remoteZipFile.mjs → logfile/remoteZipFile.ts} +86 -80
- inspect_ai/_view/www/src/metadata/MetaDataGrid.tsx +83 -0
- inspect_ai/_view/www/src/metadata/MetaDataView.module.css +35 -0
- inspect_ai/_view/www/src/metadata/MetaDataView.tsx +95 -0
- inspect_ai/_view/www/src/metadata/MetadataGrid.module.css +15 -0
- inspect_ai/_view/www/src/metadata/RenderedContent.module.css +12 -0
- inspect_ai/_view/www/src/{components/RenderedContent/RenderedContent.mjs → metadata/RenderedContent.tsx} +92 -73
- inspect_ai/_view/www/src/metadata/types.ts +18 -0
- inspect_ai/_view/www/src/plan/DatasetDetailView.module.css +3 -0
- inspect_ai/_view/www/src/plan/DatasetDetailView.tsx +37 -0
- inspect_ai/_view/www/src/plan/DetailStep.module.css +9 -0
- inspect_ai/_view/www/src/plan/DetailStep.tsx +31 -0
- inspect_ai/_view/www/src/plan/PlanCard.tsx +28 -0
- inspect_ai/_view/www/src/plan/PlanDetailView.module.css +48 -0
- inspect_ai/_view/www/src/plan/PlanDetailView.tsx +324 -0
- inspect_ai/_view/www/src/plan/ScorerDetailView.module.css +3 -0
- inspect_ai/_view/www/src/plan/ScorerDetailView.tsx +30 -0
- inspect_ai/_view/www/src/plan/SolverDetailView.module.css +15 -0
- inspect_ai/_view/www/src/plan/SolverDetailView.tsx +32 -0
- inspect_ai/_view/www/src/samples/InlineSampleDisplay.module.css +8 -0
- inspect_ai/_view/www/src/samples/InlineSampleDisplay.tsx +53 -0
- inspect_ai/_view/www/src/samples/SampleDialog.tsx +122 -0
- inspect_ai/_view/www/src/samples/SampleDisplay.module.css +29 -0
- inspect_ai/_view/www/src/samples/SampleDisplay.tsx +331 -0
- inspect_ai/_view/www/src/samples/SampleSummaryView.module.css +24 -0
- inspect_ai/_view/www/src/samples/SampleSummaryView.tsx +177 -0
- inspect_ai/_view/www/src/samples/SamplesTools.tsx +52 -0
- inspect_ai/_view/www/src/samples/chat/ChatMessage.module.css +29 -0
- inspect_ai/_view/www/src/samples/chat/ChatMessage.tsx +76 -0
- inspect_ai/_view/www/src/samples/chat/ChatMessageRenderer.tsx +60 -0
- inspect_ai/_view/www/src/samples/chat/ChatMessageRow.module.css +9 -0
- inspect_ai/_view/www/src/samples/chat/ChatMessageRow.tsx +57 -0
- inspect_ai/_view/www/src/samples/chat/ChatView.tsx +47 -0
- inspect_ai/_view/www/src/samples/chat/ChatViewVirtualList.module.css +4 -0
- inspect_ai/_view/www/src/samples/chat/ChatViewVirtualList.tsx +58 -0
- inspect_ai/_view/www/src/samples/chat/MessageContent.module.css +4 -0
- inspect_ai/_view/www/src/samples/chat/MessageContent.tsx +157 -0
- inspect_ai/_view/www/src/samples/chat/MessageContents.module.css +3 -0
- inspect_ai/_view/www/src/samples/chat/MessageContents.tsx +133 -0
- inspect_ai/_view/www/src/samples/chat/messages.ts +112 -0
- inspect_ai/_view/www/src/samples/chat/tools/ToolCallView.tsx +147 -0
- inspect_ai/_view/www/src/samples/chat/tools/ToolInput.module.css +14 -0
- inspect_ai/_view/www/src/samples/chat/tools/ToolInput.tsx +76 -0
- inspect_ai/_view/www/src/samples/chat/tools/ToolOutput.module.css +19 -0
- inspect_ai/_view/www/src/samples/chat/tools/ToolOutput.tsx +60 -0
- inspect_ai/_view/www/src/samples/chat/tools/ToolTitle.module.css +4 -0
- inspect_ai/_view/www/src/samples/chat/tools/ToolTitle.tsx +18 -0
- inspect_ai/_view/www/src/samples/chat/tools/tool.ts +92 -0
- inspect_ai/_view/www/src/samples/descriptor/samplesDescriptor.tsx +365 -0
- inspect_ai/_view/www/src/samples/descriptor/score/BooleanScoreDescriptor.module.css +22 -0
- inspect_ai/_view/www/src/samples/descriptor/score/BooleanScoreDescriptor.tsx +26 -0
- inspect_ai/_view/www/src/samples/descriptor/score/CategoricalScoreDescriptor.tsx +18 -0
- inspect_ai/_view/www/src/samples/descriptor/score/NumericScoreDescriptor.tsx +27 -0
- inspect_ai/_view/www/src/samples/descriptor/score/ObjectScoreDescriptor.module.css +18 -0
- inspect_ai/_view/www/src/samples/descriptor/score/ObjectScoreDescriptor.tsx +71 -0
- inspect_ai/_view/www/src/samples/descriptor/score/OtherScoreDescriptor.tsx +20 -0
- inspect_ai/_view/www/src/samples/descriptor/score/PassFailScoreDescriptor.module.css +28 -0
- inspect_ai/_view/www/src/samples/descriptor/score/PassFailScoreDescriptor.tsx +81 -0
- inspect_ai/_view/www/src/samples/descriptor/score/ScoreDescriptor.tsx +99 -0
- inspect_ai/_view/www/src/samples/descriptor/types.ts +55 -0
- inspect_ai/_view/www/src/samples/error/FlatSampleErrorView.module.css +19 -0
- inspect_ai/_view/www/src/samples/error/FlatSampleErrorView.tsx +22 -0
- inspect_ai/_view/www/src/samples/error/SampleErrorView.module.css +17 -0
- inspect_ai/_view/www/src/samples/error/SampleErrorView.tsx +31 -0
- inspect_ai/_view/www/src/samples/error/error.ts +15 -0
- inspect_ai/_view/www/src/samples/list/SampleFooter.module.css +9 -0
- inspect_ai/_view/www/src/samples/list/SampleFooter.tsx +14 -0
- inspect_ai/_view/www/src/samples/list/SampleHeader.module.css +13 -0
- inspect_ai/_view/www/src/samples/list/SampleHeader.tsx +36 -0
- inspect_ai/_view/www/src/samples/list/SampleList.module.css +11 -0
- inspect_ai/_view/www/src/samples/list/SampleList.tsx +247 -0
- inspect_ai/_view/www/src/samples/list/SampleRow.module.css +33 -0
- inspect_ai/_view/www/src/samples/list/SampleRow.tsx +98 -0
- inspect_ai/_view/www/src/samples/list/SampleSeparator.module.css +6 -0
- inspect_ai/_view/www/src/samples/list/SampleSeparator.tsx +24 -0
- inspect_ai/_view/www/src/samples/sample-tools/EpochFilter.module.css +9 -0
- inspect_ai/_view/www/src/samples/sample-tools/EpochFilter.tsx +51 -0
- inspect_ai/_view/www/src/samples/sample-tools/SelectScorer.module.css +16 -0
- inspect_ai/_view/www/src/samples/sample-tools/SelectScorer.tsx +175 -0
- inspect_ai/_view/www/src/samples/sample-tools/SortFilter.module.css +9 -0
- inspect_ai/_view/www/src/samples/sample-tools/SortFilter.tsx +186 -0
- inspect_ai/_view/www/src/samples/{tools/filters.mjs → sample-tools/filters.ts} +86 -81
- inspect_ai/_view/www/src/samples/sample-tools/sample-filter/SampleFilter.module.css +16 -0
- inspect_ai/_view/www/src/samples/sample-tools/sample-filter/SampleFilter.tsx +288 -0
- inspect_ai/_view/www/src/samples/sample-tools/sample-filter/completions.ts +346 -0
- inspect_ai/_view/www/src/samples/sample-tools/sample-filter/language.ts +19 -0
- inspect_ai/_view/www/src/samples/sample-tools/sample-filter/tokenize.ts +97 -0
- inspect_ai/_view/www/src/samples/{SampleLimit.mjs → sampleLimit.ts} +3 -6
- inspect_ai/_view/www/src/samples/scores/SampleScoreView.module.css +53 -0
- inspect_ai/_view/www/src/samples/scores/SampleScoreView.tsx +168 -0
- inspect_ai/_view/www/src/samples/scores/SampleScores.module.css +5 -0
- inspect_ai/_view/www/src/samples/scores/SampleScores.tsx +37 -0
- inspect_ai/_view/www/src/samples/transcript/ApprovalEventView.tsx +66 -0
- inspect_ai/_view/www/src/samples/transcript/ErrorEventView.tsx +51 -0
- inspect_ai/_view/www/src/samples/transcript/InfoEventView.module.css +3 -0
- inspect_ai/_view/www/src/samples/transcript/InfoEventView.tsx +54 -0
- inspect_ai/_view/www/src/samples/transcript/InputEventView.tsx +48 -0
- inspect_ai/_view/www/src/samples/transcript/LoggerEventView.module.css +6 -0
- inspect_ai/_view/www/src/samples/transcript/LoggerEventView.tsx +36 -0
- inspect_ai/_view/www/src/samples/transcript/ModelEventView.module.css +43 -0
- inspect_ai/_view/www/src/samples/transcript/ModelEventView.tsx +223 -0
- inspect_ai/_view/www/src/samples/transcript/SampleInitEventView.module.css +23 -0
- inspect_ai/_view/www/src/samples/transcript/SampleInitEventView.tsx +112 -0
- inspect_ai/_view/www/src/samples/transcript/SampleLimitEventView.tsx +75 -0
- inspect_ai/_view/www/src/samples/transcript/SampleTranscript.tsx +22 -0
- inspect_ai/_view/www/src/samples/transcript/ScoreEventView.module.css +15 -0
- inspect_ai/_view/www/src/samples/transcript/ScoreEventView.tsx +100 -0
- inspect_ai/_view/www/src/samples/transcript/StepEventView.tsx +171 -0
- inspect_ai/_view/www/src/samples/transcript/SubtaskEventView.module.css +19 -0
- inspect_ai/_view/www/src/samples/transcript/SubtaskEventView.tsx +133 -0
- inspect_ai/_view/www/src/samples/transcript/ToolEventView.module.css +10 -0
- inspect_ai/_view/www/src/samples/transcript/ToolEventView.tsx +92 -0
- inspect_ai/_view/www/src/samples/transcript/TranscriptView.module.css +49 -0
- inspect_ai/_view/www/src/samples/transcript/TranscriptView.tsx +449 -0
- inspect_ai/_view/www/src/samples/transcript/event/EventNav.module.css +5 -0
- inspect_ai/_view/www/src/samples/transcript/event/EventNav.tsx +43 -0
- inspect_ai/_view/www/src/samples/transcript/event/EventNavs.module.css +3 -0
- inspect_ai/_view/www/src/samples/transcript/event/EventNavs.tsx +39 -0
- inspect_ai/_view/www/src/samples/transcript/event/EventPanel.module.css +25 -0
- inspect_ai/_view/www/src/samples/transcript/event/EventPanel.tsx +191 -0
- inspect_ai/_view/www/src/samples/transcript/event/EventRow.module.css +13 -0
- inspect_ai/_view/www/src/samples/transcript/event/EventRow.tsx +32 -0
- inspect_ai/_view/www/src/samples/transcript/event/EventSection.module.css +8 -0
- inspect_ai/_view/www/src/samples/transcript/event/EventSection.tsx +29 -0
- inspect_ai/_view/www/src/samples/transcript/state/StateDiffView.tsx +67 -0
- inspect_ai/_view/www/src/samples/transcript/state/StateEventRenderers.tsx +285 -0
- inspect_ai/_view/www/src/samples/transcript/state/StateEventRenders.module.css +10 -0
- inspect_ai/_view/www/src/samples/transcript/state/StateEventView.module.css +9 -0
- inspect_ai/_view/www/src/samples/transcript/state/StateEventView.tsx +346 -0
- inspect_ai/_view/www/src/samples/transcript/types.ts +58 -0
- inspect_ai/_view/www/src/types/log.d.ts +108 -19
- inspect_ai/_view/www/src/types/prism.d.ts +11 -0
- inspect_ai/_view/www/src/types.ts +71 -0
- inspect_ai/_view/www/src/usage/ModelTokenTable.tsx +28 -0
- inspect_ai/_view/www/src/usage/ModelUsagePanel.module.css +24 -0
- inspect_ai/_view/www/src/usage/ModelUsagePanel.tsx +97 -0
- inspect_ai/_view/www/src/usage/TokenTable.module.css +17 -0
- inspect_ai/_view/www/src/usage/TokenTable.tsx +91 -0
- inspect_ai/_view/www/src/usage/UsageCard.module.css +15 -0
- inspect_ai/_view/www/src/usage/UsageCard.tsx +67 -0
- inspect_ai/_view/www/src/utils/attachments.ts +42 -0
- inspect_ai/_view/www/src/utils/{Base64.mjs → base64.ts} +1 -6
- inspect_ai/_view/www/src/{components/Browser.mjs → utils/browser.ts} +0 -1
- inspect_ai/_view/www/src/utils/debugging.ts +28 -0
- inspect_ai/_view/www/src/utils/dom.ts +30 -0
- inspect_ai/_view/www/src/utils/format.ts +194 -0
- inspect_ai/_view/www/src/utils/git.ts +7 -0
- inspect_ai/_view/www/src/utils/html.ts +6 -0
- inspect_ai/_view/www/src/utils/http.ts +14 -0
- inspect_ai/_view/www/src/utils/{Path.mjs → path.ts} +2 -9
- inspect_ai/_view/www/src/utils/{Print.mjs → print.ts} +34 -26
- inspect_ai/_view/www/src/utils/queue.ts +51 -0
- inspect_ai/_view/www/src/utils/sync.ts +114 -0
- inspect_ai/_view/www/src/utils/{Type.mjs → type.ts} +3 -6
- inspect_ai/_view/www/src/utils/vscode.ts +13 -0
- inspect_ai/_view/www/src/workspace/WorkSpace.tsx +324 -0
- inspect_ai/_view/www/src/workspace/WorkSpaceView.module.css +33 -0
- inspect_ai/_view/www/src/workspace/WorkSpaceView.tsx +158 -0
- inspect_ai/_view/www/src/workspace/error/TaskErrorPanel.module.css +3 -0
- inspect_ai/_view/www/src/workspace/error/TaskErrorPanel.tsx +28 -0
- inspect_ai/_view/www/src/workspace/navbar/Navbar.module.css +54 -0
- inspect_ai/_view/www/src/workspace/navbar/Navbar.tsx +68 -0
- inspect_ai/_view/www/src/workspace/navbar/PrimaryBar.module.css +52 -0
- inspect_ai/_view/www/src/workspace/navbar/PrimaryBar.tsx +114 -0
- inspect_ai/_view/www/src/workspace/navbar/ResultsPanel.module.css +90 -0
- inspect_ai/_view/www/src/workspace/navbar/ResultsPanel.tsx +180 -0
- inspect_ai/_view/www/src/workspace/navbar/SecondaryBar.module.css +28 -0
- inspect_ai/_view/www/src/workspace/navbar/SecondaryBar.tsx +226 -0
- inspect_ai/_view/www/src/workspace/navbar/StatusPanel.module.css +14 -0
- inspect_ai/_view/www/src/workspace/navbar/StatusPanel.tsx +61 -0
- inspect_ai/_view/www/src/workspace/sidebar/EvalStatus.module.css +15 -0
- inspect_ai/_view/www/src/workspace/sidebar/EvalStatus.tsx +71 -0
- inspect_ai/_view/www/src/workspace/sidebar/LogDirectoryTitleView.module.css +5 -0
- inspect_ai/_view/www/src/workspace/sidebar/LogDirectoryTitleView.tsx +56 -0
- inspect_ai/_view/www/src/workspace/sidebar/Sidebar.module.css +68 -0
- inspect_ai/_view/www/src/workspace/sidebar/Sidebar.tsx +85 -0
- inspect_ai/_view/www/src/workspace/sidebar/SidebarLogEntry.module.css +29 -0
- inspect_ai/_view/www/src/workspace/sidebar/SidebarLogEntry.tsx +95 -0
- inspect_ai/_view/www/src/workspace/sidebar/SidebarScoreView.module.css +23 -0
- inspect_ai/_view/www/src/workspace/sidebar/SidebarScoreView.tsx +43 -0
- inspect_ai/_view/www/src/workspace/sidebar/SidebarScoresView.module.css +35 -0
- inspect_ai/_view/www/src/workspace/sidebar/SidebarScoresView.tsx +63 -0
- inspect_ai/_view/www/src/workspace/tabs/InfoTab.module.css +0 -0
- inspect_ai/_view/www/src/workspace/tabs/InfoTab.tsx +70 -0
- inspect_ai/_view/www/src/workspace/tabs/JsonTab.module.css +5 -0
- inspect_ai/_view/www/src/workspace/tabs/JsonTab.tsx +46 -0
- inspect_ai/_view/www/src/workspace/tabs/SamplesTab.tsx +204 -0
- inspect_ai/_view/www/src/workspace/tabs/grouping.ts +195 -0
- inspect_ai/_view/www/src/workspace/tabs/types.ts +19 -0
- inspect_ai/_view/www/src/workspace/types.ts +10 -0
- inspect_ai/_view/www/src/workspace/utils.ts +34 -0
- inspect_ai/_view/www/tsconfig.json +23 -9
- inspect_ai/_view/www/vite.config.js +8 -17
- inspect_ai/_view/www/yarn.lock +627 -556
- inspect_ai/approval/_approval.py +2 -0
- inspect_ai/approval/_approver.py +4 -4
- inspect_ai/approval/_auto.py +1 -1
- inspect_ai/approval/_human/approver.py +3 -0
- inspect_ai/approval/_policy.py +5 -0
- inspect_ai/approval/_registry.py +2 -2
- inspect_ai/dataset/_dataset.py +64 -37
- inspect_ai/dataset/_sources/__init__.py +0 -0
- inspect_ai/dataset/_sources/csv.py +20 -12
- inspect_ai/dataset/_sources/file.py +4 -0
- inspect_ai/dataset/_sources/hf.py +39 -29
- inspect_ai/dataset/_sources/json.py +17 -9
- inspect_ai/log/__init__.py +2 -0
- inspect_ai/log/_convert.py +3 -3
- inspect_ai/log/_file.py +24 -9
- inspect_ai/log/_log.py +101 -13
- inspect_ai/log/_message.py +4 -2
- inspect_ai/log/_recorders/file.py +4 -0
- inspect_ai/log/_recorders/json.py +5 -7
- inspect_ai/log/_recorders/recorder.py +3 -0
- inspect_ai/log/_transcript.py +19 -8
- inspect_ai/model/__init__.py +2 -0
- inspect_ai/model/_cache.py +39 -21
- inspect_ai/model/_call_tools.py +4 -3
- inspect_ai/model/_chat_message.py +14 -4
- inspect_ai/model/_generate_config.py +1 -1
- inspect_ai/model/_model.py +31 -24
- inspect_ai/model/_model_output.py +14 -1
- inspect_ai/model/_openai.py +10 -18
- inspect_ai/model/_providers/anthropic.py +3 -3
- inspect_ai/model/_providers/google.py +9 -5
- inspect_ai/model/_providers/openai.py +5 -9
- inspect_ai/model/_providers/openai_o1.py +3 -5
- inspect_ai/model/_providers/openrouter.py +86 -0
- inspect_ai/model/_providers/providers.py +11 -0
- inspect_ai/scorer/__init__.py +6 -1
- inspect_ai/scorer/_answer.py +7 -7
- inspect_ai/scorer/_classification.py +38 -18
- inspect_ai/scorer/_common.py +2 -8
- inspect_ai/scorer/_match.py +4 -5
- inspect_ai/scorer/_metric.py +87 -28
- inspect_ai/scorer/_metrics/__init__.py +3 -3
- inspect_ai/scorer/_metrics/accuracy.py +8 -10
- inspect_ai/scorer/_metrics/mean.py +3 -17
- inspect_ai/scorer/_metrics/std.py +111 -30
- inspect_ai/scorer/_model.py +12 -12
- inspect_ai/scorer/_pattern.py +3 -3
- inspect_ai/scorer/_reducer/reducer.py +36 -21
- inspect_ai/scorer/_reducer/registry.py +2 -2
- inspect_ai/scorer/_reducer/types.py +7 -1
- inspect_ai/scorer/_score.py +11 -1
- inspect_ai/scorer/_scorer.py +110 -16
- inspect_ai/solver/__init__.py +1 -1
- inspect_ai/solver/_basic_agent.py +19 -22
- inspect_ai/solver/_bridge/__init__.py +0 -3
- inspect_ai/solver/_bridge/bridge.py +3 -3
- inspect_ai/solver/_chain.py +1 -2
- inspect_ai/solver/_critique.py +3 -3
- inspect_ai/solver/_fork.py +2 -2
- inspect_ai/solver/_human_agent/__init__.py +0 -0
- inspect_ai/solver/_human_agent/agent.py +5 -8
- inspect_ai/solver/_human_agent/commands/clock.py +14 -10
- inspect_ai/solver/_human_agent/commands/note.py +1 -1
- inspect_ai/solver/_human_agent/commands/score.py +0 -11
- inspect_ai/solver/_multiple_choice.py +38 -26
- inspect_ai/solver/_prompt.py +7 -7
- inspect_ai/solver/_solver.py +53 -52
- inspect_ai/solver/_task_state.py +80 -69
- inspect_ai/solver/_use_tools.py +9 -9
- inspect_ai/tool/__init__.py +4 -1
- inspect_ai/tool/_tool.py +43 -14
- inspect_ai/tool/_tool_call.py +6 -2
- inspect_ai/tool/_tool_choice.py +3 -1
- inspect_ai/tool/_tool_def.py +10 -8
- inspect_ai/tool/_tool_params.py +24 -0
- inspect_ai/tool/_tool_with.py +7 -7
- inspect_ai/tool/_tools/__init__.py +0 -0
- inspect_ai/tool/{beta → _tools}/_computer/_common.py +2 -2
- inspect_ai/tool/{beta → _tools}/_computer/_computer.py +13 -5
- inspect_ai/tool/_tools/_computer/_resources/tool/__init__.py +0 -0
- inspect_ai/tool/{beta → _tools}/_computer/_resources/tool/_x11_client.py +1 -1
- inspect_ai/tool/_tools/_computer/_resources/tool/requirements.txt +0 -0
- inspect_ai/tool/_tools/_execute.py +23 -11
- inspect_ai/tool/_tools/_web_browser/_resources/README.md +2 -2
- inspect_ai/tool/_tools/_web_browser/_web_browser.py +5 -3
- inspect_ai/tool/_tools/_web_search.py +7 -5
- inspect_ai/tool/beta.py +3 -0
- inspect_ai/util/_concurrency.py +3 -3
- inspect_ai/util/_panel.py +2 -0
- inspect_ai/util/_resource.py +12 -12
- inspect_ai/util/_sandbox/docker/compose.py +23 -20
- inspect_ai/util/_sandbox/docker/config.py +2 -1
- inspect_ai/util/_sandbox/docker/docker.py +42 -86
- inspect_ai/util/_sandbox/docker/service.py +100 -0
- inspect_ai/util/_sandbox/environment.py +99 -96
- inspect_ai/util/_sandbox/self_check.py +124 -16
- inspect_ai/util/_subprocess.py +5 -3
- inspect_ai/util/_subtask.py +15 -16
- {inspect_ai-0.3.62.dist-info → inspect_ai-0.3.64.dist-info}/LICENSE +1 -1
- {inspect_ai-0.3.62.dist-info → inspect_ai-0.3.64.dist-info}/METADATA +11 -6
- inspect_ai-0.3.64.dist-info/RECORD +625 -0
- inspect_ai/_view/www/src/Register.mjs +0 -3
- inspect_ai/_view/www/src/Types.mjs +0 -38
- inspect_ai/_view/www/src/appearance/Colors.mjs +0 -27
- inspect_ai/_view/www/src/appearance/Fonts.mjs +0 -66
- inspect_ai/_view/www/src/appearance/Icons.mjs +0 -240
- inspect_ai/_view/www/src/components/AnsiDisplay.mjs +0 -184
- inspect_ai/_view/www/src/components/AppErrorBoundary.mjs +0 -34
- inspect_ai/_view/www/src/components/AsciiCinemaPlayer.mjs +0 -74
- inspect_ai/_view/www/src/components/Card.mjs +0 -126
- inspect_ai/_view/www/src/components/ChatView.mjs +0 -441
- inspect_ai/_view/www/src/components/CopyButton.mjs +0 -48
- inspect_ai/_view/www/src/components/Dialog.mjs +0 -61
- inspect_ai/_view/www/src/components/DownloadButton.mjs +0 -15
- inspect_ai/_view/www/src/components/DownloadPanel.mjs +0 -29
- inspect_ai/_view/www/src/components/EmptyPanel.mjs +0 -23
- inspect_ai/_view/www/src/components/ErrorPanel.mjs +0 -66
- inspect_ai/_view/www/src/components/ExpandablePanel.mjs +0 -136
- inspect_ai/_view/www/src/components/FindBand.mjs +0 -157
- inspect_ai/_view/www/src/components/HumanBaselineView.mjs +0 -168
- inspect_ai/_view/www/src/components/JsonPanel.mjs +0 -61
- inspect_ai/_view/www/src/components/LabeledValue.mjs +0 -32
- inspect_ai/_view/www/src/components/LargeModal.mjs +0 -190
- inspect_ai/_view/www/src/components/LightboxCarousel.mjs +0 -217
- inspect_ai/_view/www/src/components/MarkdownDiv.mjs +0 -118
- inspect_ai/_view/www/src/components/MessageBand.mjs +0 -48
- inspect_ai/_view/www/src/components/MessageContent.mjs +0 -111
- inspect_ai/_view/www/src/components/MetaDataGrid.mjs +0 -92
- inspect_ai/_view/www/src/components/MetaDataView.mjs +0 -109
- inspect_ai/_view/www/src/components/MorePopOver.mjs +0 -50
- inspect_ai/_view/www/src/components/NavPills.mjs +0 -63
- inspect_ai/_view/www/src/components/ProgressBar.mjs +0 -51
- inspect_ai/_view/www/src/components/RenderedContent/ChatMessageRenderer.mjs +0 -54
- inspect_ai/_view/www/src/components/RenderedContent/Types.mjs +0 -19
- inspect_ai/_view/www/src/components/TabSet.mjs +0 -184
- inspect_ai/_view/www/src/components/ToolButton.mjs +0 -16
- inspect_ai/_view/www/src/components/Tools.mjs +0 -376
- inspect_ai/_view/www/src/components/VirtualList.mjs +0 -280
- inspect_ai/_view/www/src/components/ansi-output.js +0 -932
- inspect_ai/_view/www/src/json/JsonTab.mjs +0 -48
- inspect_ai/_view/www/src/log-reader/Log-Reader.mjs +0 -25
- inspect_ai/_view/www/src/log-reader/Native-Log-Reader.mjs +0 -13
- inspect_ai/_view/www/src/log-reader/Open-AI-Log-Reader.mjs +0 -263
- inspect_ai/_view/www/src/navbar/Navbar.mjs +0 -418
- inspect_ai/_view/www/src/navbar/SecondaryBar.mjs +0 -175
- inspect_ai/_view/www/src/plan/PlanCard.mjs +0 -418
- inspect_ai/_view/www/src/samples/SampleDialog.mjs +0 -123
- inspect_ai/_view/www/src/samples/SampleDisplay.mjs +0 -516
- inspect_ai/_view/www/src/samples/SampleError.mjs +0 -99
- inspect_ai/_view/www/src/samples/SampleList.mjs +0 -427
- inspect_ai/_view/www/src/samples/SampleScoreView.mjs +0 -172
- inspect_ai/_view/www/src/samples/SampleScores.mjs +0 -34
- inspect_ai/_view/www/src/samples/SampleTranscript.mjs +0 -20
- inspect_ai/_view/www/src/samples/SamplesDescriptor.mjs +0 -771
- inspect_ai/_view/www/src/samples/SamplesTab.mjs +0 -399
- inspect_ai/_view/www/src/samples/SamplesTools.mjs +0 -64
- inspect_ai/_view/www/src/samples/tools/EpochFilter.mjs +0 -38
- inspect_ai/_view/www/src/samples/tools/SampleFilter.mjs +0 -756
- inspect_ai/_view/www/src/samples/tools/SelectScorer.mjs +0 -141
- inspect_ai/_view/www/src/samples/tools/SortFilter.mjs +0 -151
- inspect_ai/_view/www/src/samples/transcript/ApprovalEventView.mjs +0 -71
- inspect_ai/_view/www/src/samples/transcript/ErrorEventView.mjs +0 -44
- inspect_ai/_view/www/src/samples/transcript/EventPanel.mjs +0 -271
- inspect_ai/_view/www/src/samples/transcript/EventRow.mjs +0 -46
- inspect_ai/_view/www/src/samples/transcript/EventSection.mjs +0 -33
- inspect_ai/_view/www/src/samples/transcript/InfoEventView.mjs +0 -59
- inspect_ai/_view/www/src/samples/transcript/InputEventView.mjs +0 -44
- inspect_ai/_view/www/src/samples/transcript/LoggerEventView.mjs +0 -32
- inspect_ai/_view/www/src/samples/transcript/ModelEventView.mjs +0 -216
- inspect_ai/_view/www/src/samples/transcript/SampleInitEventView.mjs +0 -107
- inspect_ai/_view/www/src/samples/transcript/SampleLimitEventView.mjs +0 -74
- inspect_ai/_view/www/src/samples/transcript/ScoreEventView.mjs +0 -100
- inspect_ai/_view/www/src/samples/transcript/StepEventView.mjs +0 -187
- inspect_ai/_view/www/src/samples/transcript/SubtaskEventView.mjs +0 -133
- inspect_ai/_view/www/src/samples/transcript/ToolEventView.mjs +0 -88
- inspect_ai/_view/www/src/samples/transcript/TranscriptView.mjs +0 -459
- inspect_ai/_view/www/src/samples/transcript/Types.mjs +0 -44
- inspect_ai/_view/www/src/samples/transcript/state/StateDiffView.mjs +0 -53
- inspect_ai/_view/www/src/samples/transcript/state/StateEventRenderers.mjs +0 -254
- inspect_ai/_view/www/src/samples/transcript/state/StateEventView.mjs +0 -313
- inspect_ai/_view/www/src/sidebar/Sidebar.mjs +0 -418
- inspect_ai/_view/www/src/usage/ModelTokenTable.mjs +0 -72
- inspect_ai/_view/www/src/usage/UsageCard.mjs +0 -159
- inspect_ai/_view/www/src/utils/Format.mjs +0 -260
- inspect_ai/_view/www/src/utils/Git.mjs +0 -12
- inspect_ai/_view/www/src/utils/Html.mjs +0 -21
- inspect_ai/_view/www/src/utils/attachments.mjs +0 -31
- inspect_ai/_view/www/src/utils/debugging.mjs +0 -23
- inspect_ai/_view/www/src/utils/http.mjs +0 -18
- inspect_ai/_view/www/src/utils/queue.mjs +0 -67
- inspect_ai/_view/www/src/utils/sync.mjs +0 -101
- inspect_ai/_view/www/src/workspace/TaskErrorPanel.mjs +0 -17
- inspect_ai/_view/www/src/workspace/WorkSpace.mjs +0 -516
- inspect_ai/tool/beta/__init__.py +0 -5
- inspect_ai-0.3.62.dist-info/RECORD +0 -481
- /inspect_ai/{tool/beta/_computer/_resources/tool → _eval}/__init__.py +0 -0
- /inspect_ai/{tool/beta/_computer/_resources/tool/requirements.txt → _util/__init__.py} +0 -0
- /inspect_ai/_view/www/src/{constants.mjs → constants.ts} +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/__init__.py +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_computer_split.py +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/Dockerfile +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/README.md +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/entrypoint/entrypoint.sh +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/entrypoint/novnc_startup.sh +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/entrypoint/x11vnc_startup.sh +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/entrypoint/xfce_startup.sh +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/entrypoint/xvfb_startup.sh +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/image_home_dir/.config/Code/User/globalStorage/state.vscdb +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/image_home_dir/.config/Code/User/settings.json +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/image_home_dir/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/image_home_dir/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-screensaver.xml +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/image_home_dir/Desktop/Firefox Web Browser.desktop +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/image_home_dir/Desktop/Terminal.desktop +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/image_home_dir/Desktop/Visual Studio Code.desktop +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/tool/_logger.py +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/tool/_run.py +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/tool/_tool_result.py +0 -0
- /inspect_ai/tool/{beta → _tools}/_computer/_resources/tool/computer_tool.py +0 -0
- {inspect_ai-0.3.62.dist-info → inspect_ai-0.3.64.dist-info}/WHEEL +0 -0
- {inspect_ai-0.3.62.dist-info → inspect_ai-0.3.64.dist-info}/entry_points.txt +0 -0
- {inspect_ai-0.3.62.dist-info → inspect_ai-0.3.64.dist-info}/top_level.txt +0 -0
@@ -1,254 +0,0 @@
|
|
1
|
-
// @ts-check
|
2
|
-
import { html } from "htm/preact";
|
3
|
-
import { ChatView } from "../../../components/ChatView.mjs";
|
4
|
-
import { FontSize, TextStyle } from "../../../appearance/Fonts.mjs";
|
5
|
-
import { HumanBaselineView } from "../../../components/HumanBaselineView.mjs";
|
6
|
-
|
7
|
-
/**
|
8
|
-
* @typedef {Object} Signature
|
9
|
-
* @property {string[]} remove - Array of paths to be removed.
|
10
|
-
* @property {string[]} replace - Array of paths to be replaced.
|
11
|
-
* @property {string[]} add - Array of paths to be added.
|
12
|
-
*/
|
13
|
-
|
14
|
-
/**
|
15
|
-
* @typedef {Object} ChangeType
|
16
|
-
* @property {string} type - Type of the system message.
|
17
|
-
* @property {Signature} signature - Signature of the system message.
|
18
|
-
* @property {function(import("../../../types/log").JsonChange[], Object): import("preact").JSX.Element} render - Function to render the resolved state.
|
19
|
-
*/
|
20
|
-
|
21
|
-
/** @type {ChangeType} */
|
22
|
-
const system_msg_added_sig = {
|
23
|
-
type: "system_message",
|
24
|
-
signature: {
|
25
|
-
remove: ["/messages/0/source"],
|
26
|
-
replace: ["/messages/0/role", "/messages/0/content"],
|
27
|
-
add: ["/messages/1"],
|
28
|
-
},
|
29
|
-
render: (_changes, resolvedState) => {
|
30
|
-
const message = resolvedState["messages"][0];
|
31
|
-
return html`<${ChatView}
|
32
|
-
id="system_msg_event_preview"
|
33
|
-
messages=${[message]}
|
34
|
-
/>`;
|
35
|
-
},
|
36
|
-
};
|
37
|
-
|
38
|
-
const kToolPattern = "/tools/(\\d+)";
|
39
|
-
|
40
|
-
/** @type {ChangeType} */
|
41
|
-
const use_tools = {
|
42
|
-
type: "use_tools",
|
43
|
-
signature: {
|
44
|
-
add: ["/tools/0"],
|
45
|
-
replace: ["/tool_choice"],
|
46
|
-
remove: [],
|
47
|
-
},
|
48
|
-
render: (changes, resolvedState) => {
|
49
|
-
return renderTools(changes, resolvedState);
|
50
|
-
},
|
51
|
-
};
|
52
|
-
|
53
|
-
/** @type {ChangeType} */
|
54
|
-
const add_tools = {
|
55
|
-
type: "add_tools",
|
56
|
-
signature: {
|
57
|
-
add: [kToolPattern],
|
58
|
-
replace: [],
|
59
|
-
remove: [],
|
60
|
-
},
|
61
|
-
render: (changes, resolvedState) => {
|
62
|
-
return renderTools(changes, resolvedState);
|
63
|
-
},
|
64
|
-
};
|
65
|
-
|
66
|
-
const humanAgentKey = (key) => {
|
67
|
-
return `HumanAgentState:${key}`;
|
68
|
-
};
|
69
|
-
const human_baseline_session = {
|
70
|
-
type: "human_baseline_session",
|
71
|
-
signature: {
|
72
|
-
add: ["HumanAgentState:logs"],
|
73
|
-
replace: [],
|
74
|
-
remove: [],
|
75
|
-
},
|
76
|
-
render: (changes, resolvedState) => {
|
77
|
-
// Read the session values
|
78
|
-
const started = resolvedState[humanAgentKey("started_running")];
|
79
|
-
const runtime = resolvedState[humanAgentKey("accumulated_time")];
|
80
|
-
const answer = resolvedState[humanAgentKey("answer")];
|
81
|
-
const completed = !!answer;
|
82
|
-
const running = resolvedState[humanAgentKey("running_state")];
|
83
|
-
const rawSessions = resolvedState[humanAgentKey("logs")];
|
84
|
-
|
85
|
-
// Tweak the date value
|
86
|
-
const startedDate = started ? new Date(started * 1000) : undefined;
|
87
|
-
|
88
|
-
// Convert raw sessions into session logs
|
89
|
-
const sessions = {};
|
90
|
-
if (rawSessions) {
|
91
|
-
for (const key of Object.keys(rawSessions)) {
|
92
|
-
const value = rawSessions[key];
|
93
|
-
// this pulls the key apart into
|
94
|
-
// <user>_<timestamp>.<type>
|
95
|
-
const match = key.match(/(.*)_(\d+_\d+)\.(.*)/);
|
96
|
-
if (match) {
|
97
|
-
const user = match[1];
|
98
|
-
const timestamp = match[2];
|
99
|
-
const type = match[3];
|
100
|
-
sessions[timestamp] = sessions[timestamp] || {};
|
101
|
-
sessions[timestamp][type] = value;
|
102
|
-
sessions[timestamp]["user"] = user;
|
103
|
-
}
|
104
|
-
}
|
105
|
-
}
|
106
|
-
|
107
|
-
return html`<${HumanBaselineView}
|
108
|
-
started=${startedDate}
|
109
|
-
running=${running}
|
110
|
-
completed=${completed}
|
111
|
-
answer=${answer}
|
112
|
-
runtime=${runtime}
|
113
|
-
sessionLogs=${Object.values(sessions)}
|
114
|
-
/>`;
|
115
|
-
},
|
116
|
-
};
|
117
|
-
|
118
|
-
const renderTools = (changes, resolvedState) => {
|
119
|
-
// Find which tools were added in this change
|
120
|
-
const toolIndexes = [];
|
121
|
-
for (const change of changes) {
|
122
|
-
const match = change.path.match(kToolPattern);
|
123
|
-
if (match) {
|
124
|
-
toolIndexes.push(match[1]);
|
125
|
-
}
|
126
|
-
}
|
127
|
-
|
128
|
-
const toolName = (toolChoice) => {
|
129
|
-
if (typeof toolChoice === "object" && toolChoice) {
|
130
|
-
return toolChoice["name"];
|
131
|
-
} else {
|
132
|
-
return toolChoice;
|
133
|
-
}
|
134
|
-
};
|
135
|
-
|
136
|
-
const toolsInfo = {};
|
137
|
-
|
138
|
-
// Show tool choice if it was changed
|
139
|
-
const hasToolChoice = changes.find((change) => {
|
140
|
-
return change.path.startsWith("/tool_choice");
|
141
|
-
});
|
142
|
-
if (resolvedState.tool_choice && hasToolChoice) {
|
143
|
-
toolsInfo["Tool Choice"] = toolName(resolvedState.tool_choice);
|
144
|
-
}
|
145
|
-
|
146
|
-
// Show either all tools or just the specific tools
|
147
|
-
if (resolvedState.tools.length > 0) {
|
148
|
-
if (toolIndexes.length === 0) {
|
149
|
-
toolsInfo["Tools"] = html`<${Tools}
|
150
|
-
toolDefinitions=${resolvedState.tools}
|
151
|
-
/>`;
|
152
|
-
} else {
|
153
|
-
const filtered = resolvedState.tools.filter((_, index) => {
|
154
|
-
return toolIndexes.includes(index.toString());
|
155
|
-
});
|
156
|
-
toolsInfo["Tools"] = html`<${Tools} toolDefinitions=${filtered} />`;
|
157
|
-
}
|
158
|
-
}
|
159
|
-
|
160
|
-
return html`
|
161
|
-
<div
|
162
|
-
style=${{
|
163
|
-
display: "grid",
|
164
|
-
gridTemplateColumns: "max-content max-content",
|
165
|
-
columnGap: "1rem",
|
166
|
-
margin: "0",
|
167
|
-
}}
|
168
|
-
>
|
169
|
-
${Object.keys(toolsInfo).map((key) => {
|
170
|
-
return html` <div
|
171
|
-
style=${{
|
172
|
-
fontSize: FontSize.smaller,
|
173
|
-
...TextStyle.label,
|
174
|
-
...TextStyle.secondary,
|
175
|
-
}}
|
176
|
-
>
|
177
|
-
${key}
|
178
|
-
</div>
|
179
|
-
<div style=${{ fontSize: FontSize.base }}>${toolsInfo[key]}</div>`;
|
180
|
-
})}
|
181
|
-
</div>
|
182
|
-
`;
|
183
|
-
};
|
184
|
-
|
185
|
-
/** @type {ChangeType[]} */
|
186
|
-
export const RenderableChangeTypes = [
|
187
|
-
system_msg_added_sig,
|
188
|
-
use_tools,
|
189
|
-
add_tools,
|
190
|
-
];
|
191
|
-
|
192
|
-
/** @type {ChangeType[]} */
|
193
|
-
export const StoreSpecificRenderableTypes = [human_baseline_session];
|
194
|
-
|
195
|
-
/**
|
196
|
-
* @typedef {Object} ToolParameters
|
197
|
-
* @property {string} type - The type of the parameters object, typically "object".
|
198
|
-
* @property {Object} properties - An object describing the properties of the parameters.
|
199
|
-
* @property {ToolProperty} properties.code - The code property, which is a string.
|
200
|
-
* @property {string[]} required - An array of required property names.
|
201
|
-
*/
|
202
|
-
|
203
|
-
/**
|
204
|
-
* @typedef {Object} ToolProperty
|
205
|
-
* @property {string} type - The data type of the property (e.g., "string").
|
206
|
-
* @property {string} description - A description of the property.
|
207
|
-
*/
|
208
|
-
|
209
|
-
/**
|
210
|
-
* @typedef {Object} ToolDefinition
|
211
|
-
* @property {string} name - The name of the tool (e.g., "python").
|
212
|
-
* @property {string} description - A brief description of what the tool does.
|
213
|
-
* @property {ToolParameters} [parameters] - An object describing the parameters that the tool accepts.
|
214
|
-
*/
|
215
|
-
|
216
|
-
/**
|
217
|
-
* Renders a list of tool components based on the provided tool definitions.
|
218
|
-
*
|
219
|
-
* @param {Object} props - The component props.
|
220
|
-
* @param {ToolDefinition[]} props.toolDefinitions - An array of tool definition objects, each containing the function name and arguments.
|
221
|
-
*
|
222
|
-
* @returns {import("preact").JSX.Element[]} An array of JSX elements representing the tools.
|
223
|
-
*/
|
224
|
-
export const Tools = ({ toolDefinitions }) => {
|
225
|
-
return toolDefinitions.map((toolDefinition) => {
|
226
|
-
const toolName = toolDefinition.name;
|
227
|
-
const toolArgs = toolDefinition.parameters?.properties
|
228
|
-
? Object.keys(toolDefinition.parameters.properties)
|
229
|
-
: [];
|
230
|
-
return html`<${Tool} toolName=${toolName} toolArgs=${toolArgs} />`;
|
231
|
-
});
|
232
|
-
};
|
233
|
-
|
234
|
-
/**
|
235
|
-
* Renders a single tool component.
|
236
|
-
*
|
237
|
-
* @param {Object} props - The component props.
|
238
|
-
* @param {string} props.toolName - The name of the tool to be displayed.
|
239
|
-
* @param {string[]} [props.toolArgs] - An optional array of arguments for the tool (not used in the current implementation).
|
240
|
-
* @param {string} [props.toolDesc] - An optional description of the tool (not used in the current implementation).
|
241
|
-
*
|
242
|
-
* @returns {import("preact").JSX.Element} A JSX element representing the tool.
|
243
|
-
*/
|
244
|
-
export const Tool = ({ toolName, toolArgs }) => {
|
245
|
-
const functionCall =
|
246
|
-
toolArgs && toolArgs.length > 0
|
247
|
-
? `${toolName}(${toolArgs.join(", ")})`
|
248
|
-
: toolName;
|
249
|
-
return html`<div>
|
250
|
-
<code style=${{ fontSize: FontSize.small, padding: "0" }}
|
251
|
-
>${functionCall}</code
|
252
|
-
>
|
253
|
-
</div>`;
|
254
|
-
};
|
@@ -1,313 +0,0 @@
|
|
1
|
-
// @ts-check
|
2
|
-
import { html } from "htm/preact";
|
3
|
-
|
4
|
-
import { EventPanel } from "../EventPanel.mjs";
|
5
|
-
import {
|
6
|
-
RenderableChangeTypes,
|
7
|
-
StoreSpecificRenderableTypes,
|
8
|
-
} from "./StateEventRenderers.mjs";
|
9
|
-
import { StateDiffView } from "./StateDiffView.mjs";
|
10
|
-
import { formatDateTime } from "../../../utils/Format.mjs";
|
11
|
-
|
12
|
-
/**
|
13
|
-
* Renders the StateEventView component.
|
14
|
-
*
|
15
|
-
* @param {Object} props - The properties passed to the component.
|
16
|
-
* @param { string } props.id - The id of this event.
|
17
|
-
* @param {import("../../../types/log").StateEvent } props.event - The event object to display.
|
18
|
-
* @param {import("./../Types.mjs").TranscriptEventState} props.eventState - The state for this event
|
19
|
-
* @param {(state: import("./../Types.mjs").TranscriptEventState) => void} props.setEventState - Update the state for this event
|
20
|
-
* @param { boolean } props.isStore - Whether this event view is rendering a storage (rather than a state)
|
21
|
-
* @param { Object } props.style - The style of this event.
|
22
|
-
* @returns {import("preact").JSX.Element} The component.
|
23
|
-
*/
|
24
|
-
export const StateEventView = ({
|
25
|
-
id,
|
26
|
-
event,
|
27
|
-
eventState,
|
28
|
-
setEventState,
|
29
|
-
isStore,
|
30
|
-
style,
|
31
|
-
}) => {
|
32
|
-
const summary = summarizeChanges(event.changes);
|
33
|
-
|
34
|
-
// Synthesize objects for comparison
|
35
|
-
const [before, after] = synthesizeComparable(event.changes);
|
36
|
-
|
37
|
-
const tabs = [
|
38
|
-
html`<${StateDiffView}
|
39
|
-
before=${before}
|
40
|
-
after=${after}
|
41
|
-
name="Diff"
|
42
|
-
style=${{ margin: "1em 0em" }}
|
43
|
-
/>`,
|
44
|
-
];
|
45
|
-
// This clone is important since the state is used by preact as potential values that are rendered
|
46
|
-
// and as a result may be decorated with additional properties, etc..., resulting in DOM elements
|
47
|
-
// appearing attached to state.
|
48
|
-
const changePreview = generatePreview(
|
49
|
-
event.changes,
|
50
|
-
structuredClone(after),
|
51
|
-
isStore,
|
52
|
-
);
|
53
|
-
if (changePreview) {
|
54
|
-
tabs.unshift(
|
55
|
-
html`<div name="Summary" style=${{ margin: "1em 0em", width: "100%" }}>
|
56
|
-
${changePreview}
|
57
|
-
</div>`,
|
58
|
-
);
|
59
|
-
}
|
60
|
-
|
61
|
-
// Compute the title
|
62
|
-
const title = event.event === "state" ? "State Updated" : "Store Updated";
|
63
|
-
|
64
|
-
return html`
|
65
|
-
<${EventPanel}
|
66
|
-
id=${id}
|
67
|
-
title="${title}"
|
68
|
-
subTitle=${formatDateTime(new Date(event.timestamp))}
|
69
|
-
text=${tabs.length === 1 ? summary : undefined}
|
70
|
-
collapse=${changePreview === undefined ? true : undefined}
|
71
|
-
style=${style}
|
72
|
-
selectedNav=${eventState.selectedNav || ""}
|
73
|
-
onSelectedNav=${(selectedNav) => {
|
74
|
-
setEventState({ ...eventState, selectedNav });
|
75
|
-
}}
|
76
|
-
collapsed=${eventState.collapsed}
|
77
|
-
onCollapsed=${(collapsed) => {
|
78
|
-
setEventState({ ...eventState, collapsed });
|
79
|
-
}}
|
80
|
-
>
|
81
|
-
${tabs}
|
82
|
-
</${EventPanel}>`;
|
83
|
-
};
|
84
|
-
|
85
|
-
/**
|
86
|
-
* Renders the value of a change based on its type.
|
87
|
-
*
|
88
|
-
* @param {import("../../../types/log").JsonChange[]} changes - The change object containing the value.
|
89
|
-
* @param {Object} resolvedState - The change object containing the value.
|
90
|
-
* @param {boolean} isStore - Is this rendering a store event
|
91
|
-
* @returns {import("preact").JSX.Element|Object|string|undefined} - The rendered HTML template if the value is an object with content and source, otherwise the value itself.
|
92
|
-
*/
|
93
|
-
const generatePreview = (changes, resolvedState, isStore) => {
|
94
|
-
const results = [];
|
95
|
-
for (const changeType of [
|
96
|
-
...RenderableChangeTypes,
|
97
|
-
...(isStore ? StoreSpecificRenderableTypes : []),
|
98
|
-
]) {
|
99
|
-
// Note that we currently only have renderers that depend upon
|
100
|
-
// add, remove, replace, but we should likely add
|
101
|
-
// move, copy, test
|
102
|
-
const requiredMatchCount =
|
103
|
-
changeType.signature.remove.length +
|
104
|
-
changeType.signature.replace.length +
|
105
|
-
changeType.signature.add.length;
|
106
|
-
let matchingOps = 0;
|
107
|
-
for (const change of changes) {
|
108
|
-
if (
|
109
|
-
changeType.signature[change.op] &&
|
110
|
-
changeType.signature[change.op].length > 0
|
111
|
-
) {
|
112
|
-
changeType.signature[change.op].forEach((signature) => {
|
113
|
-
if (change.path.match(signature)) {
|
114
|
-
matchingOps++;
|
115
|
-
}
|
116
|
-
});
|
117
|
-
}
|
118
|
-
}
|
119
|
-
if (matchingOps === requiredMatchCount) {
|
120
|
-
results.push(changeType.render(changes, resolvedState));
|
121
|
-
// Only one renderer can process a change
|
122
|
-
// TODO: consider changing this to allow many handlers to render (though then we sort of need
|
123
|
-
// to match the renderer to the key (e.g. a rendered for `tool_choice` a renderer for `tools` etc..))
|
124
|
-
break;
|
125
|
-
}
|
126
|
-
}
|
127
|
-
return results.length > 0 ? results : undefined;
|
128
|
-
};
|
129
|
-
|
130
|
-
/**
|
131
|
-
* Renders the value of a change based on its type.
|
132
|
-
*
|
133
|
-
* @param {import("../../../types/log").JsonChange[]} changes - The change object containing the value.
|
134
|
-
* @returns {string} - A string summarizing the changes
|
135
|
-
*/
|
136
|
-
const summarizeChanges = (changes) => {
|
137
|
-
const changeMap = {
|
138
|
-
add: [],
|
139
|
-
copy: [],
|
140
|
-
move: [],
|
141
|
-
replace: [],
|
142
|
-
remove: [],
|
143
|
-
test: [],
|
144
|
-
};
|
145
|
-
for (const change of changes) {
|
146
|
-
changeMap[change.op].push(change.path);
|
147
|
-
}
|
148
|
-
|
149
|
-
const changeList = [];
|
150
|
-
const totalOpCount = Object.keys(changeMap).reduce((prev, current) => {
|
151
|
-
return prev + changeMap[current].length;
|
152
|
-
}, 0);
|
153
|
-
|
154
|
-
if (totalOpCount > 2) {
|
155
|
-
Object.keys(changeMap).forEach((key) => {
|
156
|
-
const opChanges = changeMap[key];
|
157
|
-
if (opChanges.length > 0) {
|
158
|
-
changeList.push(`${key} ${opChanges.length}`);
|
159
|
-
}
|
160
|
-
});
|
161
|
-
} else {
|
162
|
-
Object.keys(changeMap).forEach((key) => {
|
163
|
-
const opChanges = changeMap[key];
|
164
|
-
if (opChanges.length > 0) {
|
165
|
-
changeList.push(`${key} ${opChanges.join(", ")}`);
|
166
|
-
}
|
167
|
-
});
|
168
|
-
}
|
169
|
-
return changeList.join(", ");
|
170
|
-
};
|
171
|
-
|
172
|
-
/**
|
173
|
-
* Renders a view displaying a list of state changes.
|
174
|
-
*
|
175
|
-
* @param {import("../../../types/log").Changes} changes - The list of changes to be displayed.
|
176
|
-
* @returns {[Object, Object]} The before and after objects
|
177
|
-
*/
|
178
|
-
const synthesizeComparable = (changes) => {
|
179
|
-
const before = {};
|
180
|
-
const after = {};
|
181
|
-
|
182
|
-
for (const change of changes) {
|
183
|
-
switch (change.op) {
|
184
|
-
case "add":
|
185
|
-
// 'Fill in' arrays with empty strings to ensure there is no unnecessary diff
|
186
|
-
initializeArrays(before, change.path);
|
187
|
-
initializeArrays(after, change.path);
|
188
|
-
setPath(after, change.path, change.value);
|
189
|
-
break;
|
190
|
-
case "copy":
|
191
|
-
setPath(before, change.path, change.value);
|
192
|
-
setPath(after, change.path, change.value);
|
193
|
-
break;
|
194
|
-
case "move":
|
195
|
-
setPath(before, change.from, change.value);
|
196
|
-
setPath(after, change.path, change.value);
|
197
|
-
break;
|
198
|
-
case "remove":
|
199
|
-
setPath(before, change.path, change.value);
|
200
|
-
break;
|
201
|
-
case "replace":
|
202
|
-
setPath(before, change.path, change.replaced);
|
203
|
-
setPath(after, change.path, change.value);
|
204
|
-
break;
|
205
|
-
case "test":
|
206
|
-
break;
|
207
|
-
}
|
208
|
-
}
|
209
|
-
return [before, after];
|
210
|
-
};
|
211
|
-
|
212
|
-
/**
|
213
|
-
* Sets a value at a path in an object
|
214
|
-
*
|
215
|
-
* @param {Object} target - The object into which to set the path
|
216
|
-
* @param {string} path - The path of the value to set
|
217
|
-
* @param {unknown} value - The value to set
|
218
|
-
* @returns {Object} The mutated object
|
219
|
-
*/
|
220
|
-
function setPath(target, path, value) {
|
221
|
-
const keys = parsePath(path);
|
222
|
-
let current = target;
|
223
|
-
|
224
|
-
for (let i = 0; i < keys.length - 1; i++) {
|
225
|
-
const key = keys[i];
|
226
|
-
if (!(key in current)) {
|
227
|
-
// If the next key is a number, create an array, otherwise an object
|
228
|
-
current[key] = isArrayIndex(keys[i + 1]) ? [] : {};
|
229
|
-
}
|
230
|
-
current = current[key];
|
231
|
-
}
|
232
|
-
|
233
|
-
const lastKey = keys[keys.length - 1];
|
234
|
-
current[lastKey] = value;
|
235
|
-
}
|
236
|
-
|
237
|
-
/**
|
238
|
-
* Places structure in an object (without placing values)
|
239
|
-
*
|
240
|
-
* @param {Object} target - The object into which to initialize the path
|
241
|
-
* @param {string} path - The path of the value to set
|
242
|
-
* @returns {Object} The mutated object
|
243
|
-
*/
|
244
|
-
function initializeArrays(target, path) {
|
245
|
-
const keys = parsePath(path);
|
246
|
-
let current = target;
|
247
|
-
|
248
|
-
for (let i = 0; i < keys.length - 1; i++) {
|
249
|
-
const key = keys[i];
|
250
|
-
const nextKey = keys[i + 1];
|
251
|
-
|
252
|
-
if (isArrayIndex(nextKey)) {
|
253
|
-
current[key] = initializeArray(current[key], nextKey);
|
254
|
-
} else {
|
255
|
-
current[key] = initializeObject(current[key]);
|
256
|
-
}
|
257
|
-
|
258
|
-
current = current[key];
|
259
|
-
}
|
260
|
-
|
261
|
-
const lastKey = keys[keys.length - 1];
|
262
|
-
if (isArrayIndex(lastKey)) {
|
263
|
-
initializeArray(current, lastKey);
|
264
|
-
}
|
265
|
-
}
|
266
|
-
|
267
|
-
/**
|
268
|
-
* Parses a path into an array of keys
|
269
|
-
*
|
270
|
-
* @param {string} path - The path to split
|
271
|
-
* @returns {string[]} Array of keys
|
272
|
-
*/
|
273
|
-
function parsePath(path) {
|
274
|
-
return path.split("/").filter(Boolean);
|
275
|
-
}
|
276
|
-
|
277
|
-
/**
|
278
|
-
* Checks if a key represents an array index
|
279
|
-
*
|
280
|
-
* @param {string} key - The key to check
|
281
|
-
* @returns {boolean} True if the key is a number
|
282
|
-
*/
|
283
|
-
function isArrayIndex(key) {
|
284
|
-
return /^\d+$/.test(key);
|
285
|
-
}
|
286
|
-
|
287
|
-
/**
|
288
|
-
* Initializes an array at a given key, ensuring it is large enough
|
289
|
-
*
|
290
|
-
* @param {Array|undefined} current - The current array or undefined
|
291
|
-
* @param {string} nextKey - The key of the next array index
|
292
|
-
* @returns {Array} Initialized array
|
293
|
-
*/
|
294
|
-
function initializeArray(current, nextKey) {
|
295
|
-
if (!Array.isArray(current)) {
|
296
|
-
current = [];
|
297
|
-
}
|
298
|
-
const nextKeyIndex = parseInt(nextKey, 10);
|
299
|
-
while (current.length < nextKeyIndex) {
|
300
|
-
current.push("");
|
301
|
-
}
|
302
|
-
return current;
|
303
|
-
}
|
304
|
-
|
305
|
-
/**
|
306
|
-
* Initializes an object at a given key if it doesn't exist
|
307
|
-
*
|
308
|
-
* @param {Object|undefined} current - The current object or undefined
|
309
|
-
* @returns {Object} Initialized object
|
310
|
-
*/
|
311
|
-
function initializeObject(current) {
|
312
|
-
return current ?? {};
|
313
|
-
}
|