CaIon 1 год назад
Родитель
Сommit
1c6fd87909

+ 8 - 6
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 {

+ 2 - 0
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
 

+ 2 - 1
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)

+ 1 - 1
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 {