handler

package
v0.10.3 Latest Latest
Warning

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

Go to latest
Published: Oct 29, 2026 License: MIT Imports: 27 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AnthropicModelsHandler added in v0.5.28

func AnthropicModelsHandler(c *gin.Context)

func ChatCompletionsHandler

func ChatCompletionsHandler(c *gin.Context)

func CleanLogs added in v0.6.8

func CleanLogs(c *gin.Context)

CleanLogs 清理日志

func CountTokens added in v0.5.32

func CountTokens(c *gin.Context)

func CreateAuthKey added in v0.6.0

func CreateAuthKey(c *gin.Context)

func CreateModel

func CreateModel(c *gin.Context)

CreateModel 创建模型

func CreateModelProvider

func CreateModelProvider(c *gin.Context)

CreateModelProvider 创建关联管理

func CreateProvider

func CreateProvider(c *gin.Context)

CreateProvider 创建提供商

func DeleteAuthKey added in v0.6.0

func DeleteAuthKey(c *gin.Context)

func DeleteModel

func DeleteModel(c *gin.Context)

DeleteModel 删除模型

func DeleteModelProvider

func DeleteModelProvider(c *gin.Context)

DeleteModelProvider 删除关联管理

func DeleteProvider

func DeleteProvider(c *gin.Context)

DeleteProvider 删除提供商

func DeleteQuotaSource added in v0.9.1

func DeleteQuotaSource(c *gin.Context)

DeleteQuotaSource 删除一个数据源。

func EventLogging added in v0.6.0

func EventLogging(c *gin.Context)

func GeminiGenerateContentHandler added in v0.6.7

func GeminiGenerateContentHandler(c *gin.Context)

GeminiGenerateContentHandler 转发 Gemini 原生接口: POST /v1beta/models/{model}:generateContent

func GeminiModelsHandler added in v0.6.7

func GeminiModelsHandler(c *gin.Context)

func GetAuthKeys added in v0.6.0

func GetAuthKeys(c *gin.Context)

func GetAuthKeysList added in v0.6.0

func GetAuthKeysList(c *gin.Context)

GetAuthKeysList 获取所有项目(AuthKey)的简化列表(ID 和 Name)

func GetChatIO added in v0.5.0

func GetChatIO(c *gin.Context)

GetChatIO 查询指定日志的输入输出记录

func GetCleanupHistory added in v0.8.4

func GetCleanupHistory(c *gin.Context)

GetCleanupHistory 获取日志清理执行历史

func GetCompressionStatus added in v0.9.1

func GetCompressionStatus(c *gin.Context)

GetCompressionStatus 返回压缩状态。

它在两种"库被自己占住"的情况下**不读库**,退回上一次读到的那一份, 内存里那几个字段照旧现算。真机实测的理由见 lastGoodStatus 的注释。

func GetConfigByKey added in v0.5.32

func GetConfigByKey(c *gin.Context)

GetConfigByKey 获取特定配置

func GetDecompressStatus added in v0.9.1

func GetDecompressStatus(c *gin.Context)

GetDecompressStatus 单独查回滚进度(回滚与迁移是两条独立的水位)。

func GetModelList added in v0.6.0

func GetModelList(c *gin.Context)

GetModelList 返回所有模型列表用于下拉选择等场景

func GetModelProviderMetadata added in v0.9.4

func GetModelProviderMetadata(c *gin.Context)

GetModelProviderMetadata 查询某条「模型 × 上游」关联的模型能力与价格建议。

这是一个**只读**端点(§4.2):它返回建议,由前端预填进关联弹窗的表单; 保存路径完全沿用既有的 Create/UpdateModelProvider,服务端不做任何补值。 因此这里不读也不改任何业务表。

上游的 base_url 从 provider 的 Config 里现取,而不是让前端传:前端的 关联表单里只有 provider_id,让它再传一份 base_url 等于把"两边必须一致" 变成一条要人维护的约定。

func GetModelProviderStatus

func GetModelProviderStatus(c *gin.Context)

GetModelProviderStatus 获取提供商状态信息

func GetModelProviders

func GetModelProviders(c *gin.Context)

GetModelProviders 获取模型的提供商关联列表

func GetModels

func GetModels(c *gin.Context)

GetModels 获取模型列表(支持分页与筛选)

func GetPeakCalendar added in v0.9.1

