Browse Source

fix

feature/add_provider_popi
weige 2 months ago
parent
commit
e2d5c26173
  1. 9
      src/components/nodes/GenerateAudioNode.tsx
  2. 9
      src/components/nodes/GenerateImageNode.tsx
  3. 10
      src/components/nodes/GenerateVideoNode.tsx
  4. 9
      src/hooks/useSelectedModelSchema.ts

9
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<GenerateAudi
useEffect(() => {
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<GenerateAudi
),
refreshKey: nodeData.modelSchemaRequestId,
onLoaded: ({ inputs, parameters, model }) => {
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<GenerateAudi
updateNodeData(id, {
inputSchema: inputs,
parameterSchema: nextParameterSchema,
...(model && shouldUpdateSelectedModelFromProviderModel(nodeConfig.selectedModel, model)
? { selectedModel: toSelectedModel(model) }
: {}),
...selectedModelPatch,
modelSchemaError: null,
});
},

9
src/components/nodes/GenerateImageNode.tsx

@ -268,7 +268,7 @@ export function GenerateImageNode({ id, data, selected }: NodeProps<NanoBananaNo
useEffect(() => {
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<NanoBananaNo
enabled: Boolean(nodeConfig.selectedModel?.modelId) && !usesFirstClassImageControls && canFetchPopiModelSchema,
refreshKey: nodeData.modelSchemaRequestId,
onLoaded: ({ inputs, parameters, model }) => {
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,
});
},

10
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<GenerateVide
useEffect(() => {
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<GenerateVide
enabled: Boolean(nodeConfig.selectedModel?.modelId) && canFetchPopiModelSchema,
refreshKey: nodeData.modelSchemaRequestId,
onLoaded: ({ inputs, parameters, model }) => {
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,
});
},

9
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 () => {

Loading…
Cancel
Save