diff --git a/config/wp7-02-oneapi-test.json b/config/wp7-02-oneapi-test.json index 6c44519..b63025c 100644 --- a/config/wp7-02-oneapi-test.json +++ b/config/wp7-02-oneapi-test.json @@ -1,5 +1,5 @@ { - "config_set_version": 2, + "config_set_version": 3, "gateway_account_ref": "oneapi-intelligrow-test", "models": [ { @@ -23,13 +23,14 @@ } }, { - "config_version": 1, + "config_version": 2, "gateway_account_ref": "oneapi-intelligrow-test", "model_id": "gpt-image-2", "route_profile": { "endpoint": "https://oneapi.intelligrow.cn/v1/images/generations", "mode": "sync", - "protocol_version": "openai-images-v1" + "protocol_version": "openai-images-v1", + "reference_endpoint": "https://oneapi.intelligrow.cn/v1/images/edits" } } ], diff --git a/scripts/lib/wp7-02-controlled-executor.mjs b/scripts/lib/wp7-02-controlled-executor.mjs index c5fa552..424cb94 100644 --- a/scripts/lib/wp7-02-controlled-executor.mjs +++ b/scripts/lib/wp7-02-controlled-executor.mjs @@ -29,6 +29,10 @@ function assertModelConfig(modelConfig) { || !["gemini-native-v1", "openai-images-v1"].includes(profile.protocol_version)) { throw new Error("WP7_02_ROUTE_PROFILE_INVALID"); } + if (profile.protocol_version === "openai-images-v1" + && (profile.reference_endpoint !== "https://oneapi.intelligrow.cn/v1/images/edits")) { + throw new Error("WP7_02_REFERENCE_ROUTE_PROFILE_INVALID"); + } return modelConfig; } @@ -87,7 +91,15 @@ export function buildProviderRequest({ modelConfig, prompt, ratio, reference }) response_format: "b64_json", size: gptImageRequestSizeForRatio(ratio), }; - if (reference) body.image = `data:${reference.mime_type};base64,${reference.bytes.toString("base64")}`; + if (reference) { + const form = new FormData(); + form.append("model", config.model_id); + form.append("prompt", prompt); + form.append("response_format", "b64_json"); + form.append("size", gptImageRequestSizeForRatio(ratio)); + form.append("image[]", new Blob([reference.bytes], { type: reference.mime_type }), "reference.png"); + return { body: form, headers: {}, method: "POST", url: config.route_profile.reference_endpoint }; + } return { body, headers, method: "POST", url: config.route_profile.endpoint }; } @@ -253,7 +265,7 @@ export async function executeProviderRequest({ fetchImpl = fetch, modelConfig, p const startedAt = performance.now(); try { const response = await fetchImpl(request.url, { - body: JSON.stringify(request.body), + body: request.body instanceof FormData ? request.body : JSON.stringify(request.body), headers: { ...request.headers, authorization: `Bearer ${token}` }, method: request.method, signal: controller.signal, diff --git a/tests/package/wp7-02-controlled-executor.test.mjs b/tests/package/wp7-02-controlled-executor.test.mjs index 6a2a718..90d38eb 100644 --- a/tests/package/wp7-02-controlled-executor.test.mjs +++ b/tests/package/wp7-02-controlled-executor.test.mjs @@ -38,12 +38,13 @@ const models = [ }, }, { - config_version: 1, + config_version: 2, model_id: "gpt-image-2", route_profile: { endpoint: "https://oneapi.intelligrow.cn/v1/images/generations", mode: "sync", protocol_version: "openai-images-v1", + reference_endpoint: "https://oneapi.intelligrow.cn/v1/images/edits", }, }, ];