Skip to content

Commit 6e88a73

Browse files
committed
Bug fixes
1 parent a96de42 commit 6e88a73

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

apps/sim/app/api/wand/route.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -313,17 +313,29 @@ Use this context to calculate relative dates like "yesterday", "last week", "beg
313313
return
314314
}
315315

316+
let finalUsage: any = null
317+
let usageRecorded = false
318+
319+
const recordUsage = async () => {
320+
if (usageRecorded || !finalUsage) {
321+
return
322+
}
323+
324+
usageRecorded = true
325+
await updateUserStatsForWand(session.user.id, finalUsage, requestId, isBYOK)
326+
}
327+
316328
try {
317329
let buffer = ''
318330
let chunkCount = 0
319-
let finalUsage: any = null
320331
let activeEventType: string | undefined
321332

322333
while (true) {
323334
const { done, value } = await reader.read()
324335

325336
if (done) {
326337
logger.info(`[${requestId}] Stream completed. Total chunks: ${chunkCount}`)
338+
await recordUsage()
327339
controller.enqueue(encoder.encode(`data: ${JSON.stringify({ done: true })}\n\n`))
328340
controller.close()
329341
break
@@ -353,9 +365,7 @@ Use this context to calculate relative dates like "yesterday", "last week", "beg
353365
if (data === '[DONE]') {
354366
logger.info(`[${requestId}] Received [DONE] signal`)
355367

356-
if (finalUsage) {
357-
await updateUserStatsForWand(session.user.id, finalUsage, requestId, isBYOK)
358-
}
368+
await recordUsage()
359369

360370
controller.enqueue(
361371
encoder.encode(`data: ${JSON.stringify({ done: true })}\n\n`)
@@ -423,6 +433,12 @@ Use this context to calculate relative dates like "yesterday", "last week", "beg
423433
stack: streamError?.stack,
424434
})
425435

436+
try {
437+
await recordUsage()
438+
} catch (usageError) {
439+
logger.warn(`[${requestId}] Failed to record usage after stream error`, usageError)
440+
}
441+
426442
const errorData = `data: ${JSON.stringify({ error: 'Streaming failed', done: true })}\n\n`
427443
controller.enqueue(encoder.encode(errorData))
428444
controller.close()

apps/sim/providers/responses-utils.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,9 @@ export function extractResponseToolCalls(output: unknown): ResponsesToolCall[] {
310310

311311
/**
312312
* Maps Responses API usage data to prompt/completion token counts.
313+
*
314+
* Note: output_tokens is expected to include reasoning tokens; fall back to reasoning_tokens
315+
* when output_tokens is missing or zero.
313316
*/
314317
export function parseResponsesUsage(usage: any): ResponsesUsageTokens | undefined {
315318
if (!usage || typeof usage !== 'object') {
@@ -320,8 +323,8 @@ export function parseResponsesUsage(usage: any): ResponsesUsageTokens | undefine
320323
const outputTokens = Number(usage.output_tokens ?? 0)
321324
const cachedTokens = Number(usage.input_tokens_details?.cached_tokens ?? 0)
322325
const reasoningTokens = Number(usage.output_tokens_details?.reasoning_tokens ?? 0)
323-
const completionTokens = outputTokens
324-
const totalTokens = inputTokens + outputTokens
326+
const completionTokens = Math.max(outputTokens, reasoningTokens)
327+
const totalTokens = inputTokens + completionTokens
325328

326329
return {
327330
promptTokens: inputTokens,

0 commit comments

Comments
 (0)