From d240eeb8dcccb6de2ec6d39a0162bdcff563503a Mon Sep 17 00:00:00 2001 From: Celina Hanouti Date: Fri, 12 Dec 2025 15:38:01 +0100 Subject: [PATCH 1/2] add fal-ai support for image-text-to-image --- .../inference/src/lib/getProviderHelper.ts | 9 +++-- packages/inference/src/providers/fal-ai.ts | 39 ++++++++++++++++++- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/packages/inference/src/lib/getProviderHelper.ts b/packages/inference/src/lib/getProviderHelper.ts index a733a37b65..1371d9530d 100644 --- a/packages/inference/src/lib/getProviderHelper.ts +++ b/packages/inference/src/lib/getProviderHelper.ts @@ -76,13 +76,14 @@ export const PROVIDERS: Record fal-ai/flux-2 + model = model.split("/").slice(0, -1).join("/"); + this.useTextOnlyEndpoint = false; + } + return super.makeRoute({ ...params, model }); + } + + override async preparePayloadAsync(args: ImageTextToImageArgs): Promise { + if (args.inputs) { + return super.preparePayloadAsync(args as ImageToImageArgs); + } + // No image provided: strip endpoint suffix and use `text-to-image` endpoint + this.useTextOnlyEndpoint = true; + return { + ...omit(args, ["inputs", "parameters"]), + ...(args.parameters as Record), + prompt: args.parameters?.prompt, + } as RequestArgs; + } +} + export class FalAITextToVideoTask extends FalAiQueueTask implements TextToVideoTaskHelper { task: InferenceTask; constructor() { From fcff53eb1f666c12194f62765b62b2345e1da72b Mon Sep 17 00:00:00 2001 From: Celina Hanouti Date: Mon, 15 Dec 2025 10:48:12 +0100 Subject: [PATCH 2/2] add image-text-to-video for fal --- .../inference/src/lib/getProviderHelper.ts | 1 + packages/inference/src/providers/fal-ai.ts | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/packages/inference/src/lib/getProviderHelper.ts b/packages/inference/src/lib/getProviderHelper.ts index 1371d9530d..3c991913be 100644 --- a/packages/inference/src/lib/getProviderHelper.ts +++ b/packages/inference/src/lib/getProviderHelper.ts @@ -78,6 +78,7 @@ export const PROVIDERS: Record fal-ai/ltxv-13b-098-distilled + model = model.split("/").slice(0, -1).join("/"); + this.useTextOnlyEndpoint = false; + } + return super.makeRoute({ ...params, model }); + } + + override async preparePayloadAsync(args: ImageTextToVideoArgs): Promise { + if (args.inputs) { + return super.preparePayloadAsync(args as ImageToVideoArgs); + } + // No image provided: strip endpoint suffix and use `text-to-video` endpoint + this.useTextOnlyEndpoint = true; + return { + ...omit(args, ["inputs", "parameters"]), + ...(args.parameters as Record), + prompt: args.parameters?.prompt, + } as RequestArgs; + } +} + export class FalAIAutomaticSpeechRecognitionTask extends FalAITask implements AutomaticSpeechRecognitionTaskHelper { override prepareHeaders(params: HeaderParams, binary: boolean): Record { const headers = super.prepareHeaders(params, binary);