修正带参考图的便捷生成入口模型选择
- 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:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user