@mastra/playground-ui 62.0.0-alpha.2 → 62.0.0-alpha.4
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.
- package/dist/{activity-maXCNWZp.js → activity-BsrB5ADa.js} +7 -5
- package/dist/activity-BsrB5ADa.js.map +1 -0
- package/dist/{activity-pXCpwxxi.cjs → activity-CaFdLiPz.cjs} +6 -4
- package/dist/activity-CaFdLiPz.cjs.map +1 -0
- package/dist/app-shell.css +7 -0
- package/dist/{ask-user-card-C14RGsoO.cjs → ask-user-card-BHIYyRdy.cjs} +2 -2
- package/dist/{ask-user-card-C14RGsoO.cjs.map → ask-user-card-BHIYyRdy.cjs.map} +1 -1
- package/dist/{ask-user-card-C01JQ7bo.js → ask-user-card-BaaCfWFs.js} +2 -2
- package/dist/{ask-user-card-C01JQ7bo.js.map → ask-user-card-BaaCfWFs.js.map} +1 -1
- package/dist/{collapsible-BzlQAuym.cjs → collapsible-C6BZhVRG.cjs} +2 -10
- package/dist/collapsible-C6BZhVRG.cjs.map +1 -0
- package/dist/{collapsible-8h5KBZPX.js → collapsible-DglEffBF.js} +2 -10
- package/dist/collapsible-DglEffBF.js.map +1 -0
- package/dist/{combobox-8_JEWMYs.js → combobox-CMu7NDj6.js} +10 -2
- package/dist/combobox-CMu7NDj6.js.map +1 -0
- package/dist/{combobox-Csiduxme.cjs → combobox-DW7-4bGp.cjs} +10 -2
- package/dist/combobox-DW7-4bGp.cjs.map +1 -0
- package/dist/{command-C-i5cx8D.js → command-BW5Jyad6.js} +4 -2
- package/dist/command-BW5Jyad6.js.map +1 -0
- package/dist/{command-Cq-K24jI.cjs → command-Bv53_kMY.cjs} +4 -2
- package/dist/command-Bv53_kMY.cjs.map +1 -0
- package/dist/components/ClampedText.cjs.js +2 -2
- package/dist/components/ClampedText.cjs.js.map +1 -1
- package/dist/components/ClampedText.es.js +2 -2
- package/dist/components/ClampedText.es.js.map +1 -1
- package/dist/components/Collapsible.cjs.js +1 -1
- package/dist/components/Collapsible.es.js +1 -1
- package/dist/components/Combobox.cjs.js +1 -1
- package/dist/components/Combobox.es.js +1 -1
- package/dist/components/Command.cjs.js +1 -1
- package/dist/components/Command.es.js +1 -1
- package/dist/components/CommandPalette.cjs.js +1 -1
- package/dist/components/CommandPalette.es.js +1 -1
- package/dist/components/Comment.cjs.js +1 -1
- package/dist/components/Comment.es.js +1 -1
- package/dist/components/Composer.cjs.js +1 -1
- package/dist/components/Composer.es.js +1 -1
- package/dist/components/DataCodeSection.cjs.js +1 -1
- package/dist/components/DataCodeSection.es.js +1 -1
- package/dist/components/DataList.cjs.js +3 -3
- package/dist/components/DataList.es.js +4 -4
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.es.js +1 -1
- package/dist/components/DateTimePicker.cjs.js +1 -1
- package/dist/components/DateTimePicker.es.js +1 -1
- package/dist/components/DateTimeRangePicker.cjs.js +1 -1
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/DisclosureChevron.cjs.js +10 -0
- package/dist/components/DisclosureChevron.cjs.js.map +1 -0
- package/dist/components/DisclosureChevron.d.ts +2 -0
- package/dist/components/DisclosureChevron.es.js +2 -0
- package/dist/components/DisclosureChevron.es.js.map +1 -0
- package/dist/components/EnvironmentVariablesEditor.cjs.js +2 -2
- package/dist/components/EnvironmentVariablesEditor.es.js +2 -2
- package/dist/components/FilterBar.cjs.js +3 -1
- package/dist/components/FilterBar.cjs.js.map +1 -1
- package/dist/components/FilterBar.es.js +4 -2
- package/dist/components/FilterBar.es.js.map +1 -1
- package/dist/components/FormFieldBlocks.cjs.js +1 -1
- package/dist/components/FormFieldBlocks.es.js +1 -1
- package/dist/components/Input.cjs.js +1 -1
- package/dist/components/Input.es.js +1 -1
- package/dist/components/InputGroup.cjs.js +1 -1
- package/dist/components/InputGroup.es.js +1 -1
- package/dist/components/InputNumber.cjs.js +5 -3
- package/dist/components/InputNumber.cjs.js.map +1 -1
- package/dist/components/InputNumber.es.js +5 -3
- package/dist/components/InputNumber.es.js.map +1 -1
- package/dist/components/JSONSchemaForm.cjs.js +1 -1
- package/dist/components/JSONSchemaForm.es.js +1 -1
- package/dist/components/ListSearch.cjs.js +1 -1
- package/dist/components/ListSearch.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +3 -3
- package/dist/components/LogsDataList.es.js +3 -3
- package/dist/components/PageLayout.cjs.js +1 -1
- package/dist/components/PageLayout.cjs.js.map +1 -1
- package/dist/components/PageLayout.es.js +1 -1
- package/dist/components/PageLayout.es.js.map +1 -1
- package/dist/components/PropertyFilter.cjs.js +2 -2
- package/dist/components/PropertyFilter.es.js +3 -3
- package/dist/components/RuleBuilder.cjs.js +1 -1
- package/dist/components/RuleBuilder.es.js +1 -1
- package/dist/components/SavedViews.cjs.js +3 -1
- package/dist/components/SavedViews.cjs.js.map +1 -1
- package/dist/components/SavedViews.es.js +3 -1
- package/dist/components/SavedViews.es.js.map +1 -1
- package/dist/components/SearchInput.cjs.js +1 -1
- package/dist/components/SearchInput.es.js +1 -1
- package/dist/components/Sidebar.cjs.js +5 -4
- package/dist/components/Sidebar.cjs.js.map +1 -1
- package/dist/components/Sidebar.es.js +5 -4
- package/dist/components/Sidebar.es.js.map +1 -1
- package/dist/components/Tree.cjs.js +1 -1
- package/dist/components/Tree.es.js +1 -1
- package/dist/components/Workflow.cjs.js +1 -1
- package/dist/components/Workflow.es.js +1 -1
- package/dist/components/ai/activity.cjs.js +4 -4
- package/dist/components/ai/activity.es.js +4 -4
- package/dist/components/ai/ask-user.cjs.js +1 -1
- package/dist/components/ai/ask-user.es.js +1 -1
- package/dist/components/ai/tool-approval.cjs.js +1 -1
- package/dist/components/ai/tool-approval.es.js +1 -1
- package/dist/components/ai/tool-call.cjs.js +1 -1
- package/dist/components/ai/tool-call.es.js +1 -1
- package/dist/{composer-DhxSetWI.cjs → composer-Cg5bXN1r.cjs} +5 -3
- package/dist/composer-Cg5bXN1r.cjs.map +1 -0
- package/dist/{composer-CIfMr8q5.js → composer-CxmOOUX8.js} +5 -3
- package/dist/composer-CxmOOUX8.js.map +1 -0
- package/dist/{data-code-section-CvLs4lM8.js → data-code-section-B1dGZ0ds.js} +2 -2
- package/dist/{data-code-section-CvLs4lM8.js.map → data-code-section-B1dGZ0ds.js.map} +1 -1
- package/dist/{data-code-section-D0NR1REP.cjs → data-code-section-BTZPG2zM.cjs} +2 -2
- package/dist/{data-code-section-D0NR1REP.cjs.map → data-code-section-BTZPG2zM.cjs.map} +1 -1
- package/dist/{data-list-BfepBJLG.js → data-list-4UMxoFNU.js} +192 -11
- package/dist/data-list-4UMxoFNU.js.map +1 -0
- package/dist/{data-list-oQsJVUa6.cjs → data-list-CqVYt2aN.cjs} +191 -10
- package/dist/data-list-CqVYt2aN.cjs.map +1 -0
- package/dist/{data-list-skeleton-BE7yRNks.cjs → data-list-skeleton-BMGppDAy.cjs} +3 -3
- package/dist/data-list-skeleton-BMGppDAy.cjs.map +1 -0
- package/dist/{data-list-skeleton-DnVnqTGL.js → data-list-skeleton-DGNzfd4Y.js} +3 -3
- package/dist/data-list-skeleton-DGNzfd4Y.js.map +1 -0
- package/dist/{data-panel-BLk0mZe6.js → data-panel-VYp4slDb.js} +2 -2
- package/dist/{data-panel-BLk0mZe6.js.map → data-panel-VYp4slDb.js.map} +1 -1
- package/dist/{data-panel-BaqnMzRn.cjs → data-panel-r1LYHphg.cjs} +2 -2
- package/dist/{data-panel-BaqnMzRn.cjs.map → data-panel-r1LYHphg.cjs.map} +1 -1
- package/dist/date-time-range-picker-BBbF3LWF.cjs +210 -0
- package/dist/date-time-range-picker-BBbF3LWF.cjs.map +1 -0
- package/dist/date-time-range-picker-CUUg0sIl.js +208 -0
- package/dist/date-time-range-picker-CUUg0sIl.js.map +1 -0
- package/dist/disclosure-chevron-BWZ8Alz1.js +33 -0
- package/dist/disclosure-chevron-BWZ8Alz1.js.map +1 -0
- package/dist/disclosure-chevron-B_gmYFR5.cjs +35 -0
- package/dist/disclosure-chevron-B_gmYFR5.cjs.map +1 -0
- package/dist/domains/chat/attachments/composer-attachment-list.cjs.js +1 -1
- package/dist/domains/chat/attachments/composer-attachment-list.es.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
- package/dist/domains/chat/context/chat-context.cjs.js.map +1 -1
- package/dist/domains/chat/context/chat-context.es.js.map +1 -1
- package/dist/domains/chat/messages/message-row.cjs.js +2 -2
- package/dist/domains/chat/messages/message-row.es.js +2 -2
- package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js +16 -8
- package/dist/domains/chat/messages/renderers/message-text.cjs.js.map +1 -1
- package/dist/domains/chat/messages/renderers/message-text.es.js +17 -9
- package/dist/domains/chat/messages/renderers/message-text.es.js.map +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
- package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/signal-badge.es.js +1 -1
- package/dist/domains/chat/messages/skill-message.cjs.js +2 -2
- package/dist/domains/chat/messages/skill-message.es.js +2 -2
- package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-details.es.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +1 -2
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.es.js +1 -2
- package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
- package/dist/domains/chat/tools/tool-card.es.js +1 -1
- package/dist/domains/logs/components/log-data-panel.cjs.js +1 -1
- package/dist/domains/logs/components/log-data-panel.es.js +1 -1
- package/dist/domains/logs/components/logs-list-view.cjs.js +3 -3
- package/dist/domains/logs/components/logs-list-view.es.js +3 -3
- package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
- package/dist/domains/metrics/components/agent-runs-card.cjs.js +0 -1
- package/dist/domains/metrics/components/agent-runs-card.cjs.js.map +1 -1
- package/dist/domains/metrics/components/agent-runs-card.es.js +0 -1
- package/dist/domains/metrics/components/agent-runs-card.es.js.map +1 -1
- package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
- package/dist/domains/metrics/components/failure-rate-card.cjs.js +2 -1
- package/dist/domains/metrics/components/failure-rate-card.cjs.js.map +1 -1
- package/dist/domains/metrics/components/failure-rate-card.es.js +2 -1
- package/dist/domains/metrics/components/failure-rate-card.es.js.map +1 -1
- package/dist/domains/metrics/components/latency-card.cjs.js +0 -1
- package/dist/domains/metrics/components/latency-card.cjs.js.map +1 -1
- package/dist/domains/metrics/components/latency-card.es.js +0 -1
- package/dist/domains/metrics/components/latency-card.es.js.map +1 -1
- package/dist/domains/metrics/components/scores-card.cjs.js +0 -1
- package/dist/domains/metrics/components/scores-card.cjs.js.map +1 -1
- package/dist/domains/metrics/components/scores-card.es.js +0 -1
- package/dist/domains/metrics/components/scores-card.es.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-card.cjs.js +0 -1
- package/dist/domains/metrics/components/token-usage-card.cjs.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-card.es.js +0 -1
- package/dist/domains/metrics/components/token-usage-card.es.js.map +1 -1
- package/dist/domains/scores/components/score-data-panel.cjs.js +13 -11
- package/dist/domains/scores/components/score-data-panel.cjs.js.map +1 -1
- package/dist/domains/scores/components/score-data-panel.es.js +13 -11
- package/dist/domains/scores/components/score-data-panel.es.js.map +1 -1
- package/dist/domains/scores/components/span-scoring.cjs.js +1 -1
- package/dist/domains/scores/components/span-scoring.es.js +1 -1
- package/dist/domains/scores/components/trace-scores-tab.cjs.js +5 -21
- package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
- package/dist/domains/scores/components/trace-scores-tab.es.js +5 -21
- package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
- package/dist/domains/traces/components/feedback-thread.cjs.js +1 -1
- package/dist/domains/traces/components/feedback-thread.es.js +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +1 -1
- package/dist/domains/traces/components/span-data-panel-view.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +1 -1
- package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/span-summary-description.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
- package/dist/domains/traces/components/thread-view-by-trace.cjs.js +0 -1
- package/dist/domains/traces/components/thread-view-by-trace.cjs.js.map +1 -1
- package/dist/domains/traces/components/thread-view-by-trace.es.js +0 -1
- package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +1 -1
- package/dist/domains/traces/components/trace-columns-menu.es.js +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +56 -21
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.es.js +57 -22
- package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel.cjs.js +4 -5
- package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel.es.js +4 -5
- package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
- package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
- package/dist/domains/traces/components/trace-id-button.es.js +1 -1
- package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
- package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
- package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
- package/dist/domains/traces/components/trace-time-range-chip.cjs.js +2 -2
- package/dist/domains/traces/components/trace-time-range-chip.es.js +2 -2
- package/dist/domains/traces/components/traces-list-view.cjs.js +126 -112
- package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-list-view.es.js +127 -113
- package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +2 -2
- package/dist/domains/traces/components/traces-page-skeleton.es.js +2 -2
- package/dist/domains/traces/trace-list-columns.cjs.js +15 -0
- package/dist/domains/traces/trace-list-columns.cjs.js.map +1 -1
- package/dist/domains/traces/trace-list-columns.es.js +15 -1
- package/dist/domains/traces/trace-list-columns.es.js.map +1 -1
- package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
- package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
- package/dist/domains/workflows/components/workflow-information.cjs.js +3 -2
- package/dist/domains/workflows/components/workflow-information.cjs.js.map +1 -1
- package/dist/domains/workflows/components/workflow-information.es.js +4 -3
- package/dist/domains/workflows/components/workflow-information.es.js.map +1 -1
- package/dist/domains/workflows/components/workflow-step-detail.cjs.js +2 -2
- package/dist/domains/workflows/components/workflow-step-detail.es.js +2 -2
- package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +4 -3
- package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js.map +1 -1
- package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +5 -4
- package/dist/domains/workflows/components/workflows-list/workflows-list.es.js.map +1 -1
- package/dist/domains/workflows/runs/workflow-run-list.cjs.js +3 -3
- package/dist/domains/workflows/runs/workflow-run-list.cjs.js.map +1 -1
- package/dist/domains/workflows/runs/workflow-run-list.es.js +3 -3
- package/dist/domains/workflows/runs/workflow-run-list.es.js.map +1 -1
- package/dist/domains/workflows/workflow/use-workflow-graph-runtime.cjs.js +2 -2
- package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-body-graph.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-body-graph.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-card.cjs.js +13 -11
- package/dist/domains/workflows/workflow/workflow-card.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-card.es.js +13 -11
- package/dist/domains/workflows/workflow/workflow-card.es.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-graph-inner.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-graph-node.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-graph-node.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +3 -2
- package/dist/domains/workflows/workflow/workflow-input-data.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-input-data.es.js +4 -3
- package/dist/domains/workflows/workflow/workflow-input-data.es.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +3 -2
- package/dist/domains/workflows/workflow/workflow-run-data.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-run-data.es.js +4 -3
- package/dist/domains/workflows/workflow/workflow-run-data.es.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +3 -9
- package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +4 -10
- package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +3 -2
- package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +4 -3
- package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline.cjs.js +3 -8
- package/dist/domains/workflows/workflow/workflow-timeline.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline.es.js +4 -9
- package/dist/domains/workflows/workflow/workflow-timeline.es.js.map +1 -1
- package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +1 -1
- package/dist/domains/workspace/components/workspace-create-directory.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-create-directory.es.js +1 -1
- package/dist/domains/workspace/components/workspace-search.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-search.es.js +1 -1
- package/dist/domains/workspace/components/workspace-tree.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-tree.es.js +1 -1
- package/dist/ee/signals/components/entity-index-list.cjs.js +1 -1
- package/dist/ee/signals/components/entity-index-list.es.js +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +3 -3
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +3 -3
- package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +1 -1
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +1 -1
- package/dist/ee/signals/signal-lifelines.cjs.js +2 -8
- package/dist/ee/signals/signal-lifelines.cjs.js.map +1 -1
- package/dist/ee/signals/signal-lifelines.es.js +2 -8
- package/dist/ee/signals/signal-lifelines.es.js.map +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +2 -2
- package/dist/ee/topics/components/topic-trace-summary-list.es.js +2 -2
- package/dist/{filter-bar-chip-BBPHw-rX.cjs → filter-bar-chip-BUlEVUgT.cjs} +3 -1
- package/dist/filter-bar-chip-BUlEVUgT.cjs.map +1 -0
- package/dist/{filter-bar-chip-SX3vDA7h.js → filter-bar-chip-DBjcrQFh.js} +3 -1
- package/dist/filter-bar-chip-DBjcrQFh.js.map +1 -0
- package/dist/hooks/use-local-storage-state.es.js +1 -1
- package/dist/{input-vi0ICZHe.js → input-DQFUjtnh.js} +4 -2
- package/dist/input-DQFUjtnh.js.map +1 -0
- package/dist/{input-group-C7WC6xGL.js → input-group-C_2SrLdX.js} +4 -2
- package/dist/input-group-C_2SrLdX.js.map +1 -0
- package/dist/{input-group-CGbhXsmd.cjs → input-group-Cxfp0mxQ.cjs} +4 -2
- package/dist/input-group-Cxfp0mxQ.cjs.map +1 -0
- package/dist/{input-HPE241gI.cjs → input-zdqTky_C.cjs} +4 -2
- package/dist/input-zdqTky_C.cjs.map +1 -0
- package/dist/layout/tabbed-container.cjs.js +3 -3
- package/dist/layout/tabbed-container.es.js +3 -3
- package/dist/lib/form/components/array-element-wrapper.cjs.js +3 -2
- package/dist/lib/form/components/array-element-wrapper.cjs.js.map +1 -1
- package/dist/lib/form/components/array-element-wrapper.es.js +4 -3
- package/dist/lib/form/components/array-element-wrapper.es.js.map +1 -1
- package/dist/lib/form/components/number-field.cjs.js +1 -1
- package/dist/lib/form/components/number-field.es.js +1 -1
- package/dist/lib/form/components/object-wrapper.cjs.js +3 -2
- package/dist/lib/form/components/object-wrapper.cjs.js.map +1 -1
- package/dist/lib/form/components/object-wrapper.es.js +4 -3
- package/dist/lib/form/components/object-wrapper.es.js.map +1 -1
- package/dist/lib/form/components/record-field.cjs.js +1 -1
- package/dist/lib/form/components/record-field.es.js +1 -1
- package/dist/{list-search-DTVH9Fbj.cjs → list-search-CA5w3QHa.cjs} +2 -2
- package/dist/{list-search-DTVH9Fbj.cjs.map → list-search-CA5w3QHa.cjs.map} +1 -1
- package/dist/{list-search-CTZVTRUd.js → list-search-Ce89eOzO.js} +2 -2
- package/dist/{list-search-CTZVTRUd.js.map → list-search-Ce89eOzO.js.map} +1 -1
- package/dist/{logs-data-list-BgFT_0qi.cjs → logs-data-list-C5UGLFo1.cjs} +2 -2
- package/dist/{logs-data-list-BgFT_0qi.cjs.map → logs-data-list-C5UGLFo1.cjs.map} +1 -1
- package/dist/{logs-data-list-C-F2jh04.js → logs-data-list-CgrUlafS.js} +2 -2
- package/dist/{logs-data-list-C-F2jh04.js.map → logs-data-list-CgrUlafS.js.map} +1 -1
- package/dist/new/layout/app-shell.cjs.js +1 -1
- package/dist/new/layout/app-shell.cjs.js.map +1 -1
- package/dist/new/layout/app-shell.es.js +1 -1
- package/dist/new/layout/app-shell.es.js.map +1 -1
- package/dist/{notification-activity-Bz0h5LOR.cjs → notification-activity-C2AcNOyq.cjs} +2 -2
- package/dist/{notification-activity-Bz0h5LOR.cjs.map → notification-activity-C2AcNOyq.cjs.map} +1 -1
- package/dist/{notification-activity-DTXzghFr.js → notification-activity-DquzIOZw.js} +2 -2
- package/dist/{notification-activity-DTXzghFr.js.map → notification-activity-DquzIOZw.js.map} +1 -1
- package/dist/primitives/chart-frame.cjs.js +1 -1
- package/dist/primitives/chart-frame.cjs.js.map +1 -1
- package/dist/primitives/chart-frame.es.js +1 -1
- package/dist/primitives/chart-frame.es.js.map +1 -1
- package/dist/primitives/password-manager-autofill.cjs.js +34 -0
- package/dist/primitives/password-manager-autofill.cjs.js.map +1 -0
- package/dist/primitives/password-manager-autofill.d.ts +2 -0
- package/dist/primitives/password-manager-autofill.es.js +28 -0
- package/dist/primitives/password-manager-autofill.es.js.map +1 -0
- package/dist/primitives/textarea-control.cjs.js +12 -2
- package/dist/primitives/textarea-control.cjs.js.map +1 -1
- package/dist/primitives/textarea-control.es.js +12 -2
- package/dist/primitives/textarea-control.es.js.map +1 -1
- package/dist/{property-filter-applied-7dHzckeW.cjs → property-filter-applied-ACNa3kYG.cjs} +4 -2
- package/dist/property-filter-applied-ACNa3kYG.cjs.map +1 -0
- package/dist/{property-filter-applied-CdbOixsW.js → property-filter-applied-e0Vg1895.js} +4 -2
- package/dist/property-filter-applied-e0Vg1895.js.map +1 -0
- package/dist/{reasoning-activity-D2sXBAxE.cjs → reasoning-activity-Cl7kaqgZ.cjs} +2 -2
- package/dist/{reasoning-activity-D2sXBAxE.cjs.map → reasoning-activity-Cl7kaqgZ.cjs.map} +1 -1
- package/dist/{reasoning-activity-Cpp4iYTw.js → reasoning-activity-D8AF1htp.js} +2 -2
- package/dist/{reasoning-activity-Cpp4iYTw.js.map → reasoning-activity-D8AF1htp.js.map} +1 -1
- package/dist/{search-input-CUGl4cVg.cjs → search-input-BHF2RziH.cjs} +2 -2
- package/dist/{search-input-CUGl4cVg.cjs.map → search-input-BHF2RziH.cjs.map} +1 -1
- package/dist/{search-input-iS3IW0Qo.js → search-input-BgVjoPtF.js} +2 -2
- package/dist/{search-input-iS3IW0Qo.js.map → search-input-BgVjoPtF.js.map} +1 -1
- package/dist/{signal-activity-CtSExTzh.js → signal-activity-BiWlOFhu.js} +2 -2
- package/dist/{signal-activity-CtSExTzh.js.map → signal-activity-BiWlOFhu.js.map} +1 -1
- package/dist/{signal-activity-Rh1YO0x6.cjs → signal-activity-aXcUgxDg.cjs} +2 -2
- package/dist/{signal-activity-Rh1YO0x6.cjs.map → signal-activity-aXcUgxDg.cjs.map} +1 -1
- package/dist/{span-payload-primitives-wxQ0IDhF.js → span-payload-primitives-D_Z6D-Aj.js} +6 -6
- package/dist/span-payload-primitives-D_Z6D-Aj.js.map +1 -0
- package/dist/{span-payload-primitives-DqZn_Q29.cjs → span-payload-primitives-XZgE4FGT.cjs} +6 -6
- package/dist/span-payload-primitives-XZgE4FGT.cjs.map +1 -0
- package/dist/src/domains/chat/context/chat-context.d.ts +5 -1
- package/dist/src/domains/traces/components/traces-list-view.d.ts +3 -1
- package/dist/src/domains/traces/trace-list-columns.d.ts +2 -0
- package/dist/src/ds/components/DataList/data-list-column-order.d.ts +22 -0
- package/dist/src/ds/components/DataList/data-list-reorder-context.d.ts +9 -0
- package/dist/src/ds/components/DataList/data-list-root.d.ts +16 -1
- package/dist/src/ds/components/DateTimeRangePicker/custom-range-editor.d.ts +12 -0
- package/dist/src/ds/components/DisclosureChevron/disclosure-chevron.d.ts +13 -0
- package/dist/src/ds/components/DisclosureChevron/index.d.ts +1 -0
- package/dist/src/ds/components/Input/input.d.ts +12 -1
- package/dist/src/ds/components/InputGroup/input-group.d.ts +1 -1
- package/dist/src/ds/components/InputNumber/input-number.d.ts +1 -1
- package/dist/src/ds/components/Tree/tree-context.d.ts +1 -0
- package/dist/src/ds/primitives/chart-frame.d.ts +4 -1
- package/dist/src/ds/primitives/password-manager-autofill.d.ts +29 -0
- package/dist/src/ds/primitives/textarea-control.d.ts +1 -1
- package/dist/style.css +18 -23
- package/dist/{tool-approval-CWOuZz47.cjs → tool-approval-DEfU8dPG.cjs} +2 -2
- package/dist/{tool-approval-CWOuZz47.cjs.map → tool-approval-DEfU8dPG.cjs.map} +1 -1
- package/dist/{tool-approval-BabMPJSL.js → tool-approval-DM8lvaCK.js} +2 -2
- package/dist/{tool-approval-BabMPJSL.js.map → tool-approval-DM8lvaCK.js.map} +1 -1
- package/dist/{tool-call-group-BPQTXJST.cjs → tool-call-group-CFpdexuw.cjs} +2 -2
- package/dist/{tool-call-group-BPQTXJST.cjs.map → tool-call-group-CFpdexuw.cjs.map} +1 -1
- package/dist/{tool-call-group-bE2C2hCK.js → tool-call-group-CZBqGjMh.js} +2 -2
- package/dist/{tool-call-group-bE2C2hCK.js.map → tool-call-group-CZBqGjMh.js.map} +1 -1
- package/dist/{tool-card-D-w1SgXq.js → tool-card-B0HX-uhD.js} +2 -2
- package/dist/tool-card-B0HX-uhD.js.map +1 -0
- package/dist/{tool-card-LNK49o-E.cjs → tool-card-CHyHNezE.cjs} +2 -2
- package/dist/tool-card-CHyHNezE.cjs.map +1 -0
- package/dist/{traces-data-list-DRSy_7KT.cjs → traces-data-list-DCa7QLQ3.cjs} +2 -2
- package/dist/{traces-data-list-DRSy_7KT.cjs.map → traces-data-list-DCa7QLQ3.cjs.map} +1 -1
- package/dist/{traces-data-list-C89IFLf8.js → traces-data-list-Dig7T40-.js} +2 -2
- package/dist/{traces-data-list-C89IFLf8.js.map → traces-data-list-Dig7T40-.js.map} +1 -1
- package/dist/{tree-DyVaMIwA.js → tree-BodKFJWV.js} +8 -5
- package/dist/tree-BodKFJWV.js.map +1 -0
- package/dist/{tree-JtAQw7a7.cjs → tree-vhKmzihm.cjs} +7 -4
- package/dist/tree-vhKmzihm.cjs.map +1 -0
- package/dist/{use-workflow-graph-runtime-FHoQYtWa.cjs → use-workflow-graph-runtime-B_ihs9Ev.cjs} +2 -2
- package/dist/{use-workflow-graph-runtime-FHoQYtWa.cjs.map → use-workflow-graph-runtime-B_ihs9Ev.cjs.map} +1 -1
- package/dist/{use-workflow-graph-runtime-XT_aoo-Z.js → use-workflow-graph-runtime-OyDXm_6V.js} +2 -2
- package/dist/{use-workflow-graph-runtime-XT_aoo-Z.js.map → use-workflow-graph-runtime-OyDXm_6V.js.map} +1 -1
- package/dist/{workflow-condition-card-Dy-0c_PT.cjs → workflow-condition-card-BF0PmJDV.cjs} +5 -4
- package/dist/workflow-condition-card-BF0PmJDV.cjs.map +1 -0
- package/dist/{workflow-condition-card-D30tufXt.js → workflow-condition-card-BVnfl6Zi.js} +5 -4
- package/dist/workflow-condition-card-BVnfl6Zi.js.map +1 -0
- package/package.json +9 -9
- package/dist/activity-maXCNWZp.js.map +0 -1
- package/dist/activity-pXCpwxxi.cjs.map +0 -1
- package/dist/collapsible-8h5KBZPX.js.map +0 -1
- package/dist/collapsible-BzlQAuym.cjs.map +0 -1
- package/dist/combobox-8_JEWMYs.js.map +0 -1
- package/dist/combobox-Csiduxme.cjs.map +0 -1
- package/dist/command-C-i5cx8D.js.map +0 -1
- package/dist/command-Cq-K24jI.cjs.map +0 -1
- package/dist/composer-CIfMr8q5.js.map +0 -1
- package/dist/composer-DhxSetWI.cjs.map +0 -1
- package/dist/data-list-BfepBJLG.js.map +0 -1
- package/dist/data-list-oQsJVUa6.cjs.map +0 -1
- package/dist/data-list-skeleton-BE7yRNks.cjs.map +0 -1
- package/dist/data-list-skeleton-DnVnqTGL.js.map +0 -1
- package/dist/date-time-range-picker-BA3e2LFA.js +0 -180
- package/dist/date-time-range-picker-BA3e2LFA.js.map +0 -1
- package/dist/date-time-range-picker-BNepacnP.cjs +0 -182
- package/dist/date-time-range-picker-BNepacnP.cjs.map +0 -1
- package/dist/filter-bar-chip-BBPHw-rX.cjs.map +0 -1
- package/dist/filter-bar-chip-SX3vDA7h.js.map +0 -1
- package/dist/input-HPE241gI.cjs.map +0 -1
- package/dist/input-group-C7WC6xGL.js.map +0 -1
- package/dist/input-group-CGbhXsmd.cjs.map +0 -1
- package/dist/input-vi0ICZHe.js.map +0 -1
- package/dist/property-filter-applied-7dHzckeW.cjs.map +0 -1
- package/dist/property-filter-applied-CdbOixsW.js.map +0 -1
- package/dist/span-payload-primitives-DqZn_Q29.cjs.map +0 -1
- package/dist/span-payload-primitives-wxQ0IDhF.js.map +0 -1
- package/dist/tool-card-D-w1SgXq.js.map +0 -1
- package/dist/tool-card-LNK49o-E.cjs.map +0 -1
- package/dist/tree-DyVaMIwA.js.map +0 -1
- package/dist/tree-JtAQw7a7.cjs.map +0 -1
- package/dist/workflow-condition-card-D30tufXt.js.map +0 -1
- package/dist/workflow-condition-card-Dy-0c_PT.cjs.map +0 -1
|
@@ -24,6 +24,7 @@ function FailureRateCard({ onViewErrors, onTimeRangeClick }) {
|
|
|
24
24
|
const { stepHours } = domains_metrics_lib_metricsBuckets.bucketPlan(timestamp.start, timestamp.end);
|
|
25
25
|
const runs = data.reduce((sum, b) => sum + b.completed + b.failed, 0);
|
|
26
26
|
const failed = data.reduce((sum, b) => sum + b.failed, 0);
|
|
27
|
+
const yDomain = failed === 0 ? [0, 1] : void 0;
|
|
27
28
|
const layout = {
|
|
28
29
|
title: "Failure rate",
|
|
29
30
|
description: "Share of agent runs that failed.",
|
|
@@ -45,9 +46,9 @@ function FailureRateCard({ onViewErrors, onTimeRangeClick }) {
|
|
|
45
46
|
series: SERIES,
|
|
46
47
|
height: "fill",
|
|
47
48
|
xLabels: "edges",
|
|
48
|
-
showYAxis: false,
|
|
49
49
|
valueFormatter: domains_metrics_lib_chartFormat.formatPercent,
|
|
50
50
|
axisFormatter: axisPercent,
|
|
51
|
+
yDomain,
|
|
51
52
|
onBucketClick: onTimeRangeClick && ((row) => onTimeRangeClick(domains_metrics_lib_metricsBuckets.bucketWindow(Number(row.ts), stepHours))),
|
|
52
53
|
isLoading,
|
|
53
54
|
...domains_metrics_lib_chartAxis.EDGE_BUCKET_AXIS
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"failure-rate-card.cjs.js","sources":["../../../../src/domains/metrics/components/failure-rate-card.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsActivity } from '../hooks/use-metrics-activity';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport { EDGE_BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatPercent } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow } from '../lib/metrics-buckets';\nimport { OpenErrorsInLogsButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport { MetricsLineChart } from '@/ds/components/MetricsLineChart';\n\nconst SERIES = [{ dataKey: 'failureRate', label: 'Failed runs', color: CHART_COLORS.error }];\n\nconst axisPercent = (ratio: number) => `${Math.round(ratio * 100)}%`;\n\n/** Share of agent runs that failed, per bucket; a point opens the failed runs' traces. */\nexport type FailureRateCardProps = {\n /** Called from the \"View errors in Logs\" button. */\n onViewErrors?: () => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n};\n\nexport function FailureRateCard({ onViewErrors, onTimeRangeClick }: FailureRateCardProps) {\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsActivity();\n const { timestamp } = useMetricsFilters();\n const { stepHours } = bucketPlan(timestamp.start, timestamp.end);\n const runs = data.reduce((sum, b) => sum + b.completed + b.failed, 0);\n const failed = data.reduce((sum, b) => sum + b.failed, 0);\n\n const layout = {\n title: 'Failure rate',\n description: 'Share of agent runs that failed.',\n actions: onViewErrors && <OpenErrorsInLogsButton onClick={onViewErrors} />,\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n summary={\n <MetricsCard.Summary value={formatPercent(runs > 0 ? failed / runs : 0)} label=\"failed\" isLoading={isLoading} />\n }\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && runs === 0} emptyMessage=\"No agent runs in this range.\">\n <MetricsLineChart\n data={data}\n series={SERIES}\n height=\"fill\"\n xLabels=\"edges\"\n
|
|
1
|
+
{"version":3,"file":"failure-rate-card.cjs.js","sources":["../../../../src/domains/metrics/components/failure-rate-card.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsActivity } from '../hooks/use-metrics-activity';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport { EDGE_BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatPercent } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow } from '../lib/metrics-buckets';\nimport { OpenErrorsInLogsButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport { MetricsLineChart } from '@/ds/components/MetricsLineChart';\n\nconst SERIES = [{ dataKey: 'failureRate', label: 'Failed runs', color: CHART_COLORS.error }];\n\nconst axisPercent = (ratio: number) => `${Math.round(ratio * 100)}%`;\n\n/** Share of agent runs that failed, per bucket; a point opens the failed runs' traces. */\nexport type FailureRateCardProps = {\n /** Called from the \"View errors in Logs\" button. */\n onViewErrors?: () => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n};\n\nexport function FailureRateCard({ onViewErrors, onTimeRangeClick }: FailureRateCardProps) {\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsActivity();\n const { timestamp } = useMetricsFilters();\n const { stepHours } = bucketPlan(timestamp.start, timestamp.end);\n const runs = data.reduce((sum, b) => sum + b.completed + b.failed, 0);\n const failed = data.reduce((sum, b) => sum + b.failed, 0);\n // With nothing failed, the axis would fall back to 0-4 (400%); a share tops out at 100%.\n const yDomain: [number, number] | undefined = failed === 0 ? [0, 1] : undefined;\n\n const layout = {\n title: 'Failure rate',\n description: 'Share of agent runs that failed.',\n actions: onViewErrors && <OpenErrorsInLogsButton onClick={onViewErrors} />,\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n summary={\n <MetricsCard.Summary value={formatPercent(runs > 0 ? failed / runs : 0)} label=\"failed\" isLoading={isLoading} />\n }\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && runs === 0} emptyMessage=\"No agent runs in this range.\">\n <MetricsLineChart\n data={data}\n series={SERIES}\n height=\"fill\"\n xLabels=\"edges\"\n valueFormatter={formatPercent}\n axisFormatter={axisPercent}\n yDomain={yDomain}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick(bucketWindow(Number(row.ts), stepHours)))}\n isLoading={isLoading}\n {...EDGE_BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"names":["CHART_COLORS","useMetricsActivity","useMetricsFilters","bucketPlan","jsx","OpenErrorsInLogsButton","ChartCard","ChartCardError","MetricsCard","formatPercent","ChartArea","MetricsLineChart","bucketWindow","EDGE_BUCKET_AXIS"],"mappings":";;;;;;;;;;;;;;;;;;AAeA,MAAM,MAAA,GAAS,CAAC,EAAE,OAAA,EAAS,aAAA,EAAe,OAAO,aAAA,EAAe,KAAA,EAAOA,4CAAA,CAAa,KAAA,EAAO,CAAA;AAE3F,MAAM,WAAA,GAAc,CAAC,KAAA,KAAkB,CAAA,EAAG,KAAK,KAAA,CAAM,KAAA,GAAQ,GAAG,CAAC,CAAA,CAAA,CAAA;AAU1D,SAAS,eAAA,CAAgB,EAAE,YAAA,EAAc,gBAAA,EAAiB,EAAyB;AACxF,EAAA,MAAM,EAAE,OAAO,EAAC,EAAG,WAAW,OAAA,EAAS,iBAAA,KAAsBC,2DAAA,EAAmB;AAChF,EAAA,MAAM,EAAE,SAAA,EAAU,GAAIC,yDAAA,EAAkB;AACxC,EAAA,MAAM,EAAE,SAAA,EAAU,GAAIC,8CAAW,SAAA,CAAU,KAAA,EAAO,UAAU,GAAG,CAAA;AAC/D,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAM,CAAA,CAAE,SAAA,GAAY,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AACpE,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,CAAO,CAAC,KAAK,CAAA,KAAM,GAAA,GAAM,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAExD,EAAA,MAAM,UAAwC,MAAA,KAAW,CAAA,GAAI,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,MAAA;AAEtE,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,KAAA,EAAO,cAAA;AAAA,IACP,WAAA,EAAa,kCAAA;AAAA,IACb,OAAA,EAAS,YAAA,oBAAgBC,cAAA,CAACC,mEAAA,EAAA,EAAuB,SAAS,YAAA,EAAc;AAAA,GAC1E;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,sCACGC,8CAAA,EAAA,EAAW,GAAG,MAAA,EACb,QAAA,kBAAAF,cAAA,CAACG,4DAAe,CAAA,EAClB,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEH,cAAA;AAAA,IAACE,8CAAA;AAAA,IAAA;AAAA,MACE,GAAG,MAAA;AAAA,MACJ,OAAA,kBACEF,cAAA,CAACI,uBAAA,CAAY,OAAA,EAAZ,EAAoB,KAAA,EAAOC,6CAAA,CAAc,IAAA,GAAO,CAAA,GAAI,SAAS,IAAA,GAAO,CAAC,CAAA,EAAG,KAAA,EAAM,UAAS,SAAA,EAAsB,CAAA;AAAA,MAEhH,UAAA,EAAY,iBAAA;AAAA,MAEZ,QAAA,kBAAAL,cAAA,CAACM,kDAAU,OAAA,EAAS,CAAC,aAAa,IAAA,KAAS,CAAA,EAAG,cAAa,8BAAA,EACzD,QAAA,kBAAAN,cAAA;AAAA,QAACO,iCAAA;AAAA,QAAA;AAAA,UACC,IAAA;AAAA,UACA,MAAA,EAAQ,MAAA;AAAA,UACR,MAAA,EAAO,MAAA;AAAA,UACP,OAAA,EAAQ,OAAA;AAAA,UACR,cAAA,EAAgBF,6CAAA;AAAA,UAChB,aAAA,EAAe,WAAA;AAAA,UACf,OAAA;AAAA,UACA,aAAA,EAAe,gBAAA,KAAqB,CAAA,GAAA,KAAO,gBAAA,CAAiBG,+CAAA,CAAa,OAAO,GAAA,CAAI,EAAE,CAAA,EAAG,SAAS,CAAC,CAAA,CAAA;AAAA,UACnG,SAAA;AAAA,UACC,GAAGC;AAAA;AAAA,OACN,EACF;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -20,6 +20,7 @@ function FailureRateCard({ onViewErrors, onTimeRangeClick }) {
|
|
|
20
20
|
const { stepHours } = bucketPlan(timestamp.start, timestamp.end);
|
|
21
21
|
const runs = data.reduce((sum, b) => sum + b.completed + b.failed, 0);
|
|
22
22
|
const failed = data.reduce((sum, b) => sum + b.failed, 0);
|
|
23
|
+
const yDomain = failed === 0 ? [0, 1] : void 0;
|
|
23
24
|
const layout = {
|
|
24
25
|
title: "Failure rate",
|
|
25
26
|
description: "Share of agent runs that failed.",
|
|
@@ -41,9 +42,9 @@ function FailureRateCard({ onViewErrors, onTimeRangeClick }) {
|
|
|
41
42
|
series: SERIES,
|
|
42
43
|
height: "fill",
|
|
43
44
|
xLabels: "edges",
|
|
44
|
-
showYAxis: false,
|
|
45
45
|
valueFormatter: formatPercent,
|
|
46
46
|
axisFormatter: axisPercent,
|
|
47
|
+
yDomain,
|
|
47
48
|
onBucketClick: onTimeRangeClick && ((row) => onTimeRangeClick(bucketWindow(Number(row.ts), stepHours))),
|
|
48
49
|
isLoading,
|
|
49
50
|
...EDGE_BUCKET_AXIS
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"failure-rate-card.es.js","sources":["../../../../src/domains/metrics/components/failure-rate-card.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsActivity } from '../hooks/use-metrics-activity';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport { EDGE_BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatPercent } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow } from '../lib/metrics-buckets';\nimport { OpenErrorsInLogsButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport { MetricsLineChart } from '@/ds/components/MetricsLineChart';\n\nconst SERIES = [{ dataKey: 'failureRate', label: 'Failed runs', color: CHART_COLORS.error }];\n\nconst axisPercent = (ratio: number) => `${Math.round(ratio * 100)}%`;\n\n/** Share of agent runs that failed, per bucket; a point opens the failed runs' traces. */\nexport type FailureRateCardProps = {\n /** Called from the \"View errors in Logs\" button. */\n onViewErrors?: () => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n};\n\nexport function FailureRateCard({ onViewErrors, onTimeRangeClick }: FailureRateCardProps) {\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsActivity();\n const { timestamp } = useMetricsFilters();\n const { stepHours } = bucketPlan(timestamp.start, timestamp.end);\n const runs = data.reduce((sum, b) => sum + b.completed + b.failed, 0);\n const failed = data.reduce((sum, b) => sum + b.failed, 0);\n\n const layout = {\n title: 'Failure rate',\n description: 'Share of agent runs that failed.',\n actions: onViewErrors && <OpenErrorsInLogsButton onClick={onViewErrors} />,\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n summary={\n <MetricsCard.Summary value={formatPercent(runs > 0 ? failed / runs : 0)} label=\"failed\" isLoading={isLoading} />\n }\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && runs === 0} emptyMessage=\"No agent runs in this range.\">\n <MetricsLineChart\n data={data}\n series={SERIES}\n height=\"fill\"\n xLabels=\"edges\"\n
|
|
1
|
+
{"version":3,"file":"failure-rate-card.es.js","sources":["../../../../src/domains/metrics/components/failure-rate-card.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsActivity } from '../hooks/use-metrics-activity';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport { EDGE_BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatPercent } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow } from '../lib/metrics-buckets';\nimport { OpenErrorsInLogsButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport { MetricsLineChart } from '@/ds/components/MetricsLineChart';\n\nconst SERIES = [{ dataKey: 'failureRate', label: 'Failed runs', color: CHART_COLORS.error }];\n\nconst axisPercent = (ratio: number) => `${Math.round(ratio * 100)}%`;\n\n/** Share of agent runs that failed, per bucket; a point opens the failed runs' traces. */\nexport type FailureRateCardProps = {\n /** Called from the \"View errors in Logs\" button. */\n onViewErrors?: () => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n};\n\nexport function FailureRateCard({ onViewErrors, onTimeRangeClick }: FailureRateCardProps) {\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsActivity();\n const { timestamp } = useMetricsFilters();\n const { stepHours } = bucketPlan(timestamp.start, timestamp.end);\n const runs = data.reduce((sum, b) => sum + b.completed + b.failed, 0);\n const failed = data.reduce((sum, b) => sum + b.failed, 0);\n // With nothing failed, the axis would fall back to 0-4 (400%); a share tops out at 100%.\n const yDomain: [number, number] | undefined = failed === 0 ? [0, 1] : undefined;\n\n const layout = {\n title: 'Failure rate',\n description: 'Share of agent runs that failed.',\n actions: onViewErrors && <OpenErrorsInLogsButton onClick={onViewErrors} />,\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n summary={\n <MetricsCard.Summary value={formatPercent(runs > 0 ? failed / runs : 0)} label=\"failed\" isLoading={isLoading} />\n }\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && runs === 0} emptyMessage=\"No agent runs in this range.\">\n <MetricsLineChart\n data={data}\n series={SERIES}\n height=\"fill\"\n xLabels=\"edges\"\n valueFormatter={formatPercent}\n axisFormatter={axisPercent}\n yDomain={yDomain}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick(bucketWindow(Number(row.ts), stepHours)))}\n isLoading={isLoading}\n {...EDGE_BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAeA,MAAM,MAAA,GAAS,CAAC,EAAE,OAAA,EAAS,aAAA,EAAe,OAAO,aAAA,EAAe,KAAA,EAAO,YAAA,CAAa,KAAA,EAAO,CAAA;AAE3F,MAAM,WAAA,GAAc,CAAC,KAAA,KAAkB,CAAA,EAAG,KAAK,KAAA,CAAM,KAAA,GAAQ,GAAG,CAAC,CAAA,CAAA,CAAA;AAU1D,SAAS,eAAA,CAAgB,EAAE,YAAA,EAAc,gBAAA,EAAiB,EAAyB;AACxF,EAAA,MAAM,EAAE,OAAO,EAAC,EAAG,WAAW,OAAA,EAAS,iBAAA,KAAsB,kBAAA,EAAmB;AAChF,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,iBAAA,EAAkB;AACxC,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,WAAW,SAAA,CAAU,KAAA,EAAO,UAAU,GAAG,CAAA;AAC/D,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAM,CAAA,CAAE,SAAA,GAAY,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AACpE,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,CAAO,CAAC,KAAK,CAAA,KAAM,GAAA,GAAM,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAExD,EAAA,MAAM,UAAwC,MAAA,KAAW,CAAA,GAAI,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,MAAA;AAEtE,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,KAAA,EAAO,cAAA;AAAA,IACP,WAAA,EAAa,kCAAA;AAAA,IACb,OAAA,EAAS,YAAA,oBAAgB,GAAA,CAAC,sBAAA,EAAA,EAAuB,SAAS,YAAA,EAAc;AAAA,GAC1E;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,2BACG,SAAA,EAAA,EAAW,GAAG,MAAA,EACb,QAAA,kBAAA,GAAA,CAAC,kBAAe,CAAA,EAClB,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACE,GAAG,MAAA;AAAA,MACJ,OAAA,kBACE,GAAA,CAAC,WAAA,CAAY,OAAA,EAAZ,EAAoB,KAAA,EAAO,aAAA,CAAc,IAAA,GAAO,CAAA,GAAI,SAAS,IAAA,GAAO,CAAC,CAAA,EAAG,KAAA,EAAM,UAAS,SAAA,EAAsB,CAAA;AAAA,MAEhH,UAAA,EAAY,iBAAA;AAAA,MAEZ,QAAA,kBAAA,GAAA,CAAC,aAAU,OAAA,EAAS,CAAC,aAAa,IAAA,KAAS,CAAA,EAAG,cAAa,8BAAA,EACzD,QAAA,kBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,IAAA;AAAA,UACA,MAAA,EAAQ,MAAA;AAAA,UACR,MAAA,EAAO,MAAA;AAAA,UACP,OAAA,EAAQ,OAAA;AAAA,UACR,cAAA,EAAgB,aAAA;AAAA,UAChB,aAAA,EAAe,WAAA;AAAA,UACf,OAAA;AAAA,UACA,aAAA,EAAe,gBAAA,KAAqB,CAAA,GAAA,KAAO,gBAAA,CAAiB,YAAA,CAAa,OAAO,GAAA,CAAI,EAAE,CAAA,EAAG,SAAS,CAAC,CAAA,CAAA;AAAA,UACnG,SAAA;AAAA,UACC,GAAG;AAAA;AAAA,OACN,EACF;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -72,7 +72,6 @@ function LatencyCard({ onViewTraces, onTimeRangeClick }) {
|
|
|
72
72
|
height: "fill",
|
|
73
73
|
xLabels: "edges",
|
|
74
74
|
showLegend: false,
|
|
75
|
-
showYAxis: false,
|
|
76
75
|
valueFormatter: domains_metrics_lib_chartFormat.formatDuration,
|
|
77
76
|
axisFormatter: domains_metrics_lib_chartFormat.formatAxisDuration,
|
|
78
77
|
onBucketClick: onTimeRangeClick && ((row) => onTimeRangeClick(domains_metrics_lib_metricsBuckets.bucketWindow(Number(row.ts), step))),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"latency-card.cjs.js","sources":["../../../../src/domains/metrics/components/latency-card.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport { useState } from 'react';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport type { LatencyEntity } from '../hooks/use-metrics-latency';\nimport { useMetricsLatency } from '../hooks/use-metrics-latency';\nimport { EDGE_BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatAxisDuration, formatDuration } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow, intervalHours } from '../lib/metrics-buckets';\nimport { OpenInTracesButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChart, MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\n\nconst ROOT_ENTITY: Record<LatencyEntity, EntityType> = {\n agents: EntityType.AGENT,\n workflows: EntityType.WORKFLOW_RUN,\n tools: EntityType.TOOL,\n};\n\nfunction seriesFor(entity: LatencyEntity): MetricsLineChartSeries[] {\n return [\n { dataKey: `${entity}P50`, label: 'P50', color: CHART_COLORS.sky },\n { dataKey: `${entity}P95`, label: 'P95', color: CHART_COLORS.green, emphasis: true },\n ];\n}\n\nconst EMPTY_NOUN: Record<LatencyEntity, string> = {\n agents: 'agent runs',\n workflows: 'workflow runs',\n tools: 'tool calls',\n};\n\n/** P50 and P95 durations of agent runs, workflow runs or tool calls; a point opens its traces. */\nexport type LatencyCardProps = {\n /** Called from the \"View in Traces\" button with the entity type of the open tab. */\n onViewTraces?: (entityType: EntityType) => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n};\n\nexport function LatencyCard({ onViewTraces, onTimeRangeClick }: LatencyCardProps) {\n const [entity, setEntity] = useState<LatencyEntity>('agents');\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsLatency();\n const { timestamp } = useMetricsFilters();\n // The latency chart keeps the API's 1h or 1d buckets, so a point opens that window.\n const step = intervalHours(bucketPlan(timestamp.start, timestamp.end).interval);\n const series = seriesFor(entity);\n const peak = Math.max(0, ...data.map(b => b[`${entity}P95`] ?? 0));\n\n const layout = {\n title: 'Latency',\n description: 'Duration percentiles.',\n actions: onViewTraces && <OpenInTracesButton onClick={() => onViewTraces(ROOT_ENTITY[entity])} />,\n toolbar: (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={series} />\n <MetricsCard.Tabs<LatencyEntity> value={entity} onValueChange={setEntity}>\n <MetricsCard.Tab value=\"agents\">Agents</MetricsCard.Tab>\n <MetricsCard.Tab value=\"workflows\">Workflows</MetricsCard.Tab>\n <MetricsCard.Tab value=\"tools\">Tools</MetricsCard.Tab>\n </MetricsCard.Tabs>\n </MetricsCard.Toolbar>\n ),\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n summary={\n <MetricsCard.Summary value={peak > 0 ? formatDuration(peak) : '—'} label=\"peak P95\" isLoading={isLoading} />\n }\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && peak === 0} emptyMessage={`No ${EMPTY_NOUN[entity]} in this range.`}>\n <MetricsLineChart\n data={data}\n series={series}\n height=\"fill\"\n xLabels=\"edges\"\n showLegend={false}\n
|
|
1
|
+
{"version":3,"file":"latency-card.cjs.js","sources":["../../../../src/domains/metrics/components/latency-card.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport { useState } from 'react';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport type { LatencyEntity } from '../hooks/use-metrics-latency';\nimport { useMetricsLatency } from '../hooks/use-metrics-latency';\nimport { EDGE_BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatAxisDuration, formatDuration } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow, intervalHours } from '../lib/metrics-buckets';\nimport { OpenInTracesButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChart, MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\n\nconst ROOT_ENTITY: Record<LatencyEntity, EntityType> = {\n agents: EntityType.AGENT,\n workflows: EntityType.WORKFLOW_RUN,\n tools: EntityType.TOOL,\n};\n\nfunction seriesFor(entity: LatencyEntity): MetricsLineChartSeries[] {\n return [\n { dataKey: `${entity}P50`, label: 'P50', color: CHART_COLORS.sky },\n { dataKey: `${entity}P95`, label: 'P95', color: CHART_COLORS.green, emphasis: true },\n ];\n}\n\nconst EMPTY_NOUN: Record<LatencyEntity, string> = {\n agents: 'agent runs',\n workflows: 'workflow runs',\n tools: 'tool calls',\n};\n\n/** P50 and P95 durations of agent runs, workflow runs or tool calls; a point opens its traces. */\nexport type LatencyCardProps = {\n /** Called from the \"View in Traces\" button with the entity type of the open tab. */\n onViewTraces?: (entityType: EntityType) => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n};\n\nexport function LatencyCard({ onViewTraces, onTimeRangeClick }: LatencyCardProps) {\n const [entity, setEntity] = useState<LatencyEntity>('agents');\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsLatency();\n const { timestamp } = useMetricsFilters();\n // The latency chart keeps the API's 1h or 1d buckets, so a point opens that window.\n const step = intervalHours(bucketPlan(timestamp.start, timestamp.end).interval);\n const series = seriesFor(entity);\n const peak = Math.max(0, ...data.map(b => b[`${entity}P95`] ?? 0));\n\n const layout = {\n title: 'Latency',\n description: 'Duration percentiles.',\n actions: onViewTraces && <OpenInTracesButton onClick={() => onViewTraces(ROOT_ENTITY[entity])} />,\n toolbar: (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={series} />\n <MetricsCard.Tabs<LatencyEntity> value={entity} onValueChange={setEntity}>\n <MetricsCard.Tab value=\"agents\">Agents</MetricsCard.Tab>\n <MetricsCard.Tab value=\"workflows\">Workflows</MetricsCard.Tab>\n <MetricsCard.Tab value=\"tools\">Tools</MetricsCard.Tab>\n </MetricsCard.Tabs>\n </MetricsCard.Toolbar>\n ),\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n summary={\n <MetricsCard.Summary value={peak > 0 ? formatDuration(peak) : '—'} label=\"peak P95\" isLoading={isLoading} />\n }\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && peak === 0} emptyMessage={`No ${EMPTY_NOUN[entity]} in this range.`}>\n <MetricsLineChart\n data={data}\n series={series}\n height=\"fill\"\n xLabels=\"edges\"\n showLegend={false}\n valueFormatter={formatDuration}\n axisFormatter={formatAxisDuration}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick(bucketWindow(Number(row.ts), step)))}\n isLoading={isLoading}\n {...EDGE_BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"names":["EntityType","CHART_COLORS","useState","useMetricsLatency","useMetricsFilters","intervalHours","bucketPlan","jsx","OpenInTracesButton","jsxs","MetricsCard","MetricsLineChartLegend","ChartCard","ChartCardError","formatDuration","ChartArea","MetricsLineChart","formatAxisDuration","bucketWindow","EDGE_BUCKET_AXIS"],"mappings":"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"}
|
|
@@ -68,7 +68,6 @@ function LatencyCard({ onViewTraces, onTimeRangeClick }) {
|
|
|
68
68
|
height: "fill",
|
|
69
69
|
xLabels: "edges",
|
|
70
70
|
showLegend: false,
|
|
71
|
-
showYAxis: false,
|
|
72
71
|
valueFormatter: formatDuration,
|
|
73
72
|
axisFormatter: formatAxisDuration,
|
|
74
73
|
onBucketClick: onTimeRangeClick && ((row) => onTimeRangeClick(bucketWindow(Number(row.ts), step))),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"latency-card.es.js","sources":["../../../../src/domains/metrics/components/latency-card.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport { useState } from 'react';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport type { LatencyEntity } from '../hooks/use-metrics-latency';\nimport { useMetricsLatency } from '../hooks/use-metrics-latency';\nimport { EDGE_BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatAxisDuration, formatDuration } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow, intervalHours } from '../lib/metrics-buckets';\nimport { OpenInTracesButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChart, MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\n\nconst ROOT_ENTITY: Record<LatencyEntity, EntityType> = {\n agents: EntityType.AGENT,\n workflows: EntityType.WORKFLOW_RUN,\n tools: EntityType.TOOL,\n};\n\nfunction seriesFor(entity: LatencyEntity): MetricsLineChartSeries[] {\n return [\n { dataKey: `${entity}P50`, label: 'P50', color: CHART_COLORS.sky },\n { dataKey: `${entity}P95`, label: 'P95', color: CHART_COLORS.green, emphasis: true },\n ];\n}\n\nconst EMPTY_NOUN: Record<LatencyEntity, string> = {\n agents: 'agent runs',\n workflows: 'workflow runs',\n tools: 'tool calls',\n};\n\n/** P50 and P95 durations of agent runs, workflow runs or tool calls; a point opens its traces. */\nexport type LatencyCardProps = {\n /** Called from the \"View in Traces\" button with the entity type of the open tab. */\n onViewTraces?: (entityType: EntityType) => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n};\n\nexport function LatencyCard({ onViewTraces, onTimeRangeClick }: LatencyCardProps) {\n const [entity, setEntity] = useState<LatencyEntity>('agents');\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsLatency();\n const { timestamp } = useMetricsFilters();\n // The latency chart keeps the API's 1h or 1d buckets, so a point opens that window.\n const step = intervalHours(bucketPlan(timestamp.start, timestamp.end).interval);\n const series = seriesFor(entity);\n const peak = Math.max(0, ...data.map(b => b[`${entity}P95`] ?? 0));\n\n const layout = {\n title: 'Latency',\n description: 'Duration percentiles.',\n actions: onViewTraces && <OpenInTracesButton onClick={() => onViewTraces(ROOT_ENTITY[entity])} />,\n toolbar: (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={series} />\n <MetricsCard.Tabs<LatencyEntity> value={entity} onValueChange={setEntity}>\n <MetricsCard.Tab value=\"agents\">Agents</MetricsCard.Tab>\n <MetricsCard.Tab value=\"workflows\">Workflows</MetricsCard.Tab>\n <MetricsCard.Tab value=\"tools\">Tools</MetricsCard.Tab>\n </MetricsCard.Tabs>\n </MetricsCard.Toolbar>\n ),\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n summary={\n <MetricsCard.Summary value={peak > 0 ? formatDuration(peak) : '—'} label=\"peak P95\" isLoading={isLoading} />\n }\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && peak === 0} emptyMessage={`No ${EMPTY_NOUN[entity]} in this range.`}>\n <MetricsLineChart\n data={data}\n series={series}\n height=\"fill\"\n xLabels=\"edges\"\n showLegend={false}\n
|
|
1
|
+
{"version":3,"file":"latency-card.es.js","sources":["../../../../src/domains/metrics/components/latency-card.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport { useState } from 'react';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport type { LatencyEntity } from '../hooks/use-metrics-latency';\nimport { useMetricsLatency } from '../hooks/use-metrics-latency';\nimport { EDGE_BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatAxisDuration, formatDuration } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow, intervalHours } from '../lib/metrics-buckets';\nimport { OpenInTracesButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChart, MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\n\nconst ROOT_ENTITY: Record<LatencyEntity, EntityType> = {\n agents: EntityType.AGENT,\n workflows: EntityType.WORKFLOW_RUN,\n tools: EntityType.TOOL,\n};\n\nfunction seriesFor(entity: LatencyEntity): MetricsLineChartSeries[] {\n return [\n { dataKey: `${entity}P50`, label: 'P50', color: CHART_COLORS.sky },\n { dataKey: `${entity}P95`, label: 'P95', color: CHART_COLORS.green, emphasis: true },\n ];\n}\n\nconst EMPTY_NOUN: Record<LatencyEntity, string> = {\n agents: 'agent runs',\n workflows: 'workflow runs',\n tools: 'tool calls',\n};\n\n/** P50 and P95 durations of agent runs, workflow runs or tool calls; a point opens its traces. */\nexport type LatencyCardProps = {\n /** Called from the \"View in Traces\" button with the entity type of the open tab. */\n onViewTraces?: (entityType: EntityType) => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n};\n\nexport function LatencyCard({ onViewTraces, onTimeRangeClick }: LatencyCardProps) {\n const [entity, setEntity] = useState<LatencyEntity>('agents');\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsLatency();\n const { timestamp } = useMetricsFilters();\n // The latency chart keeps the API's 1h or 1d buckets, so a point opens that window.\n const step = intervalHours(bucketPlan(timestamp.start, timestamp.end).interval);\n const series = seriesFor(entity);\n const peak = Math.max(0, ...data.map(b => b[`${entity}P95`] ?? 0));\n\n const layout = {\n title: 'Latency',\n description: 'Duration percentiles.',\n actions: onViewTraces && <OpenInTracesButton onClick={() => onViewTraces(ROOT_ENTITY[entity])} />,\n toolbar: (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={series} />\n <MetricsCard.Tabs<LatencyEntity> value={entity} onValueChange={setEntity}>\n <MetricsCard.Tab value=\"agents\">Agents</MetricsCard.Tab>\n <MetricsCard.Tab value=\"workflows\">Workflows</MetricsCard.Tab>\n <MetricsCard.Tab value=\"tools\">Tools</MetricsCard.Tab>\n </MetricsCard.Tabs>\n </MetricsCard.Toolbar>\n ),\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n summary={\n <MetricsCard.Summary value={peak > 0 ? formatDuration(peak) : '—'} label=\"peak P95\" isLoading={isLoading} />\n }\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && peak === 0} emptyMessage={`No ${EMPTY_NOUN[entity]} in this range.`}>\n <MetricsLineChart\n data={data}\n series={series}\n height=\"fill\"\n xLabels=\"edges\"\n showLegend={false}\n valueFormatter={formatDuration}\n axisFormatter={formatAxisDuration}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick(bucketWindow(Number(row.ts), step)))}\n isLoading={isLoading}\n {...EDGE_BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAkBA,MAAM,WAAA,GAAiD;AAAA,EACrD,QAAQ,UAAA,CAAW,KAAA;AAAA,EACnB,WAAW,UAAA,CAAW,YAAA;AAAA,EACtB,OAAO,UAAA,CAAW;AACpB,CAAA;AAEA,SAAS,UAAU,MAAA,EAAiD;AAClE,EAAA,OAAO;AAAA,IACL,EAAE,SAAS,CAAA,EAAG,MAAM,OAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,YAAA,CAAa,GAAA,EAAI;AAAA,IACjE,EAAE,OAAA,EAAS,CAAA,EAAG,MAAM,CAAA,GAAA,CAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,YAAA,CAAa,KAAA,EAAO,QAAA,EAAU,IAAA;AAAK,GACrF;AACF;AAEA,MAAM,UAAA,GAA4C;AAAA,EAChD,MAAA,EAAQ,YAAA;AAAA,EACR,SAAA,EAAW,eAAA;AAAA,EACX,KAAA,EAAO;AACT,CAAA;AAUO,SAAS,WAAA,CAAY,EAAE,YAAA,EAAc,gBAAA,EAAiB,EAAqB;AAChF,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAwB,QAAQ,CAAA;AAC5D,EAAA,MAAM,EAAE,OAAO,EAAC,EAAG,WAAW,OAAA,EAAS,iBAAA,KAAsB,iBAAA,EAAkB;AAC/E,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,iBAAA,EAAkB;AAExC,EAAA,MAAM,IAAA,GAAO,cAAc,UAAA,CAAW,SAAA,CAAU,OAAO,SAAA,CAAU,GAAG,EAAE,QAAQ,CAAA;AAC9E,EAAA,MAAM,MAAA,GAAS,UAAU,MAAM,CAAA;AAC/B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,IAAA,CAAK,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,CAAA,EAAG,MAAM,CAAA,GAAA,CAAK,CAAA,IAAK,CAAC,CAAC,CAAA;AAEjE,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,KAAA,EAAO,SAAA;AAAA,IACP,WAAA,EAAa,uBAAA;AAAA,IACb,OAAA,EAAS,YAAA,oBAAgB,GAAA,CAAC,kBAAA,EAAA,EAAmB,OAAA,EAAS,MAAM,YAAA,CAAa,WAAA,CAAY,MAAM,CAAC,CAAA,EAAG,CAAA;AAAA,IAC/F,OAAA,kBACE,IAAA,CAAC,WAAA,CAAY,OAAA,EAAZ,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,0BAAuB,MAAA,EAAgB,CAAA;AAAA,2BACvC,WAAA,CAAY,IAAA,EAAZ,EAAgC,KAAA,EAAO,MAAA,EAAQ,eAAe,SAAA,EAC7D,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,WAAA,CAAY,GAAA,EAAZ,EAAgB,KAAA,EAAM,UAAS,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,4BACrC,WAAA,CAAY,GAAA,EAAZ,EAAgB,KAAA,EAAM,aAAY,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,4BAC3C,WAAA,CAAY,GAAA,EAAZ,EAAgB,KAAA,EAAM,SAAQ,QAAA,EAAA,OAAA,EAAK;AAAA,OAAA,EACtC;AAAA,KAAA,EACF;AAAA,GAEJ;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,2BACG,SAAA,EAAA,EAAW,GAAG,MAAA,EACb,QAAA,kBAAA,GAAA,CAAC,kBAAe,CAAA,EAClB,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACE,GAAG,MAAA;AAAA,MACJ,OAAA,kBACE,GAAA,CAAC,WAAA,CAAY,OAAA,EAAZ,EAAoB,KAAA,EAAO,IAAA,GAAO,CAAA,GAAI,cAAA,CAAe,IAAI,CAAA,GAAI,GAAA,EAAK,KAAA,EAAM,YAAW,SAAA,EAAsB,CAAA;AAAA,MAE5G,UAAA,EAAY,iBAAA;AAAA,MAEZ,QAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,OAAA,EAAS,CAAC,SAAA,IAAa,IAAA,KAAS,CAAA,EAAG,YAAA,EAAc,CAAA,GAAA,EAAM,UAAA,CAAW,MAAM,CAAC,CAAA,eAAA,CAAA,EAClF,QAAA,kBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,IAAA;AAAA,UACA,MAAA;AAAA,UACA,MAAA,EAAO,MAAA;AAAA,UACP,OAAA,EAAQ,OAAA;AAAA,UACR,UAAA,EAAY,KAAA;AAAA,UACZ,cAAA,EAAgB,cAAA;AAAA,UAChB,aAAA,EAAe,kBAAA;AAAA,UACf,aAAA,EAAe,gBAAA,KAAqB,CAAA,GAAA,KAAO,gBAAA,CAAiB,YAAA,CAAa,OAAO,GAAA,CAAI,EAAE,CAAA,EAAG,IAAI,CAAC,CAAA,CAAA;AAAA,UAC9F,SAAA;AAAA,UACC,GAAG;AAAA;AAAA,OACN,EACF;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scores-card.cjs.js","sources":["../../../../src/domains/metrics/components/scores-card.tsx"],"sourcesContent":["import { useMetricsScores } from '../hooks/use-metrics-scores';\nimport type { ScorerAverage } from '../hooks/use-metrics-scores';\nimport { BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChart } from '@/ds/components/MetricsLineChart';\n\n/** Scores aren't problems, so no warm hues; past five scorers the colors repeat. */\nconst SCORER_COLORS = [\n CHART_COLORS.green,\n CHART_COLORS.sky,\n CHART_COLORS.violet,\n CHART_COLORS.teal,\n CHART_COLORS.indigo,\n];\n\nconst formatScore = (score: number) => score.toFixed(2);\nconst axisScore = (score: number) => score.toFixed(1);\n\n/** One line per scorer; the legend carries its mean over the range. */\nfunction scorerSeries(scorers: ScorerAverage[]): MetricsLineChartSeries[] {\n return scorers.map(({ scorerId, name, average }, i) => ({\n dataKey: scorerId,\n label: name,\n color: SCORER_COLORS[i % SCORER_COLORS.length] ?? CHART_COLORS.neutral,\n aggregate: () => ({ value: formatScore(average) }),\n }));\n}\n\n/** Average result of each scorer over time, 0 to 1. */\nexport function ScoresCard() {\n const { data, isLoading, isError, isPlaceholderData } = useMetricsScores();\n const scorers = data?.scorers ?? [];\n\n const layout = { title: 'Scores', description: 'Average scorer result, 0 to 1.' };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n summary={\n <MetricsCard.Summary\n value={String(scorers.length)}\n label={scorers.length === 1 ? 'scorer' : 'scorers'}\n isLoading={isLoading}\n />\n }\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && scorers.length === 0} emptyMessage=\"No scores in this range.\">\n <MetricsLineChart\n data={data?.buckets ?? []}\n series={scorerSeries(scorers)}\n height=\"fill\"\n
|
|
1
|
+
{"version":3,"file":"scores-card.cjs.js","sources":["../../../../src/domains/metrics/components/scores-card.tsx"],"sourcesContent":["import { useMetricsScores } from '../hooks/use-metrics-scores';\nimport type { ScorerAverage } from '../hooks/use-metrics-scores';\nimport { BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChart } from '@/ds/components/MetricsLineChart';\n\n/** Scores aren't problems, so no warm hues; past five scorers the colors repeat. */\nconst SCORER_COLORS = [\n CHART_COLORS.green,\n CHART_COLORS.sky,\n CHART_COLORS.violet,\n CHART_COLORS.teal,\n CHART_COLORS.indigo,\n];\n\nconst formatScore = (score: number) => score.toFixed(2);\nconst axisScore = (score: number) => score.toFixed(1);\n\n/** One line per scorer; the legend carries its mean over the range. */\nfunction scorerSeries(scorers: ScorerAverage[]): MetricsLineChartSeries[] {\n return scorers.map(({ scorerId, name, average }, i) => ({\n dataKey: scorerId,\n label: name,\n color: SCORER_COLORS[i % SCORER_COLORS.length] ?? CHART_COLORS.neutral,\n aggregate: () => ({ value: formatScore(average) }),\n }));\n}\n\n/** Average result of each scorer over time, 0 to 1. */\nexport function ScoresCard() {\n const { data, isLoading, isError, isPlaceholderData } = useMetricsScores();\n const scorers = data?.scorers ?? [];\n\n const layout = { title: 'Scores', description: 'Average scorer result, 0 to 1.' };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n summary={\n <MetricsCard.Summary\n value={String(scorers.length)}\n label={scorers.length === 1 ? 'scorer' : 'scorers'}\n isLoading={isLoading}\n />\n }\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && scorers.length === 0} emptyMessage=\"No scores in this range.\">\n <MetricsLineChart\n data={data?.buckets ?? []}\n series={scorerSeries(scorers)}\n height=\"fill\"\n yDomain={[0, 1]}\n valueFormatter={formatScore}\n axisFormatter={axisScore}\n isLoading={isLoading}\n {...BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"names":["CHART_COLORS","useMetricsScores","ChartCard","jsx","ChartCardError","MetricsCard","ChartArea","MetricsLineChart","BUCKET_AXIS"],"mappings":";;;;;;;;;;;;;;AAYA,MAAM,aAAA,GAAgB;AAAA,EACpBA,4CAAA,CAAa,KAAA;AAAA,EACbA,4CAAA,CAAa,GAAA;AAAA,EACbA,4CAAA,CAAa,MAAA;AAAA,EACbA,4CAAA,CAAa,IAAA;AAAA,EACbA,4CAAA,CAAa;AACf,CAAA;AAEA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAkB,KAAA,CAAM,QAAQ,CAAC,CAAA;AACtD,MAAM,SAAA,GAAY,CAAC,KAAA,KAAkB,KAAA,CAAM,QAAQ,CAAC,CAAA;AAGpD,SAAS,aAAa,OAAA,EAAoD;AACxE,EAAA,OAAO,OAAA,CAAQ,IAAI,CAAC,EAAE,UAAU,IAAA,EAAM,OAAA,IAAW,CAAA,MAAO;AAAA,IACtD,OAAA,EAAS,QAAA;AAAA,IACT,KAAA,EAAO,IAAA;AAAA,IACP,OAAO,aAAA,CAAc,CAAA,GAAI,aAAA,CAAc,MAAM,KAAKA,4CAAA,CAAa,OAAA;AAAA,IAC/D,WAAW,OAAO,EAAE,KAAA,EAAO,WAAA,CAAY,OAAO,CAAA,EAAE;AAAA,GAClD,CAAE,CAAA;AACJ;AAGO,SAAS,UAAA,GAAa;AAC3B,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,iBAAA,KAAsBC,uDAAA,EAAiB;AACzE,EAAA,MAAM,OAAA,GAAU,IAAA,EAAM,OAAA,IAAW,EAAC;AAElC,EAAA,MAAM,MAAA,GAAS,EAAE,KAAA,EAAO,QAAA,EAAU,aAAa,gCAAA,EAAiC;AAEhF,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,sCACGC,8CAAA,EAAA,EAAW,GAAG,MAAA,EACb,QAAA,kBAAAC,cAAA,CAACC,4DAAe,CAAA,EAClB,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACED,cAAA;AAAA,IAACD,8CAAA;AAAA,IAAA;AAAA,MACE,GAAG,MAAA;AAAA,MACJ,OAAA,kBACEC,cAAA;AAAA,QAACE,uBAAA,CAAY,OAAA;AAAA,QAAZ;AAAA,UACC,KAAA,EAAO,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AAAA,UAC5B,KAAA,EAAO,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,QAAA,GAAW,SAAA;AAAA,UACzC;AAAA;AAAA,OACF;AAAA,MAEF,UAAA,EAAY,iBAAA;AAAA,MAEZ,QAAA,kBAAAF,cAAA,CAACG,kDAAU,OAAA,EAAS,CAAC,aAAa,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,YAAA,EAAa,0BAAA,EACnE,QAAA,kBAAAH,cAAA;AAAA,QAACI,iCAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,IAAA,EAAM,OAAA,IAAW,EAAC;AAAA,UACxB,MAAA,EAAQ,aAAa,OAAO,CAAA;AAAA,UAC5B,MAAA,EAAO,MAAA;AAAA,UACP,OAAA,EAAS,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,UACd,cAAA,EAAgB,WAAA;AAAA,UAChB,aAAA,EAAe,SAAA;AAAA,UACf,SAAA;AAAA,UACC,GAAGC;AAAA;AAAA,OACN,EACF;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scores-card.es.js","sources":["../../../../src/domains/metrics/components/scores-card.tsx"],"sourcesContent":["import { useMetricsScores } from '../hooks/use-metrics-scores';\nimport type { ScorerAverage } from '../hooks/use-metrics-scores';\nimport { BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChart } from '@/ds/components/MetricsLineChart';\n\n/** Scores aren't problems, so no warm hues; past five scorers the colors repeat. */\nconst SCORER_COLORS = [\n CHART_COLORS.green,\n CHART_COLORS.sky,\n CHART_COLORS.violet,\n CHART_COLORS.teal,\n CHART_COLORS.indigo,\n];\n\nconst formatScore = (score: number) => score.toFixed(2);\nconst axisScore = (score: number) => score.toFixed(1);\n\n/** One line per scorer; the legend carries its mean over the range. */\nfunction scorerSeries(scorers: ScorerAverage[]): MetricsLineChartSeries[] {\n return scorers.map(({ scorerId, name, average }, i) => ({\n dataKey: scorerId,\n label: name,\n color: SCORER_COLORS[i % SCORER_COLORS.length] ?? CHART_COLORS.neutral,\n aggregate: () => ({ value: formatScore(average) }),\n }));\n}\n\n/** Average result of each scorer over time, 0 to 1. */\nexport function ScoresCard() {\n const { data, isLoading, isError, isPlaceholderData } = useMetricsScores();\n const scorers = data?.scorers ?? [];\n\n const layout = { title: 'Scores', description: 'Average scorer result, 0 to 1.' };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n summary={\n <MetricsCard.Summary\n value={String(scorers.length)}\n label={scorers.length === 1 ? 'scorer' : 'scorers'}\n isLoading={isLoading}\n />\n }\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && scorers.length === 0} emptyMessage=\"No scores in this range.\">\n <MetricsLineChart\n data={data?.buckets ?? []}\n series={scorerSeries(scorers)}\n height=\"fill\"\n
|
|
1
|
+
{"version":3,"file":"scores-card.es.js","sources":["../../../../src/domains/metrics/components/scores-card.tsx"],"sourcesContent":["import { useMetricsScores } from '../hooks/use-metrics-scores';\nimport type { ScorerAverage } from '../hooks/use-metrics-scores';\nimport { BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChart } from '@/ds/components/MetricsLineChart';\n\n/** Scores aren't problems, so no warm hues; past five scorers the colors repeat. */\nconst SCORER_COLORS = [\n CHART_COLORS.green,\n CHART_COLORS.sky,\n CHART_COLORS.violet,\n CHART_COLORS.teal,\n CHART_COLORS.indigo,\n];\n\nconst formatScore = (score: number) => score.toFixed(2);\nconst axisScore = (score: number) => score.toFixed(1);\n\n/** One line per scorer; the legend carries its mean over the range. */\nfunction scorerSeries(scorers: ScorerAverage[]): MetricsLineChartSeries[] {\n return scorers.map(({ scorerId, name, average }, i) => ({\n dataKey: scorerId,\n label: name,\n color: SCORER_COLORS[i % SCORER_COLORS.length] ?? CHART_COLORS.neutral,\n aggregate: () => ({ value: formatScore(average) }),\n }));\n}\n\n/** Average result of each scorer over time, 0 to 1. */\nexport function ScoresCard() {\n const { data, isLoading, isError, isPlaceholderData } = useMetricsScores();\n const scorers = data?.scorers ?? [];\n\n const layout = { title: 'Scores', description: 'Average scorer result, 0 to 1.' };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n summary={\n <MetricsCard.Summary\n value={String(scorers.length)}\n label={scorers.length === 1 ? 'scorer' : 'scorers'}\n isLoading={isLoading}\n />\n }\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && scorers.length === 0} emptyMessage=\"No scores in this range.\">\n <MetricsLineChart\n data={data?.buckets ?? []}\n series={scorerSeries(scorers)}\n height=\"fill\"\n yDomain={[0, 1]}\n valueFormatter={formatScore}\n axisFormatter={axisScore}\n isLoading={isLoading}\n {...BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AAYA,MAAM,aAAA,GAAgB;AAAA,EACpB,YAAA,CAAa,KAAA;AAAA,EACb,YAAA,CAAa,GAAA;AAAA,EACb,YAAA,CAAa,MAAA;AAAA,EACb,YAAA,CAAa,IAAA;AAAA,EACb,YAAA,CAAa;AACf,CAAA;AAEA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAkB,KAAA,CAAM,QAAQ,CAAC,CAAA;AACtD,MAAM,SAAA,GAAY,CAAC,KAAA,KAAkB,KAAA,CAAM,QAAQ,CAAC,CAAA;AAGpD,SAAS,aAAa,OAAA,EAAoD;AACxE,EAAA,OAAO,OAAA,CAAQ,IAAI,CAAC,EAAE,UAAU,IAAA,EAAM,OAAA,IAAW,CAAA,MAAO;AAAA,IACtD,OAAA,EAAS,QAAA;AAAA,IACT,KAAA,EAAO,IAAA;AAAA,IACP,OAAO,aAAA,CAAc,CAAA,GAAI,aAAA,CAAc,MAAM,KAAK,YAAA,CAAa,OAAA;AAAA,IAC/D,WAAW,OAAO,EAAE,KAAA,EAAO,WAAA,CAAY,OAAO,CAAA,EAAE;AAAA,GAClD,CAAE,CAAA;AACJ;AAGO,SAAS,UAAA,GAAa;AAC3B,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,iBAAA,KAAsB,gBAAA,EAAiB;AACzE,EAAA,MAAM,OAAA,GAAU,IAAA,EAAM,OAAA,IAAW,EAAC;AAElC,EAAA,MAAM,MAAA,GAAS,EAAE,KAAA,EAAO,QAAA,EAAU,aAAa,gCAAA,EAAiC;AAEhF,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,2BACG,SAAA,EAAA,EAAW,GAAG,MAAA,EACb,QAAA,kBAAA,GAAA,CAAC,kBAAe,CAAA,EAClB,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACE,GAAG,MAAA;AAAA,MACJ,OAAA,kBACE,GAAA;AAAA,QAAC,WAAA,CAAY,OAAA;AAAA,QAAZ;AAAA,UACC,KAAA,EAAO,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AAAA,UAC5B,KAAA,EAAO,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,QAAA,GAAW,SAAA;AAAA,UACzC;AAAA;AAAA,OACF;AAAA,MAEF,UAAA,EAAY,iBAAA;AAAA,MAEZ,QAAA,kBAAA,GAAA,CAAC,aAAU,OAAA,EAAS,CAAC,aAAa,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,YAAA,EAAa,0BAAA,EACnE,QAAA,kBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,IAAA,EAAM,OAAA,IAAW,EAAC;AAAA,UACxB,MAAA,EAAQ,aAAa,OAAO,CAAA;AAAA,UAC5B,MAAA,EAAO,MAAA;AAAA,UACP,OAAA,EAAS,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,UACd,cAAA,EAAgB,WAAA;AAAA,UAChB,aAAA,EAAe,SAAA;AAAA,UACf,SAAA;AAAA,UACC,GAAG;AAAA;AAAA,OACN,EACF;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -69,7 +69,6 @@ function TokenUsageCard({ onViewTraces, onTimeRangeClick }) {
|
|
|
69
69
|
series,
|
|
70
70
|
height: "fill",
|
|
71
71
|
showLegend: false,
|
|
72
|
-
showYAxis: false,
|
|
73
72
|
valueFormatter: isTokens ? domains_metrics_lib_chartFormat.formatCount : domains_metrics_lib_chartFormat.formatUsd,
|
|
74
73
|
axisFormatter: isTokens ? domains_metrics_lib_chartFormat.formatAxisCount : axisUsd,
|
|
75
74
|
onBucketClick: onTimeRangeClick && ((row) => onTimeRangeClick(domains_metrics_lib_metricsBuckets.bucketWindow(Number(row.ts), stepHours))),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-usage-card.cjs.js","sources":["../../../../src/domains/metrics/components/token-usage-card.tsx"],"sourcesContent":["import { useState } from 'react';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsActivity } from '../hooks/use-metrics-activity';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport { BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatAxisCount, formatCount, formatUsd } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow } from '../lib/metrics-buckets';\nimport { OpenInTracesButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport { MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsStackedBarChart } from '@/ds/components/MetricsStackedBarChart';\n\ntype View = 'tokens' | 'cost';\n\nconst TOKEN_SERIES: MetricsLineChartSeries[] = [\n { dataKey: 'input', label: 'Input', color: CHART_COLORS.green },\n { dataKey: 'cacheRead', label: 'Cache read', color: CHART_COLORS.violet },\n { dataKey: 'output', label: 'Output', color: CHART_COLORS.sky },\n];\nconst COST_SERIES: MetricsLineChartSeries[] = [{ dataKey: 'cost', label: 'Cost', color: CHART_COLORS.green }];\n\nconst axisUsd = (value: number) => `$${value.toFixed(value < 10 ? 1 : 0)}`;\n\n/** Tokens (input, cache reads, output) or model cost per bucket; a bar opens its traces. */\nexport type TokenUsageCardProps = {\n /** Called from the \"View in Traces\" button. */\n onViewTraces?: () => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n};\n\nexport function TokenUsageCard({ onViewTraces, onTimeRangeClick }: TokenUsageCardProps) {\n const [view, setView] = useState<View>('tokens');\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsActivity();\n const { timestamp } = useMetricsFilters();\n const { stepHours } = bucketPlan(timestamp.start, timestamp.end);\n const tokens = data.reduce((sum, b) => sum + b.input + b.cacheRead + b.output, 0);\n const cost = data.reduce((sum, b) => sum + b.cost, 0);\n const isTokens = view === 'tokens';\n const series = isTokens ? TOKEN_SERIES : COST_SERIES;\n\n const layout = {\n title: 'Token usage',\n description: isTokens ? 'Input, cache reads and output.' : 'Estimated model spend.',\n actions: onViewTraces && <OpenInTracesButton onClick={onViewTraces} />,\n toolbar: (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={series} />\n <MetricsCard.Tabs<View> value={view} onValueChange={setView}>\n <MetricsCard.Tab value=\"tokens\">Tokens</MetricsCard.Tab>\n <MetricsCard.Tab value=\"cost\">Cost</MetricsCard.Tab>\n </MetricsCard.Tabs>\n </MetricsCard.Toolbar>\n ),\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n summary={\n <MetricsCard.Summary\n value={isTokens ? formatCount(tokens) : formatUsd(cost)}\n label={isTokens ? 'tokens' : 'cost'}\n isLoading={isLoading}\n />\n }\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && tokens === 0 && cost === 0} emptyMessage=\"No model calls in this range.\">\n <MetricsStackedBarChart\n data={data}\n series={series}\n height=\"fill\"\n showLegend={false}\n
|
|
1
|
+
{"version":3,"file":"token-usage-card.cjs.js","sources":["../../../../src/domains/metrics/components/token-usage-card.tsx"],"sourcesContent":["import { useState } from 'react';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsActivity } from '../hooks/use-metrics-activity';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport { BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatAxisCount, formatCount, formatUsd } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow } from '../lib/metrics-buckets';\nimport { OpenInTracesButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport { MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsStackedBarChart } from '@/ds/components/MetricsStackedBarChart';\n\ntype View = 'tokens' | 'cost';\n\nconst TOKEN_SERIES: MetricsLineChartSeries[] = [\n { dataKey: 'input', label: 'Input', color: CHART_COLORS.green },\n { dataKey: 'cacheRead', label: 'Cache read', color: CHART_COLORS.violet },\n { dataKey: 'output', label: 'Output', color: CHART_COLORS.sky },\n];\nconst COST_SERIES: MetricsLineChartSeries[] = [{ dataKey: 'cost', label: 'Cost', color: CHART_COLORS.green }];\n\nconst axisUsd = (value: number) => `$${value.toFixed(value < 10 ? 1 : 0)}`;\n\n/** Tokens (input, cache reads, output) or model cost per bucket; a bar opens its traces. */\nexport type TokenUsageCardProps = {\n /** Called from the \"View in Traces\" button. */\n onViewTraces?: () => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n};\n\nexport function TokenUsageCard({ onViewTraces, onTimeRangeClick }: TokenUsageCardProps) {\n const [view, setView] = useState<View>('tokens');\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsActivity();\n const { timestamp } = useMetricsFilters();\n const { stepHours } = bucketPlan(timestamp.start, timestamp.end);\n const tokens = data.reduce((sum, b) => sum + b.input + b.cacheRead + b.output, 0);\n const cost = data.reduce((sum, b) => sum + b.cost, 0);\n const isTokens = view === 'tokens';\n const series = isTokens ? TOKEN_SERIES : COST_SERIES;\n\n const layout = {\n title: 'Token usage',\n description: isTokens ? 'Input, cache reads and output.' : 'Estimated model spend.',\n actions: onViewTraces && <OpenInTracesButton onClick={onViewTraces} />,\n toolbar: (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={series} />\n <MetricsCard.Tabs<View> value={view} onValueChange={setView}>\n <MetricsCard.Tab value=\"tokens\">Tokens</MetricsCard.Tab>\n <MetricsCard.Tab value=\"cost\">Cost</MetricsCard.Tab>\n </MetricsCard.Tabs>\n </MetricsCard.Toolbar>\n ),\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n summary={\n <MetricsCard.Summary\n value={isTokens ? formatCount(tokens) : formatUsd(cost)}\n label={isTokens ? 'tokens' : 'cost'}\n isLoading={isLoading}\n />\n }\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && tokens === 0 && cost === 0} emptyMessage=\"No model calls in this range.\">\n <MetricsStackedBarChart\n data={data}\n series={series}\n height=\"fill\"\n showLegend={false}\n valueFormatter={isTokens ? formatCount : formatUsd}\n axisFormatter={isTokens ? formatAxisCount : axisUsd}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick(bucketWindow(Number(row.ts), stepHours)))}\n isLoading={isLoading}\n {...BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"names":["CHART_COLORS","useState","useMetricsActivity","useMetricsFilters","bucketPlan","jsx","OpenInTracesButton","jsxs","MetricsCard","MetricsLineChartLegend","ChartCard","ChartCardError","formatCount","formatUsd","ChartArea","MetricsStackedBarChart","formatAxisCount","bucketWindow","BUCKET_AXIS"],"mappings":"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"}
|
|
@@ -65,7 +65,6 @@ function TokenUsageCard({ onViewTraces, onTimeRangeClick }) {
|
|
|
65
65
|
series,
|
|
66
66
|
height: "fill",
|
|
67
67
|
showLegend: false,
|
|
68
|
-
showYAxis: false,
|
|
69
68
|
valueFormatter: isTokens ? formatCount : formatUsd,
|
|
70
69
|
axisFormatter: isTokens ? formatAxisCount : axisUsd,
|
|
71
70
|
onBucketClick: onTimeRangeClick && ((row) => onTimeRangeClick(bucketWindow(Number(row.ts), stepHours))),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-usage-card.es.js","sources":["../../../../src/domains/metrics/components/token-usage-card.tsx"],"sourcesContent":["import { useState } from 'react';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsActivity } from '../hooks/use-metrics-activity';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport { BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatAxisCount, formatCount, formatUsd } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow } from '../lib/metrics-buckets';\nimport { OpenInTracesButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport { MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsStackedBarChart } from '@/ds/components/MetricsStackedBarChart';\n\ntype View = 'tokens' | 'cost';\n\nconst TOKEN_SERIES: MetricsLineChartSeries[] = [\n { dataKey: 'input', label: 'Input', color: CHART_COLORS.green },\n { dataKey: 'cacheRead', label: 'Cache read', color: CHART_COLORS.violet },\n { dataKey: 'output', label: 'Output', color: CHART_COLORS.sky },\n];\nconst COST_SERIES: MetricsLineChartSeries[] = [{ dataKey: 'cost', label: 'Cost', color: CHART_COLORS.green }];\n\nconst axisUsd = (value: number) => `$${value.toFixed(value < 10 ? 1 : 0)}`;\n\n/** Tokens (input, cache reads, output) or model cost per bucket; a bar opens its traces. */\nexport type TokenUsageCardProps = {\n /** Called from the \"View in Traces\" button. */\n onViewTraces?: () => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n};\n\nexport function TokenUsageCard({ onViewTraces, onTimeRangeClick }: TokenUsageCardProps) {\n const [view, setView] = useState<View>('tokens');\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsActivity();\n const { timestamp } = useMetricsFilters();\n const { stepHours } = bucketPlan(timestamp.start, timestamp.end);\n const tokens = data.reduce((sum, b) => sum + b.input + b.cacheRead + b.output, 0);\n const cost = data.reduce((sum, b) => sum + b.cost, 0);\n const isTokens = view === 'tokens';\n const series = isTokens ? TOKEN_SERIES : COST_SERIES;\n\n const layout = {\n title: 'Token usage',\n description: isTokens ? 'Input, cache reads and output.' : 'Estimated model spend.',\n actions: onViewTraces && <OpenInTracesButton onClick={onViewTraces} />,\n toolbar: (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={series} />\n <MetricsCard.Tabs<View> value={view} onValueChange={setView}>\n <MetricsCard.Tab value=\"tokens\">Tokens</MetricsCard.Tab>\n <MetricsCard.Tab value=\"cost\">Cost</MetricsCard.Tab>\n </MetricsCard.Tabs>\n </MetricsCard.Toolbar>\n ),\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n summary={\n <MetricsCard.Summary\n value={isTokens ? formatCount(tokens) : formatUsd(cost)}\n label={isTokens ? 'tokens' : 'cost'}\n isLoading={isLoading}\n />\n }\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && tokens === 0 && cost === 0} emptyMessage=\"No model calls in this range.\">\n <MetricsStackedBarChart\n data={data}\n series={series}\n height=\"fill\"\n showLegend={false}\n
|
|
1
|
+
{"version":3,"file":"token-usage-card.es.js","sources":["../../../../src/domains/metrics/components/token-usage-card.tsx"],"sourcesContent":["import { useState } from 'react';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsActivity } from '../hooks/use-metrics-activity';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport { BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatAxisCount, formatCount, formatUsd } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow } from '../lib/metrics-buckets';\nimport { OpenInTracesButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport { MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsStackedBarChart } from '@/ds/components/MetricsStackedBarChart';\n\ntype View = 'tokens' | 'cost';\n\nconst TOKEN_SERIES: MetricsLineChartSeries[] = [\n { dataKey: 'input', label: 'Input', color: CHART_COLORS.green },\n { dataKey: 'cacheRead', label: 'Cache read', color: CHART_COLORS.violet },\n { dataKey: 'output', label: 'Output', color: CHART_COLORS.sky },\n];\nconst COST_SERIES: MetricsLineChartSeries[] = [{ dataKey: 'cost', label: 'Cost', color: CHART_COLORS.green }];\n\nconst axisUsd = (value: number) => `$${value.toFixed(value < 10 ? 1 : 0)}`;\n\n/** Tokens (input, cache reads, output) or model cost per bucket; a bar opens its traces. */\nexport type TokenUsageCardProps = {\n /** Called from the \"View in Traces\" button. */\n onViewTraces?: () => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n};\n\nexport function TokenUsageCard({ onViewTraces, onTimeRangeClick }: TokenUsageCardProps) {\n const [view, setView] = useState<View>('tokens');\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsActivity();\n const { timestamp } = useMetricsFilters();\n const { stepHours } = bucketPlan(timestamp.start, timestamp.end);\n const tokens = data.reduce((sum, b) => sum + b.input + b.cacheRead + b.output, 0);\n const cost = data.reduce((sum, b) => sum + b.cost, 0);\n const isTokens = view === 'tokens';\n const series = isTokens ? TOKEN_SERIES : COST_SERIES;\n\n const layout = {\n title: 'Token usage',\n description: isTokens ? 'Input, cache reads and output.' : 'Estimated model spend.',\n actions: onViewTraces && <OpenInTracesButton onClick={onViewTraces} />,\n toolbar: (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={series} />\n <MetricsCard.Tabs<View> value={view} onValueChange={setView}>\n <MetricsCard.Tab value=\"tokens\">Tokens</MetricsCard.Tab>\n <MetricsCard.Tab value=\"cost\">Cost</MetricsCard.Tab>\n </MetricsCard.Tabs>\n </MetricsCard.Toolbar>\n ),\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n summary={\n <MetricsCard.Summary\n value={isTokens ? formatCount(tokens) : formatUsd(cost)}\n label={isTokens ? 'tokens' : 'cost'}\n isLoading={isLoading}\n />\n }\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && tokens === 0 && cost === 0} emptyMessage=\"No model calls in this range.\">\n <MetricsStackedBarChart\n data={data}\n series={series}\n height=\"fill\"\n showLegend={false}\n valueFormatter={isTokens ? formatCount : formatUsd}\n axisFormatter={isTokens ? formatAxisCount : axisUsd}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick(bucketWindow(Number(row.ts), stepHours)))}\n isLoading={isLoading}\n {...BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ const React = require('react');
|
|
|
8
8
|
const domains_scores_components_scoreAsItemDialog = require('./score-as-item-dialog.cjs.js');
|
|
9
9
|
const Button = require('../../../Button-BpSkkuzG.cjs');
|
|
10
10
|
const dataKeysAndValues = require('../../../data-keys-and-values-C1I--hWn.cjs');
|
|
11
|
-
const dataPanel = require('../../../data-panel-
|
|
11
|
+
const dataPanel = require('../../../data-panel-r1LYHphg.cjs');
|
|
12
12
|
const Txt = require('../../../Txt-DXjXpX9r.cjs');
|
|
13
13
|
const lib_framework = require('../../../lib/framework.cjs.js');
|
|
14
14
|
const utils_cn = require('../../../cn-TqD01zH-.cjs');
|
|
@@ -44,20 +44,22 @@ function ScoreDataPanel({ score, onClose, onPrevious, onNext, depth }) {
|
|
|
44
44
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
45
45
|
/* @__PURE__ */ jsxRuntime.jsx(dataPanel.DataPanel, { open: !!score, onClose, title: score ? `Score ${score.id}` : "Score", depth, children: score && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
46
46
|
/* @__PURE__ */ jsxRuntime.jsxs(dataPanel.DataPanel.Header, { children: [
|
|
47
|
-
/* @__PURE__ */ jsxRuntime.jsx(dataPanel.DataPanel.CloseButton, { onClick: onClose }),
|
|
48
47
|
/* @__PURE__ */ jsxRuntime.jsxs(dataPanel.DataPanel.Heading, { children: [
|
|
49
48
|
"Score",
|
|
50
49
|
/* @__PURE__ */ jsxRuntime.jsx(dataPanel.DataPanel.CopyId, { id: score.id })
|
|
51
50
|
] }),
|
|
52
|
-
/* @__PURE__ */ jsxRuntime.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
51
|
+
/* @__PURE__ */ jsxRuntime.jsxs(dataPanel.DataPanel.HeaderActions, { children: [
|
|
52
|
+
(onPrevious || onNext) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
53
|
+
dataPanel.DataPanel.NextPrevNav,
|
|
54
|
+
{
|
|
55
|
+
onPrevious,
|
|
56
|
+
onNext,
|
|
57
|
+
previousLabel: "Go to previous score",
|
|
58
|
+
nextLabel: "Go to next score"
|
|
59
|
+
}
|
|
60
|
+
),
|
|
61
|
+
/* @__PURE__ */ jsxRuntime.jsx(dataPanel.DataPanel.CloseButton, { icon: "x", onClick: onClose, label: "Close score", tooltip: "Close score" })
|
|
62
|
+
] })
|
|
61
63
|
] }),
|
|
62
64
|
/* @__PURE__ */ jsxRuntime.jsxs(dataPanel.DataPanel.Content, { children: [
|
|
63
65
|
/* @__PURE__ */ jsxRuntime.jsxs(dataKeysAndValues.DataKeysAndValues, { children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"score-data-panel.cjs.js","sources":["../../../../src/domains/scores/components/score-data-panel.tsx"],"sourcesContent":["import type { ClientScoreRowData } from '@mastra/client-js';\nimport { FileInputIcon, FileOutputIcon, GaugeIcon, ReceiptText, SaveIcon } from 'lucide-react';\nimport { useState } from 'react';\nimport { ScoreAsItemDialog } from './score-as-item-dialog';\nimport { Button } from '@/ds/components/Button';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport { Txt } from '@/ds/components/Txt';\nimport { useLinkComponent } from '@/lib/framework';\nimport { cn } from '@/utils/cn';\nimport { formatTimestampPrecise } from '@/utils/date-format';\n\nfunction isCodeBasedScorer(score?: ClientScoreRowData): boolean {\n if (!score) return false;\n const scorer = score.scorer as Record<string, unknown> | undefined;\n if (scorer?.hasJudge === false) return true;\n if (scorer?.hasJudge === true) return false;\n return !score.preprocessPrompt && !score.analyzePrompt && !score.generateScorePrompt && !score.generateReasonPrompt;\n}\n\nfunction buildDialogTitle(sectionTitle: string, icon: React.ReactNode, score: ClientScoreRowData) {\n return (\n <>\n <Txt as=\"span\" variant=\"eyebrow\" tone=\"faint\" className=\"flex items-center gap-1.5 [&>svg]:size-3.5\">\n {icon}\n {sectionTitle}\n </Txt>\n <span>\n › Score <b className=\"text-muted-foreground\">#{score.id}</b>\n </span>\n </>\n );\n}\n\nexport interface ScoreDataPanelProps {\n /** Always mount the panel and pass `undefined` to close it, so the drawer can animate out. */\n score?: ClientScoreRowData;\n onClose: () => void;\n onPrevious?: () => void;\n onNext?: () => void;\n depth?: 1 | 2 | 3;\n}\n\nexport function ScoreDataPanel({ score, onClose, onPrevious, onNext, depth }: ScoreDataPanelProps) {\n const { Link, paths } = useLinkComponent();\n const [datasetDialogOpen, setDatasetDialogOpen] = useState(false);\n const isCodeBased = isCodeBasedScorer(score);\n const naText = isCodeBased ? 'N/A — code-based scorer does not use prompts' : 'N/A — step not configured';\n\n return (\n <>\n <DataPanel open={!!score} onClose={onClose} title={score ? `Score ${score.id}` : 'Score'} depth={depth}>\n {score && (\n <>\n <DataPanel.Header>\n <DataPanel.CloseButton onClick={onClose} />\n <DataPanel.Heading>\n Score\n <DataPanel.CopyId id={score.id} />\n </DataPanel.Heading>\n <DataPanel.HeaderActions>\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Go to previous score\"\n nextLabel=\"Go to next score\"\n />\n </DataPanel.HeaderActions>\n </DataPanel.Header>\n\n <DataPanel.Content>\n <DataKeysAndValues>\n {score.scorer?.name != null && (\n <>\n <DataKeysAndValues.Key>Scorer</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{String(score.scorer.name)}</DataKeysAndValues.Value>\n </>\n )}\n {score.createdAt && (\n <>\n <DataKeysAndValues.Key>Created</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{formatTimestampPrecise(score.createdAt)}</DataKeysAndValues.Value>\n </>\n )}\n {score.traceId && (\n <>\n <DataKeysAndValues.Key>Trace Id</DataKeysAndValues.Key>\n {paths.traceLink(score.traceId) ? (\n <DataKeysAndValues.ValueLink href={paths.traceLink(score.traceId)} as={Link}>\n {score.traceId}\n </DataKeysAndValues.ValueLink>\n ) : (\n <DataKeysAndValues.Value>{score.traceId}</DataKeysAndValues.Value>\n )}\n </>\n )}\n {score.spanId && score.traceId && (\n <>\n <DataKeysAndValues.Key>Span Id</DataKeysAndValues.Key>\n {paths.traceLink(score.traceId, score.spanId) ? (\n <DataKeysAndValues.ValueLink href={paths.traceLink(score.traceId, score.spanId)} as={Link}>\n {score.spanId}\n </DataKeysAndValues.ValueLink>\n ) : (\n <DataKeysAndValues.Value>{score.spanId}</DataKeysAndValues.Value>\n )}\n </>\n )}\n </DataKeysAndValues>\n\n <div className=\"my-6 flex justify-end\">\n <Button size=\"sm\" onClick={() => setDatasetDialogOpen(true)} icon={<SaveIcon />}>\n Save as Dataset Item\n </Button>\n </div>\n\n <div className=\"mb-6 text-muted-foreground\">\n <div\n className={cn(\n 'text-placeholder',\n 'flex items-baseline gap-2',\n '[&>svg]:size-5 [&>svg]:translate-y-1',\n )}\n >\n <GaugeIcon />\n <Txt as=\"span\" variant=\"body\">\n Score:\n </Txt>\n <Txt\n as=\"b\"\n variant=\"body\"\n tone=\"muted\"\n className=\"tabular-nums\"\n >{`${score.score == null || Number.isNaN(score.score) ? 'n/a' : score.score}`}</Txt>\n </div>\n <Txt as=\"p\" variant=\"body-sm\" className=\"mt-2\">\n {score.reason ||\n (isCodeBased ? 'N/A — code-based scorer does not generate a reason' : 'N/A — step not configured')}\n </Txt>\n </div>\n\n <div className=\"grid gap-4\">\n <DataPanel.CodeSection\n title=\"Input\"\n dialogTitle={buildDialogTitle('Input', <FileInputIcon />, score)}\n icon={<FileInputIcon />}\n codeStr={JSON.stringify(score.input ?? null, null, 2)}\n />\n <DataPanel.CodeSection\n title=\"Output\"\n dialogTitle={buildDialogTitle('Output', <FileOutputIcon />, score)}\n icon={<FileOutputIcon />}\n codeStr={JSON.stringify(score.output ?? null, null, 2)}\n />\n <DataPanel.CodeSection\n title=\"Preprocess Prompt\"\n dialogTitle={buildDialogTitle('Preprocess Prompt', <ReceiptText />, score)}\n icon={<ReceiptText />}\n codeStr={score.preprocessPrompt || naText}\n simplified={true}\n />\n <DataPanel.CodeSection\n title=\"Analyze Prompt\"\n dialogTitle={buildDialogTitle('Analyze Prompt', <ReceiptText />, score)}\n icon={<ReceiptText />}\n codeStr={score.analyzePrompt || naText}\n simplified={true}\n />\n <DataPanel.CodeSection\n title=\"Generate Score Prompt\"\n dialogTitle={buildDialogTitle('Generate Score Prompt', <ReceiptText />, score)}\n icon={<ReceiptText />}\n codeStr={score.generateScorePrompt || naText}\n simplified={true}\n />\n <DataPanel.CodeSection\n title=\"Generate Reason Prompt\"\n dialogTitle={buildDialogTitle('Generate Reason Prompt', <ReceiptText />, score)}\n icon={<ReceiptText />}\n codeStr={score.generateReasonPrompt || naText}\n simplified={true}\n />\n </div>\n </DataPanel.Content>\n </>\n )}\n </DataPanel>\n\n {score && (\n <ScoreAsItemDialog score={score} isOpen={datasetDialogOpen} onClose={() => setDatasetDialogOpen(false)} />\n )}\n </>\n );\n}\n"],"names":["jsxs","Fragment","Txt","useLinkComponent","useState","jsx","DataPanel","DataKeysAndValues","formatTimestampPrecise","Button","SaveIcon","cn","GaugeIcon","FileInputIcon","FileOutputIcon","ReceiptText","ScoreAsItemDialog"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"score-data-panel.cjs.js","sources":["../../../../src/domains/scores/components/score-data-panel.tsx"],"sourcesContent":["import type { ClientScoreRowData } from '@mastra/client-js';\nimport { FileInputIcon, FileOutputIcon, GaugeIcon, ReceiptText, SaveIcon } from 'lucide-react';\nimport { useState } from 'react';\nimport { ScoreAsItemDialog } from './score-as-item-dialog';\nimport { Button } from '@/ds/components/Button';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport { Txt } from '@/ds/components/Txt';\nimport { useLinkComponent } from '@/lib/framework';\nimport { cn } from '@/utils/cn';\nimport { formatTimestampPrecise } from '@/utils/date-format';\n\nfunction isCodeBasedScorer(score?: ClientScoreRowData): boolean {\n if (!score) return false;\n const scorer = score.scorer as Record<string, unknown> | undefined;\n if (scorer?.hasJudge === false) return true;\n if (scorer?.hasJudge === true) return false;\n return !score.preprocessPrompt && !score.analyzePrompt && !score.generateScorePrompt && !score.generateReasonPrompt;\n}\n\nfunction buildDialogTitle(sectionTitle: string, icon: React.ReactNode, score: ClientScoreRowData) {\n return (\n <>\n <Txt as=\"span\" variant=\"eyebrow\" tone=\"faint\" className=\"flex items-center gap-1.5 [&>svg]:size-3.5\">\n {icon}\n {sectionTitle}\n </Txt>\n <span>\n › Score <b className=\"text-muted-foreground\">#{score.id}</b>\n </span>\n </>\n );\n}\n\nexport interface ScoreDataPanelProps {\n /** Always mount the panel and pass `undefined` to close it, so the drawer can animate out. */\n score?: ClientScoreRowData;\n onClose: () => void;\n onPrevious?: () => void;\n onNext?: () => void;\n depth?: 1 | 2 | 3;\n}\n\nexport function ScoreDataPanel({ score, onClose, onPrevious, onNext, depth }: ScoreDataPanelProps) {\n const { Link, paths } = useLinkComponent();\n const [datasetDialogOpen, setDatasetDialogOpen] = useState(false);\n const isCodeBased = isCodeBasedScorer(score);\n const naText = isCodeBased ? 'N/A — code-based scorer does not use prompts' : 'N/A — step not configured';\n\n return (\n <>\n <DataPanel open={!!score} onClose={onClose} title={score ? `Score ${score.id}` : 'Score'} depth={depth}>\n {score && (\n <>\n <DataPanel.Header>\n <DataPanel.Heading>\n Score\n <DataPanel.CopyId id={score.id} />\n </DataPanel.Heading>\n <DataPanel.HeaderActions>\n {(onPrevious || onNext) && (\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Go to previous score\"\n nextLabel=\"Go to next score\"\n />\n )}\n <DataPanel.CloseButton icon=\"x\" onClick={onClose} label=\"Close score\" tooltip=\"Close score\" />\n </DataPanel.HeaderActions>\n </DataPanel.Header>\n\n <DataPanel.Content>\n <DataKeysAndValues>\n {score.scorer?.name != null && (\n <>\n <DataKeysAndValues.Key>Scorer</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{String(score.scorer.name)}</DataKeysAndValues.Value>\n </>\n )}\n {score.createdAt && (\n <>\n <DataKeysAndValues.Key>Created</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{formatTimestampPrecise(score.createdAt)}</DataKeysAndValues.Value>\n </>\n )}\n {score.traceId && (\n <>\n <DataKeysAndValues.Key>Trace Id</DataKeysAndValues.Key>\n {paths.traceLink(score.traceId) ? (\n <DataKeysAndValues.ValueLink href={paths.traceLink(score.traceId)} as={Link}>\n {score.traceId}\n </DataKeysAndValues.ValueLink>\n ) : (\n <DataKeysAndValues.Value>{score.traceId}</DataKeysAndValues.Value>\n )}\n </>\n )}\n {score.spanId && score.traceId && (\n <>\n <DataKeysAndValues.Key>Span Id</DataKeysAndValues.Key>\n {paths.traceLink(score.traceId, score.spanId) ? (\n <DataKeysAndValues.ValueLink href={paths.traceLink(score.traceId, score.spanId)} as={Link}>\n {score.spanId}\n </DataKeysAndValues.ValueLink>\n ) : (\n <DataKeysAndValues.Value>{score.spanId}</DataKeysAndValues.Value>\n )}\n </>\n )}\n </DataKeysAndValues>\n\n <div className=\"my-6 flex justify-end\">\n <Button size=\"sm\" onClick={() => setDatasetDialogOpen(true)} icon={<SaveIcon />}>\n Save as Dataset Item\n </Button>\n </div>\n\n <div className=\"mb-6 text-muted-foreground\">\n <div\n className={cn(\n 'text-placeholder',\n 'flex items-baseline gap-2',\n '[&>svg]:size-5 [&>svg]:translate-y-1',\n )}\n >\n <GaugeIcon />\n <Txt as=\"span\" variant=\"body\">\n Score:\n </Txt>\n <Txt\n as=\"b\"\n variant=\"body\"\n tone=\"muted\"\n className=\"tabular-nums\"\n >{`${score.score == null || Number.isNaN(score.score) ? 'n/a' : score.score}`}</Txt>\n </div>\n <Txt as=\"p\" variant=\"body-sm\" className=\"mt-2\">\n {score.reason ||\n (isCodeBased ? 'N/A — code-based scorer does not generate a reason' : 'N/A — step not configured')}\n </Txt>\n </div>\n\n <div className=\"grid gap-4\">\n <DataPanel.CodeSection\n title=\"Input\"\n dialogTitle={buildDialogTitle('Input', <FileInputIcon />, score)}\n icon={<FileInputIcon />}\n codeStr={JSON.stringify(score.input ?? null, null, 2)}\n />\n <DataPanel.CodeSection\n title=\"Output\"\n dialogTitle={buildDialogTitle('Output', <FileOutputIcon />, score)}\n icon={<FileOutputIcon />}\n codeStr={JSON.stringify(score.output ?? null, null, 2)}\n />\n <DataPanel.CodeSection\n title=\"Preprocess Prompt\"\n dialogTitle={buildDialogTitle('Preprocess Prompt', <ReceiptText />, score)}\n icon={<ReceiptText />}\n codeStr={score.preprocessPrompt || naText}\n simplified={true}\n />\n <DataPanel.CodeSection\n title=\"Analyze Prompt\"\n dialogTitle={buildDialogTitle('Analyze Prompt', <ReceiptText />, score)}\n icon={<ReceiptText />}\n codeStr={score.analyzePrompt || naText}\n simplified={true}\n />\n <DataPanel.CodeSection\n title=\"Generate Score Prompt\"\n dialogTitle={buildDialogTitle('Generate Score Prompt', <ReceiptText />, score)}\n icon={<ReceiptText />}\n codeStr={score.generateScorePrompt || naText}\n simplified={true}\n />\n <DataPanel.CodeSection\n title=\"Generate Reason Prompt\"\n dialogTitle={buildDialogTitle('Generate Reason Prompt', <ReceiptText />, score)}\n icon={<ReceiptText />}\n codeStr={score.generateReasonPrompt || naText}\n simplified={true}\n />\n </div>\n </DataPanel.Content>\n </>\n )}\n </DataPanel>\n\n {score && (\n <ScoreAsItemDialog score={score} isOpen={datasetDialogOpen} onClose={() => setDatasetDialogOpen(false)} />\n )}\n </>\n );\n}\n"],"names":["jsxs","Fragment","Txt","useLinkComponent","useState","jsx","DataPanel","DataKeysAndValues","formatTimestampPrecise","Button","SaveIcon","cn","GaugeIcon","FileInputIcon","FileOutputIcon","ReceiptText","ScoreAsItemDialog"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { useState } from 'react';
|
|
|
4
4
|
import { ScoreAsItemDialog } from './score-as-item-dialog.es.js';
|
|
5
5
|
import { B as Button } from '../../../Button-MHlMpc97.js';
|
|
6
6
|
import { D as DataKeysAndValues } from '../../../data-keys-and-values-B1u00ihh.js';
|
|
7
|
-
import { D as DataPanel } from '../../../data-panel-
|
|
7
|
+
import { D as DataPanel } from '../../../data-panel-VYp4slDb.js';
|
|
8
8
|
import { T as Txt } from '../../../Txt-BuzYj7Vy.js';
|
|
9
9
|
import { useLinkComponent } from '../../../lib/framework.es.js';
|
|
10
10
|
import { c as cn } from '../../../cn-coERSHz5.js';
|
|
@@ -40,20 +40,22 @@ function ScoreDataPanel({ score, onClose, onPrevious, onNext, depth }) {
|
|
|
40
40
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
41
41
|
/* @__PURE__ */ jsx(DataPanel, { open: !!score, onClose, title: score ? `Score ${score.id}` : "Score", depth, children: score && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
42
42
|
/* @__PURE__ */ jsxs(DataPanel.Header, { children: [
|
|
43
|
-
/* @__PURE__ */ jsx(DataPanel.CloseButton, { onClick: onClose }),
|
|
44
43
|
/* @__PURE__ */ jsxs(DataPanel.Heading, { children: [
|
|
45
44
|
"Score",
|
|
46
45
|
/* @__PURE__ */ jsx(DataPanel.CopyId, { id: score.id })
|
|
47
46
|
] }),
|
|
48
|
-
/* @__PURE__ */
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
47
|
+
/* @__PURE__ */ jsxs(DataPanel.HeaderActions, { children: [
|
|
48
|
+
(onPrevious || onNext) && /* @__PURE__ */ jsx(
|
|
49
|
+
DataPanel.NextPrevNav,
|
|
50
|
+
{
|
|
51
|
+
onPrevious,
|
|
52
|
+
onNext,
|
|
53
|
+
previousLabel: "Go to previous score",
|
|
54
|
+
nextLabel: "Go to next score"
|
|
55
|
+
}
|
|
56
|
+
),
|
|
57
|
+
/* @__PURE__ */ jsx(DataPanel.CloseButton, { icon: "x", onClick: onClose, label: "Close score", tooltip: "Close score" })
|
|
58
|
+
] })
|
|
57
59
|
] }),
|
|
58
60
|
/* @__PURE__ */ jsxs(DataPanel.Content, { children: [
|
|
59
61
|
/* @__PURE__ */ jsxs(DataKeysAndValues, { children: [
|