模型定价改为默认配置叠加持久化覆盖

- 新增 overlay_editor_generation_pricing,以编译内置默认为基线叠加持久化模型条目
- 删除 backfill_legacy_gpt_image_2_5_pricing 与 backfill_legacy_sfx_pricing,record 加载路径改为直接叠加
- 缺模型的旧 override / record 继承默认档位,写坏的条目仍由 validate() 拦截
- 更新 backfill 相关单测,补 legacy override 继承默认值与非法条目拒绝用例
- 同步 ADR 与决策记录里的受控 backfill 口径
This commit is contained in:
2026-09-22 14:42:34 +08:00
parent ff89951a9b
commit 84bb9ffd28
4 changed files with 103 additions and 133 deletions
@@ -16,7 +16,7 @@ provider 白名单同时拒绝非 provider model:业务模型名 `gpt-image-2.
## Consequences
- 定价配置的活动 key 是两个具体 provider model旧单 key 配置只允许受控 backfill,并留下兼容 TODO
- 定价配置的活动 key 是两个具体 provider model持久化 override 与 SpacetimeDB record 只保存被显式设置过的模型,缺失条目一律继承编译内置默认(`server-rs/crates/api-server/config/editor-generation-pricing.default.json`),不再为每个新模型维护受控 backfill。旧单 key 配置因此把 GPT Image 2.5 档位落在默认值上,要改这两个具体 key 的价格必须显式写出
- 定价档位跟随任务最终 concrete model:带参考图的生成任务与编辑任务同价,admin 单独调整 `gpt-image-2.5-sunburst-c` 时生成带参考图的任务必须同步生效。
- 新任务的同模型重试固定使用 api-server dispatch 的具体 model,不切换到另一个 model。
- 两套 provider client 在 api-server 启动阶段同时构造;任一 required provider 配置缺失,启动失败而不是延迟到首次图片请求。
@@ -1,5 +1,14 @@
# 决策记录
## 2026-09-22 模型定价改为「编译内置默认 + 持久化覆盖」叠加,删除受控 backfill
- 背景:`editor-generation-pricing.default.json``include_str!` 编译内置)是默认模型定价;磁盘 override 与 SpacetimeDB record 以前是「整份替换」,旧配置缺新模型 key 时 `validate()` 直接失败。为了让升级前只含单个 `gpt-image-2` key 的配置能启动,代码维护了 `backfill_legacy_gpt_image_2_5_pricing``backfill_legacy_sfx_pricing` 两个受控 backfill 加 record 路径上的内联 SFX 补齐,并且每新增一个模型都要再写一次同类兼容代码。
- 决策:两条加载路径统一改为「以编译内置默认 JSON 为基线,叠加持久化配置里显式给出的模型条目」(`overlay_editor_generation_pricing`):缺失模型继承默认值,写坏的条目仍由 `validate()` 拦截。删除两个 backfill 函数与 record 路径的内联补齐;磁盘 override 与 record 只保存被显式设置过的模型,admin 保存时仍写回完整模型集合。
- 行为差异:旧配置里自定义过、但没有写出 `gpt-image-2.5-flare-c` / `gpt-image-2.5-sunburst-c``gpt-image-2` 价格不再自动传播到 GPT Image 2.5 档位,新任务按内置默认档(1K 3 / 2K 5 泥点)计价。仓库内置默认里三者本来就相同,因此只影响「自定义过 `gpt-image-2` 价格且此后从未再保存定价」的部署。
- 迁移建议:只读检查 SpacetimeDB `editor_generation_pricing_config` 是否缺少两个 `gpt-image-2.5-*-c` 模型行(或与默认档位不一致);确认后在后台保存一次定价即可把继承值落库,或显式写入期望档位。
- 影响范围:`server-rs/crates/api-server/src/editor_generation_config.rs``server-rs/crates/api-server/src/state.rs` 及其单测;ADR `docs/adr/【ADR】GPT Image 2.5模型路由与历史值兼容-2026-09-18.md` 同步更新。
- 验证:`cargo test -p api-server editor_generation_pricing` 17 项通过(含新的 `editor_generation_pricing_legacy_override_inherits_missing_models_from_default``editor_generation_pricing_override_still_rejects_invalid_model_entries`,以及改名为 `..._inherits_legacy_*` 的两条 record 用例)。
## 2026-09-22 删除失效的图片模型兜底审计链路
- 背景:跨模型兜底 `gpt-image-2-c` 删除后,`platform-image` 已没有任何地方写入 `recovered_failure_audits`executor 只创建空 Vec、成功路径空 append、失败路径原样返回,`PlatformImageError::FallbackFailed` 不可能被构造,`GeneratedImages.recovered_failure_audits` 和错误上的 `recovered_failure_audits()` 恒为空,api-server 成功运行摘要的 `recoveredFailureCount` 恒为 `0`。这条链路既是死代码,也会让排障误以为仍存在兜底审计。