MCPcopy Create free account
hub / github.com/aiprodcoder/MIXAPI / TextHelper

Function TextHelper

relay/relay-text.go:162–319  ·  view source on GitHub ↗
(c *gin.Context)

Source from the content-addressed store, hash-verified

160}
161
162func TextHelper(c *gin.Context) (newAPIError *types.NewAPIError) {
163
164 relayInfo := relaycommon.GenRelayInfo(c)
165
166 // get & validate textRequest 获取并验证文本请求
167 textRequest, err := getAndValidateTextRequest(c, relayInfo)
168
169 if err != nil {
170 return types.NewError(err, types.ErrorCodeInvalidRequest)
171 }
172
173 // 将 textRequest 存储到 context 中供后续使用
174 c.Set("text_request", textRequest)
175
176 if textRequest.WebSearchOptions != nil {
177 c.Set("chat_completion_web_search_context_size", textRequest.WebSearchOptions.SearchContextSize)
178 }
179
180 if setting.ShouldCheckPromptSensitive() {
181 words, err := checkRequestSensitive(textRequest, relayInfo)
182 if err != nil {
183 common.LogWarn(c, fmt.Sprintf("user sensitive words detected: %s", strings.Join(words, ", ")))
184 return types.NewError(err, types.ErrorCodeSensitiveWordsDetected)
185 }
186 }
187
188 err = helper.ModelMappedHelper(c, relayInfo, textRequest)
189 if err != nil {
190 return types.NewError(err, types.ErrorCodeChannelModelMappedError)
191 }
192
193 // 获取 promptTokens,如果上下文中已经存在,则直接使用
194 var promptTokens int
195 if value, exists := c.Get("prompt_tokens"); exists {
196 promptTokens = value.(int)
197 relayInfo.PromptTokens = promptTokens
198 } else {
199 promptTokens, err = getPromptTokens(textRequest, relayInfo)
200 // count messages token error 计算promptTokens错误
201 if err != nil {
202 return types.NewError(err, types.ErrorCodeCountTokenFailed)
203 }
204 c.Set("prompt_tokens", promptTokens)
205 }
206
207 priceData, err := helper.ModelPriceHelper(c, relayInfo, promptTokens, int(math.Max(float64(textRequest.MaxTokens), float64(textRequest.MaxCompletionTokens))))
208 if err != nil {
209 return types.NewError(err, types.ErrorCodeModelPriceError)
210 }
211
212 // pre-consume quota 预消耗配额
213 preConsumedQuota, userQuota, newApiErr := preConsumeQuota(c, priceData.ShouldPreConsumedQuota, relayInfo)
214 if newApiErr != nil {
215 return newApiErr
216 }
217 defer func() {
218 if newApiErr != nil {
219 returnPreConsumedQuota(c, relayInfo, userQuota, preConsumedQuota)

Callers 1

relayHandlerFunction · 0.92

Calls 15

NewErrorFunction · 0.92
ModelMappedHelperFunction · 0.92
ModelPriceHelperFunction · 0.92
GetGlobalSettingsFunction · 0.92
NewErrorWithStatusCodeFunction · 0.92
NewOpenAIErrorFunction · 0.92
RelayErrorHandlerFunction · 0.92
ResetStatusCodeFunction · 0.92
PostAudioConsumeQuotaFunction · 0.92
checkRequestSensitiveFunction · 0.85

Tested by

no test coverage detected