// Build OpenAI usage object. Caller computes prompt/completion/total (provider math). // Optional details added only when > 0 (matches existing claude/gemini/codex behavior). export function buildUsage({ promptTokens, completionTokens, totalTokens, cachedTokens = 0, cacheCreationTokens = 0, reasoningTokens = 0 }) { const usage = { prompt_tokens: promptTokens, completion_tokens: completionTokens, total_tokens: totalTokens }; if (cachedTokens > 0 || cacheCreationTokens > 0) { usage.prompt_tokens_details = {}; if (cachedTokens > 0) usage.prompt_tokens_details.cached_tokens = cachedTokens; if (cacheCreationTokens > 0) usage.prompt_tokens_details.cache_creation_tokens = cacheCreationTokens; } if (reasoningTokens > 0) { usage.completion_tokens_details = { reasoning_tokens: reasoningTokens }; } return usage; }