package siliconflow import ( "encoding/json" "io" "net/http" "one-api/dto" relaycommon "one-api/relay/common" "one-api/service" "one-api/types" "github.com/gin-gonic/gin" ) func siliconflowRerankHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http.Response) (*dto.Usage, *types.NewAPIError) { responseBody, err := io.ReadAll(resp.Body) if err != nil { return nil, types.NewOpenAIError(err, types.ErrorCodeReadResponseBodyFailed, http.StatusInternalServerError) } service.CloseResponseBodyGracefully(resp) var siliconflowResp SFRerankResponse err = json.Unmarshal(responseBody, &siliconflowResp) if err != nil { return nil, types.NewOpenAIError(err, types.ErrorCodeBadResponseBody, http.StatusInternalServerError) } usage := &dto.Usage{ PromptTokens: siliconflowResp.Meta.Tokens.InputTokens, CompletionTokens: siliconflowResp.Meta.Tokens.OutputTokens, TotalTokens: siliconflowResp.Meta.Tokens.InputTokens + siliconflowResp.Meta.Tokens.OutputTokens, } rerankResp := &dto.RerankResponse{ Results: siliconflowResp.Results, Usage: *usage, } jsonResponse, err := json.Marshal(rerankResp) if err != nil { return nil, types.NewError(err, types.ErrorCodeBadResponseBody) } c.Writer.Header().Set("Content-Type", "application/json") c.Writer.WriteHeader(resp.StatusCode) service.IOCopyBytesGracefully(c, resp, jsonResponse) return usage, nil }