MCPcopy Index your code
hub / github.com/aiprodcoder/MIXAPI / EmbeddingHelper

Function EmbeddingHelper

relay/embedding_handler.go:37–116  ·  view source on GitHub ↗
(c *gin.Context)

Source from the content-addressed store, hash-verified

35}
36
37func EmbeddingHelper(c *gin.Context) (newAPIError *types.NewAPIError) {
38 relayInfo := relaycommon.GenRelayInfoEmbedding(c)
39
40 var embeddingRequest *dto.EmbeddingRequest
41 err := common.UnmarshalBodyReusable(c, &embeddingRequest)
42 if err != nil {
43 common.LogError(c, fmt.Sprintf("getAndValidateTextRequest failed: %s", err.Error()))
44 return types.NewError(err, types.ErrorCodeInvalidRequest)
45 }
46
47 err = validateEmbeddingRequest(c, relayInfo, *embeddingRequest)
48 if err != nil {
49 return types.NewError(err, types.ErrorCodeInvalidRequest)
50 }
51
52 err = helper.ModelMappedHelper(c, relayInfo, embeddingRequest)
53 if err != nil {
54 return types.NewError(err, types.ErrorCodeChannelModelMappedError)
55 }
56
57 promptToken := getEmbeddingPromptToken(*embeddingRequest)
58 relayInfo.PromptTokens = promptToken
59
60 priceData, err := helper.ModelPriceHelper(c, relayInfo, promptToken, 0)
61 if err != nil {
62 return types.NewError(err, types.ErrorCodeModelPriceError)
63 }
64 // pre-consume quota 预消耗配额
65 preConsumedQuota, userQuota, newAPIError := preConsumeQuota(c, priceData.ShouldPreConsumedQuota, relayInfo)
66 if newAPIError != nil {
67 return newAPIError
68 }
69 defer func() {
70 if newAPIError != nil {
71 returnPreConsumedQuota(c, relayInfo, userQuota, preConsumedQuota)
72 }
73 }()
74
75 adaptor := GetAdaptor(relayInfo.ApiType)
76 if adaptor == nil {
77 return types.NewError(fmt.Errorf("invalid api type: %d", relayInfo.ApiType), types.ErrorCodeInvalidApiType)
78 }
79 adaptor.Init(relayInfo)
80
81 convertedRequest, err := adaptor.ConvertEmbeddingRequest(c, relayInfo, *embeddingRequest)
82
83 if err != nil {
84 return types.NewError(err, types.ErrorCodeConvertRequestFailed)
85 }
86 jsonData, err := json.Marshal(convertedRequest)
87 if err != nil {
88 return types.NewError(err, types.ErrorCodeConvertRequestFailed)
89 }
90 requestBody := bytes.NewBuffer(jsonData)
91 statusCodeMappingStr := c.GetString("status_code_mapping")
92 resp, err := adaptor.DoRequest(c, relayInfo, requestBody)
93 if err != nil {
94 return types.NewOpenAIError(err, types.ErrorCodeDoRequestFailed, http.StatusInternalServerError)

Callers 1

relayHandlerFunction · 0.92

Calls 15

NewErrorFunction · 0.92
ModelMappedHelperFunction · 0.92
ModelPriceHelperFunction · 0.92
NewOpenAIErrorFunction · 0.92
RelayErrorHandlerFunction · 0.92
ResetStatusCodeFunction · 0.92
validateEmbeddingRequestFunction · 0.85
getEmbeddingPromptTokenFunction · 0.85
preConsumeQuotaFunction · 0.85
returnPreConsumedQuotaFunction · 0.85
GetAdaptorFunction · 0.85
postConsumeQuotaFunction · 0.85

Tested by

no test coverage detected