feat: adapt image tuning by engine

This commit is contained in:
inman
2026-05-29 14:32:02 +08:00
parent 4b21d2999c
commit e36f28a668
12 changed files with 138 additions and 10 deletions

View File

@@ -34,15 +34,18 @@ describe("EvoLink image client helpers", () => {
it("maps inpainting original and mask URLs", () => {
const payload = buildEvolinkImagePayload("image.inpaint", {
prompt: "移除背景杂物",
quality: "high",
imageUrls: ["https://example.com/original.png", "https://example.com/mask.png"]
}, {
baseUrl: "https://api.evolink.ai",
model: "gpt-image-2"
model: "gpt-image-2",
quality: "medium"
});
expect(payload).toMatchObject({
image_urls: ["https://example.com/original.png"],
mask_url: "https://example.com/mask.png"
mask_url: "https://example.com/mask.png",
quality: "high"
});
});

View File

@@ -21,6 +21,9 @@ const envNames = [
"SUPABASE_SERVICE_ROLE_KEY",
"ZHINIAN_API_KEYS",
"JIMENG_VISUAL_MOCK",
"IMAGE_GENERATE_ENGINE",
"EVOLINK_MOCK",
"EVOLINK_API_KEY",
"VOLCENGINE_ACCESS_KEY_ID",
"VOLCENGINE_SECRET_ACCESS_KEY",
"ZHINIAN_WEBHOOK_SECRET"
@@ -33,6 +36,9 @@ describe("task management and public API helpers", () => {
process.env.ZHINIAN_RUNTIME_DIR = runtimeDir;
process.env.ZHINIAN_API_KEYS = "agent-a:secret-a,agent-b:secret-b";
process.env.JIMENG_VISUAL_MOCK = "true";
delete process.env.IMAGE_GENERATE_ENGINE;
delete process.env.EVOLINK_MOCK;
delete process.env.EVOLINK_API_KEY;
delete process.env.NEXT_PUBLIC_SUPABASE_URL;
delete process.env.SUPABASE_SERVICE_ROLE_KEY;
delete process.env.VOLCENGINE_ACCESS_KEY_ID;
@@ -91,6 +97,27 @@ describe("task management and public API helpers", () => {
})).rejects.toBeInstanceOf(PublicApiConflictError);
});
it("passes EvoLink quality through public image jobs", async () => {
process.env.IMAGE_GENERATE_ENGINE = "evolink";
process.env.EVOLINK_MOCK = "true";
process.env.EVOLINK_API_KEY = "test-key";
const result = await createPublicGenerationJob({
client: { id: "agent-a", key: "secret-a" },
request: new Request("http://local.test/api/v1/jobs"),
origin: "http://local.test",
body: {
capability: "image.generate",
prompt: "商品海报",
quality: "high"
}
});
expect(result.job.provider).toBe("mock");
expect(result.job.requestPayload.providerPayload).toMatchObject({
model: "gpt-image-2",
quality: "high"
});
});
it("claims local jobs without duplicate ownership", async () => {
await Promise.all(Array.from({ length: 6 }, (_, index) => createGenerationJob({
ownerId: DEFAULT_OWNER_ID,