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

Function ModelRequestRateLimit

middleware/model-rate-limit.go:166–199  ·  view source on GitHub ↗

ModelRequestRateLimit 模型请求限流中间件

()

Source from the content-addressed store, hash-verified

164
165// ModelRequestRateLimit 模型请求限流中间件
166func ModelRequestRateLimit() func(c *gin.Context) {
167 return func(c *gin.Context) {
168 // 在每个请求时检查是否启用限流
169 if !setting.ModelRequestRateLimitEnabled {
170 c.Next()
171 return
172 }
173
174 // 计算限流参数
175 duration := int64(setting.ModelRequestRateLimitDurationMinutes * 60)
176 totalMaxCount := setting.ModelRequestRateLimitCount
177 successMaxCount := setting.ModelRequestRateLimitSuccessCount
178
179 // 获取分组
180 group := common.GetContextKeyString(c, constant.ContextKeyTokenGroup)
181 if group == "" {
182 group = common.GetContextKeyString(c, constant.ContextKeyUserGroup)
183 }
184
185 //获取分组的限流配置
186 groupTotalCount, groupSuccessCount, found := setting.GetGroupRateLimit(group)
187 if found {
188 totalMaxCount = groupTotalCount
189 successMaxCount = groupSuccessCount
190 }
191
192 // 根据存储类型选择并执行限流处理器
193 if common.RedisEnabled {
194 redisRateLimitHandler(duration, totalMaxCount, successMaxCount)(c)
195 } else {
196 memoryRateLimitHandler(duration, totalMaxCount, successMaxCount)(c)
197 }
198 }
199}

Callers 1

SetRelayRouterFunction · 0.92

Calls 5

GetContextKeyStringFunction · 0.92
GetGroupRateLimitFunction · 0.92
redisRateLimitHandlerFunction · 0.85
memoryRateLimitHandlerFunction · 0.85
NextMethod · 0.80

Tested by

no test coverage detected