修正带参考图的便捷生成入口模型选择

- create_image_generation 在参考图非空时改用 gpt-image-2.5-sunburst-c,与 generate→edits 分支和任务边界 editor_image_generation_concrete_model 判据一致
- 新增 image_generation_with_references_uses_the_edit_concrete_model,断言带参考图的生成请求落到 /v1/images/edits 且 multipart 提交编辑 concrete model
This commit is contained in:
2026-09-22 12:20:49 +08:00
parent fb6e00c966
commit 8e92bd2952
2 changed files with 39 additions and 1 deletions
@@ -44,7 +44,13 @@ pub async fn create_image_generation(
create_image_generation_with_model(
http_client,
settings,
GPT_IMAGE_2_5_GENERATION_MODEL,
// 带参考图时执行路径会走 /v1/images/edits,必须与任务边界的
// `editor_image_generation_concrete_model` 判据一致,提交编辑 concrete model。
if reference_images.is_empty() {
GPT_IMAGE_2_5_GENERATION_MODEL
} else {
GPT_IMAGE_2_5_EDIT_MODEL
},
prompt,
negative_prompt,
size,
@@ -639,6 +639,38 @@ async fn image_edit_does_not_cross_model_when_unsupported() {
server.abort();
}
#[tokio::test]
async fn image_generation_with_references_uses_the_edit_concrete_model() {
let (base_url, server, requests) = start_http_response_sequence(vec![MockResponse {
status: "200 OK",
content_type: "application/json",
body: r#"{"data":[{"b64_json":"iVBORw0KGgpyZXN0"}]}"#,
}])
.await;
let settings = test_image_provider_settings(base_url);
let http_client = build_image_http_client(&settings).expect("client should build");
let generated = create_image_generation(
&http_client,
&settings,
"测试提示词",
None,
"1024x1024",
1,
&["data:image/png;base64,iVBORw0KGgpyZXN0".to_string()],
"测试 ImageProvider 图片生成失败",
)
.await
.expect("referenced generation should go through the edit endpoint");
assert_eq!(generated.images.len(), 1);
let requests = requests.lock().await;
assert_eq!(requests.len(), 1);
assert!(requests[0].starts_with("POST /v1/images/edits"));
assert!(requests[0].contains(&format!("\r\n\r\n{GPT_IMAGE_2_5_EDIT_MODEL}\r\n")));
server.abort();
}
#[tokio::test]
async fn image_generation_does_not_fallback_on_auth_failure() {
let (base_url, server, requests) = start_http_response_sequence(vec![MockResponse {