feat: add support for multi-key channels in RelayInfo and access token caching

This commit is contained in:
CaIon
2025-08-02 22:12:15 +08:00
parent e6c87907d5
commit c056a7ad7c
2 changed files with 22 additions and 12 deletions

View File

@@ -36,7 +36,12 @@ var Cache = asynccache.NewAsyncCache(asynccache.Options{
}) })
func getAccessToken(a *Adaptor, info *relaycommon.RelayInfo) (string, error) { func getAccessToken(a *Adaptor, info *relaycommon.RelayInfo) (string, error) {
cacheKey := fmt.Sprintf("access-token-%d", info.ChannelId) var cacheKey string
if info.ChannelIsMultiKey {
cacheKey = fmt.Sprintf("access-token-%d-%d", info.ChannelId, info.ChannelMultiKeyIndex)
} else {
cacheKey = fmt.Sprintf("access-token-%d", info.ChannelId)
}
val, err := Cache.Get(cacheKey) val, err := Cache.Get(cacheKey)
if err == nil { if err == nil {
return val.(string), nil return val.(string), nil

View File

@@ -60,17 +60,19 @@ type ResponsesUsageInfo struct {
} }
type RelayInfo struct { type RelayInfo struct {
ChannelType int ChannelType int
ChannelId int ChannelId int
TokenId int ChannelIsMultiKey bool // 是否多密钥
TokenKey string ChannelMultiKeyIndex int // 多密钥索引
UserId int TokenId int
UsingGroup string // 使用的分组 TokenKey string
UserGroup string // 用户所在分组 UserId int
TokenUnlimited bool UsingGroup string // 使用的分组
StartTime time.Time UserGroup string // 用户所在分组
FirstResponseTime time.Time TokenUnlimited bool
isFirstResponse bool StartTime time.Time
FirstResponseTime time.Time
isFirstResponse bool
//SendLastReasoningResponse bool //SendLastReasoningResponse bool
ApiType int ApiType int
IsStream bool IsStream bool
@@ -260,6 +262,9 @@ func GenRelayInfo(c *gin.Context) *RelayInfo {
IsFirstThinkingContent: true, IsFirstThinkingContent: true,
SendLastThinkingContent: false, SendLastThinkingContent: false,
}, },
ChannelIsMultiKey: common.GetContextKeyBool(c, constant.ContextKeyChannelIsMultiKey),
ChannelMultiKeyIndex: common.GetContextKeyInt(c, constant.ContextKeyChannelMultiKeyIndex),
} }
if strings.HasPrefix(c.Request.URL.Path, "/pg") { if strings.HasPrefix(c.Request.URL.Path, "/pg") {
info.IsPlayground = true info.IsPlayground = true