修正Tripo定价文档口径为 fail-closed 与无单位

- 主规范去掉 model3d 段的 unit 字段,3D 恒为按次计价
- 主规范把加载即校验改为段存在时必须全键,并补充段缺失即拒绝提交
- 契约里程碑验收第 6 条同步为段缺失 fail-closed
- 实施计划把定价步骤指向 api-server/src/tripo3d/pricing.rs
This commit is contained in:
2026-09-21 13:00:45 +08:00
parent e105e34f83
commit 36036eed7b
3 changed files with 6 additions and 5 deletions
@@ -90,7 +90,6 @@ ImageToModelResult = { modelArtifact, renderedPreview }
```json
"model3d": {
"unit": "perGeneration",
"basePrices": {
"text-to-model": { "<modelVersion>": { "noTexture": , "texture": } },
"image-to-model": { "<modelVersion>": { "noTexture": , "texture": } }
@@ -123,9 +122,11 @@ price = basePrices[endpoint][modelVersion][texture ? "texture" : "noTexture"]
两条硬约束:
1. **加载即校验**:两个 endpoint × 每个受支持模型版本 × 两种贴图态必须全部存在,缺一即配置非法、服务拒绝启动;运行期不存在“查不到价”的分支
1. **加载即校验**`model3d` 段一旦存在,两个 endpoint × 每个受支持模型版本 × 两种贴图态与全部 add-on 键必须同时存在,缺一即配置非法、服务拒绝启动;段内不再写 `unit`3D 生成恒为按次计价
2. **提交即拒绝**:价格计算发生在调用 provider 之前;拿不到价格就不提交、不扣费、不入队。
业务给出泥点数值之前,受控默认配置里不写 `model3d` 段:此时 3D 接口不开放,提交直接被拒绝(fail closed),既不会扣费也不会调用 provider;数值写入后即为上一条的强校验路径。
扣费依据固定为**提交时定价**:用户在提交前就能得到确定价格,失败退款是单次冲正,不需要按实际消耗退差额。provider 返回的实际消耗只写日志用于成本对账,不进入契约、不进 API 响应、不进资源行。
价格随 job 写入 `price_mud_points`,扣费与冲正沿用现有资产操作账务(attempt 级 consume / refund ledger);素材侧继续用 `generation_cost_mud_points` 记录单次成本。同一 `Idempotency-Key` 命中已有 job 时直接返回原 operation,不新建、不重复扣费。