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

Function ResponsesHelper

relay/responses_handler.go:50–169  ·  view source on GitHub ↗
(c *gin.Context)

Source from the content-addressed store, hash-verified

48}
49
50func ResponsesHelper(c *gin.Context) (newAPIError *types.NewAPIError) {
51 req, err := getAndValidateResponsesRequest(c)
52 if err != nil {
53 common.LogError(c, fmt.Sprintf("getAndValidateResponsesRequest error: %s", err.Error()))
54 return types.NewError(err, types.ErrorCodeInvalidRequest)
55 }
56
57 relayInfo := relaycommon.GenRelayInfoResponses(c, req)
58
59 if setting.ShouldCheckPromptSensitive() {
60 sensitiveWords, err := checkInputSensitive(req, relayInfo)
61 if err != nil {
62 common.LogWarn(c, fmt.Sprintf("user sensitive words detected: %s", strings.Join(sensitiveWords, ", ")))
63 return types.NewError(err, types.ErrorCodeSensitiveWordsDetected)
64 }
65 }
66
67 err = helper.ModelMappedHelper(c, relayInfo, req)
68 if err != nil {
69 return types.NewError(err, types.ErrorCodeChannelModelMappedError)
70 }
71
72 if value, exists := c.Get("prompt_tokens"); exists {
73 promptTokens := value.(int)
74 relayInfo.SetPromptTokens(promptTokens)
75 } else {
76 promptTokens := getInputTokens(req, relayInfo)
77 c.Set("prompt_tokens", promptTokens)
78 }
79
80 priceData, err := helper.ModelPriceHelper(c, relayInfo, relayInfo.PromptTokens, int(req.MaxOutputTokens))
81 if err != nil {
82 return types.NewError(err, types.ErrorCodeModelPriceError)
83 }
84 // pre consume quota
85 preConsumedQuota, userQuota, newAPIError := preConsumeQuota(c, priceData.ShouldPreConsumedQuota, relayInfo)
86 if newAPIError != nil {
87 return newAPIError
88 }
89 defer func() {
90 if newAPIError != nil {
91 returnPreConsumedQuota(c, relayInfo, userQuota, preConsumedQuota)
92 }
93 }()
94 adaptor := GetAdaptor(relayInfo.ApiType)
95 if adaptor == nil {
96 return types.NewError(fmt.Errorf("invalid api type: %d", relayInfo.ApiType), types.ErrorCodeInvalidApiType)
97 }
98 adaptor.Init(relayInfo)
99 var requestBody io.Reader
100 if model_setting.GetGlobalSettings().PassThroughRequestEnabled {
101 body, err := common.GetRequestBody(c)
102 if err != nil {
103 return types.NewError(err, types.ErrorCodeReadRequestBodyFailed)
104 }
105 requestBody = bytes.NewBuffer(body)
106 } else {
107 convertedRequest, err := adaptor.ConvertOpenAIResponsesRequest(c, relayInfo, *req)

Callers 1

relayHandlerFunction · 0.92

Calls 15

NewErrorFunction · 0.92
ModelMappedHelperFunction · 0.92
ModelPriceHelperFunction · 0.92
GetGlobalSettingsFunction · 0.92
NewOpenAIErrorFunction · 0.92
RelayErrorHandlerFunction · 0.92
ResetStatusCodeFunction · 0.92
PostAudioConsumeQuotaFunction · 0.92
checkInputSensitiveFunction · 0.85
getInputTokensFunction · 0.85

Tested by

no test coverage detected