summaryrefslogtreecommitdiffhomepage
path: root/app/packages/web/src/components
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-05-28 15:39:51 -0400
committerDax Raad <[email protected]>2025-05-28 15:39:51 -0400
commit6183398543bbd3ff9d23c5ba2ee40149c9ac7b68 (patch)
tree836b9898baab37ad92561b67fe3272b15cc2860a /app/packages/web/src/components
parentff786d9139280b36f0214cb71afa18affb676095 (diff)
downloadopencode-6183398543bbd3ff9d23c5ba2ee40149c9ac7b68.tar.gz
opencode-6183398543bbd3ff9d23c5ba2ee40149c9ac7b68.zip
sync
Diffstat (limited to 'app/packages/web/src/components')
-rw-r--r--app/packages/web/src/components/Share.tsx55
1 files changed, 44 insertions, 11 deletions
diff --git a/app/packages/web/src/components/Share.tsx b/app/packages/web/src/components/Share.tsx
index 292921ec7..78f901f67 100644
--- a/app/packages/web/src/components/Share.tsx
+++ b/app/packages/web/src/components/Share.tsx
@@ -23,6 +23,16 @@ type SessionMessage = UIMessage<{
created: number
completed?: number
}
+ assistant?: {
+ modelID: string;
+ providerID: string;
+ cost: number;
+ tokens: {
+ input: number;
+ output: number;
+ reasoning: number;
+ };
+ };
sessionID: string
tool: Record<string, {
properties: Record<string, any>
@@ -36,11 +46,6 @@ type SessionMessage = UIMessage<{
type SessionInfo = {
title: string
cost?: number
- tokens?: {
- input?: number
- output?: number
- reasoning?: number
- }
}
function getPartTitle(role: string, type: string): string | undefined {
@@ -229,6 +234,26 @@ export default function Share(props: { api: string }) {
)
}
+ const metrics = createMemo(() => {
+ const result = {
+ cost: 0,
+ tokens: {
+ input: 0,
+ output: 0,
+ reasoning: 0,
+ }
+ }
+ for (const msg of messages()) {
+ const assistant = msg.metadata?.assistant
+ if (!assistant) continue
+ result.cost += assistant.cost
+ result.tokens.input += assistant.tokens.input
+ result.tokens.output += assistant.tokens.output
+ result.tokens.reasoning += assistant.tokens.reasoning
+ }
+ return result
+ })
+
return (
<main class={`${styles.root} not-content`}>
<div class={styles.header}>
@@ -242,25 +267,33 @@ export default function Share(props: { api: string }) {
<div data-section="row">
<ul data-section="stats">
<li>
+ <span data-element-label>Cost</span>
+ {metrics().cost ?
+ <span>{metrics().cost}</span>
+ :
+ <span data-placeholder>&mdash;</span>
+ }
+ </li>
+ <li>
<span data-element-label>Input Tokens</span>
- {store.info?.tokens?.input ?
- <span>{store.info?.tokens?.input}</span>
+ {metrics().tokens.input ?
+ <span>{metrics().tokens.input}</span>
:
<span data-placeholder>&mdash;</span>
}
</li>
<li>
<span data-element-label>Output Tokens</span>
- {store.info?.tokens?.output ?
- <span>{store.info?.tokens?.output}</span>
+ {metrics().tokens.output ?
+ <span>{metrics().tokens.output}</span>
:
<span data-placeholder>&mdash;</span>
}
</li>
<li>
<span data-element-label>Reasoning Tokens</span>
- {store.info?.tokens?.reasoning ?
- <span>{store.info?.tokens?.reasoning}</span>
+ {metrics().tokens.reasoning ?
+ <span>{metrics().tokens.reasoning}</span>
:
<span data-placeholder>&mdash;</span>
}