Provider 系统

wesgine 的 LLM Provider 管理:三种归属、四种策略、密钥管理与 Vision 能力声明。


三种归属

归属说明配置方式
SharedHypervisor 级共享hyp.SharedProviders().Reconfigure()
Named命名共享 Provider同上
Private (BYOK)Cell 私有CellSpec.PrivateProviders

四种 ProviderStrategy

策略解析顺序
own_only仅私有
shared_only仅共享
own_first私有优先,fallback 共享
shared_first共享优先,fallback 私有

自动推导

条件结果
只有私有池非空own_only
只有共享池非空shared_only
两侧都非空必须显式声明(否则 ErrProviderStrategyUnset)
两侧都空保持 unset

Provider 接口

type Provider interface {
    Stream(ctx context.Context, cellID string, req Request) (Stream, error)
}

每次调用带 cellID → per-cell health tracking / rate limit / 使用量。


SecretRef 三源

Source说明换机恢复代价
inline明文经 AES-256-GCM 封套后落盘密文与 spec.key 同机,拷走 DB 不带 key 失效
env环境变量引用换机重放注入方
live运行时回调换机重放注入方

inline 封套

明文 API Key
    ↓ config.MapSecretValues(spec, box.Seal)
AES-256-GCM 密文 → hypervisor.db
密钥 → {DataDir}/secrets/spec.key (0600)

vault 已删除

vault 源已从 wesgine 中删除——它是一个无实现方注入的 Resolver 接口,source:vault 的每次解析都报错。


Vision 能力声明

v1.0.1 破坏性变更:

旧新
ProviderConfig.SupportsVision❌ 已删
ProviderConfig.VisionModel❌ 已删
—Models[].SupportsVision

Vision 是 Model 的能力,不是 Provider 的能力。

请求含图片但模型未声明 SupportsVision=true → ErrVisionNotSupported(硬错误,不再静默剥离图片)。


Token 用量

查询

GET /cells/{id}/observe/token-usage

支持多维过滤:

聚合

GET /cells/{id}/observe/token-summary
GET /cells/{id}/observe/token-usage/aggregate?agent=&group_by=day&days=

Provider 连通性测试

POST /cells/{id}/providers/test
mode说明
空(默认)Chat 测试
embeddingEmbedding 测试
visionVision 挑战码 probe

Cell 级 Embedding

POST /cells/{id}/embeddings

OpenAI 兼容接口,密钥服务端解析。


Billing 不变量

ID规则
INV-BILLING-01wes: 访问权 = UserStatus + LLM Proxy
INV-BILLING-02Token refresh 检查 UserStatus
INV-BILLING-03LLM Proxy 转发前检查 UserStatus
INV-BILLING-04BillingRequired=true 的 JWT 过期后 fallback BYOK
INV-BILLING-05应用层不做 billing pre-check

相关文档