@mastra/playground-ui 6.2.0-alpha.3 → 6.2.0-alpha.5

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/index.es.js CHANGED
@@ -17114,8 +17114,16 @@ const allowedAiSpanAttributes = [
17114
17114
  "ai.response.text",
17115
17115
  "ai.response.timestamp",
17116
17116
  "componentName",
17117
+ // new format
17118
+ "ai.usage.inputTokens",
17119
+ "ai.usage.outputTokens",
17120
+ // Legacy format
17117
17121
  "ai.usage.promptTokens",
17118
- "ai.usage.completionTokens"
17122
+ "ai.usage.completionTokens",
17123
+ // Common fields
17124
+ "ai.usage.totalTokens",
17125
+ "ai.usage.reasoningTokens",
17126
+ "ai.usage.cachedInputTokens"
17119
17127
  ];
17120
17128
 
17121
17129
  function SpanDetail() {
@@ -17661,6 +17669,9 @@ function TraceSpanUsage({ traceUsage, traceSpans = [], spanUsage, className }) {
17661
17669
  return null;
17662
17670
  }
17663
17671
  const generationSpans = traceSpans.filter((span) => span.spanType === "llm_generation");
17672
+ const hasV5Format = generationSpans.some(
17673
+ (span) => span.attributes?.usage?.inputTokens !== void 0 || span.attributes?.usage?.outputTokens !== void 0
17674
+ );
17664
17675
  const tokensByProvider = generationSpans.reduce(
17665
17676
  (acc, span) => {
17666
17677
  const spanUsage2 = span.attributes?.usage || {};
@@ -17668,33 +17679,65 @@ function TraceSpanUsage({ traceUsage, traceSpans = [], spanUsage, className }) {
17668
17679
  const provider = span?.attributes?.provider || "";
17669
17680
  const spanModelProvider = `${provider}${provider && model ? " / " : ""}${model}`;
17670
17681
  if (!acc?.[spanModelProvider]) {
17671
- acc[spanModelProvider] = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };
17682
+ if (hasV5Format) {
17683
+ acc[spanModelProvider] = {
17684
+ inputTokens: 0,
17685
+ outputTokens: 0,
17686
+ totalTokens: 0,
17687
+ reasoningTokens: 0,
17688
+ cachedInputTokens: 0
17689
+ };
17690
+ } else {
17691
+ acc[spanModelProvider] = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };
17692
+ }
17693
+ }
17694
+ if ("inputTokens" in acc[spanModelProvider] && hasV5Format) {
17695
+ const inputTokens = spanUsage2.inputTokens ?? 0;
17696
+ const outputTokens = spanUsage2.outputTokens ?? 0;
17697
+ const reasoningTokens = spanUsage2.reasoningTokens ?? 0;
17698
+ const cachedInputTokens = spanUsage2.cachedInputTokens ?? 0;
17699
+ const v5Acc = acc[spanModelProvider];
17700
+ v5Acc.inputTokens += inputTokens;
17701
+ v5Acc.outputTokens += outputTokens;
17702
+ v5Acc.reasoningTokens += reasoningTokens;
17703
+ v5Acc.cachedInputTokens += cachedInputTokens;
17704
+ v5Acc.totalTokens += spanUsage2.totalTokens || inputTokens + outputTokens;
17705
+ } else if ("promptTokens" in acc[spanModelProvider] && !hasV5Format) {
17706
+ const promptTokens = spanUsage2.promptTokens ?? 0;
17707
+ const completionTokens = spanUsage2.completionTokens ?? 0;
17708
+ const legacyAcc = acc[spanModelProvider];
17709
+ legacyAcc.promptTokens += promptTokens;
17710
+ legacyAcc.completionTokens += completionTokens;
17711
+ legacyAcc.totalTokens += spanUsage2.totalTokens || promptTokens + completionTokens;
17672
17712
  }
17673
- acc[spanModelProvider].promptTokens += spanUsage2.promptTokens || 0;
17674
- acc[spanModelProvider].completionTokens += spanUsage2.completionTokens || 0;
17675
- acc[spanModelProvider].totalTokens += (spanUsage2.promptTokens || 0) + (spanUsage2.completionTokens || 0);
17676
17713
  return acc;
17677
17714
  },
17678
17715
  {}
17679
17716
  );
