diff --git a/docs/technical/【技术方案】Tripo 3D模型Provider集成-2026-09-18.md b/docs/technical/【技术方案】Tripo 3D模型Provider集成-2026-09-18.md index 2e7875ac2..52b906e14 100644 --- a/docs/technical/【技术方案】Tripo 3D模型Provider集成-2026-09-18.md +++ b/docs/technical/【技术方案】Tripo 3D模型Provider集成-2026-09-18.md @@ -2,7 +2,7 @@ ## 目标 -本阶段在 `server-rs/crates/platform-tripo` 内接入固定 revision 的 `tripo3d-sdk`,完成 text-to-model、image-to-model 和 multiview-to-model 三个 3D 生成入口的 Rust provider adapter。三个入口共用同一个 `TripoProviderClient`,分别通过 `submit`、`submit_image_to_model`、`submit_multiview_to_model` 提交;client 另提供显式配置、通用单次 task 查询和模型下载能力。共享产品契约继续由 `shared-contracts` 管理,并始终生成目录化 ts-rs TypeScript binding。 +本阶段在 `server-rs/crates/platform-tripo` 内接入固定 revision 的 `tripo3d-sdk`,完成 text-to-model、image-to-model 和 multiview-to-model 三个 3D 生成入口的 Rust provider adapter。三个入口共用同一个 `TripoProviderClient`,分别通过 `submit_text_to_model`、`submit_image_to_model`、`submit_multiview_to_model` 提交;client 另提供显式配置、通用单次 task 查询和模型下载能力。共享产品契约继续由 `shared-contracts` 管理,并始终生成目录化 ts-rs TypeScript binding。 代码按 API 目录组织:公共 SDK 配置、client、任务映射、错误、下载类型和 task 生命周期 DTO 位于 `platform-tripo/src/common/`;三个生成 API 各自拥有独立目录和结果类型。Rust 与 TypeScript contracts 按 `common/`、`text_to_model/`、`image_to_model/`、`multiview_to_model/` 分目录生成。 @@ -49,7 +49,7 @@ TODO:等待上游 `tripo-rust-sdk` 提供原生 artifact stream API 后,删 ## 验收 - `platform-tripo` 不公开 re-export SDK 类型或 `wait_for_task`。 -- 三个 3D 生成入口的 submit、通用 get task、按 endpoint 严格映射的完成结果和 provider 自有流式 download API 可编译,且共用同一 client 与同一套 `TripoError`。 +- 三个 3D 生成入口的 `submit_text_to_model` / `submit_image_to_model` / `submit_multiview_to_model`、通用 get task、按 endpoint 严格映射的完成结果和 provider 自有流式 download API 可编译,且共用同一 client 与同一套 `TripoError`。 - 三个入口的输入校验可拒绝空白 `prompt` / `input`、视图不足两张和空白 `taskId`;组合校验在调用 SDK 前完成。 - provider 错误统一为 adapter 错误类型。 - shared contracts 的 ts-rs binding 无 feature 开关且始终可生成。 diff --git a/server-rs/crates/api-server/src/tripo3d/worker.rs b/server-rs/crates/api-server/src/tripo3d/worker.rs index 7a23b0fdb..9086d9f6f 100644 --- a/server-rs/crates/api-server/src/tripo3d/worker.rs +++ b/server-rs/crates/api-server/src/tripo3d/worker.rs @@ -146,7 +146,9 @@ async fn submit_and_checkpoint( request: &Model3dJobRequest, ) -> Result { let handle = match request { - Model3dJobRequest::TextToModel(request) => client.submit(&request.generation).await, + Model3dJobRequest::TextToModel(request) => { + client.submit_text_to_model(&request.generation).await + } Model3dJobRequest::ImageToModel(request) => { let input = resolve_image_input( state, diff --git a/server-rs/crates/platform-tripo/examples/tripo_generation_smoke.rs b/server-rs/crates/platform-tripo/examples/tripo_generation_smoke.rs index 6fd8f1b0b..d36e5e3e1 100644 --- a/server-rs/crates/platform-tripo/examples/tripo_generation_smoke.rs +++ b/server-rs/crates/platform-tripo/examples/tripo_generation_smoke.rs @@ -46,7 +46,7 @@ async fn main() -> Result<(), Box> { ))?; let text = client - .submit(&Model3dTextToModelParams { + .submit_text_to_model(&Model3dTextToModelParams { prompt: "a low-poly wooden treasure chest".to_string(), model: Model3dModelVersion::H31, negative_prompt: None, diff --git a/server-rs/crates/platform-tripo/src/text_to_model/client.rs b/server-rs/crates/platform-tripo/src/text_to_model/client.rs index 11b09f7c9..cc34c18f4 100644 --- a/server-rs/crates/platform-tripo/src/text_to_model/client.rs +++ b/server-rs/crates/platform-tripo/src/text_to_model/client.rs @@ -6,7 +6,9 @@ use shared_contracts::model3d::text_to_model::Model3dTextToModelParams; use super::validation::validate_text_to_model_params; impl TripoProviderClient { - pub async fn submit( + /// 提交 text-to-model 任务;命名与另两个入口 `submit_image_to_model` / + /// `submit_multiview_to_model` 保持一致,方法名自带端点。 + pub async fn submit_text_to_model( &self, params: &Model3dTextToModelParams, ) -> Result {