diff --git a/relay/channel/xai/dto.go b/relay/channel/xai/dto.go index b8098475..107a980a 100644 --- a/relay/channel/xai/dto.go +++ b/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"` -} \ No newline at end of file +} diff --git a/relay/channel/xai/text.go b/relay/channel/xai/text.go index 272cc749..46169ff8 100644 --- a/relay/channel/xai/text.go +++ b/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 }