feat: add support for multi-key channels in RelayInfo and access token caching
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user