From 6cdbc1a645a625a7419b91ddada7ed06f475bed4 Mon Sep 17 00:00:00 2001 From: Adam Malczewski Date: Sun, 21 Jun 2026 22:16:39 +0900 Subject: fix(openai-stream): omit usage attrs from spans when provider doesn't report When a provider doesn't include a usage field in the SSE stream, the span attributes (usage.inputTokens, usage.outputTokens) are now absent instead of defaulting to 0. This makes it clear in the journal that the provider didn't report usage, rather than looking like 0 tokens were used. --- packages/openai-stream/src/stream.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/openai-stream/src/stream.ts b/packages/openai-stream/src/stream.ts index e801cc5..2f594b5 100644 --- a/packages/openai-stream/src/stream.ts +++ b/packages/openai-stream/src/stream.ts @@ -91,8 +91,8 @@ export async function* streamChat( const bodyString = JSON.stringify(body); let reqSpan: Span | undefined; - let totalInputTokens = 0; - let totalOutputTokens = 0; + let totalInputTokens: number | undefined; + let totalOutputTokens: number | undefined; let totalCacheReadTokens: number | undefined; let totalCacheWriteTokens: number | undefined; @@ -243,9 +243,13 @@ export async function* streamChat( try { const attrs: Record = { status: response.status, - "usage.inputTokens": totalInputTokens, - "usage.outputTokens": totalOutputTokens, }; + if (totalInputTokens !== undefined) { + attrs["usage.inputTokens"] = totalInputTokens; + } + if (totalOutputTokens !== undefined) { + attrs["usage.outputTokens"] = totalOutputTokens; + } if (totalCacheReadTokens !== undefined) { attrs["usage.cacheReadTokens"] = totalCacheReadTokens; } -- cgit v1.2.3