From a56d9ea98bb4d7adabd829b393e6585151060c91 Mon Sep 17 00:00:00 2001 From: creamlike1024 Date: Fri, 20 Jun 2025 23:01:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20gemini=20=E5=8E=9F=E7=94=9F=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E6=B5=81=E6=A8=A1=E5=BC=8F=E4=B8=AD=E6=96=AD=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E6=9C=AA=E8=AE=A1=E8=B4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- relay/channel/gemini/relay-gemini-native.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/relay/channel/gemini/relay-gemini-native.go b/relay/channel/gemini/relay-gemini-native.go index cf7920dc..3a017a11 100644 --- a/relay/channel/gemini/relay-gemini-native.go +++ b/relay/channel/gemini/relay-gemini-native.go @@ -75,6 +75,9 @@ func GeminiTextGenerationStreamHandler(c *gin.Context, resp *http.Response, info helper.SetEventStreamHeaders(c) + // 本地统计的completion tokens + localCompletionTokens := 0 + helper.StreamScannerHandler(c, resp, info, func(data string) bool { var geminiResponse GeminiChatResponse err := common.DecodeJsonStr(data, &geminiResponse) @@ -89,6 +92,12 @@ func GeminiTextGenerationStreamHandler(c *gin.Context, resp *http.Response, info if part.InlineData != nil && part.InlineData.MimeType != "" { imageCount++ } + // 本地统计completion tokens + textTokens, err := service.CountTextToken(part.Text, info.UpstreamModelName) + if err != nil { + common.LogError(c, "error counting text token: "+err.Error()) + } + localCompletionTokens += textTokens } } @@ -122,6 +131,12 @@ func GeminiTextGenerationStreamHandler(c *gin.Context, resp *http.Response, info } } + // 如果usage.CompletionTokens为0,则使用本地统计的completion tokens + if usage.CompletionTokens == 0 { + usage.CompletionTokens = localCompletionTokens + usage.TotalTokens = usage.PromptTokens + usage.CompletionTokens + } + // 计算最终使用量 // usage.CompletionTokens = usage.TotalTokens - usage.PromptTokens