func GetPeakCalendar(c *gin.Context)

GetPeakCalendar 读取全局工作日日历。

与通用的 GET /api/config/:key 的区别:这里返回结构化配置并补上默认值, 未配置过时也能直接得到可用对象,前端无需自己拼默认配置。

func GetProviderModelList added in v0.9.6

func GetProviderModelList(c *gin.Context)

GetProviderModelList 获取所有不重复的上游模型名(chat_logs.provider_model)。

它和 /models/select 不是一回事:后者是本地配的别名表(请求名), 这个是从历史日志里观测到的、真正发给上游的模型 id。日志页的"模型"筛选 要按后者取值,否则筛选项和分组名对不上。同名可以跨提供商,所以这里 只取模型名本身,不带上提供商——要按两者组合看走 /metrics/stats 的 byModelProvider 维度(那一维按**请求名**分组,不按上游模型名)。

与 GetUserAgents 同形:只取非空去重值,按字母序返回,下拉框里顺序稳定。

func GetProviderModels

func GetProviderModels(c *gin.Context)

func GetProviderTemplates

func GetProviderTemplates(c *gin.Context)

func GetProviders

func GetProviders(c *gin.Context)

GetProviders 获取所有提供商列表(支持名称搜索和类型筛选)

func GetQuotaConfig added in v0.9.1

func GetQuotaConfig(c *gin.Context)

GetQuotaConfig 返回脱敏后的配额配置。

**响应永不回传明文**:apiKey 打码;env 里键名像密钥的打码; scriptSource 例外——编辑器必须显示它才能编辑,且它本身不应含凭据。

func GetRequestLogs

func GetRequestLogs(c *gin.Context)

GetRequestLogs 获取最近的请求日志(支持分页和筛选)

func GetUserAgents added in v0.4.13

func GetUserAgents(c *gin.Context)

GetUserAgents 获取所有不重复的用户代理种类

func GetVersion added in v0.6.13

func GetVersion(c *gin.Context)

func Messages

func Messages(c *gin.Context)

func OpenAIModelsHandler added in v0.5.28

func OpenAIModelsHandler(c *gin.Context)

func PauseCompression added in v0.9.1

func PauseCompression(c *gin.Context)

PauseCompression 请求暂停。批间生效,所以返回时可能还有一批在跑完的路上。

func PreviewPeakTerms added in v0.9.1

func PreviewPeakTerms(c *gin.Context)

PreviewPeakTerms 把一套峰谷条款回放到未来一段时间,返回每个时段命中的区间。

存在的理由:分时段规则的错误(跨零点写反、星期几位错、时区搞混) 靠读配置很难发现,但一看时间轴就一目了然。

条款由请求体给出(编辑器要在保存前预览),日历取已保存的那份: 日历是全局的、在另一个页面维护,预览时按它算才是"保存后会怎样"。

func ProviderTestHandler

func ProviderTestHandler(c *gin.Context)

func ReclaimStorage added in v0.9.1

func ReclaimStorage(c *gin.Context)

ReclaimStorage 触发一次增量回收,异步返回。

异步的理由与迁移一样(分钟级的事不该挂在请求上),但它比迁移更需要说清 代价:回收**全程持写锁**,虽然读不受影响,写请求会排队、超时即失败。 所以这个接口不是"随手点一下",前端要把它标成维护动作。

占位("有一轮在跑")由 service.StartReclaim **同步**做完,所以这里的 `started: true` 是可信的:返回之后再来一下必然被上面那道门挡掉。

func RefreshQuotaSource added in v0.9.1

func RefreshQuotaSource(c *gin.Context)

RefreshQuotaSource 只刷一个数据源,其余源走缓存。

这是"每源独立刷新"的端点(计划 §1.4 第 20 条):面板上点某个慢源的刷新时用它, 不必连带重跑其他慢源。

func ResponsesHandler

func ResponsesHandler(c *gin.Context)

func RollbackCompression added in v0.9.1

func RollbackCompression(c *gin.Context)

RollbackCompression 是 L2 降级:把库里的帧全部还原成明文。

func RunCompression added in v0.9.1

func RunCompression(c *gin.Context)

RunCompression 触发一轮迁移。异步返回,进度看状态接口。

func RunQuotaSources added in v0.9.1

func RunQuotaSources(c *gin.Context)

