diff options
| author | Adam Malczewski <[email protected]> | 2026-06-21 22:16:39 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-06-21 22:16:39 +0900 |
| commit | 6cdbc1a645a625a7419b91ddada7ed06f475bed4 (patch) | |
| tree | 95aaa64b44d91f6906ca6b8f9ac5ab76d4d9adc3 | |
| parent | 4a71e0672f7433f2e29df16fa2865f2702a64db2 (diff) | |
| download | dispatch-6cdbc1a645a625a7419b91ddada7ed06f475bed4.tar.gz dispatch-6cdbc1a645a625a7419b91ddada7ed06f475bed4.zip | |
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.
| -rw-r--r-- | packages/openai-stream/src/stream.ts | 12 |
1 files 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<string, string | number | boolean | null> = { 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; } |
