Documentation
¶
Index ¶
- Constants
- Variables
- func BatchInsertChannels(channels []*Channel) (err error)
- func BatchRecordConsume(requestID string, requestAt time.Time, retryAt time.Time, ...) error
- func CacheDeleteGroup(id string) error
- func CacheDeleteToken(key string) error
- func CacheGetGroupModelTPM(group string, model string) (int64, error)
- func CacheSetGroup(group *GroupCache) error
- func CacheSetToken(token *TokenCache) error
- func CacheUpdateGroupRPMRatio(id string, rpmRatio float64) error
- func CacheUpdateGroupStatus(id string, status int) error
- func CacheUpdateGroupTPMRatio(id string, tpmRatio float64) error
- func CacheUpdateGroupUsedAmountOnlyIncrease(id string, amount float64) error
- func CacheUpdateTokenName(key string, name string) error
- func CacheUpdateTokenStatus(key string, status int) error
- func CacheUpdateTokenUsedAmountOnlyIncrease(key string, amount float64) error
- func CheckModelConfigExist(models []string) error
- func CleanLog(batchSize int, optimize bool) error
- func ClearLastTestErrorAt(id int) error
- func CloseDB() error
- func CreateConsumeError(requestID string, requestAt time.Time, group string, tokenName string, ...) error
- func CreateGroup(group *Group) error
- func CreateGroupSummaryIndexs(db *gorm.DB) error
- func CreateLogIndexes(db *gorm.DB) error
- func CreateSummaryIndexs(db *gorm.DB) error
- func DeleteChannelByID(id int) (err error)
- func DeleteChannelsByIDs(ids []int) (err error)
- func DeleteGroupByID(id string) (err error)
- func DeleteGroupLogs(groupID string) (int64, error)
- func DeleteGroupModelConfig(groupID, model string) error
- func DeleteGroupModelConfigs(groupID string, models []string) error
- func DeleteGroupTokenByID(groupID string, id int) (err error)
- func DeleteGroupTokensByIDs(group string, ids []int) (err error)
- func DeleteGroupsByIDs(ids []string) (err error)
- func DeleteModelConfig(model string) error
- func DeleteModelConfigsByModels(models []string) error
- func DeleteOldLog(timestamp time.Time) (int64, error)
- func DeleteTokenByID(id int) (err error)
- func DeleteTokensByIDs(ids []int) (err error)
- func GetGroupLastRequestTime(group string) (time.Time, error)
- func GetGroupModelTPM(group string, model string) (int64, error)
- func GetGroupTokenLastRequestTime(group string, token string) (time.Time, error)
- func GetIPGroups(threshold int, start, end time.Time) (map[string][]string, error)
- func GetModelConfigBool(config map[ModelConfigKey]any, key ModelConfigKey) (bool, bool)
- func GetModelConfigFloat(config map[ModelConfigKey]any, key ModelConfigKey) (float64, bool)
- func GetModelConfigInt(config map[ModelConfigKey]any, key ModelConfigKey) (int, bool)
- func GetModelConfigStringSlice(config map[ModelConfigKey]any, key ModelConfigKey) ([]string, bool)
- func GetModelConfigUint(config map[ModelConfigKey]any, key ModelConfigKey) (uint64, bool)
- func GetModelConfigWithModels(models []string) ([]string, []string, error)
- func GetRPM(group string, end time.Time, tokenName, modelName string, channelID int) (int64, error)
- func GetTPM(group string, end time.Time, tokenName, modelName string, channelID int) (int64, error)
- func GetUsedChannels(group string, start, end time.Time) ([]int, error)
- func GetUsedChannelsFromLog(group string, start, end time.Time) ([]int, error)
- func GetUsedModels(group string, start, end time.Time) ([]string, error)
- func GetUsedModelsFromLog(group string, start, end time.Time) ([]string, error)
- func GetUsedTokenNames(group string, start, end time.Time) ([]string, error)
- func GetUsedTokenNamesFromLog(group string, start, end time.Time) ([]string, error)
- func HandleNotFound(err error, errMsg ...string) error
- func HandleUpdateResult(result *gorm.DB, entityName string) error
- func IgnoreNotFound(err error) error
- func InitDB()
- func InitLogDB()
- func InitModelConfigAndChannelCache() error
- func InitOption2DB() error
- func InsertToken(token *Token, autoCreateGroup bool) error
- func NewModelConfig(opts ...ModelConfigOption) map[ModelConfigKey]any
- func NotFoundError(errMsg ...string) error
- func OnConflictDoNothing() *gorm.DB
- func OpenMySQL(dsn string) (*gorm.DB, error)
- func OpenPostgreSQL(dsn string) (*gorm.DB, error)
- func OpenSQLite(sqlitePath string) (*gorm.DB, error)
- func ProcessBatchUpdatesSummary()
- func RecordConsumeLog(requestID string, requestAt time.Time, retryAt time.Time, ...) error
- func SaveGroupModelConfig(groupModelConfig GroupModelConfig) (err error)
- func SaveGroupModelConfigs(groupID string, groupModelConfigs []GroupModelConfig) (err error)
- func SaveModelConfig(config *ModelConfig) (err error)
- func SaveModelConfigs(configs []*ModelConfig) (err error)
- func SortModelConfigsFunc(i, j *ModelConfig) int
- func StartBatchProcessorSummary(ctx context.Context, wg *sync.WaitGroup)
- func String2Int(keyword string) int
- func SyncModelConfigAndChannelCache(ctx context.Context, wg *sync.WaitGroup, frequency time.Duration)
- func SyncOptions(ctx context.Context, wg *sync.WaitGroup, frequency time.Duration)
- func UpdateChannel(channel *Channel) (err error)
- func UpdateChannelStatusByID(id int, status int) error
- func UpdateChannelUsedAmount(id int, amount float64, requestCount int) error
- func UpdateGroup(id string, group *Group) (err error)
- func UpdateGroupModelConfig(groupModelConfig GroupModelConfig) (err error)
- func UpdateGroupModelConfigs(groupID string, groupModelConfigs []GroupModelConfig) (err error)
- func UpdateGroupRPMRatio(id string, rpmRatio float64) (err error)
- func UpdateGroupStatus(id string, status int) (err error)
- func UpdateGroupTPMRatio(id string, tpmRatio float64) (err error)
- func UpdateGroupToken(id int, group string, token *Token) (err error)
- func UpdateGroupTokenName(group string, id int, name string) (err error)
- func UpdateGroupTokenStatus(group string, id int, status int) (err error)
- func UpdateGroupUsedAmountAndRequestCount(id string, amount float64, count int) (err error)
- func UpdateGroupsStatus(ids []string, status int) (rowsAffected int64, err error)
- func UpdateOption(key string, value string) error
- func UpdateOptions(options map[string]string) error
- func UpdateToken(id int, token *Token) (err error)
- func UpdateTokenName(id int, name string) (err error)
- func UpdateTokenStatus(id int, status int) (err error)
- func UpdateTokenUsedAmount(id int, amount float64, requestCount int) (err error)
- func UpsertGroupSummary(unique GroupSummaryUnique, data SummaryData) error
- func UpsertSummary(unique SummaryUnique, data SummaryData) error
- type BatchUpdateData
- type Channel
- func GetAllChannels() (channels []*Channel, err error)
- func GetChannelByID(id int) (*Channel, error)
- func GetChannels(page int, perPage int, id int, name string, key string, channelType int, ...) (channels []*Channel, total int64, err error)
- func LoadChannelByID(id int) (*Channel, error)
- func LoadChannels() ([]*Channel, error)
- func LoadDisabledChannels() ([]*Channel, error)
- func LoadEnabledChannels() ([]*Channel, error)
- func SearchChannels(keyword string, page int, perPage int, id int, name string, key string, ...) (channels []*Channel, total int64, err error)
- func (c *Channel) BeforeDelete(tx *gorm.DB) (err error)
- func (c *Channel) GetBalanceThreshold() float64
- func (c *Channel) GetPriority() int32
- func (c *Channel) GetSets() []string
- func (c *Channel) MarshalJSON() ([]byte, error)
- func (c *Channel) UpdateBalance(balance float64) error
- func (c *Channel) UpdateModelTest(testAt time.Time, model, actualModel string, mode mode.Mode, took float64, ...) (*ChannelTest, error)
- type ChannelConfig
- type ChannelTest
- type ChannelUpdate
- type ChartData
- type CodeType
- type ConsumeError
- type DashboardResponse
- type EmptyNullString
- type GetGroupLogsResult
- type GetLogsResult
- type Group
- func GetGroupByID(id string, preloadGroupModelConfigs bool) (*Group, error)
- func GetGroups(page int, perPage int, order string, onlyDisabled bool) (groups []*Group, total int64, err error)
- func SearchGroup(keyword string, page int, perPage int, order string, status int) (groups []*Group, total int64, err error)
- type GroupCache
- type GroupDashboardResponse
- type GroupModelConfig
- type GroupSummary
- type GroupSummaryUnique
- type GroupSummaryUpdate
- type GroupUpdate
- type Log
- type ModelCaches
- type ModelConfig
- func GetAllModelConfigs() (configs []*ModelConfig, err error)
- func GetModelConfig(model string) (*ModelConfig, error)
- func GetModelConfigs(page int, perPage int, model string) (configs []*ModelConfig, total int64, err error)
- func GetModelConfigsByModels(models []string) (configs []*ModelConfig, err error)
- func NewDefaultModelConfig(model string) *ModelConfig
- func SearchModelConfigs(keyword string, page int, perPage int, model string, owner ModelOwner) (configs []*ModelConfig, total int64, err error)
- func (c *ModelConfig) LoadFromGroupModelConfig(groupModelConfig GroupModelConfig) ModelConfig
- func (c *ModelConfig) MarshalJSON() ([]byte, error)
- func (c *ModelConfig) MaxContextTokens() (int, bool)
- func (c *ModelConfig) MaxInputTokens() (int, bool)
- func (c *ModelConfig) MaxOutputTokens() (int, bool)
- func (c *ModelConfig) SupportFormats() ([]string, bool)
- func (c *ModelConfig) SupportToolChoice() (bool, bool)
- func (c *ModelConfig) SupportVision() (bool, bool)
- func (c *ModelConfig) SupportVoices() ([]string, bool)
- type ModelConfigCache
- type ModelConfigKey
- type ModelConfigOption
- func WithModelConfigMaxContextTokens(maxContextTokens int) ModelConfigOption
- func WithModelConfigMaxInputTokens(maxInputTokens int) ModelConfigOption
- func WithModelConfigMaxOutputTokens(maxOutputTokens int) ModelConfigOption
- func WithModelConfigSupportFormats(supportFormats []string) ModelConfigOption
- func WithModelConfigSupportVoices(supportVoices []string) ModelConfigOption
- func WithModelConfigToolChoice(toolChoice bool) ModelConfigOption
- func WithModelConfigVision(vision bool) ModelConfigOption
- type ModelCostRank
- type ModelOwner
- type Option
- type Price
- type RequestDetail
- type Summary
- type SummaryData
- type SummaryUnique
- type SummaryUpdate
- type TimeSpanType
- type Token
- func GetGroupTokenByID(group string, id int) (*Token, error)
- func GetTokenByID(id int) (*Token, error)
- func GetTokenByKey(key string) (*Token, error)
- func GetTokens(group string, page int, perPage int, order string, status int) (tokens []*Token, total int64, err error)
- func SearchGroupTokens(group string, keyword string, page int, perPage int, order string, status int, ...) (tokens []*Token, total int64, err error)
- func SearchTokens(group string, keyword string, page int, perPage int, order string, status int, ...) (tokens []*Token, total int64, err error)
- type TokenCache
- type TokenUpdate
- type Usage
- type ZeroNullInt64
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 ChannelStatusDisabled = 2 )
View Source
const ( GroupStatusEnabled = 1 GroupStatusDisabled = 2 GroupStatusInternal = 3 )
View Source
const ( TokenStatusEnabled = 1 TokenStatusDisabled = 2 )
View Source
const (
ChannelDefaultSet = "default"
)
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 (
GroupModelConfigCacheKey = "group_model_config"
)
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 BatchRecordConsume ¶
func BatchRecordConsume( requestID string, requestAt time.Time, retryAt time.Time, firstByteAt time.Time, group string, code int, channelID int, modelName string, tokenID int, tokenName string, endpoint string, content string, mode int, ip string, retryTimes int, requestDetail *RequestDetail, downstreamResult bool, usage Usage, modelPrice Price, amount float64, ) error
func CacheDeleteGroup ¶
func CacheDeleteToken ¶
func CacheSetGroup ¶
func CacheSetGroup(group *GroupCache) error
func CacheSetToken ¶
func CacheSetToken(token *TokenCache) error
func CacheUpdateGroupStatus ¶
func CacheUpdateTokenName ¶
func CacheUpdateTokenStatus ¶
func CheckModelConfigExist ¶
func ClearLastTestErrorAt ¶
func CreateConsumeError ¶
func CreateGroup ¶
func CreateGroupSummaryIndexs ¶ added in v0.1.6
func CreateLogIndexes ¶
func CreateSummaryIndexs ¶ added in v0.1.6
func DeleteChannelByID ¶
func DeleteChannelsByIDs ¶
func DeleteGroupByID ¶
func DeleteGroupLogs ¶
func DeleteGroupModelConfig ¶ added in v0.1.5
func DeleteGroupModelConfigs ¶ added in v0.1.5
func DeleteGroupTokenByID ¶
func DeleteGroupTokensByIDs ¶
func DeleteGroupsByIDs ¶
func DeleteModelConfig ¶
func DeleteTokenByID ¶
func DeleteTokensByIDs ¶
func GetGroupTokenLastRequestTime ¶ added in v0.1.6
func GetIPGroups ¶ added in v0.1.5
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 GetUsedChannels ¶ added in v0.1.5
func GetUsedChannelsFromLog ¶ added in v0.1.6
func GetUsedModelsFromLog ¶ added in v0.1.6
func GetUsedTokenNames ¶
func GetUsedTokenNamesFromLog ¶ added in v0.1.6
func HandleNotFound ¶
func HandleUpdateResult ¶
Helper function to handle update results
func IgnoreNotFound ¶
func InitModelConfigAndChannelCache ¶
func InitModelConfigAndChannelCache() error
InitModelConfigAndChannelCache initializes the channel cache from database
func InitOption2DB ¶
func InitOption2DB() error
func InsertToken ¶
func NewModelConfig ¶
func NewModelConfig(opts ...ModelConfigOption) map[ModelConfigKey]any
func NotFoundError ¶
func OnConflictDoNothing ¶
func ProcessBatchUpdatesSummary ¶ added in v0.1.6
func ProcessBatchUpdatesSummary()
func RecordConsumeLog ¶
func RecordConsumeLog( requestID string, requestAt time.Time, retryAt time.Time, firstByteAt time.Time, group string, code int, channelID int, modelName string, tokenID int, tokenName string, endpoint string, content string, mode int, ip string, retryTimes int, requestDetail *RequestDetail, downstreamResult bool, usage Usage, modelPrice Price, amount float64, ) error
func SaveGroupModelConfig ¶ added in v0.1.5
func SaveGroupModelConfig(groupModelConfig GroupModelConfig) (err error)
func SaveGroupModelConfigs ¶ added in v0.1.5
func SaveGroupModelConfigs(groupID string, groupModelConfigs []GroupModelConfig) (err 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 StartBatchProcessorSummary ¶ added in v0.1.6
func String2Int ¶
func SyncOptions ¶
func UpdateChannel ¶
func UpdateChannelStatusByID ¶
func UpdateChannelUsedAmount ¶
func UpdateGroup ¶
func UpdateGroupModelConfig ¶ added in v0.1.5
func UpdateGroupModelConfig(groupModelConfig GroupModelConfig) (err error)
func UpdateGroupModelConfigs ¶ added in v0.1.5
func UpdateGroupModelConfigs(groupID string, groupModelConfigs []GroupModelConfig) (err error)
func UpdateGroupRPMRatio ¶
func UpdateGroupStatus ¶
func UpdateGroupTPMRatio ¶
func UpdateGroupTokenName ¶
func UpdateGroupTokenStatus ¶
func UpdateGroupsStatus ¶ added in v0.1.5
func UpdateOption ¶
func UpdateOptions ¶
func UpdateToken ¶
func UpdateTokenName ¶
func UpdateTokenStatus ¶
func UpdateTokenUsedAmount ¶
func UpsertGroupSummary ¶ added in v0.1.6
func UpsertGroupSummary(unique GroupSummaryUnique, data SummaryData) error
func UpsertSummary ¶ added in v0.1.6
func UpsertSummary(unique SummaryUnique, data SummaryData) error
Types ¶
type BatchUpdateData ¶
type BatchUpdateData struct { Groups map[string]*GroupUpdate Tokens map[int]*TokenUpdate Channels map[int]*ChannelUpdate Summaries map[string]*SummaryUpdate GroupSummaries map[string]*GroupSummaryUpdate sync.Mutex }
type Channel ¶
type Channel struct { DeletedAt gorm.DeletedAt `gorm:"index"` 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"` Sets []string `gorm:"serializer:fastjson;type:text" json:"sets,omitempty"` }
func GetAllChannels ¶
func GetChannelByID ¶
func GetChannels ¶
func LoadChannelByID ¶
func LoadChannels ¶
func LoadDisabledChannels ¶ added in v0.1.1
func LoadEnabledChannels ¶
func SearchChannels ¶
func (*Channel) GetBalanceThreshold ¶
func (*Channel) GetPriority ¶
func (*Channel) MarshalJSON ¶
func (*Channel) UpdateBalance ¶
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 mode.Mode `json:"mode"` Code int `json:"code"` }
func (*ChannelTest) MarshalJSON ¶
func (ct *ChannelTest) MarshalJSON() ([]byte, error)
type ChannelUpdate ¶
type ChartData ¶
type ChartData struct { Timestamp int64 `json:"timestamp"` RequestCount int64 `json:"request_count"` UsedAmount float64 `json:"used_amount"` InputTokens int64 `json:"input_tokens,omitempty"` OutputTokens int64 `json:"output_tokens,omitempty"` CachedTokens int64 `json:"cached_tokens,omitempty"` CacheCreationTokens int64 `json:"cache_creation_tokens,omitempty"` TotalTokens int64 `json:"total_tokens,omitempty"` ExceptionCount int64 `json:"exception_count"` WebSearchCount int64 `json:"web_search_count,omitempty"` }
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 (*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"` RPM int64 `json:"rpm"` TPM int64 `json:"tpm"` UsedAmount float64 `json:"used_amount"` InputTokens int64 `json:"input_tokens,omitempty"` OutputTokens int64 `json:"output_tokens,omitempty"` TotalTokens int64 `json:"total_tokens,omitempty"` CachedTokens int64 `json:"cached_tokens,omitempty"` CacheCreationTokens int64 `json:"cache_creation_tokens,omitempty"` WebSearchCount int64 `json:"web_search_count,omitempty"` Channels []int `json:"channels,omitempty"` }
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 SearchGroupLogs ¶
func SearchGroupLogs( group string, keyword string, requestID string, tokenID int, tokenName string, modelName string, startTimestamp time.Time, endTimestamp time.Time, channelID int, order string, codeType CodeType, withBody bool, ip string, page int, perPage int, resultOnly bool, ) (*GetGroupLogsResult, error)
type GetLogsResult ¶
type GetLogsResult struct { Logs []*Log `json:"logs"` Total int64 `json:"total"` Channels []int `json:"channels,omitempty"` }
func SearchLogs ¶
func SearchLogs( group string, keyword string, requestID string, tokenID int, tokenName string, modelName string, startTimestamp time.Time, endTimestamp time.Time, channelID int, order string, codeType CodeType, withBody bool, ip string, page int, perPage int, resultOnly bool, ) (*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:"-"` GroupModelConfigs []GroupModelConfig `gorm:"foreignKey:GroupID" json:"-"` Status int `gorm:"default:1;index" json:"status"` RPMRatio float64 `gorm:"index" json:"rpm_ratio,omitempty"` TPMRatio float64 `gorm:"index" json:"tpm_ratio,omitempty"` UsedAmount float64 `gorm:"index" json:"used_amount"` RequestCount int `gorm:"index" json:"request_count"` AvailableSets []string `gorm:"serializer:fastjson;type:text" json:"available_sets,omitempty"` BalanceAlertEnabled bool `gorm:"default:false" json:"balance_alert_enabled"` BalanceAlertThreshold float64 `gorm:"default:0" json:"balance_alert_threshold"` }
func SearchGroup ¶
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"` TPMRatio float64 `json:"tpm_ratio" redis:"tpm_r"` AvailableSets redisStringSlice `json:"available_sets" redis:"ass"` ModelConfigs redisGroupModelConfigMap `json:"model_configs" redis:"mc"` BalanceAlertEnabled bool `json:"balance_alert_enabled" redis:"bae"` BalanceAlertThreshold float64 `json:"balance_alert_threshold" redis:"bat"` }
func CacheGetGroup ¶
func CacheGetGroup(id string) (*GroupCache, error)
func (*GroupCache) GetAvailableSets ¶ added in v0.1.5
func (g *GroupCache) GetAvailableSets() []string
type GroupDashboardResponse ¶
type GroupDashboardResponse struct { DashboardResponse Models []string `json:"models"` TokenNames []string `json:"token_names"` }
type GroupModelConfig ¶ added in v0.1.5
type GroupModelConfig struct { GroupID string `gorm:"primaryKey" json:"group_id"` Group *Group `gorm:"foreignKey:GroupID" json:"-"` Model string `gorm:"primaryKey" json:"model"` OverrideLimit bool `json:"override_limit"` RPM int64 `json:"rpm"` TPM int64 `json:"tpm"` OverridePrice bool `json:"override_price"` ImagePrices map[string]float64 `gorm:"serializer:fastjson;type:text" json:"image_prices,omitempty"` Price Price `gorm:"embedded" json:"price,omitempty"` }
func GetGroupModelConfig ¶ added in v0.1.5
func GetGroupModelConfig(groupID, model string) (*GroupModelConfig, error)
func GetGroupModelConfigs ¶ added in v0.1.5
func GetGroupModelConfigs(groupID string) ([]GroupModelConfig, error)
type GroupSummary ¶ added in v0.1.6
type GroupSummary struct { ID int `gorm:"primaryKey"` Unique GroupSummaryUnique `gorm:"embedded"` Data SummaryData `gorm:"embedded"` }
only summary result only requests
func (*GroupSummary) BeforeCreate ¶ added in v0.1.6
func (l *GroupSummary) BeforeCreate(_ *gorm.DB) (err error)
type GroupSummaryUnique ¶ added in v0.1.6
type GroupSummaryUnique struct { GroupID string `gorm:"not null;uniqueIndex:idx_groupsummary_unique,priority:1"` TokenName string `gorm:"not null;uniqueIndex:idx_groupsummary_unique,priority:2"` Model string `gorm:"not null;uniqueIndex:idx_groupsummary_unique,priority:3"` HourTimestamp int64 `gorm:"not null;uniqueIndex:idx_groupsummary_unique,priority:4,sort:desc"` }
type GroupSummaryUpdate ¶ added in v0.1.6
type GroupSummaryUpdate struct { GroupSummaryUnique SummaryData }
type GroupUpdate ¶
type Log ¶
type Log struct { RequestDetail *RequestDetail `gorm:"foreignKey:LogID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"request_detail,omitempty"` RequestAt time.Time `json:"request_at"` RetryAt time.Time `json:"retry_at,omitempty"` TTFBMilliseconds ZeroNullInt64 `json:"ttfb_milliseconds,omitempty"` TimestampTruncByHour int64 `json:"timestamp_trunc_by_hour"` CreatedAt time.Time `gorm:"autoCreateTime;index" json:"created_at"` TokenName string `json:"token_name,omitempty"` Endpoint EmptyNullString `json:"endpoint,omitempty"` Content EmptyNullString `gorm:"type:text" json:"content,omitempty"` GroupID string `json:"group,omitempty"` Model string `json:"model"` RequestID EmptyNullString `gorm:"index:,where:request_id is not null" json:"request_id"` ID int `gorm:"primaryKey" json:"id"` TokenID int `gorm:"index" json:"token_id,omitempty"` ChannelID int `json:"channel,omitempty"` Code int `gorm:"index" json:"code,omitempty"` Mode int `json:"mode,omitempty"` IP EmptyNullString `gorm:"index:,where:ip is not null" json:"ip,omitempty"` RetryTimes ZeroNullInt64 `json:"retry_times,omitempty"` DownstreamResult bool `json:"downstream_result,omitempty"` Price Price `gorm:"embedded" json:"price,omitempty"` Usage Usage `gorm:"embedded" json:"usage,omitempty"` UsedAmount float64 `json:"used_amount,omitempty"` }
func (*Log) MarshalJSON ¶
type ModelCaches ¶
type ModelCaches struct { ModelConfig ModelConfigCache EnabledModelsBySet map[string][]string EnabledModelConfigsBySet map[string][]*ModelConfig EnabledModelConfigsMap map[string]*ModelConfig EnabledModel2ChannelsBySet map[string]map[string][]*Channel DisabledModel2ChannelsBySet map[string]map[string][]*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"` Model string `gorm:"primaryKey" json:"model"` Owner ModelOwner `gorm:"type:varchar(255);index" json:"owner"` Type mode.Mode `json:"type"` ExcludeFromTests bool `json:"exclude_from_tests,omitempty"` RPM int64 `json:"rpm,omitempty"` TPM int64 `json:"tpm,omitempty"` ImagePrices map[string]float64 `gorm:"serializer:fastjson;type:text" json:"image_prices,omitempty"` Price Price `gorm:"embedded" json:"price,omitempty"` }
func GetAllModelConfigs ¶
func GetAllModelConfigs() (configs []*ModelConfig, err error)
func GetModelConfig ¶
func GetModelConfig(model string) (*ModelConfig, error)
func GetModelConfigs ¶
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) LoadFromGroupModelConfig ¶ added in v0.1.5
func (c *ModelConfig) LoadFromGroupModelConfig(groupModelConfig GroupModelConfig) ModelConfig
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"` InputTokens int64 `json:"input_tokens"` OutputTokens int64 `json:"output_tokens"` CachedTokens int64 `json:"cached_tokens"` CacheCreationTokens int64 `json:"cache_creation_tokens"` TotalTokens int64 `json:"total_tokens"` RequestCount int64 `json:"request_count"` WebSearchCount int64 `json:"web_search_count"` }
func GetModelCostRank ¶
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 ¶
func GetAllOption ¶
type Price ¶ added in v0.1.5
type Price struct { InputPrice float64 `json:"input_price,omitempty"` InputPriceUnit int64 `json:"input_price_unit,omitempty"` OutputPrice float64 `json:"output_price,omitempty"` OutputPriceUnit int64 `json:"output_price_unit,omitempty"` CachedPrice float64 `json:"cached_price,omitempty"` CachedPriceUnit int64 `json:"cached_price_unit,omitempty"` CacheCreationPrice float64 `json:"cache_creation_price,omitempty"` CacheCreationPriceUnit int64 `json:"cache_creation_price_unit,omitempty"` WebSearchPrice float64 `json:"web_search_price,omitempty"` WebSearchPriceUnit int64 `json:"web_search_price_unit,omitempty"` }
func (*Price) GetCacheCreationPriceUnit ¶ added in v0.1.7
func (*Price) GetCachedPriceUnit ¶ added in v0.1.7
func (*Price) GetInputPriceUnit ¶ added in v0.1.7
func (*Price) GetOutputPriceUnit ¶ added in v0.1.7
func (*Price) GetWebSearchPriceUnit ¶ added in v0.1.7
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 Summary ¶ added in v0.1.6
type Summary struct { ID int `gorm:"primaryKey"` Unique SummaryUnique `gorm:"embedded"` Data SummaryData `gorm:"embedded"` }
only summary result only requests
type SummaryData ¶ added in v0.1.6
type SummaryUnique ¶ added in v0.1.6
type SummaryUpdate ¶ added in v0.1.6
type SummaryUpdate struct { SummaryUnique SummaryData }
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 GetTokenByID ¶
func GetTokenByKey ¶
func SearchGroupTokens ¶ added in v0.1.5
func SearchTokens ¶
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"` // contains filtered or unexported fields }
func CacheGetTokenByKey ¶
func CacheGetTokenByKey(key string) (*TokenCache, error)
func ValidateAndGetToken ¶
func ValidateAndGetToken(key string) (token *TokenCache, err error)
func (*TokenCache) ContainsModel ¶ added in v0.1.5
func (t *TokenCache) ContainsModel(model string) bool
func (*TokenCache) Range ¶ added in v0.1.5
func (t *TokenCache) Range(fn func(model string) bool)
func (*TokenCache) SetAvailableSets ¶ added in v0.1.5
func (t *TokenCache) SetAvailableSets(availableSets []string)
func (*TokenCache) SetModelsBySet ¶ added in v0.1.5
func (t *TokenCache) SetModelsBySet(modelsBySet map[string][]string)
type TokenUpdate ¶
type Usage ¶ added in v0.1.5
type Usage struct { InputTokens int64 `json:"input_tokens,omitempty"` OutputTokens int64 `json:"output_tokens,omitempty"` CachedTokens int64 `json:"cached_tokens,omitempty"` CacheCreationTokens int64 `json:"cache_creation_tokens,omitempty"` TotalTokens int64 `json:"total_tokens,omitempty"` WebSearchCount int64 `json:"web_search_count,omitempty"` }
type ZeroNullInt64 ¶ added in v0.1.5
type ZeroNullInt64 int64
func (*ZeroNullInt64) Scan ¶ added in v0.1.5
func (zni *ZeroNullInt64) Scan(value any) error
Click to show internal directories.
Click to hide internal directories.