RunQuotaSources 跑全部启用源(或指定 id)。

Query:

force=true        忽略缓存重新取数
ids=a,b,c         只跑这些源(其余不返回)

func Stats added in v0.9.1

func Stats(c *gin.Context)

Stats 分析聚合端点。用单端点而非按维度拆多个,是为了让一次请求对应一个 时间切片——前端「筛选行作用于其下所有图表」的约定因此天然成立, 不会出现各图之间因分别请求而产生的时间窗漂移。

Query:

from, to      时间范围。支持 unix 秒 / unix 毫秒 / RFC3339 / 2006-01-02 / "2006-01-02 15:04:05"
granularity   分桶档位,缺省 auto
provider, model, name, status, ua, key_id   逗号分隔的多值筛选

func StatsGranularities added in v0.9.1

func StatsGranularities(c *gin.Context)

StatsGranularities 返回受支持的分桶档位,供前端下拉使用。

func StopReclaim added in v0.9.1

func StopReclaim(c *gin.Context)

StopReclaim 请求停止持续回收。批间生效,所以返回成功不等于已经停了。

与「暂停迁移」不同,它没有"停下之后库处于什么形态"的问题:回收不动数据, 停在任何一刻库都是完整的,只是文件没缩到位。

**重整(VACUUM)停不了**:它是一条语句,没有"批间"这个时机,标志设了没人读。 这里特意与 StopReclaim 的返回 false 分开报,因为"没有回收在跑"是**误报**—— 用户明明看着它在跑。见 service.StopReclaim。

func SyncPeakHolidays added in v0.9.1

func SyncPeakHolidays(c *gin.Context)

SyncPeakHolidays 从公共数据源同步指定年份的节假日与调休安排。

这一项是"工作日"判定的关键补充:中国法定节假日与调休无法由星期几推出, 必须依赖外部数据。同步失败时日历保持原样,前端可回退到手动填写或 仅按周一~周五判定。

func TestCountTokens added in v0.5.32

func TestCountTokens(c *gin.Context)

func TestQuotaSource added in v0.9.1

func TestQuotaSource(c *gin.Context)

TestQuotaSource 试跑一个**未保存**的数据源。

不落盘、不写缓存。这是配额功能里最有价值的作者循环:用户反复调整脚本/映射并 立刻看到解析结果与原始产出。因此它对只读模式**也开放**——它不改变任何状态。

func TestReactHandler

func TestReactHandler(c *gin.Context)

func ToggleAuthKeyStatus added in v0.6.0

func ToggleAuthKeyStatus(c *gin.Context)

ToggleAuthKeyStatus 切换 AuthKey 状态

func UpdateAuthKey added in v0.6.0

func UpdateAuthKey(c *gin.Context)

func UpdateCompressionPolicy added in v0.9.1

func UpdateCompressionPolicy(c *gin.Context)

UpdateCompressionPolicy 改策略。参数越界会被夹回合法区间(不报错)。

func UpdateConfigByKey added in v0.5.32

func UpdateConfigByKey(c *gin.Context)

UpdateConfigByKey 更新配置

func UpdateModel

func UpdateModel(c *gin.Context)

UpdateModel 更新模型

func UpdateModelOrder added in v0.6.31

func UpdateModelOrder(c *gin.Context)

UpdateModelOrder 更新模型展示顺序

func UpdateModelProvider

func UpdateModelProvider(c *gin.Context)

UpdateModelProvider 更新关联管理

func UpdateModelProviderStatus added in v0.5.9

func UpdateModelProviderStatus(c *gin.Context)

UpdateModelProviderStatus 切换关联管理启用状态

func UpdatePeakCalendar added in v0.9.1

func UpdatePeakCalendar(c *gin.Context)

UpdatePeakCalendar 覆盖全局工作日日历。

func UpdateProvider

func UpdateProvider(c *gin.Context)

UpdateProvider 更新提供商

func UpdateQuotaConfig added in v0.9.1

func UpdateQuotaConfig(c *gin.Context)

UpdateQuotaConfig 改配置级字段(缓存时长、告警阈值)。

与 UpsertQuotaSource 分开的理由:那两个字段不属于任何数据源, 混在源的保存里会让"我只想改个阈值"变成一次数据源写操作。

func UpdateReclaimPolicy added in v0.9.1