17680
- const traceTokensBasedOnSpans = Object.keys(
17681
- tokensByProvider
17682
- ).reduce(
17717
+ const traceTokensBasedOnSpans = Object.keys(tokensByProvider).reduce(
17683
17718
  (acc, provider) => {
17684
- const { promptTokens, completionTokens, totalTokens } = tokensByProvider[provider];
17685
- acc.promptTokens += promptTokens;
17686
- acc.completionTokens += completionTokens;
17687
- acc.totalTokens += totalTokens;
17719
+ const providerUsage = tokensByProvider[provider];
17720
+ if (hasV5Format) {
17721
+ const v5Usage = providerUsage;
17722
+ const v5Acc = acc;
17723
+ v5Acc.inputTokens = (v5Acc.inputTokens || 0) + v5Usage.inputTokens;
17724
+ v5Acc.outputTokens = (v5Acc.outputTokens || 0) + v5Usage.outputTokens;
17725
+ v5Acc.reasoningTokens = (v5Acc.reasoningTokens || 0) + (v5Usage?.reasoningTokens ?? 0);
17726
+ v5Acc.cachedInputTokens = (v5Acc.cachedInputTokens || 0) + (v5Usage?.cachedInputTokens ?? 0);
17727
+ v5Acc.totalTokens = (v5Acc.totalTokens || 0) + v5Usage.totalTokens;
17728
+ } else {
17729
+ const legacyUsage = providerUsage;
17730
+ const legacyAcc = acc;
17731
+ legacyAcc.promptTokens = (legacyAcc.promptTokens || 0) + legacyUsage.promptTokens;
17732
+ legacyAcc.completionTokens = (legacyAcc.completionTokens || 0) + legacyUsage.completionTokens;
17733
+ legacyAcc.totalTokens = (legacyAcc.totalTokens || 0) + legacyUsage.totalTokens;
17734
+ }
17688
17735
  return acc;
17689
17736
  },
17690
- { promptTokens: 0, completionTokens: 0, totalTokens: 0 }
17737
+ hasV5Format ? { inputTokens: 0, outputTokens: 0, totalTokens: 0, reasoningTokens: 0, cachedInputTokens: 0 } : { promptTokens: 0, completionTokens: 0, totalTokens: 0 }
17691
17738
  );
17692
17739
  const tokensByProviderValid = JSON.stringify(traceUsage) === JSON.stringify(traceTokensBasedOnSpans);
17693
- const tokenPresentations = {
17694
- totalTokens: {
17695
- label: "Total LLM Tokens",
17696
- icon: /* @__PURE__ */ jsx(CoinsIcon, {})
17697
- },
17740
+ const legacyTokenPresentations = {
17698
17741
  promptTokens: {
17699
17742
  label: "Prompt Tokens",
17700
17743
  icon: /* @__PURE__ */ jsx(ArrowRightIcon, {})
@@ -17704,7 +17747,42 @@ function TraceSpanUsage({ traceUsage, traceSpans = [], spanUsage, className }) {
17704
17747
  icon: /* @__PURE__ */ jsx(ArrowRightToLineIcon, {})
17705
17748
  }
17706
17749
  };
17707
- const usageKeyOrder = ["totalTokens", "promptTokens", "completionTokens"];
17750
+ const v5TokenPresentations = {
17751
+ inputTokens: {
17752
+ label: "Input Tokens",
17753
+ icon: /* @__PURE__ */ jsx(ArrowRightIcon, {})
17754
+ },
17755
+ outputTokens: {
17756
+ label: "Output Tokens",
17757
+ icon: /* @__PURE__ */ jsx(ArrowRightToLineIcon, {})
17758
+ },
17759
+ reasoningTokens: {
17760
+ label: "Reasoning Tokens",
17761
+ icon: /* @__PURE__ */ jsx(ArrowRightToLineIcon, {})
17762
+ },
17763
+ cachedInputTokens: {
17764
+ label: "Cached Input Tokens",
17765
+ icon: /* @__PURE__ */ jsx(ArrowRightToLineIcon, {})
17766
+ }
17767
+ };
17768
+ const commonTokenPresentations = {
17769
+ totalTokens: {
17770
+ label: "Total LLM Tokens",
17771
+ icon: /* @__PURE__ */ jsx(CoinsIcon, {})
17772
+ }
17773
+ };
17774
+ let tokenPresentations = {};
17775
+ if (hasV5Format) {
17776
+ tokenPresentations = { ...commonTokenPresentations, ...v5TokenPresentations };
17777
+ } else {
17778
+ tokenPresentations = { ...commonTokenPresentations, ...legacyTokenPresentations };
17779
+ }
17780
+ let usageKeyOrder = [];
17781
+ if (hasV5Format) {
17782
+ usageKeyOrder = ["totalTokens", "inputTokens", "outputTokens", "reasoningTokens", "cachedInputTokens"];
17783
+ } else {
17784
+ usageKeyOrder = ["totalTokens", "promptTokens", "completionTokens"];
17785
+ }
17708
17786
  const usageAsArray = Object.entries(traceUsage || spanUsage || {}).map(([key, value]) => ({ key, value })).sort((a, b) => usageKeyOrder.indexOf(a.key) - usageKeyOrder.indexOf(b.key));
17709
17787
  return /* @__PURE__ */ jsx(
17710
17788
  "div",
@@ -18674,5 +18752,23 @@ const MemorySearch = ({
18674
18752
  ] });
18675
18753
  };
18676
18754
 
18677
- export { AgentChat, AgentCoinIcon, AgentEntityHeader, AgentEvals, AgentIcon, AgentMetadata, AgentMetadataList, AgentMetadataListEmpty, AgentMetadataListItem, AgentMetadataNetworkList, AgentMetadataPrompt, AgentMetadataScorerList, AgentMetadataSection, AgentMetadataToolList, AgentMetadataWorkflowList, AgentMetadataWrapper, AgentNetworkCoinIcon, AgentSettings, AgentSettingsContext, AgentSettingsProvider, AgentsTable, AgentsTableSkeleton, AiIcon, AlertDialog, ApiIcon, Badge$1 as Badge, BranchIcon, Breadcrumb, Button$1 as Button, Cell, ChatThreads, CheckIcon, ChevronIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, CommitIcon, CrossIcon, Crumb, DarkLogo, DateTimeCell, DateTimePicker, DateTimePickerContent, DbIcon, DebugIcon, DefaultTrigger, DeploymentIcon, DividerIcon, DocsIcon, DynamicForm, EmptyAgentsTable, EmptyScorersTable, EmptyState, EmptyWorkflowsTable, Entity, EntityContent, EntityDescription, EntityHeader, EntityIcon, EntityMainHeader, EntityName, Entry, EntryCell, EntryList, EntryListItem, EntryListPageHeader, EntryListStatusCell, EntryListTextCell, EntryListToolbar, EnvIcon, EvaluatorCoinIcon, FiltersIcon, FolderIcon, FormActions, GithubCoinIcon, GithubIcon, GoogleIcon, Header, HeaderAction, HeaderGroup, HeaderTitle, HomeIcon, Icon, InfoIcon, InputField, JudgeIcon, Kbd, KeyValueList, LatencyIcon, LegacyWorkflowGraph, LegacyWorkflowTrigger, LinkComponentProvider, LogsIcon, MainContentContent, MainContentLayout, MastraClientProvider, MastraResizablePanel, McpCoinIcon, McpServerIcon, MemoryIcon, MemorySearch, NetworkContext, NetworkProvider, NetworkTable, NetworkTableEmpty, NetworkTableSkeleton, OpenAIIcon, PageHeader, PlaygroundQueryClient, PlaygroundTabs, PromptIcon, RadioGroup, RadioGroupField, RadioGroupItem, RepoIcon, Row, RuntimeContext, RuntimeContextWrapper, ScoreDialog, ScoreIcon, ScorersTable, ScorersTableSkeleton, ScoresTools, SearchField, Searchbar, SelectField, SettingsIcon, SideDialog, SideDialogCodeSection, SideDialogContent, SideDialogFooter, SideDialogFooterGroup, SideDialogHeader, SideDialogHeading, SideDialogKeyValueList, SideDialogSection, SideDialogTop, SlashIcon, SliderField, Tab, TabContent, TabList, Table$1 as Table, Tbody, TemplateFailure, TemplateForm, TemplateInfo, TemplateInstallation, TemplateSuccess, TemplatesList, TemplatesTools, TextAndIcon, TextareaField, Th, Thead, ThreadDeleteButton, ThreadInputProvider, ThreadItem, ThreadLink, ThreadList, Threads, ToolCoinIcon, ToolList, ToolListEmpty, ToolListSkeleton, ToolsIcon, TraceDialog, TraceIcon, TraceTimeline, TraceTimelineLegend, TraceTimelineSpan, TracesTools, TracesView, TracesViewSkeleton, TsIcon, Txt, TxtCell, UnitCell, VNextNetworkChat, VariablesIcon, WorkflowCoinIcon, WorkflowGraph, WorkflowIcon, WorkflowRunContext, WorkflowRunProvider, WorkflowRuns, WorkflowTable, WorkflowTableSkeleton, WorkflowTrigger, WorkingMemoryContext, WorkingMemoryProvider, allowedAiSpanAttributes, cleanString, convertWorkflowRunStateToWatchResult, formatDuration, formatHierarchicalSpans, formatOtelTimestamp, formatOtelTimestamp2, getColumnTemplate, getShortId, getSpanTypeUi, mapWorkflowStreamChunkToWatchResult, providerMapToIcon, spanTypePrefixes, transformKey, useAgentSettings, useCurrentRun, useExecuteWorkflow, useInView, useLegacyWorkflow, useLinkComponent, useMastraClient, usePlaygroundStore, usePolling, useResumeWorkflow, useScorer, useScorers, useScoresByEntityId, useScoresByScorerId, useSpeechRecognition, useThreadInput, useWatchWorkflow, useWorkflow, useWorkflowRuns, useWorkingMemory };
18755
+ const errorFallback = "Something went wrong while fetching the data.";
18756
+ const parseError = (error) => {
18757
+ try {
18758
+ const httpErrorPattern = /^HTTP error! status:\s*\d+\s*- \s*/;
18759
+ const errorMessage = error?.message.replace(httpErrorPattern, "");
18760
+ const jsonError = JSON.parse(errorMessage || "{}");
18761
+ return {
18762
+ error: jsonError?.error || errorFallback,
18763
+ stack: jsonError?.stack || error?.stack
18764
+ };
18765
+ } catch {
18766
+ return {
18767
+ error: error?.message || errorFallback,
18768
+ stack: void 0
18769
+ };
18770
+ }
18771
+ };
18772
+
18773
+ export { AgentChat, AgentCoinIcon, AgentEntityHeader, AgentEvals, AgentIcon, AgentMetadata, AgentMetadataList, AgentMetadataListEmpty, AgentMetadataListItem, AgentMetadataNetworkList, AgentMetadataPrompt, AgentMetadataScorerList, AgentMetadataSection, AgentMetadataToolList, AgentMetadataWorkflowList, AgentMetadataWrapper, AgentNetworkCoinIcon, AgentSettings, AgentSettingsContext, AgentSettingsProvider, AgentsTable, AgentsTableSkeleton, AiIcon, AlertDialog, ApiIcon, Badge$1 as Badge, BranchIcon, Breadcrumb, Button$1 as Button, Cell, ChatThreads, CheckIcon, ChevronIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, CommitIcon, CrossIcon, Crumb, DarkLogo, DateTimeCell, DateTimePicker, DateTimePickerContent, DbIcon, DebugIcon, DefaultTrigger, DeploymentIcon, DividerIcon, DocsIcon, DynamicForm, EmptyAgentsTable, EmptyScorersTable, EmptyState, EmptyWorkflowsTable, Entity, EntityContent, EntityDescription, EntityHeader, EntityIcon, EntityMainHeader, EntityName, Entry, EntryCell, EntryList, EntryListItem, EntryListPageHeader, EntryListStatusCell, EntryListTextCell, EntryListToolbar, EnvIcon, EvaluatorCoinIcon, FiltersIcon, FolderIcon, FormActions, GithubCoinIcon, GithubIcon, GoogleIcon, Header, HeaderAction, HeaderGroup, HeaderTitle, HomeIcon, Icon, InfoIcon, InputField, JudgeIcon, Kbd, KeyValueList, LatencyIcon, LegacyWorkflowGraph, LegacyWorkflowTrigger, LinkComponentProvider, LogsIcon, MainContentContent, MainContentLayout, MastraClientProvider, MastraResizablePanel, McpCoinIcon, McpServerIcon, MemoryIcon, MemorySearch, NetworkContext, NetworkProvider, NetworkTable, NetworkTableEmpty, NetworkTableSkeleton, OpenAIIcon, PageHeader, PlaygroundQueryClient, PlaygroundTabs, PromptIcon, RadioGroup, RadioGroupField, RadioGroupItem, RepoIcon, Row, RuntimeContext, RuntimeContextWrapper, ScoreDialog, ScoreIcon, ScorersTable, ScorersTableSkeleton, ScoresTools, SearchField, Searchbar, SelectField, SettingsIcon, SideDialog, SideDialogCodeSection, SideDialogContent, SideDialogFooter, SideDialogFooterGroup, SideDialogHeader, SideDialogHeading, SideDialogKeyValueList, SideDialogSection, SideDialogTop, SlashIcon, SliderField, Tab, TabContent, TabList, Table$1 as Table, Tbody, TemplateFailure, TemplateForm, TemplateInfo, TemplateInstallation, TemplateSuccess, TemplatesList, TemplatesTools, TextAndIcon, TextareaField, Th, Thead, ThreadDeleteButton, ThreadInputProvider, ThreadItem, ThreadLink, ThreadList, Threads, ToolCoinIcon, ToolList, ToolListEmpty, ToolListSkeleton, ToolsIcon, TraceDialog, TraceIcon, TraceTimeline, TraceTimelineLegend, TraceTimelineSpan, TracesTools, TracesView, TracesViewSkeleton, TsIcon, Txt, TxtCell, UnitCell, VNextNetworkChat, VariablesIcon, WorkflowCoinIcon, WorkflowGraph, WorkflowIcon, WorkflowRunContext, WorkflowRunProvider, WorkflowRuns, WorkflowTable, WorkflowTableSkeleton, WorkflowTrigger, WorkingMemoryContext, WorkingMemoryProvider, allowedAiSpanAttributes, cleanString, convertWorkflowRunStateToWatchResult, formatDuration, formatHierarchicalSpans, formatOtelTimestamp, formatOtelTimestamp2, getColumnTemplate, getShortId, getSpanTypeUi, mapWorkflowStreamChunkToWatchResult, parseError, providerMapToIcon, spanTypePrefixes, transformKey, useAgentSettings, useCurrentRun, useExecuteWorkflow, useInView, useLegacyWorkflow, useLinkComponent, useMastraClient, usePlaygroundStore, usePolling, useResumeWorkflow, useScorer, useScorers, useScoresByEntityId, useScoresByScorerId, useSpeechRecognition, useThreadInput, useWatchWorkflow, useWorkflow, useWorkflowRuns, useWorkingMemory };
18678
18774
  //# sourceMappingURL=index.es.js.map