model

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 12, 2025 License: MIT Imports: 37 Imported by: 0

Documentation

Index

Constants

View Source
const (
	SyncFrequency    = time.Minute * 3
	TokenCacheKey    = "token:%s"
	GroupCacheKey    = "group:%s"
	GroupModelTPMKey = "group:%s:model_tpm"
)
View Source
const (
	ChannelStatusUnknown = 0
	ChannelStatusEnabled = 1
)
View Source
const (
	GroupStatusEnabled  = 1
	GroupStatusDisabled = 2
	GroupStatusInternal = 3
)
View Source
const (
	TokenStatusEnabled  = 1
	TokenStatusDisabled = 2
)
View Source
const (
	DefaultPriority = 10
)
View Source
const (
	ErrChannelNotFound = "channel"
)
View Source
const (
	ErrGroupNotFound = "group"
)
View Source
const ErrModelConfigNotFound = "model config"
View Source
const (
	ErrTokenNotFound = "token"
)
View Source
const (
	// /1K tokens
	PriceUnit = 1000
)

Variables

View Source
var (
	DB    *gorm.DB
	LogDB *gorm.DB
)
View Source
var ErrUnknownOptionKey = errors.New("unknown option key")

Functions

func BatchInsertChannels

func BatchInsertChannels(channels []*Channel) (err error)

func BatchRecordConsume

func BatchRecordConsume(
	requestID string,
	requestAt time.Time,
	group string,
	code int,
	channelID int,
	promptTokens int,
	completionTokens int,
	modelName string,
	tokenID int,
	tokenName string,
	amount float64,
	price float64,
	completionPrice float64,
	endpoint string,
	content string,
	mode int,
	ip string,
	retryTimes int,
	requestDetail *RequestDetail,
	downstreamResult bool,
) error

func CacheDeleteGroup

func CacheDeleteGroup(id string) error

func CacheDeleteToken

func CacheDeleteToken(key string) error

func CacheGetGroupModelTPM

func CacheGetGroupModelTPM(id string, model string) (int64, error)

func CacheSetGroup

func CacheSetGroup(group *GroupCache) error

func CacheSetToken

func CacheSetToken(token *TokenCache) error

func CacheUpdateGroupRPM

func CacheUpdateGroupRPM(id string, rpm map[string]int64) error

func CacheUpdateGroupRPMRatio

func CacheUpdateGroupRPMRatio(id string, rpmRatio float64) error

func CacheUpdateGroupStatus

func CacheUpdateGroupStatus(id string, status int) error

func CacheUpdateGroupTPM

func CacheUpdateGroupTPM(id string, tpm map[string]int64) error

func CacheUpdateGroupTPMRatio

func CacheUpdateGroupTPMRatio(id string, tpmRatio float64) error

func CacheUpdateGroupUsedAmountOnlyIncrease

func CacheUpdateGroupUsedAmountOnlyIncrease(id string, amount float64) error

func CacheUpdateTokenName

func CacheUpdateTokenName(key string, name string) error

func CacheUpdateTokenStatus

func CacheUpdateTokenStatus(key string, status int) error

func CacheUpdateTokenUsedAmountOnlyIncrease

func CacheUpdateTokenUsedAmountOnlyIncrease(key string, amount float64) error

func CheckModelConfigExist

func CheckModelConfigExist(models []string) error

func CleanLog

func CleanLog(batchSize int) error

func ClearLastTestErrorAt

func ClearLastTestErrorAt(id int) error

func CloseDB

func CloseDB() error

func CreateConsumeError

func CreateConsumeError(requestID string, requestAt time.Time, group string, tokenName string, model string, content string, usedAmount float64, tokenID int) error

func CreateGroup

func CreateGroup(group *Group) error

func CreateLogIndexes

func CreateLogIndexes(db *gorm.DB) error

func DeleteChannelByID

func DeleteChannelByID(id int) (err error)

func DeleteChannelsByIDs

func DeleteChannelsByIDs(ids []int) (err error)

func DeleteGroupByID

func DeleteGroupByID(id string) (err error)

func DeleteGroupLogs

func DeleteGroupLogs(groupID string) (int64, error)

func DeleteGroupTokenByID

func DeleteGroupTokenByID(groupID string, id int) (err error)

func DeleteGroupTokensByIDs

func DeleteGroupTokensByIDs(group string, ids []int) (err error)

