From 0982b952cba8ed007d15c182ed2a6f7529fbe854 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 15:08:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B6=E6=95=9BTripo=E4=B8=89=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=E9=87=8D=E5=A4=8D=E7=9A=84extra=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=9E=84=E9=80=A0=20-=20=E6=96=B0=E5=A2=9E=20common/extra.rs?= =?UTF-8?q?=20=E7=BB=9F=E4=B8=80=E6=9E=84=E9=80=A0=20texture=5Fversion=20?= =?UTF-8?q?=E4=B8=8E=20delight=20=E7=9A=84=20SDK=20extra=20=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=8C=E9=94=AE=E5=90=8D=E5=8F=AA=E7=95=99=E4=B8=80?= =?UTF-8?q?=E4=BB=BD=20-=20text=5Fto=5Fmodel=20=E4=B8=8E=20image=5Fto=5Fmo?= =?UTF-8?q?del=20=E5=88=A0=E9=99=A4=E5=90=84=E8=87=AA=E7=9A=84=20extra=5Ff?= =?UTF-8?q?ields=20=E5=89=AF=E6=9C=AC=EF=BC=8C=E6=94=B9=E8=B0=83=E5=85=AC?= =?UTF-8?q?=E5=85=B1=E5=AE=9E=E7=8E=B0=20-=20multiview=5Fto=5Fmodel=20?= =?UTF-8?q?=E7=9A=84=E5=86=85=E8=81=94=20extra.insert=20=E4=B9=9F=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=A4=8D=E7=94=A8=E5=90=8C=E4=B8=80=E6=9E=84=E9=80=A0?= =?UTF-8?q?=20-=20=E6=9C=AA=E6=8F=90=E4=BE=9B=E7=9A=84=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E4=BB=8D=E4=B8=8D=E5=86=99=E5=85=A5=20extra=EF=BC=8C=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E4=BD=93=E8=A1=8C=E4=B8=BA=E4=B8=8E=E5=8E=9F=E5=85=88?= =?UTF-8?q?=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../crates/platform-tripo/src/common/extra.rs | 31 +++++++++++++++++++ .../crates/platform-tripo/src/common/mod.rs | 2 ++ .../src/image_to_model/client.rs | 20 ++---------- .../src/multiview_to_model/client.rs | 14 ++------- .../src/text_to_model/client.rs | 20 +----------- 5 files changed, 38 insertions(+), 49 deletions(-) create mode 100644 server-rs/crates/platform-tripo/src/common/extra.rs diff --git a/server-rs/crates/platform-tripo/src/common/extra.rs b/server-rs/crates/platform-tripo/src/common/extra.rs new file mode 100644 index 000000000..14ef2d2cd --- /dev/null +++ b/server-rs/crates/platform-tripo/src/common/extra.rs @@ -0,0 +1,31 @@ +//! provider 请求的 SDK `extra` 字段构造。 +//! +//! `texture_version` 与 `delight` 不在 SDK params 的具名参数里,只能按 SDK 期望的 +//! 键名透传。键名一旦在某个入口写错,请求体就会静默丢字段,所以三个生成入口共用 +//! 同一份构造逻辑,不在各 endpoint 里各写一遍。 + +use std::collections::HashMap; + +use serde_json::Value; +use shared_contracts::model3d::common::Model3dTextureVersion; + +const EXTRA_TEXTURE_VERSION: &str = "texture_version"; +const EXTRA_DELIGHT: &str = "delight"; + +/// 按 provider 需要的键名构造 `extra`;未提供的参数不写入,由 provider 取默认值。 +pub(crate) fn extra_fields( + texture_version: Option, + delight: Option, +) -> HashMap { + let mut extra = HashMap::new(); + if let Some(value) = texture_version { + extra.insert( + EXTRA_TEXTURE_VERSION.into(), + Value::String(value.as_str().into()), + ); + } + if let Some(value) = delight { + extra.insert(EXTRA_DELIGHT.into(), Value::Bool(value)); + } + extra +} diff --git a/server-rs/crates/platform-tripo/src/common/mod.rs b/server-rs/crates/platform-tripo/src/common/mod.rs index f5ad1094d..5529bb3da 100644 --- a/server-rs/crates/platform-tripo/src/common/mod.rs +++ b/server-rs/crates/platform-tripo/src/common/mod.rs @@ -1,6 +1,7 @@ mod client; mod config; mod error; +mod extra; mod mapping; mod types; mod validation; @@ -8,6 +9,7 @@ mod validation; pub use client::TripoProviderClient; pub use config::TripoSettings; pub use error::{TripoError, TripoField, TripoValidationReason}; +pub(crate) use extra::extra_fields; pub(crate) use mapping::map_task; pub use types::{ TripoDownloadedArtifact, TripoTaskFailure, TripoTaskHandle, TripoTaskOutput, TripoTaskSnapshot, diff --git a/server-rs/crates/platform-tripo/src/image_to_model/client.rs b/server-rs/crates/platform-tripo/src/image_to_model/client.rs index c9ae60941..0c17d84bb 100644 --- a/server-rs/crates/platform-tripo/src/image_to_model/client.rs +++ b/server-rs/crates/platform-tripo/src/image_to_model/client.rs @@ -1,12 +1,13 @@ use shared_contracts::model3d::common::{ Model3dCompression, Model3dExportOrientation, Model3dGeometryQuality, Model3dInputOrientation, - Model3dTextureAlignment, Model3dTextureQuality, Model3dTextureVersion, + Model3dTextureAlignment, Model3dTextureQuality, }; use shared_contracts::model3d::image_to_model::Model3dImageToModelParams; use tripo3d_sdk::{models::FileInput, params::ImageToModelParams}; use crate::common::{ TripoError, TripoField, TripoProviderClient, TripoTaskHandle, TripoValidationReason, + extra_fields, }; use super::validation::validate_image_to_model_params; @@ -150,20 +151,3 @@ fn to_sdk_params(input: FileInput, params: &Model3dImageToModelParams) -> ImageT style: None, } } - -fn extra_fields( - texture_version: Option, - delight: Option, -) -> std::collections::HashMap { - let mut extra = std::collections::HashMap::new(); - if let Some(value) = texture_version { - extra.insert( - "texture_version".into(), - serde_json::Value::String(value.as_str().into()), - ); - } - if let Some(value) = delight { - extra.insert("delight".into(), serde_json::Value::Bool(value)); - } - extra -} diff --git a/server-rs/crates/platform-tripo/src/multiview_to_model/client.rs b/server-rs/crates/platform-tripo/src/multiview_to_model/client.rs index c69c0cd73..1117b5653 100644 --- a/server-rs/crates/platform-tripo/src/multiview_to_model/client.rs +++ b/server-rs/crates/platform-tripo/src/multiview_to_model/client.rs @@ -9,7 +9,7 @@ use tripo3d_sdk::{models::FileInput, params::MultiviewToModelParams}; use crate::common::{ TripoError, TripoField, TripoGenerationOptions, TripoProviderClient, TripoTaskHandle, - TripoValidationReason, validate_generation_options, validate_task_id, + TripoValidationReason, extra_fields, validate_generation_options, validate_task_id, }; impl TripoProviderClient { @@ -106,17 +106,7 @@ fn to_sdk_params(request: &Model3dMultiviewToModelRequest) -> MultiviewToModelPa .texture_quality .map(Model3dTextureQuality::as_str) .map(str::to_owned); - if let Some(value) = request.texture_version { - params.extra.insert( - "texture_version".into(), - serde_json::Value::String(value.as_str().into()), - ); - } - if let Some(value) = request.delight { - params - .extra - .insert("delight".into(), serde_json::Value::Bool(value)); - } + params.extra = extra_fields(request.texture_version, request.delight); params.geometry_quality = request .geometry_quality .map(Model3dGeometryQuality::as_str) 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 e253faa22..fa11c5755 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 @@ -1,7 +1,6 @@ -use crate::common::{TripoError, TripoProviderClient, TripoTaskHandle}; +use crate::common::{TripoError, TripoProviderClient, TripoTaskHandle, extra_fields}; use shared_contracts::model3d::common::{ Model3dCompression, Model3dExportOrientation, Model3dGeometryQuality, Model3dTextureQuality, - Model3dTextureVersion, }; use shared_contracts::model3d::text_to_model::Model3dTextToModelParams; @@ -58,20 +57,3 @@ fn to_sdk_params(params: &Model3dTextToModelParams) -> tripo3d_sdk::params::Text style: None, } } - -fn extra_fields( - texture_version: Option, - delight: Option, -) -> std::collections::HashMap { - let mut extra = std::collections::HashMap::new(); - if let Some(value) = texture_version { - extra.insert( - "texture_version".into(), - serde_json::Value::String(value.as_str().into()), - ); - } - if let Some(value) = delight { - extra.insert("delight".into(), serde_json::Value::Bool(value)); - } - extra -}