diff --git a/src/components/nodes/GenerateAudioNode.tsx b/src/components/nodes/GenerateAudioNode.tsx index 2b667786..e98830f2 100644 --- a/src/components/nodes/GenerateAudioNode.tsx +++ b/src/components/nodes/GenerateAudioNode.tsx @@ -29,6 +29,7 @@ import { withSpeechVoiceParameter } from "@/utils/speechVoiceParameter"; import { buildGenerationModelSwitchPatch, buildGenerationParametersPatch, + buildGenerationSelectedModelPatch, readAudioGenerationConfig, } from "@/utils/generationConfig"; @@ -85,6 +86,7 @@ export function GenerateAudioNode({ id, data, selected }: NodeProps { if (!popiProviderMode || popiserverAudioModels.length === 0) return; + if (nodeConfig.selectedModel?.provider === POPI_PROVIDER_ID && nodeConfig.selectedModel.modelId) return; const preferred = nodeConfig.selectedModel?.provider === POPI_PROVIDER_ID ? nodeConfig.selectedModel : undefined; @@ -154,6 +156,9 @@ export function GenerateAudioNode({ id, data, selected }: NodeProps { + const selectedModelPatch = model && shouldUpdateSelectedModelFromProviderModel(nodeConfig.selectedModel, model) + ? buildGenerationSelectedModelPatch(nodeConfig, toSelectedModel(model)) + : {}; const nextParameterSchema = withSpeechVoiceParameter( parameters, model?.id ?? nodeConfig.selectedModel?.modelId, @@ -164,9 +169,7 @@ export function GenerateAudioNode({ id, data, selected }: NodeProps { if (modelOptions.length === 0) return; - if (currentProvider !== POPI_PROVIDER_ID && nodeConfig.selectedModel?.modelId) return; + if (nodeConfig.selectedModel?.provider === currentProvider && nodeConfig.selectedModel.modelId) return; const selectedModel = chooseModelFromList(modelOptions, nodeConfig.selectedModel); if (!selectedModel || selectedModel.modelId === nodeConfig.selectedModel?.modelId) return; updateNodeData(id, { @@ -547,12 +547,13 @@ export function GenerateImageNode({ id, data, selected }: NodeProps { + const selectedModelPatch = model && shouldUpdateSelectedModelFromProviderModel(nodeConfig.selectedModel, model) + ? buildGenerationSelectedModelPatch(nodeConfig, toSelectedModel(model)) + : {}; updateNodeData(id, { inputSchema: inputs, parameterSchema: parameters, - ...(model && shouldUpdateSelectedModelFromProviderModel(nodeConfig.selectedModel, model) - ? { selectedModel: toSelectedModel(model) } - : {}), + ...selectedModelPatch, modelSchemaError: null, }); }, diff --git a/src/components/nodes/GenerateVideoNode.tsx b/src/components/nodes/GenerateVideoNode.tsx index d64c575c..5dd6f54b 100644 --- a/src/components/nodes/GenerateVideoNode.tsx +++ b/src/components/nodes/GenerateVideoNode.tsx @@ -33,6 +33,7 @@ import { buildGenerationConfigUpdatePatch, buildGenerationModelSwitchPatch, buildGenerationParametersPatch, + buildGenerationSelectedModelPatch, readVideoGenerationConfig, } from "@/utils/generationConfig"; import { @@ -275,7 +276,7 @@ export function GenerateVideoNode({ id, data, selected }: NodeProps { if (modelOptions.length === 0) return; - if (currentProvider !== POPI_PROVIDER_ID && nodeConfig.selectedModel?.modelId) return; + if (nodeConfig.selectedModel?.provider === currentProvider && nodeConfig.selectedModel.modelId) return; const selectedModel = chooseModelFromList(modelOptions, nodeConfig.selectedModel); if (!selectedModel || selectedModel.modelId === nodeConfig.selectedModel?.modelId) return; updateNodeData(id, { @@ -379,12 +380,13 @@ export function GenerateVideoNode({ id, data, selected }: NodeProps { + const selectedModelPatch = model && shouldUpdateSelectedModelFromProviderModel(nodeConfig.selectedModel, model) + ? buildGenerationSelectedModelPatch(nodeConfig, toSelectedModel(model)) + : {}; updateNodeData(id, { inputSchema: inputs, parameterSchema: parameters, - ...(model && shouldUpdateSelectedModelFromProviderModel(nodeConfig.selectedModel, model) - ? { selectedModel: toSelectedModel(model) } - : {}), + ...selectedModelPatch, modelSchemaError: null, }); }, diff --git a/src/hooks/useSelectedModelSchema.ts b/src/hooks/useSelectedModelSchema.ts index 3d83268c..50c2335e 100644 --- a/src/hooks/useSelectedModelSchema.ts +++ b/src/hooks/useSelectedModelSchema.ts @@ -87,6 +87,9 @@ export function useSelectedModelSchema({ if (!response.ok) { throw new Error(data.error || `Failed to fetch schema: ${response.status}`); } + if (controller.signal.aborted || requestKeyRef.current !== requestKey) { + return; + } const nextSchema = { parameters: data.parameters || [], inputs: data.inputs || [], @@ -97,13 +100,15 @@ export function useSelectedModelSchema({ onLoadedRef.current?.(nextSchema); }) .catch((err) => { - if (controller.signal.aborted) return; + if (controller.signal.aborted || requestKeyRef.current !== requestKey) return; setParameters([]); setInputs([]); setError(err instanceof Error ? err.message : "Failed to fetch schema"); }) .finally(() => { - if (!controller.signal.aborted) setIsLoading(false); + if (!controller.signal.aborted && requestKeyRef.current === requestKey) { + setIsLoading(false); + } }); return () => {