func DeleteGroupsByIDs

func DeleteGroupsByIDs(ids []string) (err error)

func DeleteModelConfig

func DeleteModelConfig(model string) error

func DeleteModelConfigsByModels

func DeleteModelConfigsByModels(models []string) error

func DeleteOldLog

func DeleteOldLog(timestamp time.Time) (int64, error)

func DeleteTokenByID

func DeleteTokenByID(id int) (err error)

func DeleteTokensByIDs

func DeleteTokensByIDs(ids []int) (err error)

func GetGroupLastRequestTime

func GetGroupLastRequestTime(group string) (time.Time, error)

func GetGroupModelTPM

func GetGroupModelTPM(group string, model string) (int64, error)

func GetModelConfigBool

func GetModelConfigBool(config map[ModelConfigKey]any, key ModelConfigKey) (bool, bool)

func GetModelConfigFloat

func GetModelConfigFloat(config map[ModelConfigKey]any, key ModelConfigKey) (float64, bool)

func GetModelConfigInt

func GetModelConfigInt(config map[ModelConfigKey]any, key ModelConfigKey) (int, bool)

func GetModelConfigStringSlice

func GetModelConfigStringSlice(config map[ModelConfigKey]any, key ModelConfigKey) ([]string, bool)

func GetModelConfigUint

func GetModelConfigUint(config map[ModelConfigKey]any, key ModelConfigKey) (uint64, bool)

func GetModelConfigWithModels

func GetModelConfigWithModels(models []string) ([]string, []string, error)

func GetTokenLastRequestTime

func GetTokenLastRequestTime(id int) (time.Time, error)

func GetUsedModels

func GetUsedModels(group string, start, end time.Time) ([]string, error)

func GetUsedTokenNames

func GetUsedTokenNames(group string, start, end time.Time) ([]string, error)

func HandleNotFound

func HandleNotFound(err error, errMsg ...string) error

func HandleUpdateResult

func HandleUpdateResult(result *gorm.DB, entityName string) error

Helper function to handle update results

func IgnoreNotFound

func IgnoreNotFound(err error) error

func InitDB

func InitDB()

func InitLogDB

func InitLogDB()

func InitModelConfigAndChannelCache

func InitModelConfigAndChannelCache() error

InitModelConfigAndChannelCache initializes the channel cache from database

func InitOption2DB

func InitOption2DB() error

func InsertToken

func InsertToken(token *Token, autoCreateGroup bool) error

func NewModelConfig

func NewModelConfig(opts ...ModelConfigOption) map[ModelConfigKey]any

func NotFoundError

func NotFoundError(errMsg ...string) error

func OnConflictDoNothing

func OnConflictDoNothing() *gorm.DB

func OpenMySQL

func OpenMySQL(dsn string) (*gorm.DB, error)

func OpenPostgreSQL

func OpenPostgreSQL(dsn string) (*gorm.DB, error)

func OpenSQLite

func OpenSQLite(sqlitePath string) (*gorm.DB, error)

func ProcessBatchUpdates

func ProcessBatchUpdates()

func RecordConsumeLog

func RecordConsumeLog(
	requestID string,
	requestAt time.Time,
	group string,
	code int,
	channelID int,
	promptTokens int,
	completionTokens int,
	modelName string,
	tokenID int,
	tokenName string,
	amount float64,
	price float64,
	completionPrice float64,
	endpoint string,
	content string,
	mode int,
	ip string,
	retryTimes int,
	requestDetail *RequestDetail,
	downstreamResult bool,
) error

func SaveModelConfig

func SaveModelConfig(config *ModelConfig) (err error)

func SaveModelConfigs

func SaveModelConfigs(configs []*ModelConfig) (err error)

func SortModelConfigsFunc

func SortModelConfigsFunc(i, j *ModelConfig) int

func StartBatchProcessor

func StartBatchProcessor(ctx context.Context, wg *sync.WaitGroup)

func String2Int

func String2Int(keyword string) int

func SyncModelConfigAndChannelCache

func SyncModelConfigAndChannelCache(ctx context.Context, wg *sync.WaitGroup, frequency time.Duration)

func SyncOptions

func SyncOptions(ctx context.Context, wg *sync.WaitGroup, frequency time.Duration)

func UpdateChannel

func UpdateChannel(channel *Channel) (err error)

func UpdateChannelStatusByID

func UpdateChannelStatusByID(id int, status int) error

