Skip to content

Commit 823d7da

Browse files
author
Frank
committed
zen: display reasoning tokens
1 parent 7fff191 commit 823d7da

File tree

1 file changed

+37
-5
lines changed

1 file changed

+37
-5
lines changed

packages/console/app/src/routes/workspace/[id]/usage-section.tsx

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ export function UsageSection() {
5050
return u.inputTokens + (u.cacheReadTokens ?? 0) + (u.cacheWrite5mTokens ?? 0) + (u.cacheWrite1hTokens ?? 0)
5151
}
5252

53+
const calculateTotalOutputTokens = (u: Awaited<ReturnType<typeof getUsageInfo>>[0]) => {
54+
return u.outputTokens + (u.reasoningTokens ?? 0)
55+
}
56+
5357
const goPrev = async () => {
5458
const usage = await getUsageInfo(params.id!, store.page - 1)
5559
setStore({
@@ -95,8 +99,11 @@ export function UsageSection() {
9599
{(usage, index) => {
96100
const date = createMemo(() => new Date(usage.timeCreated))
97101
const totalInputTokens = createMemo(() => calculateTotalInputTokens(usage))
98-
const breakdownId = `breakdown-${index()}`
99-
const isOpen = createMemo(() => openBreakdownId() === breakdownId)
102+
const totalOutputTokens = createMemo(() => calculateTotalOutputTokens(usage))
103+
const inputBreakdownId = `input-breakdown-${index()}`
104+
const outputBreakdownId = `output-breakdown-${index()}`
105+
const isInputOpen = createMemo(() => openBreakdownId() === inputBreakdownId)
106+
const isOutputOpen = createMemo(() => openBreakdownId() === outputBreakdownId)
100107
const isClaude = usage.model.toLowerCase().includes("claude")
101108
return (
102109
<tr>
@@ -110,13 +117,13 @@ export function UsageSection() {
110117
data-slot="breakdown-button"
111118
onClick={(e) => {
112119
e.stopPropagation()
113-
setOpenBreakdownId(isOpen() ? null : breakdownId)
120+
setOpenBreakdownId(isInputOpen() ? null : inputBreakdownId)
114121
}}
115122
>
116123
<IconBreakdown />
117124
</button>
118125
<span onClick={() => setOpenBreakdownId(null)}>{totalInputTokens()}</span>
119-
<Show when={isOpen()}>
126+
<Show when={isInputOpen()}>
120127
<div data-slot="breakdown-popup" onClick={(e) => e.stopPropagation()}>
121128
<div data-slot="breakdown-row">
122129
<span data-slot="breakdown-label">Input</span>
@@ -136,7 +143,32 @@ export function UsageSection() {
136143
</Show>
137144
</div>
138145
</td>
139-
<td data-slot="usage-tokens">{usage.outputTokens}</td>
146+
<td data-slot="usage-tokens">
147+
<div data-slot="tokens-with-breakdown" onClick={(e) => e.stopPropagation()}>
148+
<button
149+
data-slot="breakdown-button"
150+
onClick={(e) => {
151+
e.stopPropagation()
152+
setOpenBreakdownId(isOutputOpen() ? null : outputBreakdownId)
153+
}}
154+
>
155+
<IconBreakdown />
156+
</button>
157+
<span onClick={() => setOpenBreakdownId(null)}>{totalOutputTokens()}</span>
158+
<Show when={isOutputOpen()}>
159+
<div data-slot="breakdown-popup" onClick={(e) => e.stopPropagation()}>
160+
<div data-slot="breakdown-row">
161+
<span data-slot="breakdown-label">Output</span>
162+
<span data-slot="breakdown-value">{usage.outputTokens}</span>
163+
</div>
164+
<div data-slot="breakdown-row">
165+
<span data-slot="breakdown-label">Reasoning</span>
166+
<span data-slot="breakdown-value">{usage.reasoningTokens ?? 0}</span>
167+
</div>
168+
</div>
169+
</Show>
170+
</div>
171+
</td>
140172
<td data-slot="usage-cost">${((usage.cost ?? 0) / 100000000).toFixed(4)}</td>
141173
</tr>
142174
)

0 commit comments

Comments
 (0)