From 9cadb88c841088119d93ca9bf0560aa5e7a420b6 Mon Sep 17 00:00:00 2001 From: shrimbly Date: Tue, 24 Feb 2026 12:03:14 +1300 Subject: [PATCH] fix(quick-012): add prompt passthrough in replicate and fal.ai dynamicInputs branches - Include input.prompt in API request when dynamicInputs are present but don't contain a prompt key - Use schema paramMap to resolve model-specific prompt parameter name - Skip if dynamicInputs already provides a prompt value (no duplication) --- src/app/api/generate/providers/fal.ts | 7 +++++++ src/app/api/generate/providers/replicate.ts | 9 ++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/app/api/generate/providers/fal.ts b/src/app/api/generate/providers/fal.ts index 95f43852..30a10a2b 100644 --- a/src/app/api/generate/providers/fal.ts +++ b/src/app/api/generate/providers/fal.ts @@ -288,6 +288,13 @@ export async function generateWithFalQueue( } } Object.assign(requestBody, filteredInputs); + + // Ensure prompt is included even when dynamicInputs are present + // (executor sends prompt as top-level field, not in dynamicInputs) + const promptParam = paramMap.prompt || "prompt"; + if (input.prompt && !requestBody[promptParam]) { + requestBody[promptParam] = input.prompt; + } } else { // Fallback: use schema to map generic input names to model-specific parameter names if (input.prompt) { diff --git a/src/app/api/generate/providers/replicate.ts b/src/app/api/generate/providers/replicate.ts index d292c5bd..7daeaae5 100644 --- a/src/app/api/generate/providers/replicate.ts +++ b/src/app/api/generate/providers/replicate.ts @@ -76,7 +76,7 @@ export async function generateWithReplicate( if (hasDynamicInputs) { // Apply coerced parameters first, then dynamic inputs override Object.assign(predictionInput, coerceParameterTypes(input.parameters, parameterTypes)); - const { schemaArrayParams } = getInputMappingFromSchema(schema); + const { paramMap, schemaArrayParams } = getInputMappingFromSchema(schema); // Apply array wrapping based on schema type for (const [key, value] of Object.entries(input.dynamicInputs!)) { @@ -90,6 +90,13 @@ export async function generateWithReplicate( } } } + + // Ensure prompt is included even when dynamicInputs are present + // (executor sends prompt as top-level field, not in dynamicInputs) + const promptParam = paramMap.prompt || "prompt"; + if (input.prompt && !predictionInput[promptParam]) { + predictionInput[promptParam] = input.prompt; + } } else { // Fallback: use schema to map generic input names to model-specific parameter names const { paramMap, arrayParams } = getInputMappingFromSchema(schema);