MCPcopy Create free account
hub / github.com/Zoo-Code-Org/Zoo-Code / createUsageNormalizer

Function createUsageNormalizer

src/api/transform/responses-api-stream.ts:117–148  ·  view source on GitHub ↗
(
	calculateCost?: (inputTokens: number, outputTokens: number, cacheReadTokens: number) => number,
)

Source from the content-addressed store, hash-verified

115 * @param calculateCost - Optional function to compute total cost from token counts
116 */
117export function createUsageNormalizer(
118 calculateCost?: (inputTokens: number, outputTokens: number, cacheReadTokens: number) => number,
119): (usage: any) => ApiStreamUsageChunk | undefined {
120 return (usage: any): ApiStreamUsageChunk | undefined => {
121 if (!usage) return undefined
122
123 const inputDetails = usage.input_tokens_details ?? usage.prompt_tokens_details
124 const cachedTokens = inputDetails?.cached_tokens ?? 0
125
126 const inputTokens = usage.input_tokens ?? usage.prompt_tokens ?? 0
127 const outputTokens = usage.output_tokens ?? usage.completion_tokens ?? 0
128 const cacheReadTokens = usage.cache_read_input_tokens ?? cachedTokens ?? 0
129 const cacheWriteTokens = usage.cache_creation_input_tokens ?? usage.cache_write_tokens ?? 0
130
131 const reasoningTokens =
132 typeof usage.output_tokens_details?.reasoning_tokens === "number"
133 ? usage.output_tokens_details.reasoning_tokens
134 : undefined
135
136 const totalCost = calculateCost ? calculateCost(inputTokens, outputTokens, cacheReadTokens) : undefined
137
138 return {
139 type: "usage",
140 inputTokens,
141 outputTokens,
142 cacheWriteTokens,
143 cacheReadTokens,
144 ...(typeof reasoningTokens === "number" ? { reasoningTokens } : {}),
145 ...(typeof totalCost === "number" ? { totalCost } : {}),
146 }
147 }
148}

Callers 2

createMessageMethod · 0.90

Calls 1

calculateCostFunction · 0.85

Tested by

no test coverage detected