🐛 fix: Use correct dto for non-stream xai

This commit is contained in:
RedwindA
2025-07-14 21:32:31 +08:00
parent 52fe92ed7f
commit ea3545cc7e
2 changed files with 21 additions and 18 deletions

View File

@@ -8,7 +8,7 @@ type ChatCompletionResponse struct {
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 []dto.ChatCompletionsStreamResponseChoice Choices []dto.OpenAITextResponseChoice `json:"choices"`
Usage *dto.Usage `json:"usage"` Usage *dto.Usage `json:"usage"`
SystemFingerprint string `json:"system_fingerprint"` SystemFingerprint string `json:"system_fingerprint"`
} }

View File

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