func UpdateChannelUsedAmount

func UpdateChannelUsedAmount(id int, amount float64, requestCount int) error

func UpdateGroup

func UpdateGroup(id string, group *Group) (err error)

func UpdateGroupRPM

func UpdateGroupRPM(id string, rpm map[string]int64) (err error)

func UpdateGroupRPMRatio

func UpdateGroupRPMRatio(id string, rpmRatio float64) (err error)

func UpdateGroupStatus

func UpdateGroupStatus(id string, status int) (err error)

func UpdateGroupTPM

func UpdateGroupTPM(id string, tpm map[string]int64) (err error)

func UpdateGroupTPMRatio

func UpdateGroupTPMRatio(id string, tpmRatio float64) (err error)

func UpdateGroupToken

func UpdateGroupToken(id int, group string, token *Token) (err error)

func UpdateGroupTokenName

func UpdateGroupTokenName(group string, id int, name string) (err error)

func UpdateGroupTokenStatus

func UpdateGroupTokenStatus(group string, id int, status int) (err error)

func UpdateGroupUsedAmountAndRequestCount

func UpdateGroupUsedAmountAndRequestCount(id string, amount float64, count int) (err error)

func UpdateOption

func UpdateOption(key string, value string) error

func UpdateOptions

func UpdateOptions(options map[string]string) error

func UpdateToken

func UpdateToken(id int, token *Token) (err error)

func UpdateTokenName

func UpdateTokenName(id int, name string) (err error)

func UpdateTokenStatus

func UpdateTokenStatus(id int, status int) (err error)

func UpdateTokenUsedAmount

func UpdateTokenUsedAmount(id int, amount float64, requestCount int) (err error)

Types

type BatchUpdateData

type BatchUpdateData struct {
	Groups   map[string]*GroupUpdate
	Tokens   map[int]*TokenUpdate
	Channels map[int]*ChannelUpdate
	sync.Mutex
}

type Channel

type Channel struct {
	CreatedAt               time.Time         `gorm:"index"                              json:"created_at"`
	LastTestErrorAt         time.Time         `json:"last_test_error_at"`
	ChannelTests            []*ChannelTest    `gorm:"foreignKey:ChannelID;references:ID" json:"channel_tests,omitempty"`
	BalanceUpdatedAt        time.Time         `json:"balance_updated_at"`
	ModelMapping            map[string]string `gorm:"serializer:fastjson;type:text"      json:"model_mapping"`
	Key                     string            `gorm:"type:text;index"                    json:"key"`
	Name                    string            `gorm:"index"                              json:"name"`
	BaseURL                 string            `gorm:"index"                              json:"base_url"`
	Models                  []string          `gorm:"serializer:fastjson;type:text"      json:"models"`
	Balance                 float64           `json:"balance"`
	ID                      int               `gorm:"primaryKey"                         json:"id"`
	UsedAmount              float64           `gorm:"index"                              json:"used_amount"`
	RequestCount            int               `gorm:"index"                              json:"request_count"`
	Status                  int               `gorm:"default:1;index"                    json:"status"`
	Type                    int               `gorm:"default:0;index"                    json:"type"`
	Priority                int32             `json:"priority"`
	EnabledAutoBalanceCheck bool              `json:"enabled_auto_balance_check"`
	BalanceThreshold        float64           `json:"balance_threshold"`
	Config                  *ChannelConfig    `gorm:"serializer:fastjson;type:text"      json:"config,omitempty"`
}

func GetAllChannels

func GetAllChannels() (channels []*Channel, err error)

func GetChannelByID

func GetChannelByID(id int) (*Channel, error)

func GetChannels

func GetChannels(page int, perPage int, id int, name string, key string, channelType int, baseURL string, order string) (channels []*Channel, total int64, err error)

func LoadChannelByID

func LoadChannelByID(id int) (*Channel, error)

func LoadChannels

func LoadChannels() ([]*Channel, error)

func LoadEnabledChannels

func LoadEnabledChannels() ([]*Channel, error)

func SearchChannels

func SearchChannels(keyword string, page int, perPage int, id int, name string, key string, channelType int, baseURL string, order string) (channels []*Channel, total int64, err error)

func (*Channel) BeforeDelete

func (c *Channel) BeforeDelete(tx *gorm.DB) (err error)

func (*Channel) GetBalanceThreshold

