mirror of
				https://github.com/songquanpeng/one-api.git
				synced 2025-11-04 07:43:41 +08:00 
			
		
		
		
	@@ -108,7 +108,7 @@ func TokenAuth() func(c *gin.Context) {
 | 
			
		||||
		c.Set("token_name", token.Name)
 | 
			
		||||
		if len(parts) > 1 {
 | 
			
		||||
			if model.IsAdmin(token.UserId) {
 | 
			
		||||
				c.Set("channelId", parts[1])
 | 
			
		||||
				c.Set("specific_channel_id", parts[1])
 | 
			
		||||
			} else {
 | 
			
		||||
				abortWithMessage(c, http.StatusForbidden, "普通用户不支持指定渠道")
 | 
			
		||||
				return
 | 
			
		||||
 
 | 
			
		||||
@@ -21,8 +21,9 @@ func Distribute() func(c *gin.Context) {
 | 
			
		||||
		userId := c.GetInt("id")
 | 
			
		||||
		userGroup, _ := model.CacheGetUserGroup(userId)
 | 
			
		||||
		c.Set("group", userGroup)
 | 
			
		||||
		var requestModel string
 | 
			
		||||
		var channel *model.Channel
 | 
			
		||||
		channelId, ok := c.Get("channelId")
 | 
			
		||||
		channelId, ok := c.Get("specific_channel_id")
 | 
			
		||||
		if ok {
 | 
			
		||||
			id, err := strconv.Atoi(channelId.(string))
 | 
			
		||||
			if err != nil {
 | 
			
		||||
@@ -66,6 +67,7 @@ func Distribute() func(c *gin.Context) {
 | 
			
		||||
					modelRequest.Model = "whisper-1"
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			requestModel = modelRequest.Model
 | 
			
		||||
			channel, err = model.CacheGetRandomSatisfiedChannel(userGroup, modelRequest.Model)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				message := fmt.Sprintf("当前分组 %s 下对于模型 %s 无可用渠道", userGroup, modelRequest.Model)
 | 
			
		||||
@@ -77,29 +79,34 @@ func Distribute() func(c *gin.Context) {
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		c.Set("channel", channel.Type)
 | 
			
		||||
		c.Set("channel_id", channel.Id)
 | 
			
		||||
		c.Set("channel_name", channel.Name)
 | 
			
		||||
		c.Set("model_mapping", channel.GetModelMapping())
 | 
			
		||||
		c.Request.Header.Set("Authorization", fmt.Sprintf("Bearer %s", channel.Key))
 | 
			
		||||
		c.Set("base_url", channel.GetBaseURL())
 | 
			
		||||
		// this is for backward compatibility
 | 
			
		||||
		switch channel.Type {
 | 
			
		||||
		case common.ChannelTypeAzure:
 | 
			
		||||
			c.Set(common.ConfigKeyAPIVersion, channel.Other)
 | 
			
		||||
		case common.ChannelTypeXunfei:
 | 
			
		||||
			c.Set(common.ConfigKeyAPIVersion, channel.Other)
 | 
			
		||||
		case common.ChannelTypeGemini:
 | 
			
		||||
			c.Set(common.ConfigKeyAPIVersion, channel.Other)
 | 
			
		||||
		case common.ChannelTypeAIProxyLibrary:
 | 
			
		||||
			c.Set(common.ConfigKeyLibraryID, channel.Other)
 | 
			
		||||
		case common.ChannelTypeAli:
 | 
			
		||||
			c.Set(common.ConfigKeyPlugin, channel.Other)
 | 
			
		||||
		}
 | 
			
		||||
		cfg, _ := channel.LoadConfig()
 | 
			
		||||
		for k, v := range cfg {
 | 
			
		||||
			c.Set(common.ConfigKeyPrefix+k, v)
 | 
			
		||||
		}
 | 
			
		||||
		SetupContextForSelectedChannel(c, channel, requestModel)
 | 
			
		||||
		c.Next()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SetupContextForSelectedChannel(c *gin.Context, channel *model.Channel, modelName string) {
 | 
			
		||||
	c.Set("channel", channel.Type)
 | 
			
		||||
	c.Set("channel_id", channel.Id)
 | 
			
		||||
	c.Set("channel_name", channel.Name)
 | 
			
		||||
	c.Set("model_mapping", channel.GetModelMapping())
 | 
			
		||||
	c.Set("original_model", modelName) // for retry
 | 
			
		||||
	c.Request.Header.Set("Authorization", fmt.Sprintf("Bearer %s", channel.Key))
 | 
			
		||||
	c.Set("base_url", channel.GetBaseURL())
 | 
			
		||||
	// this is for backward compatibility
 | 
			
		||||
	switch channel.Type {
 | 
			
		||||
	case common.ChannelTypeAzure:
 | 
			
		||||
		c.Set(common.ConfigKeyAPIVersion, channel.Other)
 | 
			
		||||
	case common.ChannelTypeXunfei:
 | 
			
		||||
		c.Set(common.ConfigKeyAPIVersion, channel.Other)
 | 
			
		||||
	case common.ChannelTypeGemini:
 | 
			
		||||
		c.Set(common.ConfigKeyAPIVersion, channel.Other)
 | 
			
		||||
	case common.ChannelTypeAIProxyLibrary:
 | 
			
		||||
		c.Set(common.ConfigKeyLibraryID, channel.Other)
 | 
			
		||||
	case common.ChannelTypeAli:
 | 
			
		||||
		c.Set(common.ConfigKeyPlugin, channel.Other)
 | 
			
		||||
	}
 | 
			
		||||
	cfg, _ := channel.LoadConfig()
 | 
			
		||||
	for k, v := range cfg {
 | 
			
		||||
		c.Set(common.ConfigKeyPrefix+k, v)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ import (
 | 
			
		||||
 | 
			
		||||
func RequestId() func(c *gin.Context) {
 | 
			
		||||
	return func(c *gin.Context) {
 | 
			
		||||
		id := helper.GetTimeString() + helper.GetRandomString(8)
 | 
			
		||||
		id := helper.GetTimeString() + helper.GetRandomNumberString(8)
 | 
			
		||||
		c.Set(logger.RequestIdKey, id)
 | 
			
		||||
		ctx := context.WithValue(c.Request.Context(), logger.RequestIdKey, id)
 | 
			
		||||
		c.Request = c.Request.WithContext(ctx)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user