( totalUsage: Readonly<NonNullableUsage>, messageUsage: Readonly<NonNullableUsage>, )
| 2991 | * Used to track cumulative usage across multiple assistant turns. |
| 2992 | */ |
| 2993 | export function accumulateUsage( |
| 2994 | totalUsage: Readonly<NonNullableUsage>, |
| 2995 | messageUsage: Readonly<NonNullableUsage>, |
| 2996 | ): NonNullableUsage { |
| 2997 | return { |
| 2998 | input_tokens: totalUsage.input_tokens + messageUsage.input_tokens, |
| 2999 | cache_creation_input_tokens: |
| 3000 | totalUsage.cache_creation_input_tokens + |
| 3001 | messageUsage.cache_creation_input_tokens, |
| 3002 | cache_read_input_tokens: |
| 3003 | totalUsage.cache_read_input_tokens + messageUsage.cache_read_input_tokens, |
| 3004 | output_tokens: totalUsage.output_tokens + messageUsage.output_tokens, |
| 3005 | server_tool_use: { |
| 3006 | web_search_requests: |
| 3007 | totalUsage.server_tool_use.web_search_requests + |
| 3008 | messageUsage.server_tool_use.web_search_requests, |
| 3009 | web_fetch_requests: |
| 3010 | totalUsage.server_tool_use.web_fetch_requests + |
| 3011 | messageUsage.server_tool_use.web_fetch_requests, |
| 3012 | }, |
| 3013 | service_tier: messageUsage.service_tier, // Use the most recent service tier |
| 3014 | cache_creation: { |
| 3015 | ephemeral_1h_input_tokens: |
| 3016 | totalUsage.cache_creation.ephemeral_1h_input_tokens + |
| 3017 | messageUsage.cache_creation.ephemeral_1h_input_tokens, |
| 3018 | ephemeral_5m_input_tokens: |
| 3019 | totalUsage.cache_creation.ephemeral_5m_input_tokens + |
| 3020 | messageUsage.cache_creation.ephemeral_5m_input_tokens, |
| 3021 | }, |
| 3022 | // See comment in updateUsage — field is not on NonNullableUsage to keep |
| 3023 | // the string out of external builds. |
| 3024 | ...(feature('CACHED_MICROCOMPACT') |
| 3025 | ? { |
| 3026 | cache_deleted_input_tokens: |
| 3027 | ((totalUsage as unknown as { cache_deleted_input_tokens?: number }) |
| 3028 | .cache_deleted_input_tokens ?? 0) + |
| 3029 | (( |
| 3030 | messageUsage as unknown as { cache_deleted_input_tokens?: number } |
| 3031 | ).cache_deleted_input_tokens ?? 0), |
| 3032 | } |
| 3033 | : {}), |
| 3034 | inference_geo: messageUsage.inference_geo, // Use the most recent |
| 3035 | iterations: messageUsage.iterations, // Use the most recent |
| 3036 | speed: messageUsage.speed, // Use the most recent |
| 3037 | } |
| 3038 | } |
| 3039 | |
| 3040 | function isToolResultBlock( |
| 3041 | block: unknown, |
no test coverage detected