inspect-ai 0.3.90__py3-none-any.whl → 0.3.91__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 +40 -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 +83 -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.91.dist-info}/METADATA +6 -2
- inspect_ai-0.3.91.dist-info/RECORD +732 -0
- {inspect_ai-0.3.90.dist-info → inspect_ai-0.3.91.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.91.dist-info}/entry_points.txt +0 -0
- {inspect_ai-0.3.90.dist-info → inspect_ai-0.3.91.dist-info}/licenses/LICENSE +0 -0
- {inspect_ai-0.3.90.dist-info → inspect_ai-0.3.91.dist-info}/top_level.txt +0 -0
@@ -1,10 +1,10 @@
|
|
1
|
+
import { EvalLog, EvalSample } from "../../@types/log";
|
1
2
|
import {
|
2
3
|
openRemoteLogFile,
|
3
4
|
RemoteLogFile,
|
4
5
|
SampleNotFoundError,
|
5
|
-
} from "../
|
6
|
-
import { FileSizeLimitError } from "../
|
7
|
-
import { EvalLog, EvalSample } from "../types/log";
|
6
|
+
} from "../remote/remoteLogFile";
|
7
|
+
import { FileSizeLimitError } from "../remote/remoteZipFile";
|
8
8
|
import { encodePathParts } from "./api-shared";
|
9
9
|
import {
|
10
10
|
ClientAPI,
|
@@ -65,12 +65,13 @@ export const clientApi = (api: LogViewAPI, log_file?: string): ClientAPI => {
|
|
65
65
|
|
66
66
|
const remoteEvalFile = async (log_file: string, cached: boolean = false) => {
|
67
67
|
if (!cached || loadedEvalFile.file !== log_file) {
|
68
|
-
|
69
|
-
loadedEvalFile.remoteLog = await openRemoteLogFile(
|
68
|
+
const remoteLog = await openRemoteLogFile(
|
70
69
|
api,
|
71
70
|
encodePathParts(log_file),
|
72
71
|
5,
|
73
72
|
);
|
73
|
+
loadedEvalFile.file = log_file;
|
74
|
+
loadedEvalFile.remoteLog = remoteLog;
|
74
75
|
}
|
75
76
|
return loadedEvalFile.remoteLog;
|
76
77
|
};
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import JSON5 from "json5";
|
2
|
-
import { dirname } from "
|
3
|
-
import { getVscodeApi } from "
|
2
|
+
import { dirname } from "../../utils/path";
|
3
|
+
import { getVscodeApi } from "../../utils/vscode";
|
4
4
|
import browserApi from "./api-browser";
|
5
5
|
import simpleHttpApi from "./api-http";
|
6
6
|
import vscodeApi from "./api-vscode";
|
@@ -24,7 +24,7 @@ import {
|
|
24
24
|
Target,
|
25
25
|
ToolEvent,
|
26
26
|
Version,
|
27
|
-
} from "
|
27
|
+
} from "../../@types/log";
|
28
28
|
|
29
29
|
export interface EvalSummary {
|
30
30
|
version?: Version;
|
@@ -116,6 +116,7 @@ export interface SampleSummary {
|
|
116
116
|
error?: string;
|
117
117
|
limit?: string;
|
118
118
|
completed?: boolean;
|
119
|
+
retries?: number;
|
119
120
|
}
|
120
121
|
|
121
122
|
export interface BasicSampleData {
|
@@ -241,6 +242,8 @@ export interface UpdateStateMessage {
|
|
241
242
|
data: {
|
242
243
|
type: "updateState";
|
243
244
|
url: string;
|
245
|
+
sample_id?: string;
|
246
|
+
sample_epoch?: string;
|
244
247
|
};
|
245
248
|
}
|
246
249
|
|
@@ -1,12 +1,12 @@
|
|
1
|
+
import { EvalLog, EvalPlan, EvalSample, EvalSpec } from "../../@types/log";
|
2
|
+
import { asyncJsonParse } from "../../utils/json-worker";
|
3
|
+
import { AsyncQueue } from "../../utils/queue";
|
1
4
|
import {
|
2
5
|
EvalHeader,
|
3
6
|
EvalSummary,
|
4
7
|
LogViewAPI,
|
5
8
|
SampleSummary,
|
6
9
|
} from "../api/types";
|
7
|
-
import { EvalLog, EvalPlan, EvalSample, EvalSpec } from "../types/log";
|
8
|
-
import { asyncJsonParse } from "../utils/json-worker";
|
9
|
-
import { AsyncQueue } from "../utils/queue";
|
10
10
|
import { FileSizeLimitError, openRemoteZipFile } from "./remoteZipFile";
|
11
11
|
|
12
12
|
// don't try to load samples greater than 50mb
|
@@ -1,19 +1,25 @@
|
|
1
|
+
import JSON5 from "json5";
|
2
|
+
import { PersistedState } from "../../state/store";
|
3
|
+
import { getVscodeApi } from "../../utils/vscode";
|
1
4
|
import { ClientStorage } from "../api/types";
|
2
|
-
import { PersistedState } from "../state/store";
|
3
|
-
import { getVscodeApi } from "../utils/vscode";
|
4
5
|
|
5
6
|
const resolveStorage = (): ClientStorage | undefined => {
|
6
7
|
const vscodeApi = getVscodeApi();
|
7
8
|
if (vscodeApi) {
|
8
9
|
return {
|
9
10
|
getItem: (_name: string) => {
|
10
|
-
const state = vscodeApi.getState() as
|
11
|
-
|
11
|
+
const state = vscodeApi.getState() as string;
|
12
|
+
const deserialized = JSON5.parse(state) as {
|
13
|
+
state: PersistedState;
|
14
|
+
version: number;
|
15
|
+
};
|
16
|
+
return deserialized;
|
12
17
|
},
|
13
18
|
setItem: (_name: string, value: unknown) => {
|
14
19
|
// TODO: This is pretty gnarly type hijinks
|
15
20
|
const valObj = value as { state: PersistedState; version: number };
|
16
|
-
|
21
|
+
const serialized = JSON5.stringify(valObj);
|
22
|
+
vscodeApi.setState(serialized);
|
17
23
|
},
|
18
24
|
removeItem: (_name: string) => {
|
19
25
|
vscodeApi.setState(null);
|
@@ -1,39 +1,42 @@
|
|
1
|
-
.
|
1
|
+
.expandableBordered {
|
2
2
|
border: solid var(--bs-light-border-subtle) 1px;
|
3
3
|
}
|
4
4
|
|
5
|
-
.
|
5
|
+
.expandableTogglable {
|
6
6
|
margin-bottom: 1em;
|
7
7
|
}
|
8
8
|
|
9
|
-
.
|
9
|
+
.expandableContents {
|
10
10
|
font-size: var(--inspect-font-size-base);
|
11
11
|
}
|
12
12
|
|
13
|
-
.
|
13
|
+
.expandableCollapsed {
|
14
14
|
overflow: hidden;
|
15
15
|
}
|
16
16
|
|
17
|
-
.
|
17
|
+
.moreToggle {
|
18
18
|
display: flex;
|
19
|
-
margin-bottom: 0.5em;
|
20
19
|
margin-top: 0;
|
20
|
+
position: relative;
|
21
|
+
height: 8px;
|
21
22
|
}
|
22
23
|
|
23
|
-
.
|
24
|
+
.moreToggle.bordered {
|
24
25
|
border-top: solid var(--bs-light-border-subtle) 1px;
|
25
|
-
margin-top: 0.5em;
|
26
26
|
}
|
27
27
|
|
28
|
-
.
|
28
|
+
.moreToggleContainer {
|
29
|
+
position: absolute;
|
30
|
+
top: -1px;
|
31
|
+
right: 0;
|
29
32
|
display: inline-block;
|
30
33
|
border: solid var(--bs-light-border-subtle) 1px;
|
31
34
|
border-top: none;
|
32
35
|
margin-left: auto;
|
33
|
-
margin-right:
|
36
|
+
margin-right: 0;
|
34
37
|
}
|
35
38
|
|
36
|
-
.
|
39
|
+
.moreToggleButton {
|
37
40
|
font-size: var(--inspect-font-size-smaller);
|
38
41
|
border: none;
|
39
42
|
padding: 0.1rem 0.5rem;
|
@@ -8,10 +8,10 @@ import {
|
|
8
8
|
useRef,
|
9
9
|
useState,
|
10
10
|
} from "react";
|
11
|
-
import { ApplicationIcons } from "../appearance/icons";
|
11
|
+
import { ApplicationIcons } from "../app/appearance/icons";
|
12
12
|
import { useCollapsedState } from "../state/hooks";
|
13
13
|
import { useResizeObserver } from "../utils/dom";
|
14
|
-
import "./ExpandablePanel.css";
|
14
|
+
import styles from "./ExpandablePanel.module.css";
|
15
15
|
|
16
16
|
interface ExpandablePanelProps {
|
17
17
|
id: string;
|
@@ -51,7 +51,7 @@ export const ExpandablePanel: FC<ExpandablePanelProps> = memo(
|
|
51
51
|
const baseStyles = {
|
52
52
|
overflow: "hidden",
|
53
53
|
...(collapsed && {
|
54
|
-
maxHeight: `${lines}
|
54
|
+
maxHeight: `${lines}rem`,
|
55
55
|
}),
|
56
56
|
};
|
57
57
|
|
@@ -61,9 +61,9 @@ export const ExpandablePanel: FC<ExpandablePanelProps> = memo(
|
|
61
61
|
style={baseStyles}
|
62
62
|
ref={contentRef}
|
63
63
|
className={clsx(
|
64
|
-
|
65
|
-
collapsed ?
|
66
|
-
border ?
|
64
|
+
styles.expandablePanel,
|
65
|
+
collapsed ? styles.expandableCollapsed : undefined,
|
66
|
+
border ? styles.expandableBordered : undefined,
|
67
67
|
)}
|
68
68
|
>
|
69
69
|
{children}
|
@@ -104,10 +104,16 @@ const MoreToggle: FC<MoreToggleProps> = ({
|
|
104
104
|
}, [setCollapsed, collapsed]);
|
105
105
|
|
106
106
|
return (
|
107
|
-
<div
|
108
|
-
|
109
|
-
|
110
|
-
|
107
|
+
<div
|
108
|
+
className={clsx(styles.moreToggle, border ? styles.bordered : undefined)}
|
109
|
+
style={style}
|
110
|
+
>
|
111
|
+
<div className={clsx(styles.moreToggleContainer)}>
|
112
|
+
<button
|
113
|
+
className={clsx("btn", styles.moreToggleButton, "text-size-smallest")}
|
114
|
+
onClick={handleClick}
|
115
|
+
>
|
116
|
+
<i className={clsx(icon, styles.icon)} />
|
111
117
|
{text}
|
112
118
|
</button>
|
113
119
|
</div>
|
@@ -10,8 +10,8 @@
|
|
10
10
|
|
11
11
|
.json-panel .source-code {
|
12
12
|
font-size: var(--inspect-font-size-small);
|
13
|
-
white-space: pre-wrap;
|
14
|
-
word-wrap: anywhere;
|
13
|
+
white-space: pre-wrap !important;
|
14
|
+
word-wrap: anywhere !important;
|
15
15
|
}
|
16
16
|
|
17
17
|
/* Prism.js theme customizations can go here if needed */
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import clsx from "clsx";
|
2
2
|
import { ProgressBar } from "./ProgressBar";
|
3
3
|
|
4
|
-
import { FC, ReactNode, RefObject, useRef } from "react";
|
4
|
+
import { FC, ReactNode, RefObject, useEffect, useRef } from "react";
|
5
5
|
import styles from "./LargeModal.module.css";
|
6
6
|
|
7
7
|
export interface ModalTool {
|
@@ -55,6 +55,16 @@ export const LargeModal: FC<LargeModalProps> = ({
|
|
55
55
|
const modalRef = useRef(null);
|
56
56
|
scrollRef = scrollRef || modalRef;
|
57
57
|
|
58
|
+
// Focus the modal when it becomes visible
|
59
|
+
const dialogRef = useRef<HTMLDivElement>(null);
|
60
|
+
|
61
|
+
// Use effect to focus the modal when visible changes
|
62
|
+
useEffect(() => {
|
63
|
+
if (visible && dialogRef.current) {
|
64
|
+
dialogRef.current.focus();
|
65
|
+
}
|
66
|
+
}, [visible]);
|
67
|
+
|
58
68
|
return (
|
59
69
|
<div
|
60
70
|
id={id}
|
@@ -66,6 +76,7 @@ export const LargeModal: FC<LargeModalProps> = ({
|
|
66
76
|
role="dialog"
|
67
77
|
onKeyUp={onkeyup}
|
68
78
|
tabIndex={visible ? 0 : undefined}
|
79
|
+
ref={dialogRef}
|
69
80
|
>
|
70
81
|
<div
|
71
82
|
className={clsx(
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import clsx from "clsx";
|
2
2
|
import { FC, MouseEvent, ReactNode, useCallback, useEffect } from "react";
|
3
|
-
import { ApplicationIcons } from "../appearance/icons";
|
3
|
+
import { ApplicationIcons } from "../app/appearance/icons";
|
4
4
|
import { useProperty } from "../state/hooks";
|
5
5
|
import styles from "./LightboxCarousel.module.css";
|
6
6
|
|
@@ -97,7 +97,9 @@ const protectBackslashesInLatex = (content: string): string => {
|
|
97
97
|
};
|
98
98
|
|
99
99
|
const restoreBackslashesForLatex = (content: string): string => {
|
100
|
-
if (!content)
|
100
|
+
if (!content) {
|
101
|
+
return content;
|
102
|
+
}
|
101
103
|
|
102
104
|
try {
|
103
105
|
// First restore backslashes
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { clsx } from "clsx";
|
2
2
|
|
3
3
|
import { FC, useCallback } from "react";
|
4
|
-
import { ApplicationIcons } from "../appearance/icons";
|
4
|
+
import { ApplicationIcons } from "../app/appearance/icons";
|
5
5
|
import { useMessageVisibility } from "../state/hooks";
|
6
6
|
import "./MessageBand.css";
|
7
7
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import clsx from "clsx";
|
2
2
|
import { FC } from "react";
|
3
3
|
|
4
|
-
import { ApplicationIcons } from "../appearance/icons";
|
4
|
+
import { ApplicationIcons } from "../app/appearance/icons";
|
5
5
|
import styles from "./NoContentsPanel.module.css";
|
6
6
|
|
7
7
|
interface NoContentsPanelProps {
|
@@ -2,17 +2,18 @@
|
|
2
2
|
export const kModelNone = "none/none";
|
3
3
|
|
4
4
|
// Workspace tab constants
|
5
|
-
export const
|
6
|
-
export const
|
7
|
-
export const
|
5
|
+
export const kLogViewSamplesTabId = "samples";
|
6
|
+
export const kLogViewJsonTabId = "json";
|
7
|
+
export const kLogViewInfoTabId = "info";
|
8
8
|
|
9
9
|
// Sample tab constants
|
10
|
-
export const kSampleMessagesTabId = `
|
11
|
-
export const kSampleTranscriptTabId = `
|
12
|
-
export const kSampleScoringTabId = `
|
13
|
-
export const kSampleMetdataTabId = `
|
14
|
-
export const kSampleErrorTabId = `
|
15
|
-
export const
|
10
|
+
export const kSampleMessagesTabId = `messages`;
|
11
|
+
export const kSampleTranscriptTabId = `transcript`;
|
12
|
+
export const kSampleScoringTabId = `scoring`;
|
13
|
+
export const kSampleMetdataTabId = `metadata`;
|
14
|
+
export const kSampleErrorTabId = `error`;
|
15
|
+
export const kSampleErrorRetriesTabId = `retry-errors`;
|
16
|
+
export const kSampleJsonTabId = `json`;
|
16
17
|
|
17
18
|
// Scoring constants
|
18
19
|
export const kScoreTypePassFail = "passfail";
|
@@ -1,10 +1,9 @@
|
|
1
1
|
import { createRoot } from "react-dom/client";
|
2
|
-
import
|
3
|
-
import
|
4
|
-
import {
|
5
|
-
import
|
6
|
-
import { initializeStore } from "./state/store";
|
7
|
-
import storage from "./storage";
|
2
|
+
import { App } from "./app/App";
|
3
|
+
import api from "./client/api/index";
|
4
|
+
import { Capabilities } from "./client/api/types";
|
5
|
+
import storage from "./client/storage";
|
6
|
+
import { initializeStore, storeImplementation } from "./state/store";
|
8
7
|
import { getVscodeApi } from "./utils/vscode";
|
9
8
|
|
10
9
|
// Resolve the api
|
@@ -40,6 +39,9 @@ if (vscode) {
|
|
40
39
|
// Inititialize the application store
|
41
40
|
initializeStore(applicationApi, capabilities, applicationStorage);
|
42
41
|
|
42
|
+
// Determine whether we need to restore a stored hash
|
43
|
+
restoreHash();
|
44
|
+
|
43
45
|
// Find the root element and render into it
|
44
46
|
const containerId = "app";
|
45
47
|
const container = document.getElementById(containerId);
|
@@ -52,8 +54,22 @@ if (!container) {
|
|
52
54
|
|
53
55
|
// Render into the root
|
54
56
|
const root = createRoot(container as HTMLElement);
|
55
|
-
root.render(
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
)
|
57
|
+
root.render(<App api={applicationApi} />);
|
58
|
+
|
59
|
+
function restoreHash() {
|
60
|
+
// Check if we need to restore a route
|
61
|
+
if (storeImplementation && storeImplementation.getState().app.urlHash) {
|
62
|
+
const storedHash = storeImplementation.getState().app.urlHash;
|
63
|
+
if (storedHash) {
|
64
|
+
// Directly set the window location hash if there is
|
65
|
+
// a stored hash that needs to be restored
|
66
|
+
if (storedHash.startsWith("/")) {
|
67
|
+
window.location.hash = storedHash;
|
68
|
+
} else if (storedHash.startsWith("#")) {
|
69
|
+
window.location.hash = storedHash;
|
70
|
+
} else {
|
71
|
+
window.location.hash = "#" + storedHash;
|
72
|
+
}
|
73
|
+
}
|
74
|
+
}
|
75
|
+
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { StateSnapshot } from "react-virtuoso";
|
2
|
-
import {
|
3
|
-
import {
|
4
|
-
import {
|
2
|
+
import { AppState, AppStatus } from "../app/types";
|
3
|
+
import { Capabilities } from "../client/api/types";
|
4
|
+
import { kLogViewSamplesTabId, kSampleTranscriptTabId } from "../constants";
|
5
5
|
import { clearDocumentSelection } from "../utils/browser";
|
6
6
|
import { StoreState } from "./store";
|
7
7
|
|
@@ -18,6 +18,13 @@ export interface AppSlice {
|
|
18
18
|
setWorkspaceTab: (tab: string) => void;
|
19
19
|
clearWorkspaceTab: () => void;
|
20
20
|
|
21
|
+
setInitialState: (
|
22
|
+
log: string,
|
23
|
+
sample_id?: string,
|
24
|
+
sample_epoch?: string,
|
25
|
+
) => void;
|
26
|
+
clearInitialState: () => void;
|
27
|
+
|
21
28
|
setSampleTab: (tab: string) => void;
|
22
29
|
clearSampleTab: () => void;
|
23
30
|
|
@@ -38,10 +45,12 @@ export interface AppSlice {
|
|
38
45
|
getPropertyValue: <T>(bagName: string, key: string, defaultValue?: T) => T;
|
39
46
|
setPropertyValue: <T>(bagName: string, key: string, value: T) => void;
|
40
47
|
removePropertyValue: (bagName: string, key: string) => void;
|
48
|
+
|
49
|
+
setUrlHash: (urlHash: string) => void;
|
41
50
|
};
|
42
51
|
}
|
43
52
|
|
44
|
-
const kDefaultWorkspaceTab =
|
53
|
+
const kDefaultWorkspaceTab = kLogViewSamplesTabId;
|
45
54
|
const kDefaultSampleTab = kSampleTranscriptTabId;
|
46
55
|
|
47
56
|
const initialState: AppState = {
|
@@ -108,13 +117,19 @@ export const createAppSlice = (
|
|
108
117
|
});
|
109
118
|
},
|
110
119
|
setShowingSampleDialog: (showing: boolean) => {
|
120
|
+
const state = get();
|
121
|
+
const isShowing = state.app.dialogs.sample;
|
122
|
+
|
123
|
+
if (showing === isShowing) {
|
124
|
+
return;
|
125
|
+
}
|
126
|
+
|
111
127
|
set((state) => {
|
112
128
|
state.app.dialogs.sample = showing;
|
113
129
|
});
|
114
130
|
if (!showing) {
|
115
131
|
const state = get();
|
116
132
|
state.appActions.clearSampleTab();
|
117
|
-
state.sampleActions.clearSelectedSample();
|
118
133
|
}
|
119
134
|
},
|
120
135
|
setWorkspaceTab: (tab: string) => {
|
@@ -127,6 +142,24 @@ export const createAppSlice = (
|
|
127
142
|
state.app.tabs.workspace = kDefaultWorkspaceTab;
|
128
143
|
});
|
129
144
|
},
|
145
|
+
setInitialState: (
|
146
|
+
log: string,
|
147
|
+
sample_id?: string,
|
148
|
+
sample_epoch?: string,
|
149
|
+
) => {
|
150
|
+
set((state) => {
|
151
|
+
state.app.initialState = {
|
152
|
+
log,
|
153
|
+
sample_id,
|
154
|
+
sample_epoch,
|
155
|
+
};
|
156
|
+
});
|
157
|
+
},
|
158
|
+
clearInitialState: () => {
|
159
|
+
set((state) => {
|
160
|
+
state.app.initialState = undefined;
|
161
|
+
});
|
162
|
+
},
|
130
163
|
setSampleTab: (tab: string) => {
|
131
164
|
set((state) => {
|
132
165
|
state.app.tabs.sample = tab;
|
@@ -223,6 +256,12 @@ export const createAppSlice = (
|
|
223
256
|
}
|
224
257
|
});
|
225
258
|
},
|
259
|
+
|
260
|
+
setUrlHash: (urlHash: string) => {
|
261
|
+
set((state) => {
|
262
|
+
state.app.urlHash = urlHash;
|
263
|
+
});
|
264
|
+
},
|
226
265
|
},
|
227
266
|
} as const;
|
228
267
|
|
@@ -1,20 +1,20 @@
|
|
1
1
|
import { highlightElement } from "prismjs";
|
2
2
|
import { useCallback, useEffect, useMemo, useRef } from "react";
|
3
|
-
import {
|
4
|
-
import { kEpochAscVal, kSampleAscVal, kScoreAscVal } from "../constants";
|
3
|
+
import { Events } from "../@types/log";
|
5
4
|
import {
|
6
5
|
createEvalDescriptor,
|
7
6
|
createSamplesDescriptor,
|
8
|
-
} from "../samples/descriptor/samplesDescriptor";
|
9
|
-
import { filterSamples } from "../samples/sample-tools/filters";
|
7
|
+
} from "../app/samples/descriptor/samplesDescriptor";
|
8
|
+
import { filterSamples } from "../app/samples/sample-tools/filters";
|
10
9
|
import {
|
11
10
|
byEpoch,
|
12
11
|
bySample,
|
13
12
|
sortSamples,
|
14
|
-
} from "../samples/sample-tools/SortFilter";
|
15
|
-
import {
|
16
|
-
import {
|
13
|
+
} from "../app/samples/sample-tools/SortFilter";
|
14
|
+
import { SampleSummary } from "../client/api/types";
|
15
|
+
import { kEpochAscVal, kSampleAscVal, kScoreAscVal } from "../constants";
|
17
16
|
import { createLogger } from "../utils/logger";
|
17
|
+
import { getAvailableScorers, getDefaultScorer } from "./scoring";
|
18
18
|
import { useStore } from "./store";
|
19
19
|
import { mergeSampleSummaries } from "./utils";
|
20
20
|
|
@@ -25,6 +25,27 @@ export const useEvalSpec = () => {
|
|
25
25
|
return selectedLogSummary?.eval;
|
26
26
|
};
|
27
27
|
|
28
|
+
export const useRefreshLog = () => {
|
29
|
+
const setAppStatus = useStore((state) => state.appActions.setStatus);
|
30
|
+
const refreshLog = useStore((state) => state.logActions.refreshLog);
|
31
|
+
const resetFiltering = useStore((state) => state.logActions.resetFiltering);
|
32
|
+
|
33
|
+
return useCallback(() => {
|
34
|
+
try {
|
35
|
+
setAppStatus({ loading: true, error: undefined });
|
36
|
+
|
37
|
+
refreshLog();
|
38
|
+
resetFiltering();
|
39
|
+
|
40
|
+
setAppStatus({ loading: false, error: undefined });
|
41
|
+
} catch (e) {
|
42
|
+
// Show an error
|
43
|
+
console.log(e);
|
44
|
+
setAppStatus({ loading: false, error: e as Error });
|
45
|
+
}
|
46
|
+
}, [refreshLog, resetFiltering, setAppStatus]);
|
47
|
+
};
|
48
|
+
|
28
49
|
// Fetches all samples summaries (both completed and incomplete)
|
29
50
|
// without applying any filtering
|
30
51
|
export const useSampleSummaries = () => {
|
@@ -208,10 +229,12 @@ export const useLogSelection = () => {
|
|
208
229
|
const selectedLogFile = useStore((state) =>
|
209
230
|
state.logsActions.getSelectedLogFile(),
|
210
231
|
);
|
232
|
+
const loadedLog = useStore((state) => state.log.loadedLog);
|
211
233
|
|
212
234
|
return useMemo(() => {
|
213
235
|
return {
|
214
236
|
logFile: selectedLogFile,
|
237
|
+
loadedLog: loadedLog,
|
215
238
|
sample: selectedSampleSummary,
|
216
239
|
};
|
217
240
|
}, [selectedLogFile, selectedSampleSummary]);
|
@@ -1,9 +1,9 @@
|
|
1
|
-
import {
|
2
|
-
import {
|
3
|
-
import {
|
4
|
-
import { LogState, ScoreFilter, ScoreLabel } from "../types";
|
1
|
+
import { LogState, ScoreFilter, ScoreLabel } from "../app/types";
|
2
|
+
import { EvalSummary, PendingSamples } from "../client/api/types";
|
3
|
+
import { kDefaultSort, kLogViewInfoTabId } from "../constants";
|
5
4
|
import { createLogger } from "../utils/logger";
|
6
5
|
import { createLogPolling } from "./logPolling";
|
6
|
+
import { ScorerInfo } from "./scoring";
|
7
7
|
import { StoreState } from "./store";
|
8
8
|
|
9
9
|
const log = createLogger("logSlice");
|
@@ -96,7 +96,7 @@ export const createLogSlice = (
|
|
96
96
|
selectedLogSummary.sampleSummaries.length === 0
|
97
97
|
) {
|
98
98
|
// If there are no samples, use the workspace tab id by default
|
99
|
-
get().appActions.setWorkspaceTab(
|
99
|
+
get().appActions.setWorkspaceTab(kLogViewInfoTabId);
|
100
100
|
}
|
101
101
|
},
|
102
102
|
|
@@ -175,6 +175,7 @@ export const createLogSlice = (
|
|
175
175
|
logPolling.startPolling(logFileName);
|
176
176
|
} catch (error) {
|
177
177
|
log.error("Error loading log:", error);
|
178
|
+
throw error;
|
178
179
|
}
|
179
180
|
},
|
180
181
|
|
@@ -200,6 +201,7 @@ export const createLogSlice = (
|
|
200
201
|
state.logActions.setSelectedLogSummary(logContents);
|
201
202
|
} catch (error) {
|
202
203
|
log.error("Error refreshing log:", error);
|
204
|
+
throw error;
|
203
205
|
}
|
204
206
|
},
|
205
207
|
},
|