记录Tripo真实冒烟结果结构
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Successful in 7m41s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Successful in 7m48s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Successful in 7m50s
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Successful in 8m0s
Project CI / Backend tests (pull_request) Failing after 11s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m17s
Project CI / Repository checks (pull_request) Failing after 10s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m29s
Project CI / Frontend tests (pull_request) Successful in 14m49s
Project CI / AI game creator shell web tests (pull_request) Failing after 18m48s
Project CI / Native shell tests (pull_request) Failing after 27m31s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Successful in 7m41s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Successful in 7m48s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Successful in 7m50s
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Successful in 8m0s
Project CI / Backend tests (pull_request) Failing after 11s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m17s
Project CI / Repository checks (pull_request) Failing after 10s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m29s
Project CI / Frontend tests (pull_request) Successful in 14m49s
Project CI / AI game creator shell web tests (pull_request) Failing after 18m48s
Project CI / Native shell tests (pull_request) Failing after 27m31s
保留三个生成入口的脱敏真实结果形状与下载产物信息 使用实际可访问的 Rustacean 图片完成 image 与 multiview 示例 同步严格 endpoint 结果契约和真实 Provider 验收文档
This commit is contained in:
@@ -5,3 +5,5 @@
|
||||
`tripo3d-sdk` 只允许出现在 `platform-tripo` 内部。该 crate 以显式必填配置创建可复用 provider client,只公开自己的 text-to-model、image-to-model、multiview-to-model DTO、通用单次 task 查询、显式模型下载和结构化错误;不暴露 SDK 类型、`wait_for_task` 或后台轮询。共享产品契约与 provider task 结果分层,provider adapter 不伪造 `resourceId`/`assetId`;shared-contracts 的 Rust 类型始终通过 ts-rs 生成目录化 TypeScript binding。
|
||||
|
||||
选择这个边界是为了避免 API 层绑定第三方 SDK 的任务/错误模型,同时让未来的资源持久化、幂等和 provider 替换由应用层负责。请求 enum 以 Tripo API 文档为准;当前 `compress=geometry`、纹理质量 `fast/standard/detailed/extreme` 及纹理版本已经纳入目录化 Rust/TypeScript contracts。文档确认不存在于这三个 endpoint 的 `style` 字段不再保留占位类型,组合约束在 provider 副作用前执行。
|
||||
|
||||
完成结果按 endpoint 建模为严格类型:text-to-model 要求模型、渲染图和生成参考图 URL,image-to-model 与 multiview-to-model 要求模型和渲染图 URL;共同 task DTO 只用 enum 标识具体结果,不再提供由 `Vec` 和可选字段组成的宽松通用 output。URL 使用语义中性的 `TripoUrl`,真实响应缺少对应必填字段时以 output schema error 失败关闭。
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
本阶段在 `server-rs/crates/platform-tripo` 内接入固定 revision 的 `tripo3d-sdk`,完成 text-to-model、image-to-model 和 multiview-to-model 三个 3D 生成入口的 Rust provider adapter。adapter 提供显式配置、提交、单次通用 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/` 分目录生成。
|
||||
代码按 API 目录组织:公共 SDK 配置、client、任务映射、错误、下载类型和 task 生命周期 DTO 位于 `platform-tripo/src/common/`;三个生成 API 各自拥有独立目录和结果类型。Rust 与 TypeScript contracts 按 `common/`、`text_to_model/`、`image_to_model/`、`multiview_to_model/` 分目录生成。
|
||||
|
||||
## 非目标
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
|
||||
provider task 结果与产品资源结果分离。provider adapter 不生成 `resourceId` 或 `assetId`;未来应用层在资源持久化后再构造带资源 ID 的产品 DTO。模型 URL 被视为临时 provider 引用,下载由显式方法完成。
|
||||
|
||||
task 尚未完成时 `output` 为空;完成后 `output` 必须是与 task type 一致的 enum variant,不使用把不同 endpoint 字段揉在一起的通用可选字段结构。真实 provider smoke 确认:text-to-model 结果固定包含 `model_url`、`rendered_image_url`、`generated_image_url`;image-to-model 和 multiview-to-model 结果固定包含 `model_url`、`rendered_image_url`。这些字段在各自结果 struct 中均为必填 `TripoUrl`;缺失、URL 非法或 task type 不受支持时返回 `TripoError::OutputSchema`。
|
||||
|
||||
## 请求与类型
|
||||
|
||||
三个生成请求使用官方文档已确认的 enum:模型版本、纹理版本、纹理质量(含 `fast`)、几何质量、纹理对齐、输入方向、导出方向和压缩类型(`geometry`)。文档未将 `style` 列为这三个 endpoint 的请求字段,因此不再保留占位 enum。
|
||||
@@ -27,7 +29,7 @@ provider task 结果与产品资源结果分离。provider adapter 不生成 `re
|
||||
## 验收
|
||||
|
||||
- `platform-tripo` 不公开 re-export SDK 类型或 `wait_for_task`。
|
||||
- 三个 3D 生成入口的 submit、通用 get task、固定 SDK output 字段映射和显式 download API 可编译。
|
||||
- 三个 3D 生成入口的 submit、通用 get task、按 endpoint 严格映射的完成结果和显式 download API 可编译。
|
||||
- provider 错误统一为 adapter 错误类型。
|
||||
- shared contracts 的 ts-rs binding 无 feature 开关且始终可生成。
|
||||
- 未运行真实 Provider smoke;需要 API key 的联调另行执行。
|
||||
- 真实 Provider smoke 已覆盖三个入口;example 保留脱敏后的结果结构和下载产物信息。
|
||||
|
||||
@@ -23,8 +23,7 @@ use shared_contracts::model3d::{
|
||||
};
|
||||
use tripo3d_sdk::{ClientOptions, TripoClient, WaitOptions};
|
||||
|
||||
const SAMPLE_IMAGE_URL: &str =
|
||||
"https://raw.githubusercontent.com/VAST-AI-Research/tripo-python-sdk/master/example.png";
|
||||
const SAMPLE_IMAGE_URL: &str = "https://www.rustacean.net/assets/rustacean-flat-happy.png";
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
@@ -174,3 +173,14 @@ fn required_env(name: &str) -> Result<String, String> {
|
||||
}
|
||||
Ok(value)
|
||||
}
|
||||
|
||||
// Example result shape from a real smoke run (signed auth_key values omitted):
|
||||
// text_to_model task_id=ccbb228c-6a0e-46b9-8fcc-46fefbb38039
|
||||
// image_to_model task_id=69a8b158-23a4-4856-8996-58c070b4fa75
|
||||
// multiview_to_model task_id=7191545c-5007-4b24-aa69-a50feaf7054c
|
||||
// text_to_model status=Completed progress=Some(100) output=Some(TextToModel(TripoTextToModelResult { model_url: TripoUrl("https://openapi.cdn.tripo3d.com/.../tripo_pbr_model.glb?<redacted>"), rendered_image_url: TripoUrl("https://openapi.cdn.tripo3d.com/.../legacy_mesh.webp?<redacted>"), generated_image_url: TripoUrl("https://openapi.cdn.tripo3d.com/.../text2image.jpeg?<redacted>") }))
|
||||
// image_to_model status=Completed progress=Some(100) output=Some(ImageToModel(TripoImageToModelResult { model_url: TripoUrl("https://openapi.cdn.tripo3d.com/.../tripo_pbr_model.glb?<redacted>"), rendered_image_url: TripoUrl("https://openapi.cdn.tripo3d.com/.../legacy_mesh.webp?<redacted>") }))
|
||||
// multiview_to_model status=Completed progress=Some(100) output=Some(MultiviewToModel(TripoMultiviewToModelResult { model_url: TripoUrl("https://openapi.cdn.tripo3d.com/.../tripo_pbr_model.glb?<redacted>"), rendered_image_url: TripoUrl("https://openapi.cdn.tripo3d.com/.../legacy_mesh.webp?<redacted>") }))
|
||||
// text_to_model artifact=text_to_model.glb bytes=41443076 url=https://openapi.cdn.tripo3d.com/.../tripo_pbr_model.glb?<redacted>
|
||||
// image_to_model artifact=image_to_model.glb bytes=42363084 url=https://openapi.cdn.tripo3d.com/.../tripo_pbr_model.glb?<redacted>
|
||||
// multiview_to_model artifact=multiview_to_model.glb bytes=42724784 url=https://openapi.cdn.tripo3d.com/.../tripo_pbr_model.glb?<redacted>
|
||||
|
||||
Reference in New Issue
Block a user