修正Tripo定价文档口径为 fail-closed 与无单位
- 主规范去掉 model3d 段的 unit 字段,3D 恒为按次计价 - 主规范把加载即校验改为段存在时必须全键,并补充段缺失即拒绝提交 - 契约里程碑验收第 6 条同步为段缺失 fail-closed - 实施计划把定价步骤指向 api-server/src/tripo3d/pricing.rs
This commit is contained in:
@@ -28,7 +28,8 @@ Milestone Spec: `docs/project-memory/plans/【里程碑】Tripo生成API契约
|
||||
- 验收:`npm run check:spacetime-schema` 通过;新 procedure 对过期租约与错误 lease token 返回拒绝。
|
||||
|
||||
4. **泥点定价结构**
|
||||
- `api-server/src/editor_generation_config.rs` 增加 `model3d` 段:底价按 `endpoint × modelVersion × 是否有贴图`,add-on 按固定键表;`validate` 要求两个端点 × 每个受支持模型版本 × 两种贴图态全部存在。
|
||||
- `api-server/src/tripo3d/pricing.rs` 定义 `model3d` 段:底价按 `endpoint × modelVersion × 是否有贴图`,add-on 按固定键表;`validate` 要求两个端点 × 每个受支持模型版本 × 两种贴图态与全部 add-on 键同时存在。
|
||||
- `editor_generation_config.rs` 把该段作为可选子配置挂进现有定价快照:段缺失代表 3D 定价未配置,提交侧 fail closed,不扣费也不调用 provider。
|
||||
- 新增价格解析函数:输入端点、模型版本、贴图态与命中的 add-on 集合,返回泥点价格;缺键返回错误,不回退默认值。
|
||||
- 默认配置文件的生产数值待业务提供;在此之前只落地结构与校验,配置测试使用测试夹具,不写入臆测价格。
|
||||
- 验收:缺键加载失败、add-on 命中断言、`fast` / `standard` 不加价的单测通过。
|
||||
@@ -61,4 +62,3 @@ git diff --check
|
||||
- **定价数值未定**:结构可以先落地,但接口在真实价格写入前不得开放;里程碑二以此为前置依赖。
|
||||
- **契约目录扩张**:新类型只落在 `model3d` 既有目录内,不引入新的顶层契约目录,避免 barrel 维护成本上升。
|
||||
- **回退点**:本里程碑不新增路由、不改 worker 分支,回退范围为契约、schema 追加字段与定价结构三处。
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ Parent Spec: `docs/technical/【技术方案】Tripo 3D生成API集成-2026-09-2
|
||||
3. `source` 同时给出两个 ID、或使用裸字符串时被拒绝。
|
||||
4. `external_generation_job` 新字段追加在结构体末尾且带显式默认值;`migration.rs`、表目录与生成绑定同步,`npm run check:spacetime-schema` 通过。
|
||||
5. checkpoint procedure 只在租约有效且 lease token 匹配时写入;过期或错误 token 被拒。
|
||||
6. 定价配置缺少任一底价键时加载失败;add-on 判定对贴图四档、几何质量、quad、smart-low-poly、generate-parts 均有单测覆盖,且 `fast` / `standard` 不加价。
|
||||
6. `model3d` 定价段存在时缺少任一底价键或 add-on 键即加载失败;段缺失时 Tripo 提交被拒绝且不调用 provider;add-on 判定对贴图四档、几何质量、quad、smart-low-poly、generate-parts 均有单测覆盖,且 `fast` / `standard` 不加价。
|
||||
7. 组合校验拒绝 `texture=false` 同现 `textureQuality`(平台规则)与 `generateParts=true` 同现 `texture=true`(provider 规则)等非法组合,且校验发生在任何 provider 调用与扣费之前。
|
||||
8. `npm run check:encoding`、`node scripts/check-doc-index.mjs`、`git diff --check` 通过。
|
||||
|
||||
|
||||
@@ -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,不新建、不重复扣费。
|
||||
|
||||
Reference in New Issue
Block a user