func (c *Channel) GetBalanceThreshold() float64

func (*Channel) GetPriority

func (c *Channel) GetPriority() int32

func (*Channel) MarshalJSON

func (c *Channel) MarshalJSON() ([]byte, error)

func (*Channel) UpdateBalance

func (c *Channel) UpdateBalance(balance float64) error

func (*Channel) UpdateModelTest

func (c *Channel) UpdateModelTest(testAt time.Time, model, actualModel string, mode relaymode.Mode, took float64, success bool, response string, code int) (*ChannelTest, error)

type ChannelConfig

type ChannelConfig struct {
	SplitThink bool `json:"split_think"`
}

type ChannelTest

type ChannelTest struct {
	TestAt      time.Time `json:"test_at"`
	Model       string    `gorm:"primaryKey"   json:"model"`
	ActualModel string    `json:"actual_model"`
	Response    string    `gorm:"type:text"    json:"response"`
	ChannelName string    `json:"channel_name"`
	ChannelType int       `json:"channel_type"`
	ChannelID   int       `gorm:"primaryKey"   json:"channel_id"`
	Took        float64   `json:"took"`
	Success     bool      `json:"success"`
	Mode        int       `json:"mode"`
	Code        int       `json:"code"`
}

func (*ChannelTest) MarshalJSON

func (ct *ChannelTest) MarshalJSON() ([]byte, error)

type ChannelUpdate

type ChannelUpdate struct {
	Amount float64
	Count  int
}

type ChartData

type ChartData struct {
	Timestamp      int64   `json:"timestamp"`
	RequestCount   int64   `json:"request_count"`
	UsedAmount     float64 `json:"used_amount"`
	ExceptionCount int64   `json:"exception_count"`
}

type CodeType

type CodeType string
const (
	CodeTypeAll     CodeType = "all"
	CodeTypeSuccess CodeType = "success"
	CodeTypeError   CodeType = "error"
)

type ConsumeError

type ConsumeError struct {
	RequestAt  time.Time       `gorm:"index;index:idx_consume_error_group_reqat,priority:2" json:"request_at"`
	CreatedAt  time.Time       `json:"created_at"`
	GroupID    string          `gorm:"index;index:idx_consume_error_group_reqat,priority:1" json:"group_id"`
	RequestID  string          `gorm:"index"                                                json:"request_id"`
	TokenName  EmptyNullString `gorm:"not null"                                             json:"token_name"`
	Model      string          `json:"model"`
	Content    string          `gorm:"type:text"                                            json:"content"`
	ID         int             `gorm:"primaryKey"                                           json:"id"`
	UsedAmount float64         `json:"used_amount"`
	TokenID    int             `json:"token_id"`
}

func SearchConsumeError

func SearchConsumeError(keyword string, requestID string, group string, tokenName string, model string, content string, usedAmount float64, tokenID int, page int, perPage int, order string) ([]*ConsumeError, int64, error)

func (*ConsumeError) MarshalJSON

func (c *ConsumeError) MarshalJSON() ([]byte, error)

type DashboardResponse

type DashboardResponse struct {
	ChartData      []*ChartData `json:"chart_data"`
	TotalCount     int64        `json:"total_count"`
	ExceptionCount int64        `json:"exception_count"`
	UsedAmount     float64      `json:"used_amount"`
	RPM            int64        `json:"rpm"`
	TPM            int64        `json:"tpm"`
}

func GetDashboardData

func GetDashboardData(start, end time.Time, modelName string, timeSpan TimeSpanType) (*DashboardResponse, error)

type EmptyNullString

type EmptyNullString string

func (*EmptyNullString) Scan

func (ns *EmptyNullString) Scan(value any) error

Scan implements the [Scanner] interface.

func (EmptyNullString) String

func (ns EmptyNullString) String() string

func (EmptyNullString) Value

func (ns EmptyNullString) Value() (driver.Value, error)

Value implements the driver.Valuer interface.

type GetGroupLogsResult

type GetGroupLogsResult struct {
	GetLogsResult
	Models     []string `json:"models"`
	TokenNames []string `json:"token_names"`
}

func GetGroupLogs

func GetGroupLogs(
	group string,
	startTimestamp time.Time,
	endTimestamp time.Time,
	modelName string,
	requestID string,
	tokenID int,
	tokenName string,
	channelID int,
	endpoint string,
	order string,
	mode int,
	codeType CodeType,
	withBody bool,
	ip string,
	page int,
	perPage int,
) (*GetGroupLogsResult, error)

