From c28add55db23a9598a74003ca7318da3b9232dea Mon Sep 17 00:00:00 2001 From: CaIon Date: Sat, 2 Aug 2025 13:16:30 +0800 Subject: [PATCH] feat: add caching for keys in channel structure and retain polling index during sync --- model/channel.go | 6 ++++++ model/channel_cache.go | 13 +++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/model/channel.go b/model/channel.go index 58f0a064..bcffc102 100644 --- a/model/channel.go +++ b/model/channel.go @@ -46,6 +46,9 @@ type Channel struct { ParamOverride *string `json:"param_override" gorm:"type:text"` // add after v0.8.5 ChannelInfo ChannelInfo `json:"channel_info" gorm:"type:json"` + + // cache info + Keys []string `json:"-" gorm:"-"` } type ChannelInfo struct { @@ -71,6 +74,9 @@ func (channel *Channel) getKeys() []string { if channel.Key == "" { return []string{} } + if len(channel.Keys) > 0 { + return channel.Keys + } trimmed := strings.TrimSpace(channel.Key) // If the key starts with '[', try to parse it as a JSON array (e.g., for Vertex AI scenarios) if strings.HasPrefix(trimmed, "[") { diff --git a/model/channel_cache.go b/model/channel_cache.go index 98522f70..ecd87607 100644 --- a/model/channel_cache.go +++ b/model/channel_cache.go @@ -69,10 +69,15 @@ func InitChannelCache() { group2model2channels = newGroup2model2channels //channelsIDM = newChannelId2channel for i, channel := range newChannelId2channel { - if oldChannel, ok := channelsIDM[i]; ok { - // 存在旧的渠道,如果是多key且轮询,保留轮询索引信息 - if oldChannel.ChannelInfo.IsMultiKey && oldChannel.ChannelInfo.MultiKeyMode == constant.MultiKeyModePolling { - channel.ChannelInfo.MultiKeyPollingIndex = oldChannel.ChannelInfo.MultiKeyPollingIndex + if channel.ChannelInfo.IsMultiKey { + channel.Keys = channel.getKeys() + if channel.ChannelInfo.MultiKeyMode == constant.MultiKeyModePolling { + if oldChannel, ok := channelsIDM[i]; ok { + // 存在旧的渠道,如果是多key且轮询,保留轮询索引信息 + if oldChannel.ChannelInfo.IsMultiKey && oldChannel.ChannelInfo.MultiKeyMode == constant.MultiKeyModePolling { + channel.ChannelInfo.MultiKeyPollingIndex = oldChannel.ChannelInfo.MultiKeyPollingIndex + } + } } } }