feat: support cached input token billing
This commit is contained in:
@@ -519,7 +519,11 @@ func geminiUsage(raw map[string]any) Usage {
|
||||
input := intFromAny(usageMap["prompt_tokens"])
|
||||
output := intFromAny(usageMap["completion_tokens"])
|
||||
total := intFromAny(usageMap["total_tokens"])
|
||||
return Usage{InputTokens: input, OutputTokens: output, TotalTokens: total}
|
||||
cachedInput := cachedInputTokensFromOpenAIUsage(usageMap)
|
||||
if cachedInput > input && input > 0 {
|
||||
cachedInput = input
|
||||
}
|
||||
return Usage{InputTokens: input, OutputTokens: output, CachedInputTokens: cachedInput, TotalTokens: total}
|
||||
}
|
||||
|
||||
func geminiUsageMap(raw map[string]any) map[string]any {
|
||||
@@ -527,8 +531,13 @@ func geminiUsageMap(raw map[string]any) map[string]any {
|
||||
input := intFromAny(meta["promptTokenCount"])
|
||||
output := intFromAny(meta["candidatesTokenCount"])
|
||||
total := intFromAny(meta["totalTokenCount"])
|
||||
cachedInput := intFromAny(firstPresent(meta["cachedContentTokenCount"], meta["cached_content_token_count"]))
|
||||
if total == 0 {
|
||||
total = input + output
|
||||
}
|
||||
return map[string]any{"prompt_tokens": input, "completion_tokens": output, "total_tokens": total}
|
||||
usage := map[string]any{"prompt_tokens": input, "completion_tokens": output, "total_tokens": total}
|
||||
if cachedInput > 0 {
|
||||
usage["prompt_tokens_details"] = map[string]any{"cached_tokens": cachedInput}
|
||||
}
|
||||
return usage
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user