func SearchGroupLogs

func SearchGroupLogs(
	group string,
	keyword string,
	endpoint string,
	requestID string,
	tokenID int,
	tokenName string,
	modelName string,
	startTimestamp time.Time,
	endTimestamp time.Time,
	channelID int,
	order string,
	mode int,
	codeType CodeType,
	withBody bool,
	ip string,
	page int,
	perPage int,
) (*GetGroupLogsResult, error)

type GetLogsResult

type GetLogsResult struct {
	Logs  []*Log `json:"logs"`
	Total int64  `json:"total"`
}

func GetLogs

func GetLogs(
	group string,
	startTimestamp time.Time,
	endTimestamp time.Time,
	modelName string,
	requestID string,
	tokenID int,
	tokenName string,
	channelID int,
	endpoint string,
	order string,
	mode int,
	codeType CodeType,
	withBody bool,
	ip string,
	page int,
	perPage int,
) (*GetLogsResult, error)

func SearchLogs

func SearchLogs(
	group string,
	keyword string,
	endpoint string,
	requestID string,
	tokenID int,
	tokenName string,
	modelName string,
	startTimestamp time.Time,
	endTimestamp time.Time,
	channelID int,
	order string,
	mode int,
	codeType CodeType,
	withBody bool,
	ip string,
	page int,
	perPage int,
) (*GetLogsResult, error)

type Group

type Group struct {
	CreatedAt    time.Time        `json:"created_at"`
	ID           string           `gorm:"primaryKey"                    json:"id"`
	Tokens       []*Token         `gorm:"foreignKey:GroupID"            json:"-"`
	Status       int              `gorm:"default:1;index"               json:"status"`
	UsedAmount   float64          `gorm:"index"                         json:"used_amount"`
	RPMRatio     float64          `gorm:"index"                         json:"rpm_ratio"`
	RPM          map[string]int64 `gorm:"serializer:fastjson;type:text" json:"rpm"`
	TPMRatio     float64          `gorm:"index"                         json:"tpm_ratio"`
	TPM          map[string]int64 `gorm:"serializer:fastjson;type:text" json:"tpm"`
	RequestCount int              `gorm:"index"                         json:"request_count"`
}

func GetGroupByID

func GetGroupByID(id string) (*Group, error)

func GetGroups

func GetGroups(page int, perPage int, order string, onlyDisabled bool) (groups []*Group, total int64, err error)

func SearchGroup

func SearchGroup(keyword string, page int, perPage int, order string, status int) (groups []*Group, total int64, err error)

func (*Group) BeforeDelete

func (g *Group) BeforeDelete(tx *gorm.DB) (err error)

func (*Group) ToGroupCache

func (g *Group) ToGroupCache() *GroupCache

type GroupCache

type GroupCache struct {
	ID         string              `json:"-"           redis:"-"`
	Status     int                 `json:"status"      redis:"st"`
	UsedAmount float64             `json:"used_amount" redis:"ua"`
	RPMRatio   float64             `json:"rpm_ratio"   redis:"rpm_r"`
	RPM        redisMapStringInt64 `json:"rpm"         redis:"rpm"`
	TPMRatio   float64             `json:"tpm_ratio"   redis:"tpm_r"`
	TPM        redisMapStringInt64 `json:"tpm"         redis:"tpm"`
}

func CacheGetGroup

func CacheGetGroup(id string) (*GroupCache, error)

type GroupDashboardResponse

type GroupDashboardResponse struct {
	DashboardResponse
	Models     []string `json:"models"`
	TokenNames []string `json:"token_names"`
}

func GetGroupDashboardData

func GetGroupDashboardData(group string, start, end time.Time, tokenName string, modelName string, timeSpan TimeSpanType) (*GroupDashboardResponse, error)

type GroupUpdate

type GroupUpdate struct {
	Amount float64
	Count  int
}

type Log

