Browse Source

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 <noreply@anthropic.com>
handoff-20260429-1057
shrimbly 3 months ago
parent
commit
11dee3a38c
  1. 6
      src/store/execution/generate3dExecutor.ts
  2. 6
      src/store/execution/generateAudioExecutor.ts
  3. 6
      src/store/execution/generateVideoExecutor.ts
  4. 6
      src/store/execution/nanoBananaExecutor.ts

6
src/store/execution/generate3dExecutor.ts

@ -70,7 +70,7 @@ export async function executeGenerate3D(
error: null, error: null,
}); });
const runOnce = async (modelToUse: SelectedModel): Promise<void> => { const runOnce = async (modelToUse: SelectedModel, parametersOverride?: Record<string, unknown>): Promise<void> => {
const provider = modelToUse.provider; const provider = modelToUse.provider;
const headers = buildGenerateHeaders(provider, providerSettings); const headers = buildGenerateHeaders(provider, providerSettings);
@ -78,7 +78,7 @@ export async function executeGenerate3D(
images, images,
prompt: promptText || "", prompt: promptText || "",
selectedModel: modelToUse, selectedModel: modelToUse,
parameters: nodeData.parameters, parameters: parametersOverride ?? nodeData.parameters,
dynamicInputs, dynamicInputs,
mediaType: "3d" as const, mediaType: "3d" as const,
}; };
@ -188,7 +188,9 @@ export async function executeGenerate3D(
nodeId: node.id, nodeId: node.id,
primary: primaryModel, primary: primaryModel,
fallback: nodeData.fallbackModel, fallback: nodeData.fallbackModel,
fallbackParameters: nodeData.fallbackParameters,
updateNodeData, updateNodeData,
runOnce, runOnce,
clearOutput: { outputVideo: null },
}); });
} }

6
src/store/execution/generateAudioExecutor.ts

@ -79,7 +79,7 @@ export async function executeGenerateAudio(
error: null, error: null,
}); });
const runOnce = async (modelToUse: SelectedModel): Promise<void> => { const runOnce = async (modelToUse: SelectedModel, parametersOverride?: Record<string, unknown>): Promise<void> => {
const provider = modelToUse.provider; const provider = modelToUse.provider;
const headers = buildGenerateHeaders(provider, providerSettings); const headers = buildGenerateHeaders(provider, providerSettings);
@ -87,7 +87,7 @@ export async function executeGenerateAudio(
images: [], images: [],
prompt: text, prompt: text,
selectedModel: modelToUse, selectedModel: modelToUse,
parameters: nodeData.parameters, parameters: parametersOverride ?? nodeData.parameters,
dynamicInputs, dynamicInputs,
mediaType: "audio" as const, mediaType: "audio" as const,
}; };
@ -219,7 +219,9 @@ export async function executeGenerateAudio(
nodeId: node.id, nodeId: node.id,
primary: nodeData.selectedModel, primary: nodeData.selectedModel,
fallback: nodeData.fallbackModel, fallback: nodeData.fallbackModel,
fallbackParameters: nodeData.fallbackParameters,
updateNodeData, updateNodeData,
runOnce, runOnce,
clearOutput: { outputAudio: null },
}); });
} }

6
src/store/execution/generateVideoExecutor.ts

@ -85,7 +85,7 @@ export async function executeGenerateVideo(
error: null, error: null,
}); });
const runOnce = async (modelToUse: SelectedModel): Promise<void> => { const runOnce = async (modelToUse: SelectedModel, parametersOverride?: Record<string, unknown>): Promise<void> => {
const provider = modelToUse.provider; const provider = modelToUse.provider;
const headers = buildGenerateHeaders(provider, providerSettings); const headers = buildGenerateHeaders(provider, providerSettings);
@ -93,7 +93,7 @@ export async function executeGenerateVideo(
images, images,
prompt: text, prompt: text,
selectedModel: modelToUse, selectedModel: modelToUse,
parameters: nodeData.parameters, parameters: parametersOverride ?? nodeData.parameters,
dynamicInputs, dynamicInputs,
mediaType: "video" as const, mediaType: "video" as const,
}; };
@ -224,7 +224,9 @@ export async function executeGenerateVideo(
nodeId: node.id, nodeId: node.id,
primary: nodeData.selectedModel, primary: nodeData.selectedModel,
fallback: nodeData.fallbackModel, fallback: nodeData.fallbackModel,
fallbackParameters: nodeData.fallbackParameters,
updateNodeData, updateNodeData,
runOnce, runOnce,
clearOutput: { outputVideo: null },
}); });
} }

6
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. // 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. // Extracted so runWithFallback can invoke it twice (primary, then fallback) if needed.
const runOnce = async (modelToUse: SelectedModel): Promise<void> => { const runOnce = async (modelToUse: SelectedModel, parametersOverride?: Record<string, unknown>): Promise<void> => {
const provider = modelToUse.provider; const provider = modelToUse.provider;
const headers = buildGenerateHeaders(provider, providerSettings); const headers = buildGenerateHeaders(provider, providerSettings);
@ -110,7 +110,7 @@ export async function executeNanoBanana(
useGoogleSearch: nodeData.useGoogleSearch, useGoogleSearch: nodeData.useGoogleSearch,
useImageSearch: nodeData.useImageSearch, useImageSearch: nodeData.useImageSearch,
selectedModel: modelToUse, selectedModel: modelToUse,
parameters: nodeData.parameters, parameters: parametersOverride ?? nodeData.parameters,
dynamicInputs: sanitizedDynamicInputs, dynamicInputs: sanitizedDynamicInputs,
}; };
@ -274,7 +274,9 @@ export async function executeNanoBanana(
nodeId: node.id, nodeId: node.id,
primary: primaryModel, primary: primaryModel,
fallback: nodeData.fallbackModel, fallback: nodeData.fallbackModel,
fallbackParameters: nodeData.fallbackParameters,
updateNodeData, updateNodeData,
runOnce, runOnce,
clearOutput: { outputImage: null },
}); });
} }

Loading…
Cancel
Save