fix(baoyu-imagine): tighten Replicate schema validation and model handling
This commit is contained in:
parent
0ec35bf930
commit
8c0b0d3a3b
|
|
@ -111,7 +111,7 @@ test("Replicate input builder maps Seedream models to size-based schema", () =>
|
||||||
"A robot painter",
|
"A robot painter",
|
||||||
"bytedance/seedream-4.5",
|
"bytedance/seedream-4.5",
|
||||||
makeArgs({
|
makeArgs({
|
||||||
quality: "2k",
|
size: "1536x1024",
|
||||||
aspectRatio: "16:9",
|
aspectRatio: "16:9",
|
||||||
n: 4,
|
n: 4,
|
||||||
}),
|
}),
|
||||||
|
|
@ -119,8 +119,9 @@ test("Replicate input builder maps Seedream models to size-based schema", () =>
|
||||||
),
|
),
|
||||||
{
|
{
|
||||||
prompt: "A robot painter",
|
prompt: "A robot painter",
|
||||||
size: "2K",
|
size: "custom",
|
||||||
aspect_ratio: "16:9",
|
width: 1536,
|
||||||
|
height: 1024,
|
||||||
sequential_image_generation: "auto",
|
sequential_image_generation: "auto",
|
||||||
max_images: 4,
|
max_images: 4,
|
||||||
image_input: ["data:image/png;base64,AAAA"],
|
image_input: ["data:image/png;base64,AAAA"],
|
||||||
|
|
@ -207,7 +208,7 @@ test("Replicate input builder falls back to nano-banana schema for unknown model
|
||||||
test("Replicate validation catches unsupported Seedream and Wan argument combinations", () => {
|
test("Replicate validation catches unsupported Seedream and Wan argument combinations", () => {
|
||||||
assert.throws(
|
assert.throws(
|
||||||
() => validateArgs("bytedance/seedream-4.5", makeArgs({ size: "large" })),
|
() => validateArgs("bytedance/seedream-4.5", makeArgs({ size: "large" })),
|
||||||
/Seedream on Replicate requires --size/,
|
/Seedream 4.5 on Replicate requires --size/,
|
||||||
);
|
);
|
||||||
|
|
||||||
assert.throws(
|
assert.throws(
|
||||||
|
|
@ -215,6 +216,10 @@ test("Replicate validation catches unsupported Seedream and Wan argument combina
|
||||||
/Seedream on Replicate requires --size to be one of 2K, 3K/,
|
/Seedream on Replicate requires --size to be one of 2K, 3K/,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
assert.doesNotThrow(
|
||||||
|
() => validateArgs("bytedance/seedream-4.5", makeArgs({ size: "1536x1024" })),
|
||||||
|
);
|
||||||
|
|
||||||
assert.throws(
|
assert.throws(
|
||||||
() => validateArgs("bytedance/seedream-4.5", makeArgs({ referenceImages: Array.from({ length: 15 }, () => "ref.png") })),
|
() => validateArgs("bytedance/seedream-4.5", makeArgs({ referenceImages: Array.from({ length: 15 }, () => "ref.png") })),
|
||||||
/supports at most 14 reference images/,
|
/supports at most 14 reference images/,
|
||||||
|
|
|
||||||
|
|
@ -156,10 +156,21 @@ function buildSeedreamInput(prompt: string, model: string, args: CliArgs, refere
|
||||||
const requestedSize = args.size || getSeedreamDefaultSize(model, args.quality);
|
const requestedSize = args.size || getSeedreamDefaultSize(model, args.quality);
|
||||||
|
|
||||||
if (requestedSize) {
|
if (requestedSize) {
|
||||||
input.size = normalizePresetSize(requestedSize);
|
if (isSeedream45Model(model)) {
|
||||||
|
const parsed = parsePixelSize(requestedSize);
|
||||||
|
if (parsed) {
|
||||||
|
input.size = "custom";
|
||||||
|
input.width = parsed.width;
|
||||||
|
input.height = parsed.height;
|
||||||
|
} else {
|
||||||
|
input.size = normalizePresetSize(requestedSize);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
input.size = normalizePresetSize(requestedSize);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args.aspectRatio) {
|
if (args.aspectRatio && input.size !== "custom") {
|
||||||
input.aspect_ratio = args.aspectRatio;
|
input.aspect_ratio = args.aspectRatio;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -217,11 +228,20 @@ export function validateArgs(model: string, args: CliArgs): void {
|
||||||
const referenceCount = args.referenceImages.length;
|
const referenceCount = args.referenceImages.length;
|
||||||
|
|
||||||
if (args.size) {
|
if (args.size) {
|
||||||
const normalizedSize = normalizePresetSize(args.size);
|
if (isSeedream45Model(model)) {
|
||||||
if (!getAllowedSeedreamSizes(model).has(normalizedSize)) {
|
const normalizedSize = normalizePresetSize(args.size);
|
||||||
throw new Error(
|
if (!getAllowedSeedreamSizes(model).has(normalizedSize) && !parsePixelSize(args.size)) {
|
||||||
`Seedream on Replicate requires --size to be one of ${Array.from(getAllowedSeedreamSizes(model)).join(", ")}. Received: ${args.size}`
|
throw new Error(
|
||||||
);
|
`Seedream 4.5 on Replicate requires --size to be one of ${Array.from(getAllowedSeedreamSizes(model)).join(", ")} or custom dimensions like 1536x1024. Received: ${args.size}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const normalizedSize = normalizePresetSize(args.size);
|
||||||
|
if (!getAllowedSeedreamSizes(model).has(normalizedSize)) {
|
||||||
|
throw new Error(
|
||||||
|
`Seedream on Replicate requires --size to be one of ${Array.from(getAllowedSeedreamSizes(model)).join(", ")}. Received: ${args.size}`
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue