diff --git a/packages/inference/src/lib/getProviderHelper.ts b/packages/inference/src/lib/getProviderHelper.ts index a733a37b65..3fb09216e0 100644 --- a/packages/inference/src/lib/getProviderHelper.ts +++ b/packages/inference/src/lib/getProviderHelper.ts @@ -181,6 +181,8 @@ export const PROVIDERS: Record + params: BodyParams< + | ImageToImageArgs + | TextToImageArgs + | TextToVideoArgs + | ImageToVideoArgs + | ImageTextToImageArgs + | ImageTextToVideoArgs + > ): Record { const payload: Record = { ...omit(params.args, ["inputs", "parameters"]), @@ -221,3 +232,29 @@ export class WavespeedAIImageToVideoTask extends WavespeedAITask implements Imag return { ...args, inputs: args.parameters?.prompt, image: base, images }; } } + +export class WavespeedAIImageTextToImageTask extends WavespeedAITask implements ImageTextToImageTaskHelper { + constructor() { + super(WAVESPEEDAI_API_BASE_URL); + } + + async preparePayloadAsync(args: ImageTextToImageArgs): Promise { + const hasImages = + (args as { images?: unknown }).images ?? (args.parameters as Record | undefined)?.images; + const { base, images } = await buildImagesField(args.inputs as Blob | ArrayBuffer, hasImages); + return { ...args, inputs: args.parameters?.prompt, image: base, images }; + } +} + +export class WavespeedAIImageTextToVideoTask extends WavespeedAITask implements ImageTextToVideoTaskHelper { + constructor() { + super(WAVESPEEDAI_API_BASE_URL); + } + + async preparePayloadAsync(args: ImageTextToVideoArgs): Promise { + const hasImages = + (args as { images?: unknown }).images ?? (args.parameters as Record | undefined)?.images; + const { base, images } = await buildImagesField(args.inputs as Blob | ArrayBuffer, hasImages); + return { ...args, inputs: args.parameters?.prompt, image: base, images }; + } +} diff --git a/packages/inference/test/InferenceClient.spec.ts b/packages/inference/test/InferenceClient.spec.ts index 00f9d9953f..ddf109d586 100644 --- a/packages/inference/test/InferenceClient.spec.ts +++ b/packages/inference/test/InferenceClient.spec.ts @@ -2297,6 +2297,13 @@ describe.skip("InferenceClient", () => { const client = new InferenceClient(env.HF_WAVESPEED_KEY ?? "dummy"); HARDCODED_MODEL_INFERENCE_MAPPING["wavespeed"] = { + "Qwen/Qwen-Image-Layered": { + provider: "wavespeed", + hfModelId: "Qwen/Qwen-Image-Layered", + providerId: "wavespeed-ai/qwen-image/layered", + status: "live", + task: "image-text-to-image", + }, "Qwen/Qwen-Image-Edit-2509": { provider: "wavespeed", hfModelId: "Qwen/Qwen-Image-Edit-2509", @@ -2463,6 +2470,20 @@ describe.skip("InferenceClient", () => { }); expect(res).toBeInstanceOf(Blob); }); + it(`imageTextToImage - Qwen/Qwen-Image-Layered`, async () => { + const res = await client.imageToImage({ + model: "Qwen/Qwen-Image-Layered", + provider: "wavespeed", + inputs: new Blob([readTestFile("cheetah.png")], { type: "image/png" }), + parameters: { + prompt: "The leopard chases its prey", + guidance_scale: 5, + num_inference_steps: 30, + seed: -1, + }, + }); + expect(res).toBeInstanceOf(Blob); + }); }, TIMEOUT );