diff --git a/providers/openai/chat.go b/providers/openai/chat.go index 7e892b38..bd1bea6b 100644 --- a/providers/openai/chat.go +++ b/providers/openai/chat.go @@ -41,6 +41,17 @@ func (p *OpenAIProvider) CreateChatCompletion(request *types.ChatCompletionReque return nil, errWithCode } + if response.Usage == nil { + response.Usage = &types.Usage{ + PromptTokens: p.Usage.PromptTokens, + CompletionTokens: 0, + TotalTokens: 0, + } + // 那么需要计算 + response.Usage.CompletionTokens = common.CountTokenText(response.GetContent(), request.Model) + response.Usage.TotalTokens = response.Usage.PromptTokens + response.Usage.CompletionTokens + } + *p.Usage = *response.Usage return &response.ChatCompletionResponse, nil diff --git a/types/chat.go b/types/chat.go index 718b47a0..3e3668d8 100644 --- a/types/chat.go +++ b/types/chat.go @@ -189,6 +189,14 @@ type ChatCompletionResponse struct { PromptFilterResults any `json:"prompt_filter_results,omitempty"` } +func (cc *ChatCompletionResponse) GetContent() string { + var content string + for _, choice := range cc.Choices { + content += choice.Message.StringContent() + } + return content +} + func (c ChatCompletionStreamChoice) ConvertOpenaiStream() []ChatCompletionStreamChoice { var function *ChatCompletionToolCallsFunction var functions []*ChatCompletionToolCallsFunction