type Log struct {
	RequestDetail        *RequestDetail `gorm:"foreignKey:LogID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"request_detail,omitempty"`
	RequestAt            time.Time      `gorm:"index"                                                          json:"request_at"`
	TimestampTruncByDay  int64          `json:"timestamp_trunc_by_day"`
	TimestampTruncByHour int64          `json:"timestamp_trunc_by_hour"`
	CreatedAt            time.Time      `gorm:"autoCreateTime;index"                                           json:"created_at"`
	TokenName            string         `json:"token_name,omitempty"`
	Endpoint             string         `json:"endpoint"`
	Content              string         `gorm:"type:text"                                                      json:"content,omitempty"`
	GroupID              string         `gorm:"index"                                                          json:"group,omitempty"`
	Model                string         `gorm:"index"                                                          json:"model"`
	RequestID            string         `gorm:"index"                                                          json:"request_id"`
	Price                float64        `json:"price,omitempty"`
	ID                   int            `gorm:"primaryKey"                                                     json:"id"`
	CompletionPrice      float64        `json:"completion_price,omitempty"`
	TokenID              int            `gorm:"index"                                                          json:"token_id,omitempty"`
	UsedAmount           float64        `json:"used_amount,omitempty"`
	PromptTokens         int            `json:"prompt_tokens,omitempty"`
	CompletionTokens     int            `json:"completion_tokens,omitempty"`
	TotalTokens          int            `json:"total_tokens,omitempty"`
	ChannelID            int            `gorm:"index"                                                          json:"channel,omitempty"`
	Code                 int            `gorm:"index"                                                          json:"code,omitempty"`
	Mode                 int            `json:"mode,omitempty"`
	IP                   string         `gorm:"index"                                                          json:"ip,omitempty"`
	RetryTimes           int            `json:"retry_times,omitempty"`
	DownstreamResult     bool           `json:"downstream_result,omitempty"`
}

func (*Log) BeforeSave

func (l *Log) BeforeSave(_ *gorm.DB) (err error)

func (*Log) MarshalJSON

func (l *Log) MarshalJSON() ([]byte, error)

type ModelCaches

type ModelCaches struct {
	ModelConfig                     ModelConfigCache
	EnabledModel2channels           map[string][]*Channel
	EnabledModels                   []string
	EnabledModelsMap                map[string]struct{}
	EnabledModelConfigs             []*ModelConfig
	EnabledModelConfigsMap          map[string]*ModelConfig
	EnabledChannelType2ModelConfigs map[int][]*ModelConfig
	EnabledChannelID2channel        map[int]*Channel
}

read-only cache

func LoadModelCaches

func LoadModelCaches() *ModelCaches

type ModelConfig

type ModelConfig struct {
	CreatedAt         time.Time              `gorm:"index;autoCreateTime"          json:"created_at"`
	UpdatedAt         time.Time              `gorm:"index;autoUpdateTime"          json:"updated_at"`
	Config            map[ModelConfigKey]any `gorm:"serializer:fastjson;type:text" json:"config,omitempty"`
	ImagePrices       map[string]float64     `gorm:"serializer:fastjson;type:text" json:"image_prices,omitempty"`
	Model             string                 `gorm:"primaryKey"                    json:"model"`
	Owner             ModelOwner             `gorm:"type:varchar(255);index"       json:"owner"`
	ImageMaxBatchSize int                    `json:"image_batch_size,omitempty"`
	Type              relaymode.Mode         `json:"type"` // relaymode/define.go
	InputPrice        float64                `json:"input_price,omitempty"`
	OutputPrice       float64                `json:"output_price,omitempty"`
	RPM               int64                  `json:"rpm,omitempty"`
	TPM               int64                  `json:"tpm,omitempty"`
}

func GetAllModelConfigs

func GetAllModelConfigs() (configs []*ModelConfig, err error)

func GetModelConfig

func GetModelConfig(model string) (*ModelConfig, error)

func GetModelConfigs

func GetModelConfigs(page int, perPage int, model string) (configs []*ModelConfig, total int64, err error)

func GetModelConfigsByModels

func GetModelConfigsByModels(models []string) (configs []*ModelConfig, err error)

func NewDefaultModelConfig

func NewDefaultModelConfig(model string) *ModelConfig

func SearchModelConfigs

func SearchModelConfigs(keyword string, page int, perPage int, model string, owner ModelOwner) (configs []*ModelConfig, total int64, err error)

func (*ModelConfig) MarshalJSON

func (c *ModelConfig) MarshalJSON() ([]byte, error)

func (*ModelConfig) MaxContextTokens

func (c *ModelConfig) MaxContextTokens() (int, bool)

func (*ModelConfig) MaxInputTokens

func (c *ModelConfig) MaxInputTokens() (int, bool)

