From d0123927796c912b9061ef39c562a3383cc6e3d4 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:23:18 +0800 Subject: [PATCH] =?UTF-8?q?api-server=20=E5=A2=9E=E5=8A=A0=20Tripo=20?= =?UTF-8?q?=E7=94=9F=E6=88=90=E7=9A=84=E7=8E=AF=E5=A2=83=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=20-=20AppConfig=20=E6=96=B0=E5=A2=9E=20tripo=5Fbase=5Furl=20/?= =?UTF-8?q?=20tripo=5Fapi=5Fkey=20/=20=E8=AF=B7=E6=B1=82=E8=B6=85=E6=97=B6?= =?UTF-8?q?=20/=20=E9=87=8D=E8=AF=95=E5=9B=9B=E4=B8=AA=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=20-=20=E9=BB=98=E8=AE=A4=E7=BD=91=E5=85=B3=E6=8C=87=E5=90=91?= =?UTF-8?q?=20Tripo=20=E5=AE=98=E6=96=B9=20v3=20=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=EF=BC=8C=E5=8F=AF=E7=94=B1=20TRIPO=5FBASE=5FURL=20=E8=A6=86?= =?UTF-8?q?=E7=9B=96=20-=20=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F=E6=B2=BF?= =?UTF-8?q?=E7=94=A8=20provider=20=E7=A4=BA=E4=BE=8B=E7=9A=84=20TRIPO=5F*?= =?UTF-8?q?=20=E5=8F=A3=E5=BE=84=EF=BC=8CAPI=20Key=20=E7=BC=BA=E7=9C=81?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA=20-=20=E9=BB=98=E8=AE=A4=E5=80=BC=E6=96=AD?= =?UTF-8?q?=E8=A8=80=E8=A1=A5=E8=BF=9B=E9=85=8D=E7=BD=AE=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server-rs/crates/api-server/src/config.rs | 35 +++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/server-rs/crates/api-server/src/config.rs b/server-rs/crates/api-server/src/config.rs index 6a50319a2..ae144dd7b 100644 --- a/server-rs/crates/api-server/src/config.rs +++ b/server-rs/crates/api-server/src/config.rs @@ -19,6 +19,10 @@ const DEFAULT_EXTERNAL_GENERATION_WORKER_JOB_TIMEOUT_SECONDS: u64 = 900; const DEFAULT_EXTERNAL_GENERATION_WORKER_LONG_JOB_TIMEOUT_SECONDS: u64 = 1_800; pub(crate) const DEFAULT_VECTOR_ENGINE_IMAGE_REQUEST_TIMEOUT_MS: u64 = 1_000_000; pub(crate) const DEFAULT_ELEVENLABS_REQUEST_TIMEOUT_MS: u64 = 180_000; +/// Tripo 官方网关地址;只作为默认值,部署可用 `TRIPO_BASE_URL` 覆盖。 +const DEFAULT_TRIPO_BASE_URL: &str = "https://openapi.tripo3d.com/v3"; +pub(crate) const DEFAULT_TRIPO_REQUEST_TIMEOUT_MS: u64 = 60_000; +const DEFAULT_TRIPO_RETRIES: u32 = 2; const DEFAULT_EDITOR_BGFILTER_BASE_URL: &str = "http://58.87.105.82/bgfilter"; const DEFAULT_EDITOR_BGFILTER_SINGLE_IMAGE_ESTIMATE_MS: u64 = 5_000; const BGFILTER_ATTEMPT_SAFETY_FACTOR: u64 = 2; @@ -219,6 +223,10 @@ pub struct AppConfig { pub hyper3d_base_url: String, pub hyper3d_api_key: Option, pub hyper3d_model_request_timeout_ms: u64, + pub tripo_base_url: String, + pub tripo_api_key: Option, + pub tripo_request_timeout_ms: u64, + pub tripo_retries: u32, pub volcengine_speech_api_key: Option, pub volcengine_speech_app_id: Option, pub volcengine_speech_access_key: Option, @@ -529,6 +537,10 @@ impl Default for AppConfig { hyper3d_base_url: "https://api.hyper3d.com/api/v2".to_string(), hyper3d_api_key: None, hyper3d_model_request_timeout_ms: 180_000, + tripo_base_url: DEFAULT_TRIPO_BASE_URL.to_string(), + tripo_api_key: None, + tripo_request_timeout_ms: DEFAULT_TRIPO_REQUEST_TIMEOUT_MS, + tripo_retries: DEFAULT_TRIPO_RETRIES, volcengine_speech_api_key: None, volcengine_speech_app_id: None, volcengine_speech_access_key: None, @@ -1347,6 +1359,22 @@ impl AppConfig { config.hyper3d_model_request_timeout_ms = hyper3d_model_request_timeout_ms; } + if let Some(tripo_base_url) = read_first_non_empty_env(&["TRIPO_BASE_URL"]) { + config.tripo_base_url = tripo_base_url; + } + + config.tripo_api_key = read_first_non_empty_env(&["TRIPO_API_KEY"]); + + if let Some(tripo_request_timeout_ms) = + read_first_positive_u64_env(&["TRIPO_REQUEST_TIMEOUT_MS"]) + { + config.tripo_request_timeout_ms = tripo_request_timeout_ms; + } + + if let Some(tripo_retries) = read_first_u32_env(&["TRIPO_RETRIES"]) { + config.tripo_retries = tripo_retries; + } + config.volcengine_speech_api_key = read_first_non_empty_env(&["VOLCENGINE_SPEECH_API_KEY", "VOLCENGINE_API_KEY"]); config.volcengine_speech_app_id = @@ -1837,6 +1865,13 @@ mod tests { ); assert!(config.ark_character_video_base_url.is_empty()); assert_eq!(config.hyper3d_base_url, "https://api.hyper3d.com/api/v2"); + assert_eq!(config.tripo_base_url, DEFAULT_TRIPO_BASE_URL); + assert!(config.tripo_api_key.is_none()); + assert_eq!( + config.tripo_request_timeout_ms, + DEFAULT_TRIPO_REQUEST_TIMEOUT_MS + ); + assert_eq!(config.tripo_retries, DEFAULT_TRIPO_RETRIES); assert!(config.ark_character_video_model.is_empty()); assert!(config.dashscope_scene_image_model.is_empty()); assert!(config.dashscope_reference_image_model.is_empty());