fix: models api return models in deactivate channels

- Enhance logging functionality by adding context support and improving debugging options.
- Standardize function naming conventions across middleware to ensure consistency.
- Optimize data retrieval and handling in the model controller, including caching and error management.
- Simplify the bug report template to streamline the issue reporting process.
This commit is contained in:
Laisky.Cai
2025-02-26 11:22:03 +00:00
parent 8df4a2670b
commit 54635ca4fe
8 changed files with 194 additions and 81 deletions

View File

@@ -3,18 +3,19 @@ package model
import (
"context"
"encoding/json"
"errors"
"fmt"
"github.com/songquanpeng/one-api/common"
"github.com/songquanpeng/one-api/common/config"
"github.com/songquanpeng/one-api/common/logger"
"github.com/songquanpeng/one-api/common/random"
"math/rand"
"sort"
"strconv"
"strings"
"sync"
"time"
"github.com/pkg/errors"
"github.com/songquanpeng/one-api/common"
"github.com/songquanpeng/one-api/common/config"
"github.com/songquanpeng/one-api/common/logger"
"github.com/songquanpeng/one-api/common/random"
)
var (
@@ -148,7 +149,10 @@ func CacheIsUserEnabled(userId int) (bool, error) {
return userEnabled, err
}
func CacheGetGroupModels(ctx context.Context, group string) ([]string, error) {
// CacheGetGroupModels returns models of a group
//
// Deprecated: use CacheGetGroupModelsV2 instead
func CacheGetGroupModels(ctx context.Context, group string) (models []string, err error) {
if !common.RedisEnabled {
return GetGroupModels(ctx, group)
}
@@ -156,7 +160,7 @@ func CacheGetGroupModels(ctx context.Context, group string) ([]string, error) {
if err == nil {
return strings.Split(modelsStr, ","), nil
}
models, err := GetGroupModels(ctx, group)
models, err = GetGroupModels(ctx, group)
if err != nil {
return nil, err
}
@@ -167,6 +171,42 @@ func CacheGetGroupModels(ctx context.Context, group string) ([]string, error) {
return models, nil
}
// CacheGetGroupModelsV2 is a version of CacheGetGroupModels that returns EnabledAbility instead of string
func CacheGetGroupModelsV2(ctx context.Context, group string) (models []EnabledAbility, err error) {
if !common.RedisEnabled {
return GetGroupModelsV2(ctx, group)
}
modelsStr, err := common.RedisGet(fmt.Sprintf("group_models_v2:%s", group))
if err != nil {
logger.Warnf(ctx, "Redis get group models error: %+v", err)
} else {
if err = json.Unmarshal([]byte(modelsStr), &models); err != nil {
logger.Warnf(ctx, "Redis get group models error: %+v", err)
} else {
return models, nil
}
}
models, err = GetGroupModelsV2(ctx, group)
if err != nil {
return nil, errors.Wrap(err, "get group models")
}
cachePayload, err := json.Marshal(models)
if err != nil {
logger.SysError("Redis set group models error: " + err.Error())
return models, nil
}
err = common.RedisSet(fmt.Sprintf("group_models:%s", group), string(cachePayload),
time.Duration(GroupModelsCacheSeconds)*time.Second)
if err != nil {
logger.SysError("Redis set group models error: " + err.Error())
}
return models, nil
}
var group2model2channels map[string]map[string][]*Channel
var channelSyncLock sync.RWMutex