@mastra/playground-ui 6.2.0-alpha.4 → 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
|
-
|
|
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
|
|
17685
|
-
|
|
17686
|
-
|
|
17687
|
-
|
|
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
|
|
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
|
|
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",
|