| package service |
|
|
| import ( |
| "errors" |
|
|
| "github.com/QuantumNous/new-api/common" |
| "github.com/QuantumNous/new-api/constant" |
| "github.com/QuantumNous/new-api/logger" |
| "github.com/QuantumNous/new-api/model" |
| "github.com/QuantumNous/new-api/setting" |
| "github.com/gin-gonic/gin" |
| ) |
|
|
| func CacheGetRandomSatisfiedChannel(c *gin.Context, group string, modelName string, retry int) (*model.Channel, string, error) { |
| var channel *model.Channel |
| var err error |
| selectGroup := group |
| userGroup := common.GetContextKeyString(c, constant.ContextKeyUserGroup) |
| if group == "auto" { |
| if len(setting.GetAutoGroups()) == 0 { |
| return nil, selectGroup, errors.New("auto groups is not enabled") |
| } |
| for _, autoGroup := range GetUserAutoGroup(userGroup) { |
| logger.LogDebug(c, "Auto selecting group:", autoGroup) |
| channel, _ = model.GetRandomSatisfiedChannel(autoGroup, modelName, retry) |
| if channel == nil { |
| continue |
| } else { |
| c.Set("auto_group", autoGroup) |
| selectGroup = autoGroup |
| logger.LogDebug(c, "Auto selected group:", autoGroup) |
| break |
| } |
| } |
| } else { |
| channel, err = model.GetRandomSatisfiedChannel(group, modelName, retry) |
| if err != nil { |
| return nil, group, err |
| } |
| } |
| return channel, selectGroup, nil |
| } |
|
|