fix: 规范claude返回格式

This commit is contained in:
CaIon 2024-04-26 02:56:35 +08:00
parent d1c8947851
commit 1c6fd87909
4 changed files with 13 additions and 8 deletions

View File

@ -55,8 +55,9 @@ type OpenAIEmbeddingResponse struct {
type ChatCompletionsStreamResponseChoice struct { type ChatCompletionsStreamResponseChoice struct {
Delta ChatCompletionsStreamResponseChoiceDelta `json:"delta,omitempty"` Delta ChatCompletionsStreamResponseChoiceDelta `json:"delta,omitempty"`
Logprobs *any `json:"logprobs"`
FinishReason *string `json:"finish_reason"` FinishReason *string `json:"finish_reason"`
Index int `json:"index,omitempty"` Index int `json:"index"`
} }
type ChatCompletionsStreamResponseChoiceDelta struct { type ChatCompletionsStreamResponseChoiceDelta struct {
@ -95,11 +96,12 @@ type FunctionCall struct {
} }
type ChatCompletionsStreamResponse struct { type ChatCompletionsStreamResponse struct {
Id string `json:"id"` Id string `json:"id"`
Object string `json:"object"` Object string `json:"object"`
Created int64 `json:"created"` Created int64 `json:"created"`
Model string `json:"model"` Model string `json:"model"`
Choices []ChatCompletionsStreamResponseChoice `json:"choices"` SystemFingerprint *string `json:"system_fingerprint"`
Choices []ChatCompletionsStreamResponseChoice `json:"choices"`
} }
type ChatCompletionsStreamResponseSimple struct { type ChatCompletionsStreamResponseSimple struct {

View File

@ -156,6 +156,7 @@ func awsStreamHandler(c *gin.Context, info *relaycommon.RelayInfo, requestMode i
var usage relaymodel.Usage var usage relaymodel.Usage
var id string var id string
var model string var model string
createdTime := common.GetTimestamp()
c.Stream(func(w io.Writer) bool { c.Stream(func(w io.Writer) bool {
event, ok := <-stream.Events() event, ok := <-stream.Events()
if !ok { if !ok {
@ -188,6 +189,7 @@ func awsStreamHandler(c *gin.Context, info *relaycommon.RelayInfo, requestMode i
if response.Model != "" { if response.Model != "" {
model = response.Model model = response.Model
} }
response.Created = createdTime
response.Id = id response.Id = id
response.Model = model response.Model = model

View File

@ -181,9 +181,10 @@ func StreamResponseClaude2OpenAI(reqMode int, claudeResponse *ClaudeResponse) (*
response.Id = claudeResponse.Message.Id response.Id = claudeResponse.Message.Id
response.Model = claudeResponse.Message.Model response.Model = claudeResponse.Message.Model
claudeUsage = &claudeResponse.Message.Usage claudeUsage = &claudeResponse.Message.Usage
} else if claudeResponse.Type == "content_block_start" {
choice.Delta.SetContentString("") choice.Delta.SetContentString("")
choice.Delta.Role = "assistant" choice.Delta.Role = "assistant"
} else if claudeResponse.Type == "content_block_start" {
return nil, nil
} else if claudeResponse.Type == "content_block_delta" { } else if claudeResponse.Type == "content_block_delta" {
choice.Index = claudeResponse.Index choice.Index = claudeResponse.Index
choice.Delta.SetContentString(claudeResponse.Delta.Text) choice.Delta.SetContentString(claudeResponse.Delta.Text)

View File

@ -232,7 +232,7 @@ func CountTokenInput(input any, model string, check bool) (int, error, bool) {
func CountTokenStreamChoices(messages []dto.ChatCompletionsStreamResponseChoice, model string) int { func CountTokenStreamChoices(messages []dto.ChatCompletionsStreamResponseChoice, model string) int {
tokens := 0 tokens := 0
for _, message := range messages { for _, message := range messages {
tkm, _, _ := CountTokenInput(message.Delta.Content, model, false) tkm, _, _ := CountTokenInput(message.Delta.GetContentString(), model, false)
tokens += tkm tokens += tkm
if message.Delta.ToolCalls != nil { if message.Delta.ToolCalls != nil {
for _, tool := range message.Delta.ToolCalls { for _, tool := range message.Delta.ToolCalls {