func UpdateReclaimPolicy(c *gin.Context)

UpdateReclaimPolicy 改空间回收的自动推进策略。越界参数会被夹回(不报错)。

func UpsertQuotaSource added in v0.9.1

func UpsertQuotaSource(c *gin.Context)

UpsertQuotaSource 新增或更新一个数据源。

路由上区分新增与更新:新增用 POST(不带 id 或 id 冲突时报错), 更新用 PUT(按 id 找到已有项)。这样"我想改的源不存在"不会被静默变成新增。

func VacuumStorage added in v0.9.1

func VacuumStorage(c *gin.Context)

VacuumStorage 触发一次重整(VACUUM),异步返回。

它比回收**更该说清代价**,因为代价的形状不一样:回收是"写请求排队、多半能 成功",而 VACUUM 是"这几十秒里写请求直接失败"——它全程持 EXCLUSIVE,连读都 进不来。换来的是快一个数量级:同一份 7 GiB 的库,实测 VACUUM 55–59 秒, 增量回收要十轮 14.7 分钟。

所以它只该在大空洞之后点(迁移、回滚、批量删除),前端要把它标成维护动作, 并说清"约多久 + 期间写入会失败"。与「开始回收」是**两个按钮**:那一个不需要 额外磁盘、也不必停服务,这一个两样都要,但一次就还干净。

磁盘预检在 service.StartVacuum 里**同步**做完,不够就直接拒——那不是"跑到 一半才发现"的失败,而是动手之前就知道的事,而中途满盘会把库留在说不清的 状态。前端可以从状态接口的 db.disk_free_bytes 提前算出来,别让用户白点。

Types

type AuthKeyRequest added in v0.6.0

type AuthKeyRequest struct {
	Name      string   `json:"name" binding:"required"`
	Status    *bool    `json:"status"`
	IOLog     *bool    `json:"io_log"`
	AllowAll  *bool    `json:"allow_all"`
	Models    []string `json:"models"`
	ExpiresAt *string  `json:"expires_at"`
}

type ChatModel

type ChatModel struct {
	Name            string            `json:"name"`
	Type            string            `json:"type"`
	Model           string            `json:"model"`
	Config          string            `json:"config"`
	Proxy           string            `json:"proxy,omitempty"`
	WithHeader      *bool             `json:"with_header,omitempty"`
	CustomerHeaders map[string]string `json:"customer_headers,omitempty"`
}

func FindChatModel

func FindChatModel(ctx context.Context, id string) (*ChatModel, error)

type CleanLogsRequest added in v0.6.8

type CleanLogsRequest struct {
	Type  string `json:"type"`  // "count" 或 "days"
	Value int    `json:"value"` // 数量或天数
}

CleanLogsRequest 清理日志请求

type ConfigValueRequest added in v0.5.32

type ConfigValueRequest struct {
	Value string `json:"value" binding:"required"`
}

ConfigValueRequest represents the request body for updating config value

type CountTokensResponse added in v0.5.32

type CountTokensResponse struct {
	InputTokens int64 `json:"input_tokens"`
}

type EventLoggingEnv added in v0.6.17

type EventLoggingEnv struct {
	Platform              string `json:"platform"`
	NodeVersion           string `json:"node_version"`
	Terminal              string `json:"terminal"`
	PackageManagers       string `json:"package_managers"`
	Runtimes              string `json:"runtimes"`
	IsRunningWithBun      bool   `json:"is_running_with_bun"`
	IsCI                  bool   `json:"is_ci"`
	IsClaubbit            bool   `json:"is_claubbit"`
	IsGithubAction        bool   `json:"is_github_action"`
	IsClaudeCodeAction    bool   `json:"is_claude_code_action"`
	IsClaudeAIAuth        bool   `json:"is_claude_ai_auth"`
	Version               string `json:"version"`
	Arch                  string `json:"arch"`
	IsClaudeCodeRemote    bool   `json:"is_claude_code_remote"`
	DeploymentEnvironment string `json:"deployment_environment"`
}

type EventLoggingEvent added in v0.6.17

type EventLoggingEvent struct {
	EventType string                `json:"event_type"`
	EventData EventLoggingEventData `json:"event_data"`
}

type EventLoggingEventData added in v0.6.17

