inspect-ai 0.3.90__py3-none-any.whl → 0.3.92__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- inspect_ai/_cli/common.py +13 -0
- inspect_ai/_cli/eval.py +44 -0
- inspect_ai/_display/textual/widgets/samples.py +49 -4
- inspect_ai/_display/textual/widgets/vscode.py +4 -2
- inspect_ai/_eval/eval.py +41 -28
- inspect_ai/_eval/evalset.py +4 -0
- inspect_ai/_eval/loader.py +4 -5
- inspect_ai/_eval/registry.py +1 -1
- inspect_ai/_eval/run.py +6 -3
- inspect_ai/_eval/task/log.py +6 -0
- inspect_ai/_eval/task/run.py +108 -41
- inspect_ai/_eval/task/sandbox.py +19 -5
- inspect_ai/_util/_async.py +1 -1
- inspect_ai/_util/constants.py +1 -0
- inspect_ai/_util/environ.py +32 -0
- inspect_ai/_util/file.py +8 -1
- inspect_ai/_util/httpx.py +105 -22
- inspect_ai/_util/registry.py +83 -9
- inspect_ai/_util/text.py +81 -17
- inspect_ai/_util/transcript.py +9 -6
- inspect_ai/_util/vscode.py +7 -2
- inspect_ai/_view/schema.py +1 -1
- inspect_ai/_view/www/babel.config.js +11 -0
- inspect_ai/_view/www/dist/assets/index.css +3640 -3563
- inspect_ai/_view/www/dist/assets/index.js +59204 -52519
- inspect_ai/_view/www/eslint.config.mjs +10 -1
- inspect_ai/_view/www/jest.config.mjs +21 -0
- inspect_ai/_view/www/log-schema.json +111 -2
- inspect_ai/_view/www/package.json +19 -5
- inspect_ai/_view/www/src/{types → @types}/log.d.ts +95 -32
- inspect_ai/_view/www/{App.css → src/app/App.css} +22 -14
- inspect_ai/_view/www/src/app/App.tsx +168 -0
- inspect_ai/_view/www/src/{AppErrorBoundary.tsx → app/AppErrorBoundary.tsx} +1 -1
- inspect_ai/_view/www/src/{appearance → app/appearance}/icons.ts +1 -0
- inspect_ai/_view/www/src/{metadata → app/content}/RenderedContent.tsx +5 -5
- inspect_ai/_view/www/src/{workspace/WorkSpaceView.tsx → app/log-view/LogView.tsx} +59 -40
- inspect_ai/_view/www/src/app/log-view/LogViewContainer.tsx +159 -0
- inspect_ai/_view/www/src/app/log-view/LogViewLayout.tsx +109 -0
- inspect_ai/_view/www/src/{workspace → app/log-view}/error/TaskErrorPanel.tsx +3 -3
- inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/ModelRolesView.tsx +1 -1
- inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/Navbar.tsx +4 -4
- inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/PrimaryBar.tsx +8 -8
- inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/ResultsPanel.tsx +6 -6
- inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/RunningStatusPanel.tsx +1 -1
- inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/ScoreGrid.tsx +1 -1
- inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/SecondaryBar.tsx +8 -8
- inspect_ai/_view/www/src/{workspace → app/log-view}/tabs/InfoTab.tsx +35 -6
- inspect_ai/_view/www/src/app/log-view/tabs/JsonTab.tsx +136 -0
- inspect_ai/_view/www/src/{workspace → app/log-view}/tabs/SamplesTab.tsx +82 -73
- inspect_ai/_view/www/src/{workspace → app/log-view}/tabs/grouping.ts +3 -3
- inspect_ai/_view/www/src/{workspace → app/log-view}/tabs/types.ts +1 -1
- inspect_ai/_view/www/src/{plan → app/plan}/DatasetDetailView.tsx +2 -2
- inspect_ai/_view/www/src/{plan → app/plan}/DetailStep.tsx +1 -1
- inspect_ai/_view/www/src/{plan → app/plan}/ModelCard.tsx +4 -4
- inspect_ai/_view/www/src/{plan → app/plan}/PlanCard.tsx +2 -2
- inspect_ai/_view/www/src/{plan → app/plan}/PlanDetailView.tsx +5 -5
- inspect_ai/_view/www/src/{plan → app/plan}/SolverDetailView.tsx +1 -1
- inspect_ai/_view/www/src/app/routing/AppRouter.tsx +58 -0
- inspect_ai/_view/www/src/app/routing/navigationHooks.ts +182 -0
- inspect_ai/_view/www/src/app/routing/url.ts +43 -0
- inspect_ai/_view/www/src/{samples → app/samples}/InlineSampleDisplay.tsx +11 -27
- inspect_ai/_view/www/src/{samples → app/samples}/SampleDialog.tsx +36 -40
- inspect_ai/_view/www/src/{samples → app/samples}/SampleDisplay.module.css +4 -0
- inspect_ai/_view/www/src/{samples → app/samples}/SampleDisplay.tsx +116 -49
- inspect_ai/_view/www/src/{samples → app/samples}/SampleSummaryView.module.css +1 -1
- inspect_ai/_view/www/src/{samples → app/samples}/SampleSummaryView.tsx +29 -26
- inspect_ai/_view/www/src/{samples → app/samples}/SamplesTools.tsx +3 -3
- inspect_ai/_view/www/src/{samples → app/samples}/chat/ChatMessage.module.css +5 -2
- inspect_ai/_view/www/src/{samples → app/samples}/chat/ChatMessage.tsx +12 -4
- inspect_ai/_view/www/src/{samples → app/samples}/chat/ChatMessageRenderer.tsx +3 -3
- inspect_ai/_view/www/src/{samples → app/samples}/chat/ChatMessageRow.tsx +6 -1
- inspect_ai/_view/www/src/{samples → app/samples}/chat/ChatView.tsx +4 -2
- inspect_ai/_view/www/src/{samples → app/samples}/chat/ChatViewVirtualList.tsx +5 -3
- inspect_ai/_view/www/src/app/samples/chat/MessageContent.module.css +12 -0
- inspect_ai/_view/www/src/{samples → app/samples}/chat/MessageContent.tsx +11 -10
- inspect_ai/_view/www/src/app/samples/chat/MessageContents.module.css +7 -0
- inspect_ai/_view/www/src/{samples → app/samples}/chat/MessageContents.tsx +14 -8
- inspect_ai/_view/www/src/{samples → app/samples}/chat/messages.ts +2 -2
- inspect_ai/_view/www/src/app/samples/chat/tools/ToolCallView.module.css +7 -0
- inspect_ai/_view/www/src/{samples → app/samples}/chat/tools/ToolCallView.tsx +26 -27
- inspect_ai/_view/www/src/app/samples/chat/tools/ToolInput.module.css +19 -0
- inspect_ai/_view/www/src/{samples → app/samples}/chat/tools/ToolInput.tsx +3 -3
- inspect_ai/_view/www/src/{samples → app/samples}/chat/tools/ToolOutput.module.css +1 -0
- inspect_ai/_view/www/src/{samples → app/samples}/chat/tools/ToolOutput.tsx +1 -1
- inspect_ai/_view/www/src/{samples → app/samples}/chat/tools/ToolTitle.module.css +4 -0
- inspect_ai/_view/www/src/{samples → app/samples}/chat/tools/ToolTitle.tsx +2 -2
- inspect_ai/_view/www/src/{samples → app/samples}/chat/tools/tool.ts +1 -1
- inspect_ai/_view/www/src/app/samples/chat/types.ts +1 -0
- inspect_ai/_view/www/src/{samples → app/samples}/descriptor/samplesDescriptor.tsx +38 -15
- inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/BooleanScoreDescriptor.tsx +1 -1
- inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/CategoricalScoreDescriptor.tsx +2 -2
- inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/NumericScoreDescriptor.tsx +3 -3
- inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/ObjectScoreDescriptor.tsx +4 -4
- inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/OtherScoreDescriptor.tsx +2 -2
- inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/PassFailScoreDescriptor.tsx +2 -2
- inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/ScoreDescriptor.tsx +1 -1
- inspect_ai/_view/www/src/{samples → app/samples}/descriptor/types.ts +4 -3
- inspect_ai/_view/www/src/{samples → app/samples}/error/SampleErrorView.module.css +2 -1
- inspect_ai/_view/www/src/{samples → app/samples}/list/SampleHeader.tsx +3 -0
- inspect_ai/_view/www/src/{samples → app/samples}/list/SampleList.tsx +47 -33
- inspect_ai/_view/www/src/{samples → app/samples}/list/SampleRow.module.css +16 -0
- inspect_ai/_view/www/src/{samples → app/samples}/list/SampleRow.tsx +47 -20
- inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/SelectScorer.tsx +1 -1
- inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/SortFilter.tsx +4 -4
- inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/filters.ts +8 -6
- inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/sample-filter/SampleFilter.tsx +4 -3
- inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/sample-filter/completions.ts +1 -1
- inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/sample-filter/language.ts +1 -0
- inspect_ai/_view/www/src/{samples → app/samples}/sampleDataAdapter.ts +3 -3
- inspect_ai/_view/www/src/{samples → app/samples}/sampleLimit.ts +1 -1
- inspect_ai/_view/www/src/{samples → app/samples}/scores/SampleScores.tsx +1 -1
- inspect_ai/_view/www/src/{samples → app/samples}/scores/SampleScoresGrid.tsx +12 -11
- inspect_ai/_view/www/src/{samples → app/samples}/scores/SampleScoresView.tsx +6 -6
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/ApprovalEventView.tsx +1 -1
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/ErrorEventView.tsx +3 -3
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/InfoEventView.tsx +4 -4
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/InputEventView.tsx +3 -3
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/LoggerEventView.tsx +3 -3
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/ModelEventView.module.css +13 -7
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/ModelEventView.tsx +49 -21
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/SampleInitEventView.tsx +11 -9
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/SampleLimitEventView.tsx +1 -1
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/SandboxEventView.tsx +8 -6
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/ScoreEventView.tsx +4 -4
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/StepEventView.tsx +11 -3
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/SubtaskEventView.tsx +2 -2
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/ToolEventView.tsx +2 -2
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/TranscriptView.module.css +8 -7
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/TranscriptView.tsx +32 -114
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/TranscriptVirtualListComponent.module.css +6 -5
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/TranscriptVirtualListComponent.tsx +14 -2
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventPanel.tsx +2 -2
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventTimingPanel.tsx +1 -1
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/utils.ts +1 -1
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/state/StateEventRenderers.tsx +23 -21
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/state/StateEventRenders.module.css +7 -0
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/state/StateEventView.tsx +2 -2
- inspect_ai/_view/www/src/app/samples/transcript/transform/fixups.ts +142 -0
- inspect_ai/_view/www/src/app/samples/transcript/transform/treeify.ts +39 -0
- inspect_ai/_view/www/src/{samples → app/samples}/transcript/types.ts +1 -1
- inspect_ai/_view/www/src/{workspace → app}/sidebar/EvalStatus.tsx +1 -1
- inspect_ai/_view/www/src/app/sidebar/LogDirectoryTitleView.module.css +16 -0
- inspect_ai/_view/www/src/app/sidebar/LogDirectoryTitleView.tsx +70 -0
- inspect_ai/_view/www/src/{workspace → app}/sidebar/Sidebar.module.css +8 -0
- inspect_ai/_view/www/src/{workspace → app}/sidebar/Sidebar.tsx +35 -17
- inspect_ai/_view/www/src/{workspace → app}/sidebar/SidebarLogEntry.tsx +1 -1
- inspect_ai/_view/www/src/{workspace → app}/sidebar/SidebarScoreView.tsx +2 -2
- inspect_ai/_view/www/src/{workspace → app}/sidebar/SidebarScoresView.tsx +2 -2
- inspect_ai/_view/www/src/{types.ts → app/types.ts} +18 -11
- inspect_ai/_view/www/src/{usage → app/usage}/ModelTokenTable.tsx +1 -1
- inspect_ai/_view/www/src/{usage → app/usage}/ModelUsagePanel.tsx +2 -2
- inspect_ai/_view/www/src/{usage → app/usage}/TokenTable.tsx +1 -1
- inspect_ai/_view/www/src/{usage → app/usage}/UsageCard.tsx +6 -6
- inspect_ai/_view/www/src/{api → client/api}/api-browser.ts +2 -2
- inspect_ai/_view/www/src/{api → client/api}/api-http.ts +3 -3
- inspect_ai/_view/www/src/{api → client/api}/api-vscode.ts +2 -2
- inspect_ai/_view/www/src/{api → client/api}/client-api.ts +6 -5
- inspect_ai/_view/www/src/{api → client/api}/index.ts +2 -2
- inspect_ai/_view/www/src/{api → client/api}/types.ts +4 -1
- inspect_ai/_view/www/src/{logfile → client/remote}/remoteLogFile.ts +3 -3
- inspect_ai/_view/www/src/{storage → client/storage}/index.ts +11 -5
- inspect_ai/_view/www/src/components/Card.tsx +1 -1
- inspect_ai/_view/www/src/components/CopyButton.tsx +1 -1
- inspect_ai/_view/www/src/components/DownloadButton.tsx +1 -1
- inspect_ai/_view/www/src/components/ErrorPanel.tsx +1 -1
- inspect_ai/_view/www/src/components/{ExpandablePanel.css → ExpandablePanel.module.css} +14 -11
- inspect_ai/_view/www/src/components/ExpandablePanel.tsx +16 -10
- inspect_ai/_view/www/src/components/FindBand.tsx +1 -1
- inspect_ai/_view/www/src/components/JsonPanel.css +2 -2
- inspect_ai/_view/www/src/components/LargeModal.tsx +12 -1
- inspect_ai/_view/www/src/components/LightboxCarousel.tsx +1 -1
- inspect_ai/_view/www/src/components/MarkdownDiv.tsx +3 -1
- inspect_ai/_view/www/src/components/MessageBand.tsx +1 -1
- inspect_ai/_view/www/src/components/NoContentsPanel.tsx +1 -1
- inspect_ai/_view/www/src/constants.ts +10 -9
- inspect_ai/_view/www/src/index.tsx +27 -11
- inspect_ai/_view/www/src/state/appSlice.ts +44 -5
- inspect_ai/_view/www/src/state/hooks.ts +30 -7
- inspect_ai/_view/www/src/state/logSlice.ts +7 -5
- inspect_ai/_view/www/src/state/logsPolling.ts +1 -1
- inspect_ai/_view/www/src/state/logsSlice.ts +18 -13
- inspect_ai/_view/www/src/state/samplePolling.ts +12 -12
- inspect_ai/_view/www/src/state/sampleSlice.ts +3 -5
- inspect_ai/_view/www/src/state/sampleUtils.ts +1 -1
- inspect_ai/_view/www/src/{scoring/utils.ts → state/scoring.ts} +2 -2
- inspect_ai/_view/www/src/state/store.ts +9 -7
- inspect_ai/_view/www/src/state/utils.ts +1 -1
- inspect_ai/_view/www/src/tests/README.md +49 -0
- inspect_ai/_view/www/src/tests/__mocks__/fileMock.js +1 -0
- inspect_ai/_view/www/src/tests/__mocks__/styleMock.js +1 -0
- inspect_ai/_view/www/src/tests/setupTests.mjs +1 -0
- inspect_ai/_view/www/src/tests/utils/base64.test.ts +23 -0
- inspect_ai/_view/www/src/tests/utils/format.test.ts +127 -0
- inspect_ai/_view/www/src/tests/utils/path.test.ts +54 -0
- inspect_ai/_view/www/src/utils/format.ts +8 -2
- inspect_ai/_view/www/src/utils/path.ts +14 -2
- inspect_ai/_view/www/src/utils/polling.ts +1 -2
- inspect_ai/_view/www/src/utils/uri.ts +32 -0
- inspect_ai/_view/www/yarn.lock +3310 -382
- inspect_ai/agent/_handoff.py +6 -3
- inspect_ai/agent/_human/agent.py +5 -3
- inspect_ai/agent/_human/install.py +16 -7
- inspect_ai/agent/_human/panel.py +14 -1
- inspect_ai/agent/_human/service.py +5 -1
- inspect_ai/agent/_react.py +161 -128
- inspect_ai/agent/_types.py +15 -4
- inspect_ai/approval/_policy.py +2 -2
- inspect_ai/log/_file.py +30 -11
- inspect_ai/log/_log.py +7 -1
- inspect_ai/log/_recorders/eval.py +3 -0
- inspect_ai/log/_recorders/types.py +1 -0
- inspect_ai/log/_samples.py +4 -0
- inspect_ai/model/_call_tools.py +33 -17
- inspect_ai/model/_generate_config.py +10 -2
- inspect_ai/model/_model.py +41 -21
- inspect_ai/model/_model_output.py +2 -1
- inspect_ai/model/_openai.py +10 -8
- inspect_ai/model/_openai_responses.py +95 -42
- inspect_ai/model/_providers/anthropic.py +14 -12
- inspect_ai/model/_providers/google.py +191 -95
- inspect_ai/model/_providers/hf.py +1 -1
- inspect_ai/model/_providers/mistral.py +2 -3
- inspect_ai/model/_providers/openai.py +54 -17
- inspect_ai/model/_providers/openai_o1.py +1 -1
- inspect_ai/model/_providers/openai_responses.py +28 -16
- inspect_ai/model/_providers/openrouter.py +14 -0
- inspect_ai/model/_providers/providers.py +2 -2
- inspect_ai/model/_providers/util/chatapi.py +17 -7
- inspect_ai/model/_providers/vllm.py +1 -1
- inspect_ai/scorer/_metric.py +17 -1
- inspect_ai/scorer/_model.py +51 -6
- inspect_ai/scorer/_scorer.py +1 -1
- inspect_ai/solver/_human_agent.py +3 -0
- inspect_ai/solver/_plan.py +1 -1
- inspect_ai/solver/_solver.py +1 -1
- inspect_ai/solver/_use_tools.py +14 -8
- inspect_ai/tool/__init__.py +16 -1
- inspect_ai/tool/_json_rpc_helpers.py +285 -0
- inspect_ai/tool/_mcp/__init__.py +13 -0
- inspect_ai/tool/_mcp/_context.py +14 -0
- inspect_ai/tool/_mcp/_mcp.py +293 -0
- inspect_ai/tool/_mcp/_sandbox.py +104 -0
- inspect_ai/tool/_mcp/_types.py +31 -0
- inspect_ai/tool/_mcp/connection.py +60 -0
- inspect_ai/tool/_mcp/sampling.py +118 -0
- inspect_ai/tool/_mcp/server.py +112 -0
- inspect_ai/tool/_mcp/tools.py +34 -0
- inspect_ai/tool/_tool.py +13 -0
- inspect_ai/tool/_tool_def.py +24 -7
- inspect_ai/tool/_tool_support_helpers.py +129 -153
- inspect_ai/tool/_tools/_bash_session.py +11 -11
- inspect_ai/tool/_tools/_text_editor.py +6 -6
- inspect_ai/tool/_tools/_web_browser/_web_browser.py +8 -8
- inspect_ai/util/_anyio.py +31 -20
- inspect_ai/util/_json.py +20 -2
- inspect_ai/util/_sandbox/context.py +18 -7
- inspect_ai/util/_sandbox/docker/compose.py +1 -1
- inspect_ai/util/_sandbox/docker/docker.py +92 -21
- inspect_ai/util/_sandbox/environment.py +33 -2
- inspect_ai/util/_sandbox/events.py +2 -2
- inspect_ai/util/_sandbox/service.py +13 -3
- {inspect_ai-0.3.90.dist-info → inspect_ai-0.3.92.dist-info}/METADATA +6 -2
- inspect_ai-0.3.92.dist-info/RECORD +732 -0
- {inspect_ai-0.3.90.dist-info → inspect_ai-0.3.92.dist-info}/WHEEL +1 -1
- inspect_ai/_view/www/src/App.tsx +0 -316
- inspect_ai/_view/www/src/samples/chat/MessageContent.module.css +0 -4
- inspect_ai/_view/www/src/samples/chat/MessageContents.module.css +0 -3
- inspect_ai/_view/www/src/samples/chat/tools/ToolCallView.module.css +0 -3
- inspect_ai/_view/www/src/samples/chat/tools/ToolInput.module.css +0 -14
- inspect_ai/_view/www/src/workspace/WorkSpace.tsx +0 -292
- inspect_ai/_view/www/src/workspace/sidebar/LogDirectoryTitleView.module.css +0 -5
- inspect_ai/_view/www/src/workspace/sidebar/LogDirectoryTitleView.tsx +0 -57
- inspect_ai/_view/www/src/workspace/tabs/JsonTab.tsx +0 -43
- inspect_ai-0.3.90.dist-info/RECORD +0 -705
- /inspect_ai/_view/www/src/{types → @types}/asciicinema-player.d.ts +0 -0
- /inspect_ai/_view/www/src/{types → @types}/jsondiffpatch.d.ts +0 -0
- /inspect_ai/_view/www/src/{types → @types}/markdown-it-katex.d.ts +0 -0
- /inspect_ai/_view/www/src/{types → @types}/prism.d.ts +0 -0
- /inspect_ai/_view/www/src/{appearance → app/appearance}/colors.ts +0 -0
- /inspect_ai/_view/www/src/{appearance → app/appearance}/fonts.ts +0 -0
- /inspect_ai/_view/www/src/{appearance → app/appearance}/styles.ts +0 -0
- /inspect_ai/_view/www/src/{metadata → app/content}/MetaDataGrid.tsx +0 -0
- /inspect_ai/_view/www/src/{metadata → app/content}/MetaDataView.module.css +0 -0
- /inspect_ai/_view/www/src/{metadata → app/content}/MetaDataView.tsx +0 -0
- /inspect_ai/_view/www/src/{metadata → app/content}/MetadataGrid.module.css +0 -0
- /inspect_ai/_view/www/src/{metadata → app/content}/RenderedContent.module.css +0 -0
- /inspect_ai/_view/www/src/{metadata → app/content}/types.ts +0 -0
- /inspect_ai/_view/www/src/{workspace/WorkSpaceView.module.css → app/log-view/LogView.module.css} +0 -0
- /inspect_ai/_view/www/src/{workspace → app/log-view}/error/TaskErrorPanel.module.css +0 -0
- /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/ModelRolesView.module.css +0 -0
- /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/Navbar.module.css +0 -0
- /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/PrimaryBar.module.css +0 -0
- /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/ResultsPanel.module.css +0 -0
- /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/RunningStatusPanel.module.css +0 -0
- /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/ScoreGrid.module.css +0 -0
- /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/SecondaryBar.module.css +0 -0
- /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/StatusPanel.module.css +0 -0
- /inspect_ai/_view/www/src/{workspace → app/log-view}/navbar/StatusPanel.tsx +0 -0
- /inspect_ai/_view/www/src/{workspace → app/log-view}/tabs/InfoTab.module.css +0 -0
- /inspect_ai/_view/www/src/{workspace → app/log-view}/tabs/JsonTab.module.css +0 -0
- /inspect_ai/_view/www/src/{workspace → app/log-view}/tabs/RunningNoSamples.module.css +0 -0
- /inspect_ai/_view/www/src/{workspace → app/log-view}/tabs/RunningNoSamples.tsx +0 -0
- /inspect_ai/_view/www/src/{workspace → app/log-view}/types.ts +0 -0
- /inspect_ai/_view/www/src/{workspace → app/log-view}/utils.ts +0 -0
- /inspect_ai/_view/www/src/{plan → app/plan}/DatasetDetailView.module.css +0 -0
- /inspect_ai/_view/www/src/{plan → app/plan}/DetailStep.module.css +0 -0
- /inspect_ai/_view/www/src/{plan → app/plan}/ModelCard.module.css +0 -0
- /inspect_ai/_view/www/src/{plan → app/plan}/PlanDetailView.module.css +0 -0
- /inspect_ai/_view/www/src/{plan → app/plan}/ScorerDetailView.module.css +0 -0
- /inspect_ai/_view/www/src/{plan → app/plan}/ScorerDetailView.tsx +0 -0
- /inspect_ai/_view/www/src/{plan → app/plan}/SolverDetailView.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/InlineSampleDisplay.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/chat/ChatMessageRow.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/chat/ChatViewVirtualList.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/BooleanScoreDescriptor.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/ObjectScoreDescriptor.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/descriptor/score/PassFailScoreDescriptor.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/error/FlatSampleErrorView.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/error/FlatSampleErrorView.tsx +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/error/SampleErrorView.tsx +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/error/error.ts +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/list/SampleFooter.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/list/SampleFooter.tsx +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/list/SampleHeader.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/list/SampleList.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/list/SampleSeparator.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/list/SampleSeparator.tsx +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/EpochFilter.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/EpochFilter.tsx +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/SelectScorer.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/SortFilter.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/sample-filter/SampleFilter.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/sample-tools/sample-filter/tokenize.ts +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/scores/SampleScores.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/scores/SampleScoresGrid.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/scores/SampleScoresView.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/InfoEventView.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/LoggerEventView.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/SampleInitEventView.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/SandboxEventView.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/ScoreEventView.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/SubtaskEventView.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/ToolEventView.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventNav.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventNav.tsx +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventNavs.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventNavs.tsx +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventPanel.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventProgressPanel.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventProgressPanel.tsx +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventRow.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventRow.tsx +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventSection.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventSection.tsx +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/event/EventTimingPanel.module.css +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/state/StateDiffView.tsx +0 -0
- /inspect_ai/_view/www/src/{samples → app/samples}/transcript/state/StateEventView.module.css +0 -0
- /inspect_ai/_view/www/src/{workspace → app}/sidebar/EvalStatus.module.css +0 -0
- /inspect_ai/_view/www/src/{workspace → app}/sidebar/SidebarLogEntry.module.css +0 -0
- /inspect_ai/_view/www/src/{workspace → app}/sidebar/SidebarScoreView.module.css +0 -0
- /inspect_ai/_view/www/src/{workspace → app}/sidebar/SidebarScoresView.module.css +0 -0
- /inspect_ai/_view/www/src/{usage → app/usage}/ModelUsagePanel.module.css +0 -0
- /inspect_ai/_view/www/src/{usage → app/usage}/TokenTable.module.css +0 -0
- /inspect_ai/_view/www/src/{usage → app/usage}/UsageCard.module.css +0 -0
- /inspect_ai/_view/www/src/{api → client/api}/api-shared.ts +0 -0
- /inspect_ai/_view/www/src/{api → client/api}/jsonrpc.ts +0 -0
- /inspect_ai/_view/www/src/{logfile → client/remote}/remoteZipFile.ts +0 -0
- {inspect_ai-0.3.90.dist-info → inspect_ai-0.3.92.dist-info}/entry_points.txt +0 -0
- {inspect_ai-0.3.90.dist-info → inspect_ai-0.3.92.dist-info}/licenses/LICENSE +0 -0
- {inspect_ai-0.3.90.dist-info → inspect_ai-0.3.92.dist-info}/top_level.txt +0 -0
@@ -4,22 +4,23 @@ import "prismjs/components/prism-python";
|
|
4
4
|
|
5
5
|
import clsx from "clsx";
|
6
6
|
import { FC, Fragment, useMemo } from "react";
|
7
|
-
import { ApplicationIcons } from "../../appearance/icons";
|
8
|
-
import { MetaDataGrid } from "../../metadata/MetaDataGrid";
|
9
7
|
import {
|
10
8
|
ModelCall,
|
11
9
|
ModelEvent,
|
12
10
|
Request,
|
13
11
|
Response,
|
12
|
+
ToolChoice,
|
14
13
|
Tools1,
|
15
|
-
} from "
|
14
|
+
} from "../../../@types/log";
|
15
|
+
import { ApplicationIcons } from "../../appearance/icons";
|
16
|
+
import { MetaDataGrid } from "../../content/MetaDataGrid";
|
16
17
|
import { ModelUsagePanel } from "../../usage/ModelUsagePanel";
|
17
18
|
import { ChatView } from "../chat/ChatView";
|
18
19
|
import { EventPanel } from "./event/EventPanel";
|
19
20
|
import { EventSection } from "./event/EventSection";
|
20
21
|
|
21
|
-
import { PulsingDots } from "
|
22
|
-
import { usePrismHighlight } from "
|
22
|
+
import { PulsingDots } from "../../../components/PulsingDots";
|
23
|
+
import { usePrismHighlight } from "../../../state/hooks";
|
23
24
|
import styles from "./ModelEventView.module.css";
|
24
25
|
import { EventTimingPanel } from "./event/EventTimingPanel";
|
25
26
|
import { formatTiming, formatTitle } from "./event/utils";
|
@@ -48,7 +49,6 @@ export const ModelEventView: FC<ModelEventViewProps> = ({
|
|
48
49
|
});
|
49
50
|
|
50
51
|
const entries: Record<string, unknown> = { ...event.config };
|
51
|
-
entries["tool_choice"] = event.tool_choice;
|
52
52
|
delete entries["max_connections"];
|
53
53
|
|
54
54
|
// For any user messages which immediately preceded this model call, including a
|
@@ -56,7 +56,7 @@ export const ModelEventView: FC<ModelEventViewProps> = ({
|
|
56
56
|
// are already shown in the tool call above)
|
57
57
|
const userMessages = [];
|
58
58
|
for (const msg of event.input.slice().reverse()) {
|
59
|
-
if (msg.role === "user" && !msg.tool_call_id) {
|
59
|
+
if ((msg.role === "user" && !msg.tool_call_id) || msg.role === "system") {
|
60
60
|
userMessages.push(msg);
|
61
61
|
} else {
|
62
62
|
break;
|
@@ -79,9 +79,8 @@ export const ModelEventView: FC<ModelEventViewProps> = ({
|
|
79
79
|
<ChatView
|
80
80
|
id={`${id}-model-output`}
|
81
81
|
messages={[...userMessages, ...(outputMessages || [])]}
|
82
|
-
className={clsx(styles.output)}
|
83
82
|
numbered={false}
|
84
|
-
toolCallStyle="
|
83
|
+
toolCallStyle="omit"
|
85
84
|
/>
|
86
85
|
{event.pending ? (
|
87
86
|
<div className={clsx(styles.progress)}>
|
@@ -91,9 +90,14 @@ export const ModelEventView: FC<ModelEventViewProps> = ({
|
|
91
90
|
</div>
|
92
91
|
<div data-name="All" className={styles.container}>
|
93
92
|
<div className={styles.all}>
|
94
|
-
|
95
|
-
<
|
96
|
-
|
93
|
+
{Object.keys(entries).length > 0 && (
|
94
|
+
<EventSection
|
95
|
+
title="Configuration"
|
96
|
+
className={styles.tableSelection}
|
97
|
+
>
|
98
|
+
<MetaDataGrid entries={entries} plain={true} />
|
99
|
+
</EventSection>
|
100
|
+
)}
|
97
101
|
|
98
102
|
<EventSection title="Usage" className={styles.tableSelection}>
|
99
103
|
{event.output.usage !== null ? (
|
@@ -109,13 +113,6 @@ export const ModelEventView: FC<ModelEventViewProps> = ({
|
|
109
113
|
working_time={event.working_time}
|
110
114
|
/>
|
111
115
|
</EventSection>
|
112
|
-
|
113
|
-
<EventSection
|
114
|
-
title="Tools"
|
115
|
-
className={clsx(styles.tableSelection, styles.tools)}
|
116
|
-
>
|
117
|
-
<ToolsConfig tools={event.tools} />
|
118
|
-
</EventSection>
|
119
116
|
</div>
|
120
117
|
|
121
118
|
<EventSection title="Messages">
|
@@ -126,6 +123,12 @@ export const ModelEventView: FC<ModelEventViewProps> = ({
|
|
126
123
|
</EventSection>
|
127
124
|
</div>
|
128
125
|
|
126
|
+
{event.tools.length > 1 && (
|
127
|
+
<div data-name="Tools" className={styles.container}>
|
128
|
+
<ToolsConfig tools={event.tools} toolChoice={event.tool_choice} />
|
129
|
+
</div>
|
130
|
+
)}
|
131
|
+
|
129
132
|
{event.call ? (
|
130
133
|
<APIView
|
131
134
|
data-name="API"
|
@@ -192,9 +195,10 @@ export const APICodeCell: FC<APICodeCellProps> = ({ id, contents }) => {
|
|
192
195
|
|
193
196
|
interface ToolConfigProps {
|
194
197
|
tools: Tools1;
|
198
|
+
toolChoice: ToolChoice;
|
195
199
|
}
|
196
200
|
|
197
|
-
const ToolsConfig: FC<ToolConfigProps> = ({ tools }) => {
|
201
|
+
const ToolsConfig: FC<ToolConfigProps> = ({ tools, toolChoice }) => {
|
198
202
|
const toolEls = tools.map((tool, idx) => {
|
199
203
|
return (
|
200
204
|
<Fragment key={`${tool.name}-${idx}`}>
|
@@ -206,5 +210,29 @@ const ToolsConfig: FC<ToolConfigProps> = ({ tools }) => {
|
|
206
210
|
);
|
207
211
|
});
|
208
212
|
|
209
|
-
return
|
213
|
+
return (
|
214
|
+
<>
|
215
|
+
<div className={styles.toolConfig}>{toolEls}</div>
|
216
|
+
<div className={styles.toolChoice}>
|
217
|
+
<div className={clsx("text-style-label", "text-style-secondary")}>
|
218
|
+
Tool Choice
|
219
|
+
</div>
|
220
|
+
<div>
|
221
|
+
<ToolChoiceView toolChoice={toolChoice} />
|
222
|
+
</div>
|
223
|
+
</div>
|
224
|
+
</>
|
225
|
+
);
|
226
|
+
};
|
227
|
+
|
228
|
+
interface ToolChoiceViewProps {
|
229
|
+
toolChoice: ToolChoice;
|
230
|
+
}
|
231
|
+
|
232
|
+
const ToolChoiceView: FC<ToolChoiceViewProps> = ({ toolChoice }) => {
|
233
|
+
if (typeof toolChoice === "string") {
|
234
|
+
return toolChoice;
|
235
|
+
} else {
|
236
|
+
return <code>`${toolChoice.name}()`</code>;
|
237
|
+
}
|
210
238
|
};
|
@@ -1,9 +1,9 @@
|
|
1
1
|
// @ts-check
|
2
|
+
import { Messages, SampleInitEvent } from "../../../@types/log";
|
3
|
+
import { formatDateTime } from "../../../utils/format";
|
4
|
+
import { toArray } from "../../../utils/type";
|
2
5
|
import { ApplicationIcons } from "../../appearance/icons";
|
3
|
-
import { MetaDataGrid } from "../../
|
4
|
-
import { Messages, SampleInitEvent } from "../../types/log";
|
5
|
-
import { formatDateTime } from "../../utils/format";
|
6
|
-
import { toArray } from "../../utils/type";
|
6
|
+
import { MetaDataGrid } from "../../content/MetaDataGrid";
|
7
7
|
import { ChatView } from "../chat/ChatView";
|
8
8
|
import { EventPanel } from "./event/EventPanel";
|
9
9
|
import { EventSection } from "./event/EventSection";
|
@@ -78,11 +78,13 @@ export const SampleInitEventView: FC<SampleInitEventViewProps> = ({
|
|
78
78
|
) : (
|
79
79
|
""
|
80
80
|
)}
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
81
|
+
{event.sample.target ? (
|
82
|
+
<EventSection title="Target">
|
83
|
+
{toArray(event.sample.target).map((target) => {
|
84
|
+
return <div key={target}>{target}</div>;
|
85
|
+
})}
|
86
|
+
</EventSection>
|
87
|
+
) : undefined}
|
86
88
|
</div>
|
87
89
|
</div>
|
88
90
|
{event.sample.metadata &&
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { FC } from "react";
|
2
|
+
import { SampleLimitEvent, Type10 } from "../../../@types/log";
|
2
3
|
import { ApplicationIcons } from "../../appearance/icons";
|
3
|
-
import { SampleLimitEvent, Type10 } from "../../types/log";
|
4
4
|
import { EventPanel } from "./event/EventPanel";
|
5
5
|
|
6
6
|
interface SampleLimitEventViewProps {
|
@@ -1,8 +1,8 @@
|
|
1
|
+
import { SandboxEvent } from "../../../@types/log";
|
2
|
+
import ExpandablePanel from "../../../components/ExpandablePanel";
|
3
|
+
import { MarkdownDiv } from "../../../components/MarkdownDiv";
|
1
4
|
import { ApplicationIcons } from "../../appearance/icons";
|
2
|
-
import
|
3
|
-
import { MarkdownDiv } from "../../components/MarkdownDiv";
|
4
|
-
import { MetaDataGrid } from "../../metadata/MetaDataGrid";
|
5
|
-
import { SandboxEvent } from "../../types/log";
|
5
|
+
import { MetaDataGrid } from "../../content/MetaDataGrid";
|
6
6
|
import { EventPanel } from "./event/EventPanel";
|
7
7
|
import { EventSection } from "./event/EventSection";
|
8
8
|
|
@@ -68,7 +68,7 @@ const ExecView: FC<ExecViewProps> = ({ id, event }) => {
|
|
68
68
|
{input !== null ? input?.trim() : undefined}
|
69
69
|
</pre>
|
70
70
|
|
71
|
-
{options !== null ? (
|
71
|
+
{options !== null && Object.keys(options).length > 0 ? (
|
72
72
|
<EventSection title={`Options`}>
|
73
73
|
<MetaDataGrid
|
74
74
|
entries={options as Record<string, unknown>}
|
@@ -84,7 +84,9 @@ const ExecView: FC<ExecViewProps> = ({ id, event }) => {
|
|
84
84
|
<MarkdownDiv markdown={output} />
|
85
85
|
</ExpandablePanel>
|
86
86
|
) : undefined}
|
87
|
-
|
87
|
+
{result !== 0 ? (
|
88
|
+
<div className={clsx(styles.result)}>Exited with code {result}</div>
|
89
|
+
) : undefined}
|
88
90
|
</EventSection>
|
89
91
|
</div>
|
90
92
|
);
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import { FC, Fragment } from "react";
|
2
|
+
import { ScoreEvent, Value1 } from "../../../@types/log";
|
3
|
+
import { MarkdownDiv } from "../../../components/MarkdownDiv";
|
4
|
+
import { formatDateTime } from "../../../utils/format";
|
2
5
|
import { ApplicationIcons } from "../../appearance/icons";
|
3
|
-
import {
|
4
|
-
import { MetaDataGrid } from "../../metadata/MetaDataGrid";
|
5
|
-
import { ScoreEvent, Value1 } from "../../types/log";
|
6
|
-
import { formatDateTime } from "../../utils/format";
|
6
|
+
import { MetaDataGrid } from "../../content/MetaDataGrid";
|
7
7
|
import { EventPanel } from "./event/EventPanel";
|
8
8
|
|
9
9
|
import clsx from "clsx";
|
@@ -1,9 +1,10 @@
|
|
1
1
|
import clsx from "clsx";
|
2
2
|
import { FC } from "react";
|
3
|
-
import { StepEvent } from "
|
4
|
-
import { formatDateTime } from "
|
3
|
+
import { StepEvent } from "../../../@types/log";
|
4
|
+
import { formatDateTime } from "../../../utils/format";
|
5
5
|
import { EventPanel } from "./event/EventPanel";
|
6
6
|
import { TranscriptComponent } from "./TranscriptView";
|
7
|
+
import { kSandboxSignalName } from "./transform/fixups";
|
7
8
|
import { EventNode } from "./types";
|
8
9
|
|
9
10
|
interface StepEventViewProps {
|
@@ -114,6 +115,7 @@ const stepDescriptor = (
|
|
114
115
|
case "system_message":
|
115
116
|
return {
|
116
117
|
...rootStepDescriptor,
|
118
|
+
collapse: true,
|
117
119
|
};
|
118
120
|
case "use_tools":
|
119
121
|
return {
|
@@ -133,7 +135,13 @@ const stepDescriptor = (
|
|
133
135
|
...rootStepDescriptor,
|
134
136
|
};
|
135
137
|
} else if (event.event === "step") {
|
136
|
-
if (event.name ===
|
138
|
+
if (event.name === kSandboxSignalName) {
|
139
|
+
return {
|
140
|
+
...rootStepDescriptor,
|
141
|
+
name: "Sandbox Events",
|
142
|
+
collapse: true,
|
143
|
+
};
|
144
|
+
} else if (event.name === "init") {
|
137
145
|
return {
|
138
146
|
...rootStepDescriptor,
|
139
147
|
name: "Init",
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import clsx from "clsx";
|
2
2
|
import { FC, ReactNode } from "react";
|
3
|
+
import { Input2, Input5, Result2, SubtaskEvent } from "../../../@types/log";
|
3
4
|
import { ApplicationIcons } from "../../appearance/icons";
|
4
|
-
import { MetaDataView } from "../../
|
5
|
-
import { Input2, Input5, Result2, SubtaskEvent } from "../../types/log";
|
5
|
+
import { MetaDataView } from "../../content/MetaDataView";
|
6
6
|
import { EventPanel } from "./event/EventPanel";
|
7
7
|
import { formatTiming, formatTitle } from "./event/utils";
|
8
8
|
import styles from "./SubtaskEventView.module.css";
|
@@ -1,5 +1,5 @@
|
|
1
|
+
import { ToolEvent } from "../../../@types/log";
|
1
2
|
import { ApplicationIcons } from "../../appearance/icons";
|
2
|
-
import { ToolEvent } from "../../types/log";
|
3
3
|
import { resolveToolInput } from "../chat/tools/tool";
|
4
4
|
import { ToolCallView } from "../chat/tools/ToolCallView";
|
5
5
|
import { ApprovalEventView } from "./ApprovalEventView";
|
@@ -8,7 +8,7 @@ import { TranscriptView } from "./TranscriptView";
|
|
8
8
|
|
9
9
|
import clsx from "clsx";
|
10
10
|
import { FC, useMemo } from "react";
|
11
|
-
import { PulsingDots } from "
|
11
|
+
import { PulsingDots } from "../../../components/PulsingDots";
|
12
12
|
import { ChatView } from "../chat/ChatView";
|
13
13
|
import { formatTiming, formatTitle } from "./event/utils";
|
14
14
|
import styles from "./ToolEventView.module.css";
|
@@ -6,13 +6,9 @@
|
|
6
6
|
background-color: var(--bs-body-bg);
|
7
7
|
}
|
8
8
|
|
9
|
-
.node.first {
|
10
|
-
padding-top: 0.5em;
|
11
|
-
}
|
12
|
-
|
13
9
|
.node {
|
14
10
|
padding-top: 0;
|
15
|
-
padding-bottom: 0.
|
11
|
+
padding-bottom: 0.65em;
|
16
12
|
}
|
17
13
|
|
18
14
|
.nodes {
|
@@ -22,7 +18,7 @@
|
|
22
18
|
|
23
19
|
.transcriptComponent {
|
24
20
|
display: grid;
|
25
|
-
margin: 0
|
21
|
+
margin: 0 0 0 0;
|
26
22
|
width: 100%;
|
27
23
|
}
|
28
24
|
|
@@ -39,9 +35,14 @@
|
|
39
35
|
}
|
40
36
|
|
41
37
|
.eventNodeContainer {
|
42
|
-
padding-
|
38
|
+
padding-top: 0.7em;
|
43
39
|
}
|
44
40
|
|
45
41
|
.eventNodeContainer.noBottom {
|
46
42
|
padding-bottom: 0;
|
47
43
|
}
|
44
|
+
|
45
|
+
.attached {
|
46
|
+
padding-top: 0rem;
|
47
|
+
margin-top: -8px;
|
48
|
+
}
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import { FC, memo, RefObject, useMemo } from "react";
|
2
|
-
import { Events } from "
|
1
|
+
import { FC, JSX, memo, RefObject, useMemo } from "react";
|
2
|
+
import { Events } from "../../../@types/log";
|
3
3
|
import { ApprovalEventView } from "./ApprovalEventView";
|
4
4
|
import { ErrorEventView } from "./ErrorEventView";
|
5
5
|
import { InfoEventView } from "./InfoEventView";
|
@@ -14,11 +14,13 @@ import { StateEventView } from "./state/StateEventView";
|
|
14
14
|
import { StepEventView } from "./StepEventView";
|
15
15
|
import { SubtaskEventView } from "./SubtaskEventView";
|
16
16
|
import { ToolEventView } from "./ToolEventView";
|
17
|
-
import { EventNode
|
17
|
+
import { EventNode } from "./types";
|
18
18
|
|
19
19
|
import clsx from "clsx";
|
20
20
|
import styles from "./TranscriptView.module.css";
|
21
21
|
import { TranscriptVirtualListComponent } from "./TranscriptVirtualListComponent";
|
22
|
+
import { fixupEventStream } from "./transform/fixups";
|
23
|
+
import { treeifyEvents } from "./transform/treeify";
|
22
24
|
|
23
25
|
interface TranscriptViewProps {
|
24
26
|
id: string;
|
@@ -86,23 +88,40 @@ interface TranscriptComponentProps {
|
|
86
88
|
*/
|
87
89
|
export const TranscriptComponent: FC<TranscriptComponentProps> = memo(
|
88
90
|
({ id, eventNodes }) => {
|
89
|
-
const rows
|
91
|
+
const rows: JSX.Element[] = [];
|
92
|
+
|
93
|
+
let attached = false;
|
94
|
+
for (let i = 0; i < eventNodes.length; i++) {
|
95
|
+
const eventNode = eventNodes[i];
|
90
96
|
const clz = [styles.eventNode];
|
97
|
+
const containerClz = [];
|
98
|
+
|
99
|
+
if (eventNode.event.event !== "tool") {
|
100
|
+
attached = false;
|
101
|
+
}
|
102
|
+
|
103
|
+
// Special handling for toggling color
|
91
104
|
if (eventNode.depth % 2 == 0) {
|
92
105
|
clz.push(styles.darkenBg);
|
93
106
|
}
|
94
|
-
|
107
|
+
|
108
|
+
// Note last node
|
109
|
+
if (i === eventNodes.length - 1) {
|
95
110
|
clz.push(styles.lastNode);
|
96
111
|
}
|
97
112
|
|
98
|
-
|
113
|
+
if (attached) {
|
114
|
+
containerClz.push(styles.attached);
|
115
|
+
}
|
99
116
|
|
117
|
+
const eventId = `${id}|event|${i}`;
|
100
118
|
const row = (
|
101
119
|
<div
|
102
120
|
key={eventId}
|
103
121
|
className={clsx(
|
104
122
|
styles.eventNodeContainer,
|
105
|
-
|
123
|
+
i === eventNodes.length - 1 ? styles.noBottom : undefined,
|
124
|
+
containerClz,
|
106
125
|
)}
|
107
126
|
>
|
108
127
|
<RenderedEventNode
|
@@ -112,8 +131,12 @@ export const TranscriptComponent: FC<TranscriptComponentProps> = memo(
|
|
112
131
|
/>
|
113
132
|
</div>
|
114
133
|
);
|
115
|
-
|
116
|
-
|
134
|
+
rows.push(row);
|
135
|
+
|
136
|
+
if (eventNode.event.event === "model") {
|
137
|
+
attached = true;
|
138
|
+
}
|
139
|
+
}
|
117
140
|
|
118
141
|
return (
|
119
142
|
<div
|
@@ -241,108 +264,3 @@ export const RenderedEventNode: FC<RenderedEventNodeProps> = memo(
|
|
241
264
|
}
|
242
265
|
},
|
243
266
|
);
|
244
|
-
|
245
|
-
/**
|
246
|
-
* Normalizes event content
|
247
|
-
*/
|
248
|
-
const fixupEventStream = (events: Events, filterPending: boolean = true) => {
|
249
|
-
const initEventIndex = events.findIndex((e) => {
|
250
|
-
return e.event === "sample_init";
|
251
|
-
});
|
252
|
-
const initEvent = events[initEventIndex];
|
253
|
-
|
254
|
-
// If filtering pending, just remove all pending events
|
255
|
-
// otherise, collapse sequential pending events of the same
|
256
|
-
// type
|
257
|
-
const collapsed = filterPending
|
258
|
-
? events.filter((e) => !e.pending)
|
259
|
-
: events.reduce<Events>((acc, event) => {
|
260
|
-
// Collapse sequential pending events of the same type
|
261
|
-
if (!event.pending) {
|
262
|
-
// Not a pending event
|
263
|
-
acc.push(event);
|
264
|
-
} else {
|
265
|
-
// For pending events, replace previous pending or add new
|
266
|
-
const lastIndex = acc.length - 1;
|
267
|
-
if (
|
268
|
-
lastIndex >= 0 &&
|
269
|
-
acc[lastIndex].pending &&
|
270
|
-
acc[lastIndex].event === event.event
|
271
|
-
) {
|
272
|
-
// Replace previous pending with current one (if they're of the same type)
|
273
|
-
acc[lastIndex] = event;
|
274
|
-
} else {
|
275
|
-
// First event or follows non-pending
|
276
|
-
acc.push(event);
|
277
|
-
}
|
278
|
-
}
|
279
|
-
return acc;
|
280
|
-
}, []);
|
281
|
-
// See if the events have an init step
|
282
|
-
const hasInitStep =
|
283
|
-
collapsed.findIndex((e) => {
|
284
|
-
return e.event === "step" && e.name === "init";
|
285
|
-
}) !== -1;
|
286
|
-
|
287
|
-
const fixedUp = [...collapsed];
|
288
|
-
if (!hasInitStep && initEvent) {
|
289
|
-
fixedUp.splice(initEventIndex, 0, {
|
290
|
-
timestamp: initEvent.timestamp,
|
291
|
-
event: "step",
|
292
|
-
action: "begin",
|
293
|
-
type: null,
|
294
|
-
name: "sample_init",
|
295
|
-
pending: false,
|
296
|
-
working_start: 0,
|
297
|
-
});
|
298
|
-
|
299
|
-
fixedUp.splice(initEventIndex + 2, 0, {
|
300
|
-
timestamp: initEvent.timestamp,
|
301
|
-
event: "step",
|
302
|
-
action: "end",
|
303
|
-
type: null,
|
304
|
-
name: "sample_init",
|
305
|
-
pending: false,
|
306
|
-
working_start: 0,
|
307
|
-
});
|
308
|
-
}
|
309
|
-
|
310
|
-
return fixedUp;
|
311
|
-
};
|
312
|
-
|
313
|
-
/**
|
314
|
-
* Gathers events into a hierarchy of EventNodes.
|
315
|
-
*/
|
316
|
-
function treeifyEvents(events: Events, depth: number): EventNode[] {
|
317
|
-
const rootNodes: EventNode[] = [];
|
318
|
-
const stack: EventNode[] = [];
|
319
|
-
|
320
|
-
const pushNode = (event: EventType): EventNode => {
|
321
|
-
const node = new EventNode(event, stack.length + depth);
|
322
|
-
if (stack.length > 0) {
|
323
|
-
const parentNode = stack[stack.length - 1];
|
324
|
-
parentNode.children.push(node);
|
325
|
-
} else {
|
326
|
-
rootNodes.push(node);
|
327
|
-
}
|
328
|
-
return node;
|
329
|
-
};
|
330
|
-
|
331
|
-
events.forEach((event) => {
|
332
|
-
if (event.event === "step" && event.action === "begin") {
|
333
|
-
// Starting a new step
|
334
|
-
const node = pushNode(event);
|
335
|
-
stack.push(node);
|
336
|
-
} else if (event.event === "step" && event.action === "end") {
|
337
|
-
// An ending step
|
338
|
-
if (stack.length > 0) {
|
339
|
-
stack.pop();
|
340
|
-
}
|
341
|
-
} else {
|
342
|
-
// An event
|
343
|
-
pushNode(event);
|
344
|
-
}
|
345
|
-
});
|
346
|
-
|
347
|
-
return rootNodes;
|
348
|
-
}
|
@@ -6,11 +6,12 @@
|
|
6
6
|
background-color: var(--bs-body-bg);
|
7
7
|
}
|
8
8
|
|
9
|
-
.node
|
10
|
-
padding-top: 0.
|
9
|
+
.node {
|
10
|
+
padding-top: 0.7rem;
|
11
|
+
padding-bottom: 0em;
|
11
12
|
}
|
12
13
|
|
13
|
-
.
|
14
|
-
padding-top:
|
15
|
-
|
14
|
+
.attached {
|
15
|
+
padding-top: 0rem;
|
16
|
+
margin-top: -8px;
|
16
17
|
}
|
inspect_ai/_view/www/src/{samples → app/samples}/transcript/TranscriptVirtualListComponent.tsx
RENAMED
@@ -3,7 +3,7 @@ import { FC, RefObject, useCallback } from "react";
|
|
3
3
|
import { RenderedEventNode } from "./TranscriptView";
|
4
4
|
import { EventNode } from "./types";
|
5
5
|
|
6
|
-
import { LiveVirtualList } from "
|
6
|
+
import { LiveVirtualList } from "../../../components/LiveVirtualList";
|
7
7
|
import styles from "./TranscriptVirtualListComponent.module.css";
|
8
8
|
|
9
9
|
interface TranscriptVirtualListComponentProps {
|
@@ -24,9 +24,21 @@ export const TranscriptVirtualListComponent: FC<
|
|
24
24
|
const paddingClass = index === 0 ? styles.first : undefined;
|
25
25
|
|
26
26
|
const eventId = `${id}-event-${index}`;
|
27
|
+
const previousIndex = index - 1;
|
28
|
+
const previous =
|
29
|
+
previousIndex > 0 && previousIndex <= eventNodes.length
|
30
|
+
? eventNodes[previousIndex]
|
31
|
+
: undefined;
|
32
|
+
const attached =
|
33
|
+
item.event.event === "tool" &&
|
34
|
+
(previous?.event.event === "tool" || previous?.event.event === "model");
|
35
|
+
const attachedClass = attached ? styles.attached : undefined;
|
27
36
|
|
28
37
|
return (
|
29
|
-
<div
|
38
|
+
<div
|
39
|
+
key={eventId}
|
40
|
+
className={clsx(styles.node, paddingClass, attachedClass)}
|
41
|
+
>
|
30
42
|
<RenderedEventNode id={eventId} node={item} className={clsx(bgClass)} />
|
31
43
|
</div>
|
32
44
|
);
|
@@ -9,8 +9,8 @@ import {
|
|
9
9
|
import { ApplicationIcons } from "../../../appearance/icons";
|
10
10
|
import { EventNavs } from "./EventNavs";
|
11
11
|
|
12
|
-
import { ProgressBar } from "
|
13
|
-
import { useProperty } from "
|
12
|
+
import { ProgressBar } from "../../../../components/ProgressBar";
|
13
|
+
import { useProperty } from "../../../../state/hooks";
|
14
14
|
import styles from "./EventPanel.module.css";
|
15
15
|
|
16
16
|
interface EventPanelProps {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import clsx from "clsx";
|
2
2
|
import { FC, Fragment } from "react";
|
3
|
-
import { formatDateTime, formatTime } from "
|
3
|
+
import { formatDateTime, formatTime } from "../../../../utils/format";
|
4
4
|
import styles from "./EventTimingPanel.module.css";
|
5
5
|
|
6
6
|
interface EventTimingPanelProps {
|