三个提交入口统一校验 provider 返回的 task id
- 新增 submitted_task_handle:空白 id 在提交调用附近以 OutputSchema 失败 - text / image / multiview 提交路径共用它,任务不再以孤儿状态等到下游查询才报错
This commit is contained in:
@@ -17,6 +17,6 @@ pub use types::{
|
||||
TripoTaskType, TripoUrl,
|
||||
};
|
||||
pub(crate) use validation::{
|
||||
TripoGenerationOptions, validate_generation_options, validate_task_id,
|
||||
TripoGenerationOptions, submitted_task_handle, validate_generation_options, validate_task_id,
|
||||
};
|
||||
pub(crate) use wire::{wire, wire_option};
|
||||
|
||||
@@ -5,7 +5,7 @@ use shared_contracts::model3d::common::{
|
||||
use shared_contracts::model3d::image_to_model::Model3dImageToModelParams;
|
||||
use shared_contracts::model3d::text_to_model::Model3dTextToModelParams;
|
||||
|
||||
use super::{TripoError, TripoField, TripoValidationReason};
|
||||
use super::{TripoError, TripoField, TripoTaskHandle, TripoValidationReason};
|
||||
|
||||
pub(crate) struct TripoGenerationOptions {
|
||||
pub model: Model3dModelVersion,
|
||||
@@ -263,3 +263,18 @@ pub(crate) fn validate_task_id(task_id: &str) -> Result<(), TripoError> {
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// 提交成功后立刻收口 provider 返回的 task id。
|
||||
///
|
||||
/// 空白 id 是 provider 违约,不是调用方参数问题:必须在提交调用附近以 `OutputSchema`
|
||||
/// 失败,而不是拖到下游 `get_task` 才报错——那时任务已经提交出去,成为无法追踪的孤儿。
|
||||
pub(crate) fn submitted_task_handle(task_id: String) -> Result<TripoTaskHandle, TripoError> {
|
||||
let task_id = task_id.trim().to_string();
|
||||
if task_id.is_empty() {
|
||||
return Err(TripoError::OutputSchema {
|
||||
task_id: "submit".into(),
|
||||
message: "submit response has no task_id".into(),
|
||||
});
|
||||
}
|
||||
Ok(TripoTaskHandle { task_id })
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ use tripo3d_sdk::{models::FileInput, params::ImageToModelParams};
|
||||
|
||||
use crate::common::{
|
||||
TripoError, TripoField, TripoProviderClient, TripoTaskHandle, TripoValidationReason,
|
||||
extra_fields, wire, wire_option,
|
||||
extra_fields, submitted_task_handle, wire, wire_option,
|
||||
};
|
||||
|
||||
use super::validation::validate_image_to_model_params;
|
||||
@@ -104,7 +104,7 @@ impl TripoProviderClient {
|
||||
.image_to_model(to_sdk_params(input, params)?)
|
||||
.await
|
||||
.map_err(TripoError::from)?;
|
||||
Ok(TripoTaskHandle { task_id })
|
||||
submitted_task_handle(task_id)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@ use tripo3d_sdk::{models::FileInput, params::MultiviewToModelParams};
|
||||
|
||||
use crate::common::{
|
||||
TripoError, TripoField, TripoGenerationOptions, TripoProviderClient, TripoTaskHandle,
|
||||
TripoValidationReason, extra_fields, validate_generation_options, validate_task_id, wire,
|
||||
wire_option,
|
||||
TripoValidationReason, extra_fields, submitted_task_handle, validate_generation_options,
|
||||
validate_task_id, wire, wire_option,
|
||||
};
|
||||
|
||||
impl TripoProviderClient {
|
||||
@@ -62,7 +62,7 @@ impl TripoProviderClient {
|
||||
.multiview_to_model(to_sdk_params(request)?)
|
||||
.await
|
||||
.map_err(TripoError::from)?;
|
||||
Ok(TripoTaskHandle { task_id })
|
||||
submitted_task_handle(task_id)
|
||||
}
|
||||
}
|
||||
/// 空白(含纯空白)视图按「未提供」处理:提交前校验与 SDK 参数转换共用这一条规则。
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
use crate::common::{
|
||||
TripoError, TripoProviderClient, TripoTaskHandle, extra_fields, wire, wire_option,
|
||||
TripoError, TripoProviderClient, TripoTaskHandle, extra_fields, submitted_task_handle, wire,
|
||||
wire_option,
|
||||
};
|
||||
use shared_contracts::model3d::text_to_model::Model3dTextToModelParams;
|
||||
|
||||
@@ -18,7 +19,7 @@ impl TripoProviderClient {
|
||||
.text_to_model(to_sdk_params(params)?)
|
||||
.await
|
||||
.map_err(TripoError::from)?;
|
||||
Ok(TripoTaskHandle { task_id })
|
||||
submitted_task_handle(task_id)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user