|
@@ -809,7 +809,16 @@ func HandleStreamFinalResponse(c *gin.Context, info *relaycommon.RelayInfo, clau
|
|
|
if common.DebugEnabled {
|
|
if common.DebugEnabled {
|
|
|
common.SysLog("claude response usage is not complete, maybe upstream error")
|
|
common.SysLog("claude response usage is not complete, maybe upstream error")
|
|
|
}
|
|
}
|
|
|
- claudeInfo.Usage = service.ResponseText2Usage(c, claudeInfo.ResponseText.String(), info.UpstreamModelName, claudeInfo.Usage.PromptTokens)
|
|
|
|
|
|
|
+ // 只补缺失字段,不整份覆盖——保留 message_start 已拿到的 cache 字段
|
|
|
|
|
+ fallback := service.ResponseText2Usage(c, claudeInfo.ResponseText.String(), info.UpstreamModelName, info.GetEstimatePromptTokens())
|
|
|
|
|
+ if claudeInfo.Usage.CompletionTokens == 0 ||
|
|
|
|
|
+ (!claudeInfo.Done && fallback.CompletionTokens > claudeInfo.Usage.CompletionTokens) {
|
|
|
|
|
+ claudeInfo.Usage.CompletionTokens = fallback.CompletionTokens
|
|
|
|
|
+ }
|
|
|
|
|
+ if claudeInfo.Usage.PromptTokens == 0 {
|
|
|
|
|
+ claudeInfo.Usage.PromptTokens = fallback.PromptTokens
|
|
|
|
|
+ }
|
|
|
|
|
+ claudeInfo.Usage.TotalTokens = claudeInfo.Usage.PromptTokens + claudeInfo.Usage.CompletionTokens
|
|
|
}
|
|
}
|
|
|
if claudeInfo.Usage != nil {
|
|
if claudeInfo.Usage != nil {
|
|
|
claudeInfo.Usage.UsageSemantic = "anthropic"
|
|
claudeInfo.Usage.UsageSemantic = "anthropic"
|