From a06c7d7f1e105b260393a5a5944c7a87b0b03348 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 22:00:21 +0800 Subject: [PATCH] =?UTF-8?q?raw=20image=20edit=20=E5=8F=91=E9=80=81?= =?UTF-8?q?=E5=89=8D=E5=A4=8D=E7=94=A8=E5=85=B1=E4=BA=AB=20provider=20?= =?UTF-8?q?=E7=99=BD=E5=90=8D=E5=8D=95=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - platform-image 导出 ensure_provider_matches_model 供 crate 内复用 - create_raw_image_edit 在构造请求前校验 settings.provider 与固定的编辑 concrete model 一致 --- .../crates/platform-image/src/image_provider/runtime/mod.rs | 1 + server-rs/crates/platform-image/src/raw_image_edit/mod.rs | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/server-rs/crates/platform-image/src/image_provider/runtime/mod.rs b/server-rs/crates/platform-image/src/image_provider/runtime/mod.rs index 63bf83afb..b78e51476 100644 --- a/server-rs/crates/platform-image/src/image_provider/runtime/mod.rs +++ b/server-rs/crates/platform-image/src/image_provider/runtime/mod.rs @@ -12,6 +12,7 @@ pub use audit::PlatformImageFailureAudit; pub(crate) use audit::build_failure_audit; pub(crate) use budget::{effective_request_timeout_ms, request_budget_exhausted_error}; pub use error::{PlatformImageError, PlatformImageStatusHint, missing_reference_images_error}; +pub(crate) use executor::ensure_provider_matches_model; pub use executor::{ create_image_edit, create_image_edit_with_references, create_image_edit_with_references_and_model, create_image_generation, diff --git a/server-rs/crates/platform-image/src/raw_image_edit/mod.rs b/server-rs/crates/platform-image/src/raw_image_edit/mod.rs index ab7a93c3b..96928bf8d 100644 --- a/server-rs/crates/platform-image/src/raw_image_edit/mod.rs +++ b/server-rs/crates/platform-image/src/raw_image_edit/mod.rs @@ -12,7 +12,8 @@ use crate::image_provider::{ images_edit_url, runtime::{ ImageProvider, ImageProviderSettings, PlatformImageError, build_failure_audit, - effective_request_timeout_ms, request_budget_exhausted_error, truncate_raw, + effective_request_timeout_ms, ensure_provider_matches_model, + request_budget_exhausted_error, truncate_raw, }, }; @@ -125,6 +126,9 @@ pub async fn create_raw_image_edit( failure_context: &str, ) -> Result { let provider_label = settings.provider.as_str(); + // 中文注释:raw edit 只发送 GPT Image 2.5 编辑 concrete model,先按共享白名单校验 + // provider,避免把 Tiantoken 的模型发到 VectorEngine 端点(或反之)。 + ensure_provider_matches_model(settings, GPT_IMAGE_2_5_EDIT_MODEL, failure_context)?; validate_raw_image_edit_dimensions(options.width, options.height) .map_err(|error| invalid_input(settings.provider, failure_context, error.to_string()))?; let url = images_edit_url(settings);