From 1749f427c1dd360dcb2a392c5d65caa72bd96c22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 22 Sep 2026 15:45:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=BF=AB=E7=85=A7=E5=8F=AA?= =?UTF-8?q?=E5=9C=A8=E5=A4=B1=E8=B4=A5=E7=BB=88=E6=80=81=E4=BF=9D=E7=95=99?= =?UTF-8?q?=20failure?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - failure 改由终态判定驱动,不再只看 provider 是否留下错误字段 - 已完成的任务即使带过期错误字段也不再挂 failure,保持快照内部自洽 --- .../platform-tripo/src/common/mapping.rs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/server-rs/crates/platform-tripo/src/common/mapping.rs b/server-rs/crates/platform-tripo/src/common/mapping.rs index bd42255dc..bfcb32449 100644 --- a/server-rs/crates/platform-tripo/src/common/mapping.rs +++ b/server-rs/crates/platform-tripo/src/common/mapping.rs @@ -35,11 +35,11 @@ pub(crate) fn map_task(task: Task) -> Result { status, progress: task.progress, output, - failure: (task.error_code.is_some() || task.error_message.is_some()).then(|| { - TripoTaskFailure { - code: task.error_code, - message: task.error_message, - } + // 只有非成功的终态才可能带 provider 失败信息:provider 留下过期错误字段时, + // 已完成的快照不该再挂 failure,否则快照内部自相矛盾。 + failure: is_terminal_failure(status).then(|| TripoTaskFailure { + code: task.error_code, + message: task.error_message, }), created_at: task.created_at, completed_at: task.completed_at, @@ -72,6 +72,14 @@ fn map_status(status: TaskStatus) -> Result { } } +/// 失败 / 取消 / 过期是「任务已结束且没有可用产物」的终态,只有它们允许携带失败信息。 +fn is_terminal_failure(status: Model3dTaskStatus) -> bool { + matches!( + status, + Model3dTaskStatus::Failed | Model3dTaskStatus::Cancelled | Model3dTaskStatus::Expired + ) +} + fn map_output( task_id: &str, task_type: &TripoTaskType,