From 11dee3a38c70ae620291c44a9df4b7fa343a4980 Mon Sep 17 00:00:00 2001 From: shrimbly Date: Sat, 11 Apr 2026 20:41:50 +1200 Subject: [PATCH] feat: wire executors to use parametersOverride for fallback models Updates runOnce in all four generation executors to accept an optional parametersOverride argument. When running the fallback model, the executor uses fallbackParameters from node data instead of the primary model's parameters. Co-Authored-By: Claude Sonnet 4.5 --- src/store/execution/generate3dExecutor.ts | 6 ++++-- src/store/execution/generateAudioExecutor.ts | 6 ++++-- src/store/execution/generateVideoExecutor.ts | 6 ++++-- src/store/execution/nanoBananaExecutor.ts | 6 ++++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/store/execution/generate3dExecutor.ts b/src/store/execution/generate3dExecutor.ts index 1c95b7be..6ac9322c 100644 --- a/src/store/execution/generate3dExecutor.ts +++ b/src/store/execution/generate3dExecutor.ts @@ -70,7 +70,7 @@ export async function executeGenerate3D( error: null, }); - const runOnce = async (modelToUse: SelectedModel): Promise => { + const runOnce = async (modelToUse: SelectedModel, parametersOverride?: Record): Promise => { const provider = modelToUse.provider; const headers = buildGenerateHeaders(provider, providerSettings); @@ -78,7 +78,7 @@ export async function executeGenerate3D( images, prompt: promptText || "", selectedModel: modelToUse, - parameters: nodeData.parameters, + parameters: parametersOverride ?? nodeData.parameters, dynamicInputs, mediaType: "3d" as const, }; @@ -188,7 +188,9 @@ export async function executeGenerate3D( nodeId: node.id, primary: primaryModel, fallback: nodeData.fallbackModel, + fallbackParameters: nodeData.fallbackParameters, updateNodeData, runOnce, + clearOutput: { outputVideo: null }, }); } diff --git a/src/store/execution/generateAudioExecutor.ts b/src/store/execution/generateAudioExecutor.ts index f2dbe30c..b84c332c 100644 --- a/src/store/execution/generateAudioExecutor.ts +++ b/src/store/execution/generateAudioExecutor.ts @@ -79,7 +79,7 @@ export async function executeGenerateAudio( error: null, }); - const runOnce = async (modelToUse: SelectedModel): Promise => { + const runOnce = async (modelToUse: SelectedModel, parametersOverride?: Record): Promise => { const provider = modelToUse.provider; const headers = buildGenerateHeaders(provider, providerSettings); @@ -87,7 +87,7 @@ export async function executeGenerateAudio( images: [], prompt: text, selectedModel: modelToUse, - parameters: nodeData.parameters, + parameters: parametersOverride ?? nodeData.parameters, dynamicInputs, mediaType: "audio" as const, }; @@ -219,7 +219,9 @@ export async function executeGenerateAudio( nodeId: node.id, primary: nodeData.selectedModel, fallback: nodeData.fallbackModel, + fallbackParameters: nodeData.fallbackParameters, updateNodeData, runOnce, + clearOutput: { outputAudio: null }, }); } diff --git a/src/store/execution/generateVideoExecutor.ts b/src/store/execution/generateVideoExecutor.ts index 3bb04cb9..9394a04d 100644 --- a/src/store/execution/generateVideoExecutor.ts +++ b/src/store/execution/generateVideoExecutor.ts @@ -85,7 +85,7 @@ export async function executeGenerateVideo( error: null, }); - const runOnce = async (modelToUse: SelectedModel): Promise => { + const runOnce = async (modelToUse: SelectedModel, parametersOverride?: Record): Promise => { const provider = modelToUse.provider; const headers = buildGenerateHeaders(provider, providerSettings); @@ -93,7 +93,7 @@ export async function executeGenerateVideo( images, prompt: text, selectedModel: modelToUse, - parameters: nodeData.parameters, + parameters: parametersOverride ?? nodeData.parameters, dynamicInputs, mediaType: "video" as const, }; @@ -224,7 +224,9 @@ export async function executeGenerateVideo( nodeId: node.id, primary: nodeData.selectedModel, fallback: nodeData.fallbackModel, + fallbackParameters: nodeData.fallbackParameters, updateNodeData, runOnce, + clearOutput: { outputVideo: null }, }); } diff --git a/src/store/execution/nanoBananaExecutor.ts b/src/store/execution/nanoBananaExecutor.ts index 2718ca82..ef857576 100644 --- a/src/store/execution/nanoBananaExecutor.ts +++ b/src/store/execution/nanoBananaExecutor.ts @@ -91,7 +91,7 @@ export async function executeNanoBanana( // Inner runOnce: performs the actual fetch/process/history work for a given model. // Extracted so runWithFallback can invoke it twice (primary, then fallback) if needed. - const runOnce = async (modelToUse: SelectedModel): Promise => { + const runOnce = async (modelToUse: SelectedModel, parametersOverride?: Record): Promise => { const provider = modelToUse.provider; const headers = buildGenerateHeaders(provider, providerSettings); @@ -110,7 +110,7 @@ export async function executeNanoBanana( useGoogleSearch: nodeData.useGoogleSearch, useImageSearch: nodeData.useImageSearch, selectedModel: modelToUse, - parameters: nodeData.parameters, + parameters: parametersOverride ?? nodeData.parameters, dynamicInputs: sanitizedDynamicInputs, }; @@ -274,7 +274,9 @@ export async function executeNanoBanana( nodeId: node.id, primary: primaryModel, fallback: nodeData.fallbackModel, + fallbackParameters: nodeData.fallbackParameters, updateNodeData, runOnce, + clearOutput: { outputImage: null }, }); }