diff options
| author | Dax Raad <[email protected]> | 2025-05-28 15:39:51 -0400 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-05-28 15:39:51 -0400 |
| commit | 6183398543bbd3ff9d23c5ba2ee40149c9ac7b68 (patch) | |
| tree | 836b9898baab37ad92561b67fe3272b15cc2860a /app | |
| parent | ff786d9139280b36f0214cb71afa18affb676095 (diff) | |
| download | opencode-6183398543bbd3ff9d23c5ba2ee40149c9ac7b68.tar.gz opencode-6183398543bbd3ff9d23c5ba2ee40149c9ac7b68.zip | |
sync
Diffstat (limited to 'app')
| -rw-r--r-- | app/packages/web/src/components/Share.tsx | 55 |
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>—</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>—</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>—</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>—</span> } |
