From 36036eed7bceffd3a81a733385cb7246dfee2ef1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Mon, 21 Sep 2026 13:00:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3Tripo=E5=AE=9A=E4=BB=B7?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E5=8F=A3=E5=BE=84=E4=B8=BA=20fail-closed=20?= =?UTF-8?q?=E4=B8=8E=E6=97=A0=E5=8D=95=E4=BD=8D=20-=20=E4=B8=BB=E8=A7=84?= =?UTF-8?q?=E8=8C=83=E5=8E=BB=E6=8E=89=20model3d=20=E6=AE=B5=E7=9A=84=20un?= =?UTF-8?q?it=20=E5=AD=97=E6=AE=B5=EF=BC=8C3D=20=E6=81=92=E4=B8=BA?= =?UTF-8?q?=E6=8C=89=E6=AC=A1=E8=AE=A1=E4=BB=B7=20-=20=E4=B8=BB=E8=A7=84?= =?UTF-8?q?=E8=8C=83=E6=8A=8A=E5=8A=A0=E8=BD=BD=E5=8D=B3=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=AE=B5=E5=AD=98=E5=9C=A8=E6=97=B6=E5=BF=85?= =?UTF-8?q?=E9=A1=BB=E5=85=A8=E9=94=AE=EF=BC=8C=E5=B9=B6=E8=A1=A5=E5=85=85?= =?UTF-8?q?=E6=AE=B5=E7=BC=BA=E5=A4=B1=E5=8D=B3=E6=8B=92=E7=BB=9D=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=20-=20=E5=A5=91=E7=BA=A6=E9=87=8C=E7=A8=8B=E7=A2=91?= =?UTF-8?q?=E9=AA=8C=E6=94=B6=E7=AC=AC=206=20=E6=9D=A1=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E4=B8=BA=E6=AE=B5=E7=BC=BA=E5=A4=B1=20fail-closed=20-=20?= =?UTF-8?q?=E5=AE=9E=E6=96=BD=E8=AE=A1=E5=88=92=E6=8A=8A=E5=AE=9A=E4=BB=B7?= =?UTF-8?q?=E6=AD=A5=E9=AA=A4=E6=8C=87=E5=90=91=20api-server/src/tripo3d/p?= =?UTF-8?q?ricing.rs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../【实施计划】Tripo生成API契约与数据模型-2026-09-21.md | 4 ++-- .../plans/【里程碑】Tripo生成API契约与数据模型-2026-09-21.md | 2 +- docs/technical/【技术方案】Tripo 3D生成API集成-2026-09-21.md | 5 +++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/project-memory/plans/【实施计划】Tripo生成API契约与数据模型-2026-09-21.md b/docs/project-memory/plans/【实施计划】Tripo生成API契约与数据模型-2026-09-21.md index fafbb825f..42f430239 100644 --- a/docs/project-memory/plans/【实施计划】Tripo生成API契约与数据模型-2026-09-21.md +++ b/docs/project-memory/plans/【实施计划】Tripo生成API契约与数据模型-2026-09-21.md @@ -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 追加字段与定价结构三处。 - diff --git a/docs/project-memory/plans/【里程碑】Tripo生成API契约与数据模型-2026-09-21.md b/docs/project-memory/plans/【里程碑】Tripo生成API契约与数据模型-2026-09-21.md index 68b83f251..8d0b00c91 100644 --- a/docs/project-memory/plans/【里程碑】Tripo生成API契约与数据模型-2026-09-21.md +++ b/docs/project-memory/plans/【里程碑】Tripo生成API契约与数据模型-2026-09-21.md @@ -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` 通过。 diff --git a/docs/technical/【技术方案】Tripo 3D生成API集成-2026-09-21.md b/docs/technical/【技术方案】Tripo 3D生成API集成-2026-09-21.md index b356d5e1d..37a947908 100644 --- a/docs/technical/【技术方案】Tripo 3D生成API集成-2026-09-21.md +++ b/docs/technical/【技术方案】Tripo 3D生成API集成-2026-09-21.md @@ -90,7 +90,6 @@ ImageToModelResult = { modelArtifact, renderedPreview } ```json "model3d": { - "unit": "perGeneration", "basePrices": { "text-to-model": { "": { "noTexture": 泥点, "texture": 泥点 } }, "image-to-model": { "": { "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,不新建、不重复扣费。