소스 검색

🐛 fix: Use correct dto for non-stream xai

RedwindA 7 달 전
부모
커밋
ea3545cc7e
2개의 변경된 파일21개의 추가작업 그리고 18개의 파일을 삭제
  1. 12 12
      relay/channel/xai/dto.go
  2. 9 6
      relay/channel/xai/text.go

+ 12 - 12
relay/channel/xai/dto.go

@@ -4,24 +4,24 @@ import "one-api/dto"
 
 // ChatCompletionResponse represents the response from XAI chat completion API
 type ChatCompletionResponse struct {
-	Id                string `json:"id"`
-	Object            string `json:"object"`
-	Created           int64  `json:"created"`
-	Model             string `json:"model"`
-	Choices           []dto.ChatCompletionsStreamResponseChoice
-	Usage             *dto.Usage `json:"usage"`
-	SystemFingerprint string     `json:"system_fingerprint"`
+	Id                string                         `json:"id"`
+	Object            string                         `json:"object"`
+	Created           int64                          `json:"created"`
+	Model             string                         `json:"model"`
+	Choices           []dto.OpenAITextResponseChoice `json:"choices"`
+	Usage             *dto.Usage                     `json:"usage"`
+	SystemFingerprint string                         `json:"system_fingerprint"`
 }
 
 // quality, size or style are not supported by xAI API at the moment.
 type ImageRequest struct {
-	Model          string          `json:"model"`
-	Prompt         string          `json:"prompt" binding:"required"`
-	N              int             `json:"n,omitempty"`
+	Model  string `json:"model"`
+	Prompt string `json:"prompt" binding:"required"`
+	N      int    `json:"n,omitempty"`
 	// Size           string          `json:"size,omitempty"`
 	// Quality        string          `json:"quality,omitempty"`
-	ResponseFormat string          `json:"response_format,omitempty"`
+	ResponseFormat string `json:"response_format,omitempty"`
 	// Style          string          `json:"style,omitempty"`
 	// User           string          `json:"user,omitempty"`
 	// ExtraFields    json.RawMessage `json:"extra_fields,omitempty"`
-}
+}

+ 9 - 6
relay/channel/xai/text.go

@@ -82,21 +82,24 @@ func xAIHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http.Response
 	defer common.CloseResponseBodyGracefully(resp)
 
 	responseBody, err := io.ReadAll(resp.Body)
-	var response *dto.SimpleResponse
-	err = common.Unmarshal(responseBody, &response)
 	if err != nil {
 		return nil, types.NewError(err, types.ErrorCodeBadResponseBody)
 	}
-	response.Usage.CompletionTokens = response.Usage.TotalTokens - response.Usage.PromptTokens
-	response.Usage.CompletionTokenDetails.TextTokens = response.Usage.CompletionTokens - response.Usage.CompletionTokenDetails.ReasoningTokens
+	var xaiResponse ChatCompletionResponse
+	err = common.Unmarshal(responseBody, &xaiResponse)
+	if err != nil {
+		return nil, types.NewError(err, types.ErrorCodeBadResponseBody)
+	}
+	xaiResponse.Usage.CompletionTokens = xaiResponse.Usage.TotalTokens - xaiResponse.Usage.PromptTokens
+	xaiResponse.Usage.CompletionTokenDetails.TextTokens = xaiResponse.Usage.CompletionTokens - xaiResponse.Usage.CompletionTokenDetails.ReasoningTokens
 
 	// new body
-	encodeJson, err := common.Marshal(response)
+	encodeJson, err := common.Marshal(xaiResponse)
 	if err != nil {
 		return nil, types.NewError(err, types.ErrorCodeBadResponseBody)
 	}
 
 	common.IOCopyBytesGracefully(c, resp, encodeJson)
 
-	return &response.Usage, nil
+	return xaiResponse.Usage, nil
 }