Explorar el Código

fix: 采纳 CodeRabbit 建议,!Done 时也用 fallback 覆盖占位 CompletionTokens

message_start 阶段可能给 CompletionTokens 非零占位值,
只检查 == 0 不够,加上 !Done && fallback > current 条件。
zuiho hace 1 mes
padre
commit
c66636a0c7
Se han modificado 1 ficheros con 2 adiciones y 1 borrados
  1. 2 1
      relay/channel/claude/relay-claude.go

+ 2 - 1
relay/channel/claude/relay-claude.go

@@ -811,7 +811,8 @@ func HandleStreamFinalResponse(c *gin.Context, info *relaycommon.RelayInfo, clau
 		}
 		}
 		// 只补缺失字段,不整份覆盖——保留 message_start 已拿到的 cache 字段
 		// 只补缺失字段,不整份覆盖——保留 message_start 已拿到的 cache 字段
 		fallback := service.ResponseText2Usage(c, claudeInfo.ResponseText.String(), info.UpstreamModelName, info.GetEstimatePromptTokens())
 		fallback := service.ResponseText2Usage(c, claudeInfo.ResponseText.String(), info.UpstreamModelName, info.GetEstimatePromptTokens())
-		if claudeInfo.Usage.CompletionTokens == 0 {
+		if claudeInfo.Usage.CompletionTokens == 0 ||
+			(!claudeInfo.Done && fallback.CompletionTokens > claudeInfo.Usage.CompletionTokens) {
 			claudeInfo.Usage.CompletionTokens = fallback.CompletionTokens
 			claudeInfo.Usage.CompletionTokens = fallback.CompletionTokens
 		}
 		}
 		if claudeInfo.Usage.PromptTokens == 0 {
 		if claudeInfo.Usage.PromptTokens == 0 {