diff --git a/backend/internal/domain/channel_monitor_quota.go b/backend/internal/domain/channel_monitor_quota.go index fed21dedb..72c989c38 100644 --- a/backend/internal/domain/channel_monitor_quota.go +++ b/backend/internal/domain/channel_monitor_quota.go @@ -46,10 +46,10 @@ type MonitorQuotaSnapshot struct { Source string `json:"source"` Success bool `json:"success"` Tiers []MonitorQuotaTier `json:"tiers,omitempty"` - Balance *float64 `json:"balance,omitempty"` // cn_balance 主余额 - Balances []MonitorBalance `json:"balances,omitempty"` // 多币种余额(如 DeepSeek CNY+USD) - Currency string `json:"currency,omitempty"` // 主余额币种 - PlanLevel string `json:"plan_level,omitempty"` // 套餐等级(如智谱 level) + Balance *float64 `json:"balance,omitempty"` // cn_balance 主余额 + Balances []MonitorBalance `json:"balances,omitempty"` // 多币种余额(如 DeepSeek CNY+USD) + Currency string `json:"currency,omitempty"` // 主余额币种 + PlanLevel string `json:"plan_level,omitempty"` // 套餐等级(如智谱 level) // CredentialInvalid 上游 401/403 鉴权失败(区别于网络/解析错误), // 检测状态据此推导 failed 而非 error。 CredentialInvalid bool `json:"credential_invalid,omitempty"` diff --git a/backend/internal/service/channel_monitor_checker.go b/backend/internal/service/channel_monitor_checker.go index bc8aa7064..71177db0b 100644 --- a/backend/internal/service/channel_monitor_checker.go +++ b/backend/internal/service/channel_monitor_checker.go @@ -271,13 +271,6 @@ func providerAdapterFor(provider, apiMode string) (providerAdapter, string, bool return adapter, MonitorAPIModeChatCompletions, ok } -// isSupportedProvider 校验 provider 字符串是否在探活 adapter 表中。 -// 注意:完整的 provider 合法性(含仅配额模式的 antigravity)走 validate.go 的 monitorProviders。 -func isSupportedProvider(p string) bool { - _, ok := providerAdapters[p] - return ok -} - // callProvider 通过 providerAdapters 分发到具体实现。 // opts 承载用户的自定义 headers / body 覆盖(可为 nil)。 // diff --git a/backend/internal/service/channel_monitor_const.go b/backend/internal/service/channel_monitor_const.go index 4ed6a026e..6427c8914 100644 --- a/backend/internal/service/channel_monitor_const.go +++ b/backend/internal/service/channel_monitor_const.go @@ -61,21 +61,21 @@ const ( // MonitorProviderOpenAI 等 provider 字符串常量(也是 ent enum 的实际值)。 // 后 4 个 provider(antigravity/kimi/zhipu/deepseek)为配额模式引入: // antigravity 无探活 adapter(仅配额),其余 3 个复用 OpenAI 兼容探活。 - MonitorProviderOpenAI = "openai" - MonitorProviderAnthropic = "anthropic" - MonitorProviderGemini = "gemini" - MonitorProviderGrok = "grok" + MonitorProviderOpenAI = "openai" + MonitorProviderAnthropic = "anthropic" + MonitorProviderGemini = "gemini" + MonitorProviderGrok = "grok" MonitorProviderAntigravity = "antigravity" - MonitorProviderKimi = "kimi" - MonitorProviderZhipu = "zhipu" - MonitorProviderDeepseek = "deepseek" + MonitorProviderKimi = "kimi" + MonitorProviderZhipu = "zhipu" + MonitorProviderDeepseek = "deepseek" // MonitorCheckMode 检测模式(channel_monitors.check_mode)。 // probe - LLM 探活(默认,原有行为) // quota - 仅查关联账号用量/余额,零 LLM 成本 // quota_probe - 探活 + 配额并存(配额快照挂到主模型历史行) - MonitorCheckModeProbe = "probe" - MonitorCheckModeQuota = "quota" + MonitorCheckModeProbe = "probe" + MonitorCheckModeQuota = "quota" MonitorCheckModeQuotaProbe = "quota_probe" // MonitorDefaultQuotaModel 是 quota 模式监控未显式指定模型时占位的虚拟模型名 diff --git a/backend/internal/service/channel_monitor_types.go b/backend/internal/service/channel_monitor_types.go index 298e037ee..138593e0b 100644 --- a/backend/internal/service/channel_monitor_types.go +++ b/backend/internal/service/channel_monitor_types.go @@ -51,8 +51,8 @@ type ChannelMonitor struct { // 配额模式(check_mode = quota / quota_probe): // 关联已有账号复用账号侧用量服务,Endpoint/APIKey 可为空(quota 模式)。 - CheckMode string // probe(默认)/ quota / quota_probe;空串按 probe 处理 - AccountID *int64 // 关联账号 ID;账号删除后被 DB 置空(监控保留并报「账号未关联」) + CheckMode string // probe(默认)/ quota / quota_probe;空串按 probe 处理 + AccountID *int64 // 关联账号 ID;账号删除后被 DB 置空(监控保留并报「账号未关联」) // 请求自定义快照(来自模板拷贝 or 用户手填,运行时直接读取) TemplateID *int64 // 仅用于 UI 分组 + 一键应用,运行时不用