( message: unknown, )
| 51 | * usage data (aborted/error messages have no usage). |
| 52 | */ |
| 53 | export function extractAssistantUsage( |
| 54 | message: unknown, |
| 55 | ): PiAssistantUsage | null { |
| 56 | if (!message || typeof message !== "object") return null; |
| 57 | const m = message as { role?: unknown; usage?: unknown }; |
| 58 | if (m.role !== "assistant") return null; |
| 59 | if (!m.usage || typeof m.usage !== "object") return null; |
| 60 | const u = m.usage as Record<string, unknown>; |
| 61 | const result: PiAssistantUsage = {}; |
| 62 | if (typeof u.input === "number") result.input = u.input; |
| 63 | if (typeof u.output === "number") result.output = u.output; |
| 64 | if (typeof u.cacheRead === "number") result.cacheRead = u.cacheRead; |
| 65 | if (typeof u.cacheWrite === "number") result.cacheWrite = u.cacheWrite; |
| 66 | if (typeof u.totalTokens === "number") result.totalTokens = u.totalTokens; |
| 67 | return result; |
| 68 | } |
| 69 | |
| 70 | /** |
| 71 | * Compute OpenCode-equivalent pressure from a Pi usage payload + the |
no outgoing calls
no test coverage detected