Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 

85 lignes
2.5 KiB

  1. package mokaai
  2. import (
  3. "encoding/json"
  4. "io"
  5. "net/http"
  6. "github.com/QuantumNous/new-api/common"
  7. "github.com/QuantumNous/new-api/dto"
  8. relaycommon "github.com/QuantumNous/new-api/relay/common"
  9. "github.com/QuantumNous/new-api/service"
  10. "github.com/QuantumNous/new-api/types"
  11. "github.com/gin-gonic/gin"
  12. )
  13. func embeddingRequestOpenAI2Moka(request dto.GeneralOpenAIRequest) *dto.EmbeddingRequest {
  14. var input []string // Change input to []string
  15. switch v := request.Input.(type) {
  16. case string:
  17. input = []string{v} // Convert string to []string
  18. case []string:
  19. input = v // Already a []string, no conversion needed
  20. case []interface{}:
  21. for _, part := range v {
  22. if str, ok := part.(string); ok {
  23. input = append(input, str) // Append each string to the slice
  24. }
  25. }
  26. }
  27. return &dto.EmbeddingRequest{
  28. Input: input,
  29. Model: request.Model,
  30. }
  31. }
  32. func embeddingResponseMoka2OpenAI(response *dto.EmbeddingResponse) *dto.OpenAIEmbeddingResponse {
  33. openAIEmbeddingResponse := dto.OpenAIEmbeddingResponse{
  34. Object: "list",
  35. Data: make([]dto.OpenAIEmbeddingResponseItem, 0, len(response.Data)),
  36. Model: "baidu-embedding",
  37. Usage: response.Usage,
  38. }
  39. for _, item := range response.Data {
  40. openAIEmbeddingResponse.Data = append(openAIEmbeddingResponse.Data, dto.OpenAIEmbeddingResponseItem{
  41. Object: item.Object,
  42. Index: item.Index,
  43. Embedding: item.Embedding,
  44. })
  45. }
  46. return &openAIEmbeddingResponse
  47. }
  48. func mokaEmbeddingHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http.Response) (*dto.Usage, *types.NewAPIError) {
  49. var baiduResponse dto.EmbeddingResponse
  50. responseBody, err := io.ReadAll(resp.Body)
  51. if err != nil {
  52. return nil, types.NewError(err, types.ErrorCodeBadResponseBody)
  53. }
  54. service.CloseResponseBodyGracefully(resp)
  55. err = json.Unmarshal(responseBody, &baiduResponse)
  56. if err != nil {
  57. return nil, types.NewError(err, types.ErrorCodeBadResponseBody)
  58. }
  59. // if baiduResponse.ErrorMsg != "" {
  60. // return &dto.OpenAIErrorWithStatusCode{
  61. // Error: dto.OpenAIError{
  62. // Type: "baidu_error",
  63. // Param: "",
  64. // },
  65. // StatusCode: resp.StatusCode,
  66. // }, nil
  67. // }
  68. fullTextResponse := embeddingResponseMoka2OpenAI(&baiduResponse)
  69. jsonResponse, err := common.Marshal(fullTextResponse)
  70. if err != nil {
  71. return nil, types.NewError(err, types.ErrorCodeBadResponseBody)
  72. }
  73. c.Writer.Header().Set("Content-Type", "application/json")
  74. c.Writer.WriteHeader(resp.StatusCode)
  75. service.IOCopyBytesGracefully(c, resp, jsonResponse)
  76. return &fullTextResponse.Usage, nil
  77. }