From 1c6fd879093674562073eb0518a21e79945f7577 Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Fri, 26 Apr 2024 02:56:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=84=E8=8C=83claude=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dto/text_response.go | 14 ++++++++------ relay/channel/aws/relay-aws.go | 2 ++ relay/channel/claude/relay-claude.go | 3 ++- service/token_counter.go | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/dto/text_response.go b/dto/text_response.go index 617c375..53c87eb 100644 --- a/dto/text_response.go +++ b/dto/text_response.go @@ -55,8 +55,9 @@ type OpenAIEmbeddingResponse struct { type ChatCompletionsStreamResponseChoice struct { Delta ChatCompletionsStreamResponseChoiceDelta `json:"delta,omitempty"` + Logprobs *any `json:"logprobs"` FinishReason *string `json:"finish_reason"` - Index int `json:"index,omitempty"` + Index int `json:"index"` } type ChatCompletionsStreamResponseChoiceDelta struct { @@ -95,11 +96,12 @@ type FunctionCall struct { } type ChatCompletionsStreamResponse struct { - Id string `json:"id"` - Object string `json:"object"` - Created int64 `json:"created"` - Model string `json:"model"` - Choices []ChatCompletionsStreamResponseChoice `json:"choices"` + Id string `json:"id"` + Object string `json:"object"` + Created int64 `json:"created"` + Model string `json:"model"` + SystemFingerprint *string `json:"system_fingerprint"` + Choices []ChatCompletionsStreamResponseChoice `json:"choices"` } type ChatCompletionsStreamResponseSimple struct { diff --git a/relay/channel/aws/relay-aws.go b/relay/channel/aws/relay-aws.go index bf64f03..1438f10 100644 --- a/relay/channel/aws/relay-aws.go +++ b/relay/channel/aws/relay-aws.go @@ -156,6 +156,7 @@ func awsStreamHandler(c *gin.Context, info *relaycommon.RelayInfo, requestMode i var usage relaymodel.Usage var id string var model string + createdTime := common.GetTimestamp() c.Stream(func(w io.Writer) bool { event, ok := <-stream.Events() if !ok { @@ -188,6 +189,7 @@ func awsStreamHandler(c *gin.Context, info *relaycommon.RelayInfo, requestMode i if response.Model != "" { model = response.Model } + response.Created = createdTime response.Id = id response.Model = model diff --git a/relay/channel/claude/relay-claude.go b/relay/channel/claude/relay-claude.go index 859b7b1..07767a4 100644 --- a/relay/channel/claude/relay-claude.go +++ b/relay/channel/claude/relay-claude.go @@ -181,9 +181,10 @@ func StreamResponseClaude2OpenAI(reqMode int, claudeResponse *ClaudeResponse) (* response.Id = claudeResponse.Message.Id response.Model = claudeResponse.Message.Model claudeUsage = &claudeResponse.Message.Usage - } else if claudeResponse.Type == "content_block_start" { choice.Delta.SetContentString("") choice.Delta.Role = "assistant" + } else if claudeResponse.Type == "content_block_start" { + return nil, nil } else if claudeResponse.Type == "content_block_delta" { choice.Index = claudeResponse.Index choice.Delta.SetContentString(claudeResponse.Delta.Text) diff --git a/service/token_counter.go b/service/token_counter.go index 18fc5a3..29da0f2 100644 --- a/service/token_counter.go +++ b/service/token_counter.go @@ -232,7 +232,7 @@ func CountTokenInput(input any, model string, check bool) (int, error, bool) { func CountTokenStreamChoices(messages []dto.ChatCompletionsStreamResponseChoice, model string) int { tokens := 0 for _, message := range messages { - tkm, _, _ := CountTokenInput(message.Delta.Content, model, false) + tkm, _, _ := CountTokenInput(message.Delta.GetContentString(), model, false) tokens += tkm if message.Delta.ToolCalls != nil { for _, tool := range message.Delta.ToolCalls {