(collected: Record<string, ModelUsage>, rawModel: string, info: unknown)
| 288 | } |
| 289 | |
| 290 | function addModelUsage(collected: Record<string, ModelUsage>, rawModel: string, info: unknown): void { |
| 291 | const infoRecord = recordValue(info); |
| 292 | if (!infoRecord) return; |
| 293 | |
| 294 | const usage = recordValue(infoRecord.usage) || {}; |
| 295 | const inputTokens = typeof usage.inputTokens === 'number' ? usage.inputTokens : 0; |
| 296 | const outputTokens = typeof usage.outputTokens === 'number' ? usage.outputTokens : 0; |
| 297 | const cacheReadTokens = typeof usage.cacheReadTokens === 'number' ? usage.cacheReadTokens : 0; |
| 298 | const cacheWriteTokens = typeof usage.cacheWriteTokens === 'number' ? usage.cacheWriteTokens : 0; |
| 299 | const reasoningTokens = typeof usage.reasoningTokens === 'number' ? usage.reasoningTokens : 0; |
| 300 | if (inputTokens === 0 && outputTokens === 0 && cacheReadTokens === 0 && cacheWriteTokens === 0) return; |
| 301 | |
| 302 | const key = normalizeModel(rawModel); |
| 303 | const existing = collected[key]; |
| 304 | if (existing) { |
| 305 | existing.inputTokens += inputTokens; |
| 306 | existing.outputTokens += outputTokens; |
| 307 | existing.cacheReadTokens += cacheReadTokens; |
| 308 | existing.cacheWriteTokens += cacheWriteTokens; |
| 309 | existing.reasoningTokens = (existing.reasoningTokens ?? 0) + reasoningTokens; |
| 310 | return; |
| 311 | } |
| 312 | |
| 313 | collected[key] = { inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens, reasoningTokens }; |
| 314 | } |
| 315 | |
| 316 | function handleShutdown(data: Record<string, unknown>, state: CLIParseState): void { |
| 317 | state.sawShutdown = true; |
no test coverage detected