type EventLoggingEventData struct {
	EventName          string          `json:"event_name"`
	ClientTimestamp    string          `json:"client_timestamp"`
	Model              string          `json:"model"`
	SessionID          string          `json:"session_id"`
	UserType           string          `json:"user_type"`
	Betas              string          `json:"betas"`
	Env                EventLoggingEnv `json:"env"`
	Entrypoint         string          `json:"entrypoint"`
	IsInteractive      bool            `json:"is_interactive"`
	ClientType         string          `json:"client_type"`
	AdditionalMetadata string          `json:"additional_metadata"`
	DeviceID           string          `json:"device_id"`
}

type EventLoggingRequest added in v0.6.17

type EventLoggingRequest struct {
	Events []EventLoggingEvent `json:"events"`
}

type GeminiModel added in v0.6.7

type GeminiModel struct {
	Name                       string   `json:"name"`
	DisplayName                string   `json:"displayName,omitempty"`
	SupportedGenerationMethods []string `json:"supportedGenerationMethods,omitempty"`
}

type GeminiModelsResponse added in v0.6.7

type GeminiModelsResponse struct {
	Models []GeminiModel `json:"models"`
}

type ModelOrderRequest added in v0.6.31

type ModelOrderRequest struct {
	ModelIDs []uint `json:"model_ids"`
}

type ModelProviderStatusRequest added in v0.5.9

type ModelProviderStatusRequest struct {
	Status bool `json:"status"`
}

ModelProviderStatusRequest represents the request body for updating provider status

type ModelRequest

type ModelRequest struct {
	Name     string `json:"name"`
	Remark   string `json:"remark"`
	MaxRetry int    `json:"max_retry"`
	TimeOut  int    `json:"time_out"`
	Strategy string `json:"strategy"`
	Breaker  bool   `json:"breaker"`
	// PreferDirect 优先匹配相同协议。指针是为了区分"没传"(nil,按开处理,老客户端
	// 不改行为)与"明确关掉"(false)
	PreferDirect *bool `json:"prefer_direct"`
}

ModelRequest represents the request body for creating/updating a model

type ModelWithProviderRequest

type ModelWithProviderRequest struct {
	ModelID          uint   `json:"model_id"`
	ProviderModel    string `json:"provider_name"`
	ProviderID       uint   `json:"provider_id"`
	ToolCall         bool   `json:"tool_call"`
	StructuredOutput bool   `json:"structured_output"`
	Image            bool   `json:"image"`
	WithHeader       bool   `json:"with_header"`
	// Backup 是否为备用关联:不参与日常轮询,仅当主关联在本请求内全部不可用后接管。
	// 老客户端不传即 false,天然兼容。
	Backup          bool              `json:"backup"`
	CustomerHeaders map[string]string `json:"customer_headers"`
	ExtraBody       map[string]any    `json:"extra_body"`
	Weight          int               `json:"weight"`
	InputPrice      float64           `json:"input_price"`
	CacheReadPrice  float64           `json:"cache_read_price"`
	OutputPrice     float64           `json:"output_price"`
	Currency        string            `json:"currency"`
	// Peak 这一条关联自己的峰谷条款,nil 表示没配(按基础价计费)。
	Peak *models.PeakTerms `json:"peak"`
}

ModelWithProviderRequest represents the request body for creating/updating a model-provider association

type ProviderRequest

type ProviderRequest struct {
	Name         string `json:"name"`
	Type         string `json:"type"`
	Config       string `json:"config"`
	Console      string `json:"console"`
	Proxy        string `json:"proxy"`
	ErrorMatcher string `json:"error_matcher"`
}

ProviderRequest represents the request body for creating/updating a provider

type ProviderTemplate

type ProviderTemplate struct {
	Type     string `json:"type"`
	Template string `json:"template"`
}

type SystemConfigRequest

type SystemConfigRequest struct {
	EnableSmartRouting  bool    `json:"enable_smart_routing"`
	SuccessRateWeight   float64 `json:"success_rate_weight"`
	ResponseTimeWeight  float64 `json:"response_time_weight"`
	DecayThresholdHours int     `json:"decay_threshold_hours"`
	MinWeight           int     `json:"min_weight"`
}

SystemConfigRequest represents the request body for updating system configuration

type WrapLog added in v0.6.0

type WrapLog struct {
	models.ChatLog
	KeyName string `json:"key_name"`
}

Jump to

Keyboard shortcuts

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