mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-27 08:25:07 +00:00
fix: reference input of updateVariable node (#1367)
* fix: reference input of updateVariable node * fix
This commit is contained in:
@@ -10,7 +10,7 @@ export enum SseResponseEventEnum {
|
|||||||
toolParams = 'toolParams', // tool params return
|
toolParams = 'toolParams', // tool params return
|
||||||
toolResponse = 'toolResponse', // tool response return
|
toolResponse = 'toolResponse', // tool response return
|
||||||
flowResponses = 'flowResponses', // sse response request
|
flowResponses = 'flowResponses', // sse response request
|
||||||
variables = 'variables'
|
updateVariables = 'updateVariables'
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum DispatchNodeResponseKeyEnum {
|
export enum DispatchNodeResponseKeyEnum {
|
||||||
|
@@ -19,9 +19,9 @@ import { RunPluginModule } from './system/runPlugin';
|
|||||||
import { AiQueryExtension } from './system/queryExtension';
|
import { AiQueryExtension } from './system/queryExtension';
|
||||||
|
|
||||||
import type { FlowNodeTemplateType } from '../type';
|
import type { FlowNodeTemplateType } from '../type';
|
||||||
import { lafModule } from './system/laf';
|
import { LafModule } from './system/laf';
|
||||||
import { ifElseNode } from './system/ifElse/index';
|
import { IfElseNode } from './system/ifElse/index';
|
||||||
import { variableUpdateNode } from './system/variableUpdate';
|
import { VariableUpdateNode } from './system/variableUpdate';
|
||||||
|
|
||||||
/* app flow module templates */
|
/* app flow module templates */
|
||||||
export const appSystemModuleTemplates: FlowNodeTemplateType[] = [
|
export const appSystemModuleTemplates: FlowNodeTemplateType[] = [
|
||||||
@@ -38,9 +38,9 @@ export const appSystemModuleTemplates: FlowNodeTemplateType[] = [
|
|||||||
ContextExtractModule,
|
ContextExtractModule,
|
||||||
HttpModule468,
|
HttpModule468,
|
||||||
AiQueryExtension,
|
AiQueryExtension,
|
||||||
lafModule,
|
LafModule,
|
||||||
ifElseNode,
|
IfElseNode,
|
||||||
variableUpdateNode
|
VariableUpdateNode
|
||||||
];
|
];
|
||||||
/* plugin flow module templates */
|
/* plugin flow module templates */
|
||||||
export const pluginSystemModuleTemplates: FlowNodeTemplateType[] = [
|
export const pluginSystemModuleTemplates: FlowNodeTemplateType[] = [
|
||||||
@@ -57,9 +57,9 @@ export const pluginSystemModuleTemplates: FlowNodeTemplateType[] = [
|
|||||||
ContextExtractModule,
|
ContextExtractModule,
|
||||||
HttpModule468,
|
HttpModule468,
|
||||||
AiQueryExtension,
|
AiQueryExtension,
|
||||||
lafModule,
|
LafModule,
|
||||||
ifElseNode,
|
IfElseNode,
|
||||||
variableUpdateNode
|
VariableUpdateNode
|
||||||
];
|
];
|
||||||
|
|
||||||
/* all module */
|
/* all module */
|
||||||
@@ -82,7 +82,7 @@ export const moduleTemplatesFlat: FlowNodeTemplateType[] = [
|
|||||||
PluginOutputModule,
|
PluginOutputModule,
|
||||||
RunPluginModule,
|
RunPluginModule,
|
||||||
AiQueryExtension,
|
AiQueryExtension,
|
||||||
lafModule,
|
LafModule,
|
||||||
ifElseNode,
|
IfElseNode,
|
||||||
variableUpdateNode
|
VariableUpdateNode
|
||||||
];
|
];
|
||||||
|
@@ -12,7 +12,7 @@ import {
|
|||||||
import { FlowNodeTemplateType } from '../../../type';
|
import { FlowNodeTemplateType } from '../../../type';
|
||||||
import { getHandleConfig } from '../../utils';
|
import { getHandleConfig } from '../../utils';
|
||||||
|
|
||||||
export const ifElseNode: FlowNodeTemplateType = {
|
export const IfElseNode: FlowNodeTemplateType = {
|
||||||
id: FlowNodeTypeEnum.ifElseNode,
|
id: FlowNodeTypeEnum.ifElseNode,
|
||||||
templateType: FlowNodeTemplateTypeEnum.tools,
|
templateType: FlowNodeTemplateTypeEnum.tools,
|
||||||
flowNodeType: FlowNodeTypeEnum.ifElseNode,
|
flowNodeType: FlowNodeTypeEnum.ifElseNode,
|
||||||
|
@@ -14,7 +14,7 @@ import { Input_Template_DynamicInput } from '../input';
|
|||||||
import { Output_Template_AddOutput } from '../output';
|
import { Output_Template_AddOutput } from '../output';
|
||||||
import { getHandleConfig } from '../utils';
|
import { getHandleConfig } from '../utils';
|
||||||
|
|
||||||
export const lafModule: FlowNodeTemplateType = {
|
export const LafModule: FlowNodeTemplateType = {
|
||||||
id: FlowNodeTypeEnum.lafModule,
|
id: FlowNodeTypeEnum.lafModule,
|
||||||
templateType: FlowNodeTemplateTypeEnum.externalCall,
|
templateType: FlowNodeTemplateTypeEnum.externalCall,
|
||||||
flowNodeType: FlowNodeTypeEnum.lafModule,
|
flowNodeType: FlowNodeTypeEnum.lafModule,
|
||||||
|
@@ -7,7 +7,7 @@ import {
|
|||||||
} from '../../../constants';
|
} from '../../../constants';
|
||||||
import { getHandleConfig } from '../../utils';
|
import { getHandleConfig } from '../../utils';
|
||||||
|
|
||||||
export const variableUpdateNode: FlowNodeTemplateType = {
|
export const VariableUpdateNode: FlowNodeTemplateType = {
|
||||||
id: FlowNodeTypeEnum.variableUpdate,
|
id: FlowNodeTypeEnum.variableUpdate,
|
||||||
templateType: FlowNodeTemplateTypeEnum.tools,
|
templateType: FlowNodeTemplateTypeEnum.tools,
|
||||||
flowNodeType: FlowNodeTypeEnum.variableUpdate,
|
flowNodeType: FlowNodeTypeEnum.variableUpdate,
|
||||||
@@ -28,7 +28,13 @@ export const variableUpdateNode: FlowNodeTemplateType = {
|
|||||||
key: true,
|
key: true,
|
||||||
valueType: true
|
valueType: true
|
||||||
},
|
},
|
||||||
value: []
|
value: [
|
||||||
|
{
|
||||||
|
variable: ['', ''],
|
||||||
|
value: '',
|
||||||
|
renderType: FlowNodeInputTypeEnum.input
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
outputs: []
|
outputs: []
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
import { FlowNodeInputTypeEnum } from 'core/workflow/node/constant';
|
||||||
|
|
||||||
export type TUpdateListItem = {
|
export type TUpdateListItem = {
|
||||||
variable?: ReferenceValueProps;
|
variable?: ReferenceValueProps;
|
||||||
value?: ReferenceValueProps;
|
value?: ReferenceValueProps;
|
||||||
|
@@ -30,6 +30,7 @@ import { SmallAddIcon } from '@chakra-ui/icons';
|
|||||||
import MyTooltip from '@fastgpt/web/components/common/MyTooltip';
|
import MyTooltip from '@fastgpt/web/components/common/MyTooltip';
|
||||||
import { ReferenceValueProps } from '@fastgpt/global/core/workflow/type/io';
|
import { ReferenceValueProps } from '@fastgpt/global/core/workflow/type/io';
|
||||||
import { ReferSelector, useReference } from './render/RenderInput/templates/Reference';
|
import { ReferSelector, useReference } from './render/RenderInput/templates/Reference';
|
||||||
|
import { getWorkflowGlobalVariables } from '@/web/core/workflow/utils';
|
||||||
|
|
||||||
const NodeVariableUpdate = ({ data, selected }: NodeProps<FlowNodeItemType>) => {
|
const NodeVariableUpdate = ({ data, selected }: NodeProps<FlowNodeItemType>) => {
|
||||||
const { inputs = [], nodeId } = data;
|
const { inputs = [], nodeId } = data;
|
||||||
@@ -37,6 +38,7 @@ const NodeVariableUpdate = ({ data, selected }: NodeProps<FlowNodeItemType>) =>
|
|||||||
|
|
||||||
const onChangeNode = useContextSelector(WorkflowContext, (v) => v.onChangeNode);
|
const onChangeNode = useContextSelector(WorkflowContext, (v) => v.onChangeNode);
|
||||||
const nodes = useContextSelector(WorkflowContext, (v) => v.nodes);
|
const nodes = useContextSelector(WorkflowContext, (v) => v.nodes);
|
||||||
|
const nodeList = useContextSelector(WorkflowContext, (v) => v.nodeList);
|
||||||
|
|
||||||
const updateList = useMemo(
|
const updateList = useMemo(
|
||||||
() =>
|
() =>
|
||||||
@@ -84,10 +86,10 @@ const NodeVariableUpdate = ({ data, selected }: NodeProps<FlowNodeItemType>) =>
|
|||||||
const variable = updateItem.variable;
|
const variable = updateItem.variable;
|
||||||
const variableNodeId = variable?.[0];
|
const variableNodeId = variable?.[0];
|
||||||
const variableNode = nodes.find((node) => node.id === variableNodeId);
|
const variableNode = nodes.find((node) => node.id === variableNodeId);
|
||||||
if (!variableNode) return 'any';
|
const systemVariables = getWorkflowGlobalVariables(nodeList, t);
|
||||||
const variableInput = variableNode.data.outputs.find(
|
const variableInput = !variableNode
|
||||||
(output) => output.id === variable?.[1]
|
? systemVariables.find((item) => item.key === variable?.[1])
|
||||||
);
|
: variableNode?.data.outputs.find((output) => output.id === variable?.[1]);
|
||||||
if (!variableInput) return 'any';
|
if (!variableInput) return 'any';
|
||||||
return variableInput.valueType;
|
return variableInput.valueType;
|
||||||
})();
|
})();
|
||||||
@@ -95,9 +97,7 @@ const NodeVariableUpdate = ({ data, selected }: NodeProps<FlowNodeItemType>) =>
|
|||||||
const renderTypeData = menuList.find((item) => item.renderType === updateItem.renderType);
|
const renderTypeData = menuList.find((item) => item.renderType === updateItem.renderType);
|
||||||
const handleUpdate = (newValue: any) => {
|
const handleUpdate = (newValue: any) => {
|
||||||
onUpdateList(
|
onUpdateList(
|
||||||
updateList.map((update, i) =>
|
updateList.map((update, i) => (i === index ? { ...update, value: newValue } : update))
|
||||||
i === index ? { ...update, value: ['', newValue] } : update
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
@@ -123,20 +123,22 @@ const NodeVariableUpdate = ({ data, selected }: NodeProps<FlowNodeItemType>) =>
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<Box flex={1} />
|
<Box flex={1} />
|
||||||
<MyIcon
|
{updateList.length > 1 && (
|
||||||
className="delete"
|
<MyIcon
|
||||||
name={'delete'}
|
className="delete"
|
||||||
w={'14px'}
|
name={'delete'}
|
||||||
color={'myGray.600'}
|
w={'14px'}
|
||||||
cursor={'pointer'}
|
color={'myGray.600'}
|
||||||
ml={2}
|
cursor={'pointer'}
|
||||||
_hover={{ color: 'red.500' }}
|
ml={2}
|
||||||
onClick={() => {
|
_hover={{ color: 'red.500' }}
|
||||||
onUpdateList(updateList.filter((_, i) => i !== index));
|
onClick={() => {
|
||||||
}}
|
onUpdateList(updateList.filter((_, i) => i !== index));
|
||||||
/>
|
}}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</Flex>
|
</Flex>
|
||||||
<Flex mt={2} w={'full'} alignItems={'center'}>
|
<Flex mt={2} w={'full'} alignItems={'center'} className="nodrag">
|
||||||
<Flex w={'60px'} flex={0}>
|
<Flex w={'60px'} flex={0}>
|
||||||
<Box>{t('core.workflow.value')}</Box>
|
<Box>{t('core.workflow.value')}</Box>
|
||||||
<MyTooltip
|
<MyTooltip
|
||||||
|
@@ -101,7 +101,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
|
|||||||
});
|
});
|
||||||
responseWrite({
|
responseWrite({
|
||||||
res,
|
res,
|
||||||
event: SseResponseEventEnum.variables,
|
event: SseResponseEventEnum.updateVariables,
|
||||||
data: JSON.stringify(newVariables)
|
data: JSON.stringify(newVariables)
|
||||||
});
|
});
|
||||||
res.end();
|
res.end();
|
||||||
|
@@ -290,7 +290,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
|
|||||||
});
|
});
|
||||||
responseWrite({
|
responseWrite({
|
||||||
res,
|
res,
|
||||||
event: SseResponseEventEnum.variables,
|
event: SseResponseEventEnum.updateVariables,
|
||||||
data: JSON.stringify(newVariables)
|
data: JSON.stringify(newVariables)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -201,7 +201,7 @@ export const streamFetch = ({
|
|||||||
});
|
});
|
||||||
} else if (event === SseResponseEventEnum.flowResponses && Array.isArray(parseJson)) {
|
} else if (event === SseResponseEventEnum.flowResponses && Array.isArray(parseJson)) {
|
||||||
responseData = parseJson;
|
responseData = parseJson;
|
||||||
} else if (event === SseResponseEventEnum.variables) {
|
} else if (event === SseResponseEventEnum.updateVariables) {
|
||||||
newVariables = parseJson;
|
newVariables = parseJson;
|
||||||
} else if (event === SseResponseEventEnum.error) {
|
} else if (event === SseResponseEventEnum.error) {
|
||||||
if (parseJson.statusText === TeamErrEnum.aiPointsNotEnough) {
|
if (parseJson.statusText === TeamErrEnum.aiPointsNotEnough) {
|
||||||
|
Reference in New Issue
Block a user