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

Function ClaudeHelper

relay/claude_handler.go:36–151  ·  view source on GitHub ↗
(c *gin.Context)

Source from the content-addressed store, hash-verified

34}
35
36func ClaudeHelper(c *gin.Context) (newAPIError *types.NewAPIError) {
37
38 relayInfo := relaycommon.GenRelayInfoClaude(c)
39
40 // get & validate textRequest 获取并验证文本请求
41 textRequest, err := getAndValidateClaudeRequest(c)
42 if err != nil {
43 return types.NewError(err, types.ErrorCodeInvalidRequest)
44 }
45
46 if textRequest.Stream {
47 relayInfo.IsStream = true
48 }
49
50 err = helper.ModelMappedHelper(c, relayInfo, textRequest)
51 if err != nil {
52 return types.NewError(err, types.ErrorCodeChannelModelMappedError)
53 }
54
55 promptTokens, err := getClaudePromptTokens(textRequest, relayInfo)
56 // count messages token error 计算promptTokens错误
57 if err != nil {
58 return types.NewError(err, types.ErrorCodeCountTokenFailed)
59 }
60
61 priceData, err := helper.ModelPriceHelper(c, relayInfo, promptTokens, int(textRequest.MaxTokens))
62 if err != nil {
63 return types.NewError(err, types.ErrorCodeModelPriceError)
64 }
65
66 // pre-consume quota 预消耗配额
67 preConsumedQuota, userQuota, newAPIError := preConsumeQuota(c, priceData.ShouldPreConsumedQuota, relayInfo)
68
69 if newAPIError != nil {
70 return newAPIError
71 }
72 defer func() {
73 if newAPIError != nil {
74 returnPreConsumedQuota(c, relayInfo, userQuota, preConsumedQuota)
75 }
76 }()
77
78 adaptor := GetAdaptor(relayInfo.ApiType)
79 if adaptor == nil {
80 return types.NewError(fmt.Errorf("invalid api type: %d", relayInfo.ApiType), types.ErrorCodeInvalidApiType)
81 }
82 adaptor.Init(relayInfo)
83 var requestBody io.Reader
84
85 if textRequest.MaxTokens == 0 {
86 textRequest.MaxTokens = uint(model_setting.GetClaudeSettings().GetDefaultMaxTokens(textRequest.Model))
87 }
88
89 if model_setting.GetClaudeSettings().ThinkingAdapterEnabled &&
90 strings.HasSuffix(textRequest.Model, "-thinking") {
91 if textRequest.Thinking == nil {
92 // 因为BudgetTokens 必须大于1024
93 if textRequest.MaxTokens < 1280 {

Callers 1

claudeRequestFunction · 0.92

Calls 15

NewErrorFunction · 0.92
ModelMappedHelperFunction · 0.92
ModelPriceHelperFunction · 0.92
GetClaudeSettingsFunction · 0.92
NewOpenAIErrorFunction · 0.92
RelayErrorHandlerFunction · 0.92
ResetStatusCodeFunction · 0.92
PostClaudeConsumeQuotaFunction · 0.92
getClaudePromptTokensFunction · 0.85
preConsumeQuotaFunction · 0.85
returnPreConsumedQuotaFunction · 0.85

Tested by

no test coverage detected