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")