🎨 优化上游ai兼容性,修复newapi返回token为空的问题
This commit is contained in:
@@ -10,6 +10,8 @@ type ClaudeMessageResponse struct {
|
||||
StopReason string `json:"stop_reason,omitempty"` // end_turn, max_tokens, stop_sequence
|
||||
StopSequence string `json:"stop_sequence,omitempty"`
|
||||
Usage ClaudeUsage `json:"usage"`
|
||||
// 统一格式的用量统计(与 OpenAI chat.completions 对齐)
|
||||
StandardUsage *ChatCompletionUsage `json:"standard_usage,omitempty"`
|
||||
}
|
||||
|
||||
type ClaudeContentBlock struct {
|
||||
|
||||
@@ -8,6 +8,8 @@ type ChatCompletionResponse struct {
|
||||
Model string `json:"model"`
|
||||
Choices []ChatCompletionChoice `json:"choices"`
|
||||
Usage ChatCompletionUsage `json:"usage"`
|
||||
// 统一格式的用量统计(用于各种上游的标准化)
|
||||
StandardUsage *ChatCompletionUsage `json:"standard_usage,omitempty"`
|
||||
// 扩展字段:正则脚本执行日志
|
||||
RegexLogs *RegexExecutionLogs `json:"regex_logs,omitempty"`
|
||||
}
|
||||
|
||||
@@ -49,6 +49,13 @@ func (s *AiProxyService) ProcessClaudeMessage(ctx context.Context, req *request.
|
||||
resp.Content[0].Text = injector.ProcessResponse(resp.Content[0].Text)
|
||||
}
|
||||
|
||||
// 5. 统一填充 standard_usage,转换为 OpenAI 风格的用量统计
|
||||
resp.StandardUsage = &response.ChatCompletionUsage{
|
||||
PromptTokens: resp.Usage.InputTokens,
|
||||
CompletionTokens: resp.Usage.OutputTokens,
|
||||
TotalTokens: resp.Usage.InputTokens + resp.Usage.OutputTokens,
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -48,6 +48,15 @@ func (s *AiProxyService) ProcessChatCompletion(ctx context.Context, req *request
|
||||
}
|
||||
|
||||
// 4. 处理响应并收集正则日志
|
||||
if resp != nil {
|
||||
// 统一填充 standard_usage,方便上游使用统一格式解析
|
||||
resp.StandardUsage = &response.ChatCompletionUsage{
|
||||
PromptTokens: resp.Usage.PromptTokens,
|
||||
CompletionTokens: resp.Usage.CompletionTokens,
|
||||
TotalTokens: resp.Usage.TotalTokens,
|
||||
}
|
||||
}
|
||||
|
||||
if preset != nil && injector != nil && len(resp.Choices) > 0 {
|
||||
resp.Choices[0].Message.Content = injector.ProcessResponse(resp.Choices[0].Message.Content)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user