From 4dc199cf3322512a468bcf85716f572c97a452fd 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 19:12:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=20nanobanana=20=E7=AB=AF?= =?UTF-8?q?=E7=82=B9=E7=A9=BA=E6=A8=A1=E5=9E=8B=E7=9A=84=E5=9B=9E=E8=90=BD?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit nanobanana_generate_content_url 空模型回落到 nanobanana 模型 新增空模型路径的单元测试 --- .../src/image_provider/protocol/request.rs | 12 +++++++----- .../platform-image/tests/image_provider.rs | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/server-rs/crates/platform-image/src/image_provider/protocol/request.rs b/server-rs/crates/platform-image/src/image_provider/protocol/request.rs index 0210b149b..d1d07867a 100644 --- a/server-rs/crates/platform-image/src/image_provider/protocol/request.rs +++ b/server-rs/crates/platform-image/src/image_provider/protocol/request.rs @@ -286,11 +286,13 @@ pub fn nanobanana_generate_content_url(settings: &ImageProviderSettings, model: .base_url .trim_end_matches("/v1") .trim_end_matches('/'); - format!( - "{}/v1beta/models/{}:generateContent", - base_url, - normalize_image_model(model) - ) + // 中文注释:nanobanana endpoint 只服务 Gemini 模型,空模型字符串应回落到 + // nanobanana 模型,而不是 normalize_image_model 默认的 GPT 生成模型。 + let model = match model.trim() { + "" => NANOBANANA_2_MODEL, + value => value, + }; + format!("{}/v1beta/models/{}:generateContent", base_url, model) } pub(crate) fn build_image_edit_request_log_params( diff --git a/server-rs/crates/platform-image/tests/image_provider.rs b/server-rs/crates/platform-image/tests/image_provider.rs index a8239df71..893fab966 100644 --- a/server-rs/crates/platform-image/tests/image_provider.rs +++ b/server-rs/crates/platform-image/tests/image_provider.rs @@ -211,6 +211,22 @@ fn nanobanana_generate_content_url_uses_model_path() { ); } +#[test] +fn nanobanana_generate_content_url_blank_model_falls_back_to_nanobanana_model() { + let settings = ImageProviderSettings { + provider: ImageProvider::VectorEngine, + base_url: "https://vector.example".to_string(), + api_key: "test-key".to_string(), + request_timeout_ms: 1_000, + request_deadline: None, + }; + + assert_eq!( + nanobanana_generate_content_url(&settings, " "), + "https://vector.example/v1beta/models/gemini-3.1-flash-image-preview:generateContent" + ); +} + #[tokio::test] async fn image_edit_retries_send_timeout_once_and_succeeds() { let listener = TcpListener::bind("127.0.0.1:0")