feat: add caching for keys in channel structure and retain polling index during sync
This commit is contained in:
@@ -46,6 +46,9 @@ type Channel struct {
|
|||||||
ParamOverride *string `json:"param_override" gorm:"type:text"`
|
ParamOverride *string `json:"param_override" gorm:"type:text"`
|
||||||
// add after v0.8.5
|
// add after v0.8.5
|
||||||
ChannelInfo ChannelInfo `json:"channel_info" gorm:"type:json"`
|
ChannelInfo ChannelInfo `json:"channel_info" gorm:"type:json"`
|
||||||
|
|
||||||
|
// cache info
|
||||||
|
Keys []string `json:"-" gorm:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ChannelInfo struct {
|
type ChannelInfo struct {
|
||||||
@@ -71,6 +74,9 @@ func (channel *Channel) getKeys() []string {
|
|||||||
if channel.Key == "" {
|
if channel.Key == "" {
|
||||||
return []string{}
|
return []string{}
|
||||||
}
|
}
|
||||||
|
if len(channel.Keys) > 0 {
|
||||||
|
return channel.Keys
|
||||||
|
}
|
||||||
trimmed := strings.TrimSpace(channel.Key)
|
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 the key starts with '[', try to parse it as a JSON array (e.g., for Vertex AI scenarios)
|
||||||
if strings.HasPrefix(trimmed, "[") {
|
if strings.HasPrefix(trimmed, "[") {
|
||||||
|
|||||||
@@ -69,10 +69,15 @@ func InitChannelCache() {
|
|||||||
group2model2channels = newGroup2model2channels
|
group2model2channels = newGroup2model2channels
|
||||||
//channelsIDM = newChannelId2channel
|
//channelsIDM = newChannelId2channel
|
||||||
for i, channel := range newChannelId2channel {
|
for i, channel := range newChannelId2channel {
|
||||||
if oldChannel, ok := channelsIDM[i]; ok {
|
if channel.ChannelInfo.IsMultiKey {
|
||||||
// 存在旧的渠道,如果是多key且轮询,保留轮询索引信息
|
channel.Keys = channel.getKeys()
|
||||||
if oldChannel.ChannelInfo.IsMultiKey && oldChannel.ChannelInfo.MultiKeyMode == constant.MultiKeyModePolling {
|
if channel.ChannelInfo.MultiKeyMode == constant.MultiKeyModePolling {
|
||||||
channel.ChannelInfo.MultiKeyPollingIndex = oldChannel.ChannelInfo.MultiKeyPollingIndex
|
if oldChannel, ok := channelsIDM[i]; ok {
|
||||||
|
// 存在旧的渠道,如果是多key且轮询,保留轮询索引信息
|
||||||
|
if oldChannel.ChannelInfo.IsMultiKey && oldChannel.ChannelInfo.MultiKeyMode == constant.MultiKeyModePolling {
|
||||||
|
channel.ChannelInfo.MultiKeyPollingIndex = oldChannel.ChannelInfo.MultiKeyPollingIndex
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user