func (*ModelConfig) MaxOutputTokens

func (c *ModelConfig) MaxOutputTokens() (int, bool)

func (*ModelConfig) SupportFormats

func (c *ModelConfig) SupportFormats() ([]string, bool)

func (*ModelConfig) SupportToolChoice

func (c *ModelConfig) SupportToolChoice() (bool, bool)

func (*ModelConfig) SupportVision

func (c *ModelConfig) SupportVision() (bool, bool)

func (*ModelConfig) SupportVoices

func (c *ModelConfig) SupportVoices() ([]string, bool)

type ModelConfigCache

type ModelConfigCache interface {
	GetModelConfig(model string) (*ModelConfig, bool)
}

type ModelConfigKey

type ModelConfigKey string
const (
	ModelConfigMaxContextTokensKey ModelConfigKey = "max_context_tokens"
	ModelConfigMaxInputTokensKey   ModelConfigKey = "max_input_tokens"
	ModelConfigMaxOutputTokensKey  ModelConfigKey = "max_output_tokens"
	ModelConfigVisionKey           ModelConfigKey = "vision"
	ModelConfigToolChoiceKey       ModelConfigKey = "tool_choice"
	ModelConfigSupportFormatsKey   ModelConfigKey = "support_formats"
	ModelConfigSupportVoicesKey    ModelConfigKey = "support_voices"
)

type ModelConfigOption

type ModelConfigOption func(config map[ModelConfigKey]any)

func WithModelConfigMaxContextTokens

func WithModelConfigMaxContextTokens(maxContextTokens int) ModelConfigOption

func WithModelConfigMaxInputTokens

func WithModelConfigMaxInputTokens(maxInputTokens int) ModelConfigOption

func WithModelConfigMaxOutputTokens

func WithModelConfigMaxOutputTokens(maxOutputTokens int) ModelConfigOption

func WithModelConfigSupportFormats

func WithModelConfigSupportFormats(supportFormats []string) ModelConfigOption

func WithModelConfigSupportVoices

func WithModelConfigSupportVoices(supportVoices []string) ModelConfigOption

func WithModelConfigToolChoice

func WithModelConfigToolChoice(toolChoice bool) ModelConfigOption

func WithModelConfigVision

func WithModelConfigVision(vision bool) ModelConfigOption

type ModelCostRank

type ModelCostRank struct {
	Model      string  `json:"model"`
	UsedAmount float64 `json:"used_amount"`
	Total      int64   `json:"total"`
}

func GetModelCostRank

func GetModelCostRank(group string, start, end time.Time) ([]*ModelCostRank, error)

type ModelOwner

type ModelOwner string
const (
	ModelOwnerOpenAI      ModelOwner = "openai"
	ModelOwnerAlibaba     ModelOwner = "alibaba"
	ModelOwnerTencent     ModelOwner = "tencent"
	ModelOwnerXunfei      ModelOwner = "xunfei"
	ModelOwnerDeepSeek    ModelOwner = "deepseek"
	ModelOwnerMoonshot    ModelOwner = "moonshot"
	ModelOwnerMiniMax     ModelOwner = "minimax"
	ModelOwnerBaidu       ModelOwner = "baidu"
	ModelOwnerGoogle      ModelOwner = "google"
	ModelOwnerBAAI        ModelOwner = "baai"
	ModelOwnerFunAudioLLM ModelOwner = "funaudiollm"
	ModelOwnerDoubao      ModelOwner = "doubao"
	ModelOwnerFishAudio   ModelOwner = "fishaudio"
	ModelOwnerChatGLM     ModelOwner = "chatglm"
	ModelOwnerStabilityAI ModelOwner = "stabilityai"
	ModelOwnerNetease     ModelOwner = "netease"
	ModelOwnerAI360       ModelOwner = "ai360"
	ModelOwnerAnthropic   ModelOwner = "anthropic"
	ModelOwnerMeta        ModelOwner = "meta"
	ModelOwnerBaichuan    ModelOwner = "baichuan"
	ModelOwnerMistral     ModelOwner = "mistral"
	ModelOwnerOpenChat    ModelOwner = "openchat"
	ModelOwnerMicrosoft   ModelOwner = "microsoft"
	ModelOwnerDefog       ModelOwner = "defog"
	ModelOwnerNexusFlow   ModelOwner = "nexusflow"
	ModelOwnerCohere      ModelOwner = "cohere"
	ModelOwnerHuggingFace ModelOwner = "huggingface"
	ModelOwnerLingyiWanwu ModelOwner = "lingyiwanwu"
	ModelOwnerStepFun     ModelOwner = "stepfun"
	ModelOwnerXAI         ModelOwner = "xai"
	ModelOwnerDoc2x       ModelOwner = "doc2x"
)

