fix(model):修复gemini模型思考token二次计费

This commit is contained in:
chengqian committed 2026-08-17 17:37:23 +08:00
1 parent 014e0f1736
commit f56301560e
1 file changed
+22 -2
+22 -2
View File
@@ -172,9 +172,19 @@ func handleGeminiInboundStream(ctx context.Context, resp *http.Response, info *c
FinishReason: reason,
}}
if usage.PromptTokens > 0 || usage.CompletionTokens > 0 {
// Gemini 语义:CandidatesTokenCount 不含 thoughts,OpenAI CompletionTokens 已含 reasoning
// 需要扣减 reasoning 避免双计(Gemini 客户端按 total = prompt + candidates + thoughts 汇总)
candidatesTokens := usage.CompletionTokens
if usage.CompletionTokenDetails != nil && usage.CompletionTokenDetails.ReasoningTokens > 0 {
candidatesTokens -= usage.CompletionTokenDetails.ReasoningTokens
if candidatesTokens < 0 {
candidatesTokens = 0
}
}
finalChunk.UsageMetadata = &dto.GeminiUsageMetadata{
PromptTokenCount: usage.PromptTokens,
CandidatesTokenCount: usage.CompletionTokens,
CandidatesTokenCount: candidatesTokens,
TotalTokenCount: usage.TotalTokens,
}
if usage.PromptTokensDetails != nil {
@@ -220,9 +230,19 @@ func openAIToGeminiResponse(openaiResp *dto.ChatCompletionResponse, info *common
resp.Candidates = []dto.GeminiCandidate{candidate}
// Gemini 语义:CandidatesTokenCount 不含 thoughts,OpenAI CompletionTokens 已含 reasoning
// 需要扣减 reasoning 避免双计(Gemini 客户端按 total = prompt + candidates + thoughts 汇总)
candidatesTokens := openaiResp.Usage.CompletionTokens
if openaiResp.Usage.CompletionTokenDetails != nil && openaiResp.Usage.CompletionTokenDetails.ReasoningTokens > 0 {
candidatesTokens -= openaiResp.Usage.CompletionTokenDetails.ReasoningTokens
if candidatesTokens < 0 {
candidatesTokens = 0
}
}
resp.UsageMetadata = &dto.GeminiUsageMetadata{
PromptTokenCount: openaiResp.Usage.PromptTokens,
CandidatesTokenCount: openaiResp.Usage.CompletionTokens,
CandidatesTokenCount: candidatesTokens,
TotalTokenCount: openaiResp.Usage.TotalTokens,
}
if openaiResp.Usage.PromptTokensDetails != nil {