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 { import {
buildGenerationModelSwitchPatch, buildGenerationModelSwitchPatch,
buildGenerationParametersPatch, buildGenerationParametersPatch,
buildGenerationSelectedModelPatch,
readAudioGenerationConfig, readAudioGenerationConfig,
} from "@/utils/generationConfig"; } from "@/utils/generationConfig";
@ -85,6 +86,7 @@ export function GenerateAudioNode({ id, data, selected }: NodeProps<GenerateAudi
useEffect(() => { useEffect(() => {
if (!popiProviderMode || popiserverAudioModels.length === 0) return; 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 const preferred = nodeConfig.selectedModel?.provider === POPI_PROVIDER_ID
? nodeConfig.selectedModel ? nodeConfig.selectedModel
: undefined; : undefined;
@ -154,6 +156,9 @@ export function GenerateAudioNode({ id, data, selected }: NodeProps<GenerateAudi
), ),
refreshKey: nodeData.modelSchemaRequestId, refreshKey: nodeData.modelSchemaRequestId,
onLoaded: ({ inputs, parameters, model }) => { onLoaded: ({ inputs, parameters, model }) => {
const selectedModelPatch = model && shouldUpdateSelectedModelFromProviderModel(nodeConfig.selectedModel, model)
? buildGenerationSelectedModelPatch(nodeConfig, toSelectedModel(model))
: {};
const nextParameterSchema = withSpeechVoiceParameter( const nextParameterSchema = withSpeechVoiceParameter(
parameters, parameters,
model?.id ?? nodeConfig.selectedModel?.modelId, model?.id ?? nodeConfig.selectedModel?.modelId,
@ -164,9 +169,7 @@ export function GenerateAudioNode({ id, data, selected }: NodeProps<GenerateAudi
updateNodeData(id, { updateNodeData(id, {
inputSchema: inputs, inputSchema: inputs,
parameterSchema: nextParameterSchema, parameterSchema: nextParameterSchema,
...(model && shouldUpdateSelectedModelFromProviderModel(nodeConfig.selectedModel, model) ...selectedModelPatch,
? { selectedModel: toSelectedModel(model) }
: {}),
modelSchemaError: null, modelSchemaError: null,
}); });
}, },

9
src/components/nodes/GenerateImageNode.tsx

@ -268,7 +268,7 @@ export function GenerateImageNode({ id, data, selected }: NodeProps<NanoBananaNo
useEffect(() => { useEffect(() => {
if (modelOptions.length === 0) return; 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); const selectedModel = chooseModelFromList(modelOptions, nodeConfig.selectedModel);
if (!selectedModel || selectedModel.modelId === nodeConfig.selectedModel?.modelId) return; if (!selectedModel || selectedModel.modelId === nodeConfig.selectedModel?.modelId) return;
updateNodeData(id, { updateNodeData(id, {
@ -547,12 +547,13 @@ export function GenerateImageNode({ id, data, selected }: NodeProps<NanoBananaNo
enabled: Boolean(nodeConfig.selectedModel?.modelId) && !usesFirstClassImageControls && canFetchPopiModelSchema, enabled: Boolean(nodeConfig.selectedModel?.modelId) && !usesFirstClassImageControls && canFetchPopiModelSchema,
refreshKey: nodeData.modelSchemaRequestId, refreshKey: nodeData.modelSchemaRequestId,
onLoaded: ({ inputs, parameters, model }) => { onLoaded: ({ inputs, parameters, model }) => {
const selectedModelPatch = model && shouldUpdateSelectedModelFromProviderModel(nodeConfig.selectedModel, model)
? buildGenerationSelectedModelPatch(nodeConfig, toSelectedModel(model))
: {};
updateNodeData(id, { updateNodeData(id, {
inputSchema: inputs, inputSchema: inputs,
parameterSchema: parameters, parameterSchema: parameters,
...(model && shouldUpdateSelectedModelFromProviderModel(nodeConfig.selectedModel, model) ...selectedModelPatch,
? { selectedModel: toSelectedModel(model) }
: {}),
modelSchemaError: null, modelSchemaError: null,
}); });
}, },

10
src/components/nodes/GenerateVideoNode.tsx

@ -33,6 +33,7 @@ import {
buildGenerationConfigUpdatePatch, buildGenerationConfigUpdatePatch,
buildGenerationModelSwitchPatch, buildGenerationModelSwitchPatch,
buildGenerationParametersPatch, buildGenerationParametersPatch,
buildGenerationSelectedModelPatch,
readVideoGenerationConfig, readVideoGenerationConfig,
} from "@/utils/generationConfig"; } from "@/utils/generationConfig";
import { import {
@ -275,7 +276,7 @@ export function GenerateVideoNode({ id, data, selected }: NodeProps<GenerateVide
useEffect(() => { useEffect(() => {
if (modelOptions.length === 0) return; 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); const selectedModel = chooseModelFromList(modelOptions, nodeConfig.selectedModel);
if (!selectedModel || selectedModel.modelId === nodeConfig.selectedModel?.modelId) return; if (!selectedModel || selectedModel.modelId === nodeConfig.selectedModel?.modelId) return;
updateNodeData(id, { updateNodeData(id, {
@ -379,12 +380,13 @@ export function GenerateVideoNode({ id, data, selected }: NodeProps<GenerateVide
enabled: Boolean(nodeConfig.selectedModel?.modelId) && canFetchPopiModelSchema, enabled: Boolean(nodeConfig.selectedModel?.modelId) && canFetchPopiModelSchema,
refreshKey: nodeData.modelSchemaRequestId, refreshKey: nodeData.modelSchemaRequestId,
onLoaded: ({ inputs, parameters, model }) => { onLoaded: ({ inputs, parameters, model }) => {
const selectedModelPatch = model && shouldUpdateSelectedModelFromProviderModel(nodeConfig.selectedModel, model)
? buildGenerationSelectedModelPatch(nodeConfig, toSelectedModel(model))
: {};
updateNodeData(id, { updateNodeData(id, {
inputSchema: inputs, inputSchema: inputs,
parameterSchema: parameters, parameterSchema: parameters,
...(model && shouldUpdateSelectedModelFromProviderModel(nodeConfig.selectedModel, model) ...selectedModelPatch,
? { selectedModel: toSelectedModel(model) }
: {}),
modelSchemaError: null, modelSchemaError: null,
}); });
}, },

9
src/hooks/useSelectedModelSchema.ts

@ -87,6 +87,9 @@ export function useSelectedModelSchema({
if (!response.ok) { if (!response.ok) {
throw new Error(data.error || `Failed to fetch schema: ${response.status}`); throw new Error(data.error || `Failed to fetch schema: ${response.status}`);
} }
if (controller.signal.aborted || requestKeyRef.current !== requestKey) {
return;
}
const nextSchema = { const nextSchema = {
parameters: data.parameters || [], parameters: data.parameters || [],
inputs: data.inputs || [], inputs: data.inputs || [],
@ -97,13 +100,15 @@ export function useSelectedModelSchema({
onLoadedRef.current?.(nextSchema); onLoadedRef.current?.(nextSchema);
}) })
.catch((err) => { .catch((err) => {
if (controller.signal.aborted) return; if (controller.signal.aborted || requestKeyRef.current !== requestKey) return;
setParameters([]); setParameters([]);
setInputs([]); setInputs([]);
setError(err instanceof Error ? err.message : "Failed to fetch schema"); setError(err instanceof Error ? err.message : "Failed to fetch schema");
}) })
.finally(() => { .finally(() => {
if (!controller.signal.aborted) setIsLoading(false); if (!controller.signal.aborted && requestKeyRef.current === requestKey) {
setIsLoading(false);
}
}); });
return () => { return () => {

Loading…
Cancel
Save