| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package common_handler
- import (
- "io"
- "net/http"
- "one-api/common"
- "one-api/constant"
- "one-api/dto"
- "one-api/relay/channel/xinference"
- relaycommon "one-api/relay/common"
- "one-api/types"
- "github.com/gin-gonic/gin"
- )
- func RerankHandler(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.NewError(err, types.ErrorCodeReadResponseBodyFailed)
- }
- common.CloseResponseBodyGracefully(resp)
- if common.DebugEnabled {
- println("reranker response body: ", string(responseBody))
- }
- var jinaResp dto.RerankResponse
- if info.ChannelType == constant.ChannelTypeXinference {
- var xinRerankResponse xinference.XinRerankResponse
- err = common.Unmarshal(responseBody, &xinRerankResponse)
- if err != nil {
- return nil, types.NewError(err, types.ErrorCodeBadResponseBody)
- }
- jinaRespResults := make([]dto.RerankResponseResult, len(xinRerankResponse.Results))
- for i, result := range xinRerankResponse.Results {
- respResult := dto.RerankResponseResult{
- Index: result.Index,
- RelevanceScore: result.RelevanceScore,
- }
- if info.ReturnDocuments {
- var document any
- if result.Document != nil {
- if doc, ok := result.Document.(string); ok {
- if doc == "" {
- document = info.Documents[result.Index]
- } else {
- document = doc
- }
- } else {
- document = result.Document
- }
- }
- respResult.Document = document
- }
- jinaRespResults[i] = respResult
- }
- jinaResp = dto.RerankResponse{
- Results: jinaRespResults,
- Usage: dto.Usage{
- PromptTokens: info.PromptTokens,
- TotalTokens: info.PromptTokens,
- },
- }
- } else {
- err = common.Unmarshal(responseBody, &jinaResp)
- if err != nil {
- return nil, types.NewError(err, types.ErrorCodeBadResponseBody)
- }
- jinaResp.Usage.PromptTokens = jinaResp.Usage.TotalTokens
- }
- c.Writer.Header().Set("Content-Type", "application/json")
- c.JSON(http.StatusOK, jinaResp)
- return &jinaResp.Usage, nil
- }
|