Repository navigation
v2026.10.26
·
78 commits
to main
since this release
版本概览
- v2026.10.26 合并了经过兼容审查和完整验证的上游更新。
- 已完成工作树内容层面的合并审查与修复,整合两处文本冲突,并修复定价测试导入、缓存计费快照识别和 Responses 压缩用量传递三处语义遗漏。最终涉及 20 个代码或测试文件及 1 份发布说明草稿。
新增功能
- 识别兼容接口的缓存创建用量:9823ebc7e 为 InputTokenDetails 增加 cache_creation_input_tokens,并在用量合并和 Chat 转 Responses 时保留;缓存创建总量取该字段、cache_write_tokens 与 cached_creation_tokens 的最大值,负数归零,不重复累加。仅有未定义的 cache_creation 子对象时不推导 Claude 生命周期用量。
- 容错转换 Claude 停止序列:bc795cc11 将 stop 转换改为显式类型判断,支持字符串、字符串数组及混合数组中的字符串,保留空字符串并忽略非字符串成员,消除原强制类型断言的崩溃路径。
- 按实际表达式统一定价分类:f1569d1ea 让筛选与侧栏计数共用 getModelQuotaType:全部价格分支为 fixed 时归入按次,存在 token 价格分支时归入按量,任务用量模型保持独立分类;表达式解析失败回退原 quota_type。固定零价、条件倍率及混合价格分支均有回归覆盖。
- 保留 Claude 工具参数数值精度:4d962e464 将 Chat 响应中的工具参数按 map[string]json.RawMessage 转为 Claude tool_use.input,避免大整数和高精度小数经过 float64 后失真;空输入、无效 JSON、null 及非对象输入仍回退为空对象。
- 同时保留 Gemini 正文和工具调用:0165fef98 分离工具调用与正文赋值,Gemini 消息同时含文本或媒体内容和 functionCall 时,转换后的 Chat 消息同时保留两者;原有工具关联和思考内容处理继续保留。
- 隔离重复运行的渠道亲和性测试缓存:34003e9c2 使用测试名称加原子递增序号生成测试规则与指纹,避免时间戳碰撞及同进程重复测试复用旧统计;渠道亲和性的生产行为没有改变。
功能改进
- 计费与监控:上游报告新缓存创建字段时,该部分输入按现有缓存创建价格结算,费用可能与此前按普通输入计价不同;不修改管理员价格、预扣、结算、退款或饱和保护规则。原有 OpenAI 总输入与 Claude 独立缓存的监控分母口径保留。
- 接口与协议兼容:不增加必填请求字段或修改接口路径;补全缓存用量字段传递,保留工具参数精度和 Gemini 工具调用旁的正文。无效 stop 成员被忽略,原空参数回退行为保留。
- 前端与国际化:固定表达式模型可正确出现在按次筛选中,侧栏计数与结果一致;混合价格模型归入按量,任务模型仍单列。复用既有筛选界面与组件,没有新增翻译键;侧栏及分类常量使用的 26 个静态翻译键在七种语言中齐全。
- 数据与部署兼容:新增缓存字段通过用量 JSON 和既有计费路径传递,没有修改数据库模型、迁移、索引、GORM 或驱动版本,也未改动依赖、运行配置和发布工作流。完整后端、前端及真实 SQLite、MySQL、PostgreSQL 验证由外层执行。
问题修复
- 缓存创建计费:Chat、Responses 和 Responses 压缩用量均保留新缓存创建字段;仅含该字段的片段也会形成并合并原始计费快照。不同缓存写入别名取最大值,既有生命周期拆分保留。
- 协议转换:Gemini 消息中的正文与工具调用同时送达 Chat 上游;Claude 工具输入保留原始数字精度,停止序列转换不再因非字符串元素崩溃。
- 定价展示:用户按当前表达式获得一致的模型分类和侧栏数量;固定零价、固定图片数量价格、请求倍率、混合 token 分支及任务用量各按既定分类呈现。
- 日志与监控:用户继续看到完整上游 stream_status,其他受限字段仍按角色过滤;管理员继续获得实际响应模型和原有渠道诊断,缓存统计继续采用本项目的有效对话用量口径。
- 发布交接:工作树内容已解决冲突;Git 状态中的 UU 等待外层暂存处理。发布说明草稿覆盖全部累计差异并原文保留六项既有限制,不代表已经提交或发布。
移除与调整
- service/channel_affinity_usage_cache_test.go:保留测试名称提供的确定性隔离,再使用上游原子序号区分同进程重复执行;全部三组原有统计断言保留,没有整文件选边覆盖。
- service/text_quota_test.go:恢复两个独立、完整的测试函数,同时保留监控分母、缓存创建倍率、缺失字段回退及别名取最大值的断言。
- web/src/features/pricing/tests/pricing-controls.test.tsx、web/src/features/pricing/lib/filters.ts:通过现有公开入口 filterAndSortModels 验证分类及侧栏计数,保留内部函数封装;补充 fixed 图片价格乘 image_count 的分类回归。
- relaykit/dto/billing_usage.go、relaykit/dto/usage_merge_test.go:在两种输入明细的非空判断中补齐 CacheCreationInputTokens;增加只含该字段的快照创建、标准化和合并回归,保留既有输入输出计数且不修改原快照。
- relay/channel/openai/relay_responses_compact.go、relay/channel/openai/relay_responses_billing_test.go:补充字段复制,保留本项目实际响应模型审计;扩展既有 JSON、流式和压缩响应回归,检查新字段、别名取最大值及 12 小时缓存拆分同时保留。
- 已知限制:DeepSeek 固定工作日峰谷价格不识别中国法定节假日,管理员可按实际价格政策配置覆盖。
- 已知限制:大型日志表建立联合索引可能产生耗时、资源消耗与锁竞争,升级时需安排合适的迁移窗口。
- 已知限制:缓存用量仅从升级后开始记录,历史数据不回填;跨升级时间范围的缓存统计不代表完整历史用量,界面保留相应提示。
- 已知限制:旧面板令牌在首次迁移后的三十天窗口结束后失效,这是上游迁移设计;需迁移至 PAT,重启不会重置退役期限。
- 已知限制:Responses custom tool 经 Chat function 转换后,grammar 保留为描述提示,不能保证原协议的语法强约束。
- 已知限制:Sobek 切换到 moejs 后,第三方插件仍可能需要适配;本轮未改变该运行时迁移影响。
自上次正式发布以来的累计提交
本次候选包含上述已合并但尚未正式发布的更新,以及本报告审查的新增变更。