From a50cbfb6c895a451903228a753d9145b2b5e7865 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Thu, 10 Sep 2026 19:04:40 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=87=E6=BB=A4=E5=9B=BE=E7=89=87=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E5=93=8D=E5=BA=94=E4=B8=AD=E7=9A=84=E7=A9=BA=E5=9B=BE?= =?UTF-8?q?=E5=83=8F=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 忽略上游返回的空 b64_json 条目,避免把空字符串转发为图像结果。 新增空条目与有效条目混合响应的回归测试。 --- .../src/vector_engine/raw_edit.rs | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/server-rs/crates/platform-image/src/vector_engine/raw_edit.rs b/server-rs/crates/platform-image/src/vector_engine/raw_edit.rs index d215adbbc..984d37add 100644 --- a/server-rs/crates/platform-image/src/vector_engine/raw_edit.rs +++ b/server-rs/crates/platform-image/src/vector_engine/raw_edit.rs @@ -264,11 +264,7 @@ pub async fn create_vector_engine_raw_image_edit( }); } }; - let b64_images = payload - .data - .into_iter() - .map(|entry| entry.b64_json) - .collect::>(); + let b64_images = collect_b64_images(payload.data); if b64_images.is_empty() { let message = format!("{failure_context}:上游未返回 b64_json 图片"); let audit = build_failure_audit( @@ -299,6 +295,13 @@ pub async fn create_vector_engine_raw_image_edit( }) } +fn collect_b64_images(data: Vec) -> Vec { + data.into_iter() + .map(|entry| entry.b64_json) + .filter(|value| !value.is_empty()) + .collect() +} + fn invalid_request(context: &str, message: String) -> PlatformImageError { PlatformImageError::InvalidRequest { provider: VECTOR_ENGINE_PROVIDER, @@ -415,6 +418,16 @@ mod tests { assert!(serde_json::from_str::(r#"{"data":[{}]}"#).is_err()); } + #[test] + fn raw_success_response_discards_empty_b64_json_entries() { + let payload: RawImageEditResponsePayload = serde_json::from_str( + r#"{"data":[{"b64_json":""},{"b64_json":"valid"}]}"#, + ) + .expect("response envelope"); + + assert_eq!(collect_b64_images(payload.data), vec!["valid"]); + } + #[test] fn raw_image_edit_dimensions_enforce_strict_contract() { assert!(validate_raw_image_edit_dimensions(1024, 640).is_ok());