inspect-ai 0.3.89__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 -53
- 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 +3583 -3508
- inspect_ai/_view/www/dist/assets/index.js +59212 -52521
- 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 +13 -5
- 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 +22 -8
- 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 -9
- 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.89.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.89.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.89.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.89.dist-info → inspect_ai-0.3.91.dist-info}/entry_points.txt +0 -0
- {inspect_ai-0.3.89.dist-info → inspect_ai-0.3.91.dist-info}/licenses/LICENSE +0 -0
- {inspect_ai-0.3.89.dist-info → inspect_ai-0.3.91.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,136 @@
|
|
1
|
+
import { filename } from "../../../utils/path";
|
2
|
+
|
3
|
+
import clsx from "clsx";
|
4
|
+
import { FC, MouseEvent, useMemo } from "react";
|
5
|
+
import {
|
6
|
+
EvalError,
|
7
|
+
EvalPlan,
|
8
|
+
EvalResults,
|
9
|
+
EvalSpec,
|
10
|
+
EvalStats,
|
11
|
+
Status,
|
12
|
+
} from "../../../@types/log";
|
13
|
+
import { DownloadPanel } from "../../../components/DownloadPanel";
|
14
|
+
import { JSONPanel } from "../../../components/JsonPanel";
|
15
|
+
import { ToolButton } from "../../../components/ToolButton";
|
16
|
+
import { kLogViewJsonTabId } from "../../../constants";
|
17
|
+
import { useStore } from "../../../state/store";
|
18
|
+
import { ApplicationIcons } from "../../appearance/icons";
|
19
|
+
import styles from "./JsonTab.module.css";
|
20
|
+
|
21
|
+
const kJsonMaxSize = 10000000;
|
22
|
+
|
23
|
+
// Individual hook for JSON tab
|
24
|
+
export const useJsonTabConfig = (
|
25
|
+
evalVersion: number | undefined,
|
26
|
+
evalStatus: Status | undefined,
|
27
|
+
evalSpec: EvalSpec | undefined,
|
28
|
+
evalPlan: EvalPlan | undefined,
|
29
|
+
evalError: EvalError | undefined | null,
|
30
|
+
evalResults: EvalResults | undefined | null,
|
31
|
+
evalStats: EvalStats | undefined,
|
32
|
+
) => {
|
33
|
+
const selectedLogFile = useStore((state) =>
|
34
|
+
state.logsActions.getSelectedLogFile(),
|
35
|
+
);
|
36
|
+
const selectedTab = useStore((state) => state.app.tabs.workspace);
|
37
|
+
|
38
|
+
return useMemo(() => {
|
39
|
+
const evalHeader = {
|
40
|
+
version: evalVersion,
|
41
|
+
status: evalStatus,
|
42
|
+
eval: evalSpec,
|
43
|
+
plan: evalPlan,
|
44
|
+
error: evalError,
|
45
|
+
results: evalResults,
|
46
|
+
stats: evalStats,
|
47
|
+
};
|
48
|
+
|
49
|
+
return {
|
50
|
+
id: kLogViewJsonTabId,
|
51
|
+
label: "JSON",
|
52
|
+
scrollable: true,
|
53
|
+
component: JsonTab,
|
54
|
+
componentProps: {
|
55
|
+
logFile: selectedLogFile,
|
56
|
+
json: JSON.stringify(evalHeader, null, 2),
|
57
|
+
selected: selectedTab === kLogViewJsonTabId,
|
58
|
+
},
|
59
|
+
tools: () => [
|
60
|
+
<ToolButton
|
61
|
+
key="copy-json"
|
62
|
+
label="Copy JSON"
|
63
|
+
icon={ApplicationIcons.copy}
|
64
|
+
className={clsx("task-btn-json-copy", "clipboard-button")}
|
65
|
+
data-clipboard-target="#task-json-contents"
|
66
|
+
onClick={copyFeedback}
|
67
|
+
/>,
|
68
|
+
],
|
69
|
+
};
|
70
|
+
}, [
|
71
|
+
selectedLogFile,
|
72
|
+
evalVersion,
|
73
|
+
evalStatus,
|
74
|
+
evalSpec,
|
75
|
+
evalPlan,
|
76
|
+
evalError,
|
77
|
+
evalResults,
|
78
|
+
evalStats,
|
79
|
+
selectedTab,
|
80
|
+
]);
|
81
|
+
};
|
82
|
+
|
83
|
+
// Helper function for copy feedback
|
84
|
+
const copyFeedback = (e: MouseEvent<HTMLElement>) => {
|
85
|
+
const textEl = e.currentTarget.querySelector(".task-btn-copy-content");
|
86
|
+
const iconEl = e.currentTarget.querySelector("i.bi");
|
87
|
+
if (textEl) {
|
88
|
+
const htmlEl = textEl as HTMLElement;
|
89
|
+
const htmlIconEl = iconEl as HTMLElement;
|
90
|
+
const oldText = htmlEl.innerText;
|
91
|
+
const oldIconClz = htmlIconEl.className;
|
92
|
+
htmlEl.innerText = "Copied!";
|
93
|
+
htmlIconEl.className = `${ApplicationIcons.confirm}`;
|
94
|
+
setTimeout(() => {
|
95
|
+
window.getSelection()?.removeAllRanges();
|
96
|
+
}, 50);
|
97
|
+
setTimeout(() => {
|
98
|
+
htmlEl.innerText = oldText;
|
99
|
+
htmlIconEl.className = oldIconClz;
|
100
|
+
}, 1250);
|
101
|
+
}
|
102
|
+
};
|
103
|
+
|
104
|
+
interface JsonTabProps {
|
105
|
+
logFile?: string;
|
106
|
+
selected: boolean;
|
107
|
+
json: string;
|
108
|
+
}
|
109
|
+
|
110
|
+
/**
|
111
|
+
* Renders JSON tab
|
112
|
+
*/
|
113
|
+
export const JsonTab: FC<JsonTabProps> = ({ logFile, json }) => {
|
114
|
+
const downloadFiles = useStore((state) => state.capabilities.downloadFiles);
|
115
|
+
if (logFile && json.length > kJsonMaxSize && downloadFiles) {
|
116
|
+
// This JSON file is so large we can't really productively render it
|
117
|
+
// we should instead just provide a DL link
|
118
|
+
const file = `${filename(logFile)}.json`;
|
119
|
+
return (
|
120
|
+
<div className={styles.jsonTab}>
|
121
|
+
<DownloadPanel
|
122
|
+
message="The JSON for this log file is too large to render."
|
123
|
+
buttonLabel="Download JSON File"
|
124
|
+
fileName={file}
|
125
|
+
fileContents={json}
|
126
|
+
/>
|
127
|
+
</div>
|
128
|
+
);
|
129
|
+
} else {
|
130
|
+
return (
|
131
|
+
<div className={styles.jsonTab}>
|
132
|
+
<JSONPanel id="task-json-contents" json={json} simple={true} />
|
133
|
+
</div>
|
134
|
+
);
|
135
|
+
}
|
136
|
+
};
|
@@ -1,17 +1,16 @@
|
|
1
|
-
import {
|
2
|
-
FC,
|
3
|
-
Fragment,
|
4
|
-
useCallback,
|
5
|
-
useEffect,
|
6
|
-
useMemo,
|
7
|
-
useRef,
|
8
|
-
useState,
|
9
|
-
} from "react";
|
1
|
+
import { FC, Fragment, useEffect, useMemo, useRef, useState } from "react";
|
10
2
|
import { VirtuosoHandle } from "react-virtuoso";
|
11
|
-
import {
|
12
|
-
import { InlineSampleDisplay } from "
|
13
|
-
import { SampleDialog } from "
|
14
|
-
import {
|
3
|
+
import { Status } from "../../../@types/log";
|
4
|
+
import { InlineSampleDisplay } from "../../../app/samples/InlineSampleDisplay.tsx";
|
5
|
+
import { SampleDialog } from "../../../app/samples/SampleDialog.tsx";
|
6
|
+
import {
|
7
|
+
SampleTools,
|
8
|
+
ScoreFilterTools,
|
9
|
+
} from "../../../app/samples/SamplesTools.tsx";
|
10
|
+
import { SampleList } from "../../../app/samples/list/SampleList.tsx";
|
11
|
+
import { NoContentsPanel } from "../../../components/NoContentsPanel.tsx";
|
12
|
+
import { ToolButton } from "../../../components/ToolButton.tsx";
|
13
|
+
import { kLogViewSamplesTabId } from "../../../constants.ts";
|
15
14
|
import {
|
16
15
|
useFilteredSamples,
|
17
16
|
useGroupBy,
|
@@ -19,19 +18,67 @@ import {
|
|
19
18
|
useSampleDescriptor,
|
20
19
|
useScore,
|
21
20
|
useTotalSampleCount,
|
22
|
-
} from "
|
23
|
-
import { useStore } from "
|
21
|
+
} from "../../../state/hooks.ts";
|
22
|
+
import { useStore } from "../../../state/store.ts";
|
23
|
+
import { ApplicationIcons } from "../../appearance/icons.ts";
|
24
24
|
import { RunningNoSamples } from "./RunningNoSamples.tsx";
|
25
25
|
import { getSampleProcessor } from "./grouping.ts";
|
26
26
|
import { ListItem } from "./types.ts";
|
27
27
|
|
28
|
+
// Individual hook for Samples tab
|
29
|
+
export const useSamplesTabConfig = (
|
30
|
+
evalStatus: Status | undefined,
|
31
|
+
refreshLog: () => void,
|
32
|
+
) => {
|
33
|
+
const totalSampleCount = useTotalSampleCount();
|
34
|
+
const samplesDescriptor = useSampleDescriptor();
|
35
|
+
const sampleSummaries = useFilteredSamples();
|
36
|
+
const streamSamples = useStore((state) => state.capabilities.streamSamples);
|
37
|
+
|
38
|
+
return useMemo(() => {
|
39
|
+
return {
|
40
|
+
id: kLogViewSamplesTabId,
|
41
|
+
scrollable: false,
|
42
|
+
label: totalSampleCount > 1 ? "Samples" : "Sample",
|
43
|
+
component: SamplesTab,
|
44
|
+
componentProps: {
|
45
|
+
running: evalStatus === "started",
|
46
|
+
},
|
47
|
+
tools: () =>
|
48
|
+
!samplesDescriptor
|
49
|
+
? undefined
|
50
|
+
: totalSampleCount === 1
|
51
|
+
? [<ScoreFilterTools />]
|
52
|
+
: [
|
53
|
+
<SampleTools
|
54
|
+
samples={sampleSummaries || []}
|
55
|
+
key="sample-tools"
|
56
|
+
/>,
|
57
|
+
evalStatus === "started" && !streamSamples && (
|
58
|
+
<ToolButton
|
59
|
+
key="refresh"
|
60
|
+
label="Refresh"
|
61
|
+
icon={ApplicationIcons.refresh}
|
62
|
+
onClick={refreshLog}
|
63
|
+
/>
|
64
|
+
),
|
65
|
+
],
|
66
|
+
};
|
67
|
+
}, [
|
68
|
+
evalStatus,
|
69
|
+
refreshLog,
|
70
|
+
sampleSummaries,
|
71
|
+
samplesDescriptor,
|
72
|
+
totalSampleCount,
|
73
|
+
]);
|
74
|
+
};
|
75
|
+
|
28
76
|
interface SamplesTabProps {
|
29
77
|
// Required props
|
30
78
|
running: boolean;
|
31
79
|
}
|
32
80
|
|
33
81
|
export const SamplesTab: FC<SamplesTabProps> = ({ running }) => {
|
34
|
-
const selectSample = useStore((state) => state.logActions.selectSample);
|
35
82
|
const selectedSampleIndex = useStore(
|
36
83
|
(state) => state.log.selectedSampleIndex,
|
37
84
|
);
|
@@ -68,25 +115,6 @@ export const SamplesTab: FC<SamplesTabProps> = ({ running }) => {
|
|
68
115
|
const [sampleItems, setSampleItems] = useState<ListItem[]>([]);
|
69
116
|
|
70
117
|
const sampleListHandle = useRef<VirtuosoHandle | null>(null);
|
71
|
-
const sampleDialogRef = useRef<HTMLDivElement>(null);
|
72
|
-
|
73
|
-
const selectedSampleTab = useStore((state) => state.app.tabs.sample);
|
74
|
-
const setSelectedSampleTab = useStore(
|
75
|
-
(state) => state.appActions.setSampleTab,
|
76
|
-
);
|
77
|
-
const showingSampleDialog = useStore((state) => state.app.dialogs.sample);
|
78
|
-
const setShowingSampleDialog = useStore(
|
79
|
-
(state) => state.appActions.setShowingSampleDialog,
|
80
|
-
);
|
81
|
-
|
82
|
-
// Shows the sample dialog
|
83
|
-
const showSample = useCallback(
|
84
|
-
(index: number) => {
|
85
|
-
selectSample(index);
|
86
|
-
setShowingSampleDialog(true);
|
87
|
-
},
|
88
|
-
[selectSample, setShowingSampleDialog],
|
89
|
-
);
|
90
118
|
|
91
119
|
// Keep the selected item scrolled into view
|
92
120
|
useEffect(() => {
|
@@ -97,13 +125,25 @@ export const SamplesTab: FC<SamplesTabProps> = ({ running }) => {
|
|
97
125
|
}, 0);
|
98
126
|
}, [selectedSampleIndex]);
|
99
127
|
|
100
|
-
|
128
|
+
const showingSampleDialog = useStore((state) => state.app.dialogs.sample);
|
129
|
+
|
130
|
+
// Focus the sample list when sample dialog is hidden, but only when it's being dismissed
|
131
|
+
const previousShowingDialogRef = useRef(showingSampleDialog);
|
101
132
|
useEffect(() => {
|
102
|
-
|
133
|
+
// Only focus when transitioning from showing dialog to not showing dialog
|
134
|
+
if (
|
135
|
+
previousShowingDialogRef.current &&
|
136
|
+
!showingSampleDialog &&
|
137
|
+
sampleListHandle.current
|
138
|
+
) {
|
103
139
|
setTimeout(() => {
|
104
|
-
|
105
|
-
|
140
|
+
const element = document.querySelector(".samples-list");
|
141
|
+
if (element instanceof HTMLElement) {
|
142
|
+
element.focus();
|
143
|
+
}
|
144
|
+
}, 10);
|
106
145
|
}
|
146
|
+
previousShowingDialogRef.current = showingSampleDialog;
|
107
147
|
}, [showingSampleDialog]);
|
108
148
|
|
109
149
|
const sampleProcessor = useMemo(() => {
|
@@ -149,25 +189,6 @@ export const SamplesTab: FC<SamplesTabProps> = ({ running }) => {
|
|
149
189
|
);
|
150
190
|
}, [sampleSummaries, sampleProcessor]);
|
151
191
|
|
152
|
-
const previousSampleIndex = useCallback(() => {
|
153
|
-
return selectedSampleIndex > 0 ? selectedSampleIndex - 1 : -1;
|
154
|
-
}, [selectedSampleIndex]);
|
155
|
-
|
156
|
-
// Manage the next / previous state the selected sample
|
157
|
-
const nextSample = useCallback(() => {
|
158
|
-
const next = Math.min(selectedSampleIndex + 1, sampleItems.length - 1);
|
159
|
-
if (next > -1) {
|
160
|
-
selectSample(next);
|
161
|
-
}
|
162
|
-
}, [selectedSampleIndex, sampleItems, selectSample]);
|
163
|
-
|
164
|
-
const previousSample = useCallback(() => {
|
165
|
-
const prev = previousSampleIndex();
|
166
|
-
if (prev > -1) {
|
167
|
-
selectSample(prev);
|
168
|
-
}
|
169
|
-
}, [previousSampleIndex, selectSample]);
|
170
|
-
|
171
192
|
const title =
|
172
193
|
selectedSampleIndex > -1 && sampleItems.length > selectedSampleIndex
|
173
194
|
? sampleItems[selectedSampleIndex].label
|
@@ -183,11 +204,7 @@ export const SamplesTab: FC<SamplesTabProps> = ({ running }) => {
|
|
183
204
|
return (
|
184
205
|
<Fragment>
|
185
206
|
{samplesDescriptor && totalSampleCount === 1 ? (
|
186
|
-
<InlineSampleDisplay
|
187
|
-
id="sample-display"
|
188
|
-
selectedTab={selectedSampleTab}
|
189
|
-
setSelectedTab={setSelectedSampleTab}
|
190
|
-
/>
|
207
|
+
<InlineSampleDisplay />
|
191
208
|
) : undefined}
|
192
209
|
{samplesDescriptor && totalSampleCount > 1 ? (
|
193
210
|
<SampleList
|
@@ -195,23 +212,15 @@ export const SamplesTab: FC<SamplesTabProps> = ({ running }) => {
|
|
195
212
|
items={items}
|
196
213
|
totalItemCount={evalSampleCount}
|
197
214
|
running={running}
|
198
|
-
nextSample={nextSample}
|
199
|
-
prevSample={previousSample}
|
200
|
-
showSample={showSample}
|
201
215
|
/>
|
202
216
|
) : undefined}
|
203
|
-
{showingSampleDialog
|
217
|
+
{showingSampleDialog && (
|
204
218
|
<SampleDialog
|
205
219
|
id={String(selectedSample?.id || "")}
|
206
220
|
title={title}
|
207
221
|
showingSampleDialog={showingSampleDialog}
|
208
|
-
setShowingSampleDialog={setShowingSampleDialog}
|
209
|
-
selectedTab={selectedSampleTab}
|
210
|
-
setSelectedTab={setSelectedSampleTab}
|
211
|
-
nextSample={nextSample}
|
212
|
-
prevSample={previousSample}
|
213
222
|
/>
|
214
|
-
)
|
223
|
+
)}
|
215
224
|
</Fragment>
|
216
225
|
);
|
217
226
|
}
|
@@ -1,7 +1,7 @@
|
|
1
|
-
import {
|
1
|
+
import { Epochs } from "../../../@types/log";
|
2
|
+
import { ScoreLabel } from "../../../app/types";
|
3
|
+
import { SampleSummary } from "../../../client/api/types";
|
2
4
|
import { SamplesDescriptor } from "../../samples/descriptor/samplesDescriptor";
|
3
|
-
import { ScoreLabel } from "../../types";
|
4
|
-
import { Epochs } from "../../types/log";
|
5
5
|
import { ListItem, SampleListItem, SeparatorListItem } from "./types";
|
6
6
|
|
7
7
|
export const getSampleProcessor = (
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import clsx from "clsx";
|
2
|
-
import {
|
3
|
-
import {
|
2
|
+
import { EvalDataset } from "../../@types/log";
|
3
|
+
import { MetaDataView } from "../content/MetaDataView";
|
4
4
|
|
5
5
|
import { CSSProperties, FC } from "react";
|
6
6
|
import styles from "./DatasetDetailView.module.css";
|
@@ -1,10 +1,10 @@
|
|
1
1
|
import { FC } from "react";
|
2
|
-
import { ApplicationIcons } from "../appearance/icons";
|
3
|
-
import { Card, CardBody, CardHeader } from "../components/Card";
|
4
|
-
import { EvalModelConfig, EvalSpec } from "../types/log";
|
5
2
|
|
6
3
|
import clsx from "clsx";
|
7
|
-
import {
|
4
|
+
import { EvalModelConfig, EvalSpec } from "../../@types/log";
|
5
|
+
import { Card, CardBody, CardHeader } from "../../components/Card";
|
6
|
+
import { ApplicationIcons } from "../appearance/icons";
|
7
|
+
import { MetaDataGrid } from "../content/MetaDataGrid";
|
8
8
|
import styles from "./ModelCard.module.css";
|
9
9
|
|
10
10
|
interface ModelCardProps {
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { FC } from "react";
|
2
|
+
import { EvalPlan, EvalScore, EvalSpec } from "../../@types/log";
|
3
|
+
import { Card, CardBody, CardHeader } from "../../components/Card";
|
2
4
|
import { ApplicationIcons } from "../appearance/icons";
|
3
|
-
import { Card, CardBody, CardHeader } from "../components/Card";
|
4
|
-
import { EvalPlan, EvalScore, EvalSpec } from "../types/log";
|
5
5
|
import { PlanDetailView } from "./PlanDetailView";
|
6
6
|
|
7
7
|
interface PlanCardProps {
|
@@ -1,14 +1,14 @@
|
|
1
|
-
import {
|
2
|
-
import {
|
3
|
-
import {
|
4
|
-
import {
|
1
|
+
import { EvalPlan, EvalScore, EvalSpec, Params2 } from "../../@types/log";
|
2
|
+
import { toTitleCase } from "../../utils/format";
|
3
|
+
import { ghCommitUrl } from "../../utils/git";
|
4
|
+
import { MetaDataView } from "../content/MetaDataView";
|
5
5
|
import { DatasetDetailView } from "./DatasetDetailView";
|
6
6
|
import { ScorerDetailView } from "./ScorerDetailView";
|
7
7
|
import { SolversDetailView } from "./SolverDetailView";
|
8
8
|
|
9
9
|
import clsx from "clsx";
|
10
10
|
import { FC, ReactNode } from "react";
|
11
|
-
import { kModelNone } from "
|
11
|
+
import { kModelNone } from "../../constants";
|
12
12
|
import styles from "./PlanDetailView.module.css";
|
13
13
|
|
14
14
|
interface PlanDetailViewProps {
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import clsx from "clsx";
|
2
2
|
import { FC, Fragment } from "react";
|
3
|
+
import { Steps } from "../../@types/log";
|
3
4
|
import { ApplicationIcons } from "../appearance/icons";
|
4
|
-
import { Steps } from "../types/log";
|
5
5
|
import { DetailStep } from "./DetailStep";
|
6
6
|
import styles from "./SolverDetailView.module.css";
|
7
7
|
|
@@ -0,0 +1,58 @@
|
|
1
|
+
import { useEffect } from "react";
|
2
|
+
import {
|
3
|
+
createHashRouter,
|
4
|
+
Navigate,
|
5
|
+
Outlet,
|
6
|
+
useLocation,
|
7
|
+
} from "react-router-dom";
|
8
|
+
import { storeImplementation } from "../../state/store";
|
9
|
+
import { AppErrorBoundary } from "../AppErrorBoundary";
|
10
|
+
import { LogViewContainer } from "../log-view/LogViewContainer";
|
11
|
+
import { kLogRouteUrlPattern, kSampleRouteUrlPattern } from "./url";
|
12
|
+
|
13
|
+
// Create a layout component that includes the RouteTracker
|
14
|
+
const AppLayout = () => {
|
15
|
+
const location = useLocation();
|
16
|
+
|
17
|
+
// Track changes to routes
|
18
|
+
useEffect(() => {
|
19
|
+
if (storeImplementation) {
|
20
|
+
storeImplementation.getState().appActions.setUrlHash(location.pathname);
|
21
|
+
}
|
22
|
+
}, [location]);
|
23
|
+
|
24
|
+
return (
|
25
|
+
<AppErrorBoundary>
|
26
|
+
<Outlet />
|
27
|
+
</AppErrorBoundary>
|
28
|
+
);
|
29
|
+
};
|
30
|
+
|
31
|
+
// Create router with our routes (using hash router for static deployments)
|
32
|
+
export const AppRouter = createHashRouter(
|
33
|
+
[
|
34
|
+
{
|
35
|
+
path: "/",
|
36
|
+
element: <AppLayout />,
|
37
|
+
children: [
|
38
|
+
{
|
39
|
+
index: true, // This will match exactly the "/" path
|
40
|
+
element: <LogViewContainer />,
|
41
|
+
},
|
42
|
+
{
|
43
|
+
path: kLogRouteUrlPattern,
|
44
|
+
element: <LogViewContainer />,
|
45
|
+
},
|
46
|
+
{
|
47
|
+
path: kSampleRouteUrlPattern,
|
48
|
+
element: <LogViewContainer />,
|
49
|
+
},
|
50
|
+
],
|
51
|
+
},
|
52
|
+
{
|
53
|
+
path: "*",
|
54
|
+
element: <Navigate to="/" replace />,
|
55
|
+
},
|
56
|
+
],
|
57
|
+
{ basename: "" },
|
58
|
+
);
|