type Option

type Option struct {
	Key   string `gorm:"primaryKey" json:"key"`
	Value string `json:"value"`
}

func GetAllOption

func GetAllOption() ([]*Option, error)

func GetOption

func GetOption(key string) (*Option, error)

type RequestDetail

type RequestDetail struct {
	CreatedAt             time.Time `gorm:"autoCreateTime;index"              json:"-"`
	RequestBody           string    `gorm:"type:text"                         json:"request_body,omitempty"`
	ResponseBody          string    `gorm:"type:text"                         json:"response_body,omitempty"`
	RequestBodyTruncated  bool      `json:"request_body_truncated,omitempty"`
	ResponseBodyTruncated bool      `json:"response_body_truncated,omitempty"`
	ID                    int       `gorm:"primaryKey"                        json:"id"`
	LogID                 int       `gorm:"index"                             json:"log_id"`
}

func GetGroupLogDetail

func GetGroupLogDetail(logID int, group string) (*RequestDetail, error)

func GetLogDetail

func GetLogDetail(logID int) (*RequestDetail, error)

func (*RequestDetail) BeforeSave

func (d *RequestDetail) BeforeSave(_ *gorm.DB) (err error)

type TimeSpanType

type TimeSpanType string
const (
	TimeSpanDay  TimeSpanType = "day"
	TimeSpanHour TimeSpanType = "hour"
)

type Token

type Token struct {
	CreatedAt    time.Time       `json:"created_at"`
	ExpiredAt    time.Time       `json:"expired_at"`
	Group        *Group          `gorm:"foreignKey:GroupID"                        json:"-"`
	Key          string          `gorm:"type:char(48);uniqueIndex"                 json:"key"`
	Name         EmptyNullString `gorm:"index;uniqueIndex:idx_group_name;not null" json:"name"`
	GroupID      string          `gorm:"index;uniqueIndex:idx_group_name"          json:"group"`
	Subnets      []string        `gorm:"serializer:fastjson;type:text"             json:"subnets"`
	Models       []string        `gorm:"serializer:fastjson;type:text"             json:"models"`
	Status       int             `gorm:"default:1;index"                           json:"status"`
	ID           int             `gorm:"primaryKey"                                json:"id"`
	Quota        float64         `json:"quota"`
	UsedAmount   float64         `gorm:"index"                                     json:"used_amount"`
	RequestCount int             `gorm:"index"                                     json:"request_count"`
}

func GetGroupTokenByID

func GetGroupTokenByID(group string, id int) (*Token, error)

func GetTokenByID

func GetTokenByID(id int) (*Token, error)

func GetTokenByKey

func GetTokenByKey(key string) (*Token, error)

func GetTokens

func GetTokens(group string, page int, perPage int, order string, status int) (tokens []*Token, total int64, err error)

func SearchTokens

func SearchTokens(group string, keyword string, page int, perPage int, order string, status int, name string, key string) (tokens []*Token, total int64, err error)

func (*Token) ToTokenCache

func (t *Token) ToTokenCache() *TokenCache

type TokenCache

type TokenCache struct {
	ExpiredAt  redisTime        `json:"expired_at"  redis:"e"`
	Group      string           `json:"group"       redis:"g"`
	Key        string           `json:"-"           redis:"-"`
	Name       string           `json:"name"        redis:"n"`
	Subnets    redisStringSlice `json:"subnets"     redis:"s"`
	Models     redisStringSlice `json:"models"      redis:"m"`
	ID         int              `json:"id"          redis:"i"`
	Status     int              `json:"status"      redis:"st"`
	Quota      float64          `json:"quota"       redis:"q"`
	UsedAmount float64          `json:"used_amount" redis:"u"`
}

func CacheGetTokenByKey

func CacheGetTokenByKey(key string) (*TokenCache, error)

func ValidateAndGetToken

func ValidateAndGetToken(key string) (token *TokenCache, err error)

type TokenUpdate

type TokenUpdate struct {
	Amount float64
	Count  int
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL