MCPcopy
hub / github.com/QuantumNous/new-api / ModelRequestRateLimit

Function ModelRequestRateLimit

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

ModelRequestRateLimit 模型请求限流中间件

()

Source from the content-addressed store, hash-verified

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

Callers 1

SetRelayRouterFunction · 0.92

Calls 5

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

Tested by

no test coverage detected