fix: reference input of updateVariable node (#1367)

* fix: reference input of updateVariable node

* fix
This commit is contained in:
heheer
2024-05-06 13:51:15 +08:00
committed by GitHub
parent 59bd2a47b6
commit 8863337606
10 changed files with 50 additions and 40 deletions

View File

@@ -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 {

View File

@@ -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
]; ];

View File

@@ -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,

View File

@@ -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,

View File

@@ -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: []

View File

@@ -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;

View File

@@ -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

View File

@@ -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();

View File

@@ -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)
}); });

View File

@@ -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) {