配置与存储
按数据所属模块排查,不把部署、身份和路由当成一份配置。
找到读写入口
rg 'OverlayDB|MergePatch' internal/config internal/store
rg 'SelectRouteTemplate|Compile' internal/iam internal/router internal/gateway| 数据 | 保存位置 | 生效位置 |
|---|---|---|
| 数据库、监听地址 | internal/config | 启动时 |
| 供应商、模型部署 | Store | 模型目录与执行链 |
| 路由模板及绑定 | IAM | 请求时选择完整模板 |
| 用户、成员、密钥 | IAM | 每次鉴权重新读取 |
| RPM、TPM、冷却、费用队列 | Redis | 配置 Redis 时共享 |
| 完整响应缓存 | 进程内 | 重启丢失 |
| 用量与价格快照 | PostgreSQL | 历史账务 |
OverlayDB 替换顶层值,保留 null、0、false 和数组。MergePatch 递归合并 map、替换数组。iam.SelectRouteTemplate 选择一整份模板,不做逐字段继承。身份或模板读取失败不能变成放行。
源码与验证
go test ./internal/router ./internal/store -count=1组织固定周期预算与用量加载状态
组织支持不重置、固定 24 小时、7 天、30 天周期;按 UTC 时长计算,30 天不是自然月。平台管理员可配置预算、周期和 RPM/TPM 上限;组织管理员可维护名称、元数据与已授权路由绑定。名称按忽略大小写的包含条件搜索,组织 ID 精确匹配,两条件同时生效且不会扩大可见范围。
启用或修改周期保留当前已用额度,仅重新安排下一次重置;重复保存同一周期不推迟重置。取消周期保留当前消费。到期只重置组织的 spend 预算计数,并记录同事务审计;历史 usage_events、日用量、团队/用户/Key 计数不改写。停机跨期只推进到当前周期,不累积多次额度。后台循环及读取/准入可补执行,迟到旧周期账单仍保留历史记录,但不重新占当前组织预算。旧库幂等补列,默认不启用周期。
组织关系仅表示管理员授权,可添加/撤销,没有独立的可编辑角色或额度,页面不再提供无效编辑入口。组织列表中的数量明确显示管理员数,不代表所有下级团队成员总数。
用量页将成功空结果与加载失败分开。聚合失败可回退真实分页;全失败显示持续错误与重试,隐藏未知数值;部分页失败保留已完成页面并提示不完整,禁止把部分结果当作完整导出。日期、账号及重试代次变更时立即隐藏旧值;管理员请求计数单独失败时说明仅显示模型用量计数。组织/团队等实体视图遵循相同规则,权限被撤销时显示无权访问。