Some checks are pending
Publish Docker image (English) / Push Docker image to multiple registries (push) Waiting to run
Publish Docker image / Push Docker image to multiple registries (push) Waiting to run
Linux Release / release (push) Waiting to run
macOS Release / release (push) Waiting to run
Windows Release / release (push) Waiting to run
Add the Proxy channel type and relay mode to support proxying requests to custom upstream services.
60 lines
1.7 KiB
Go
60 lines
1.7 KiB
Go
package meta
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/songquanpeng/one-api/common/ctxkey"
|
|
"github.com/songquanpeng/one-api/model"
|
|
"github.com/songquanpeng/one-api/relay/channeltype"
|
|
"github.com/songquanpeng/one-api/relay/relaymode"
|
|
"strings"
|
|
)
|
|
|
|
type Meta struct {
|
|
Mode int
|
|
ChannelType int
|
|
ChannelId int
|
|
TokenId int
|
|
TokenName string
|
|
UserId int
|
|
Group string
|
|
ModelMapping map[string]string
|
|
// BaseURL is the proxy url set in the channel config
|
|
BaseURL string
|
|
APIKey string
|
|
APIType int
|
|
Config model.ChannelConfig
|
|
IsStream bool
|
|
// OriginModelName is the model name from the raw user request
|
|
OriginModelName string
|
|
// ActualModelName is the model name after mapping
|
|
ActualModelName string
|
|
RequestURLPath string
|
|
PromptTokens int // only for DoResponse
|
|
}
|
|
|
|
func GetByContext(c *gin.Context) *Meta {
|
|
meta := Meta{
|
|
Mode: relaymode.GetByPath(c.Request.URL.Path),
|
|
ChannelType: c.GetInt(ctxkey.Channel),
|
|
ChannelId: c.GetInt(ctxkey.ChannelId),
|
|
TokenId: c.GetInt(ctxkey.TokenId),
|
|
TokenName: c.GetString(ctxkey.TokenName),
|
|
UserId: c.GetInt(ctxkey.Id),
|
|
Group: c.GetString(ctxkey.Group),
|
|
ModelMapping: c.GetStringMapString(ctxkey.ModelMapping),
|
|
OriginModelName: c.GetString(ctxkey.RequestModel),
|
|
BaseURL: c.GetString(ctxkey.BaseURL),
|
|
APIKey: strings.TrimPrefix(c.Request.Header.Get("Authorization"), "Bearer "),
|
|
RequestURLPath: c.Request.URL.String(),
|
|
}
|
|
cfg, ok := c.Get(ctxkey.Config)
|
|
if ok {
|
|
meta.Config = cfg.(model.ChannelConfig)
|
|
}
|
|
if meta.BaseURL == "" {
|
|
meta.BaseURL = channeltype.ChannelBaseURLs[meta.ChannelType]
|
|
}
|
|
meta.APIType = channeltype.ToAPIType(meta.ChannelType)
|
|
return &meta
|
|
}
|