|
- package mokaai
-
- import (
- "encoding/json"
- "io"
- "net/http"
-
- "github.com/QuantumNous/new-api/common"
- "github.com/QuantumNous/new-api/dto"
- relaycommon "github.com/QuantumNous/new-api/relay/common"
- "github.com/QuantumNous/new-api/service"
- "github.com/QuantumNous/new-api/types"
-
- "github.com/gin-gonic/gin"
- )
-
- func embeddingRequestOpenAI2Moka(request dto.GeneralOpenAIRequest) *dto.EmbeddingRequest {
- var input []string // Change input to []string
-
- switch v := request.Input.(type) {
- case string:
- input = []string{v} // Convert string to []string
- case []string:
- input = v // Already a []string, no conversion needed
- case []interface{}:
- for _, part := range v {
- if str, ok := part.(string); ok {
- input = append(input, str) // Append each string to the slice
- }
- }
- }
- return &dto.EmbeddingRequest{
- Input: input,
- Model: request.Model,
- }
- }
-
- func embeddingResponseMoka2OpenAI(response *dto.EmbeddingResponse) *dto.OpenAIEmbeddingResponse {
- openAIEmbeddingResponse := dto.OpenAIEmbeddingResponse{
- Object: "list",
- Data: make([]dto.OpenAIEmbeddingResponseItem, 0, len(response.Data)),
- Model: "baidu-embedding",
- Usage: response.Usage,
- }
- for _, item := range response.Data {
- openAIEmbeddingResponse.Data = append(openAIEmbeddingResponse.Data, dto.OpenAIEmbeddingResponseItem{
- Object: item.Object,
- Index: item.Index,
- Embedding: item.Embedding,
- })
- }
- return &openAIEmbeddingResponse
- }
-
- func mokaEmbeddingHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http.Response) (*dto.Usage, *types.NewAPIError) {
- var baiduResponse dto.EmbeddingResponse
- responseBody, err := io.ReadAll(resp.Body)
- if err != nil {
- return nil, types.NewError(err, types.ErrorCodeBadResponseBody)
- }
- service.CloseResponseBodyGracefully(resp)
- err = json.Unmarshal(responseBody, &baiduResponse)
- if err != nil {
- return nil, types.NewError(err, types.ErrorCodeBadResponseBody)
- }
- // if baiduResponse.ErrorMsg != "" {
- // return &dto.OpenAIErrorWithStatusCode{
- // Error: dto.OpenAIError{
- // Type: "baidu_error",
- // Param: "",
- // },
- // StatusCode: resp.StatusCode,
- // }, nil
- // }
- fullTextResponse := embeddingResponseMoka2OpenAI(&baiduResponse)
- jsonResponse, err := common.Marshal(fullTextResponse)
- 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 &fullTextResponse.Usage, nil
- }
|