| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- 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
- }
|