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
toolResponse = 'toolResponse', // tool response return
flowResponses = 'flowResponses', // sse response request
variables = 'variables'
updateVariables = 'updateVariables'
}
export enum DispatchNodeResponseKeyEnum {

View File

@@ -19,9 +19,9 @@ import { RunPluginModule } from './system/runPlugin';
import { AiQueryExtension } from './system/queryExtension';
import type { FlowNodeTemplateType } from '../type';
import { lafModule } from './system/laf';
import { ifElseNode } from './system/ifElse/index';
import { variableUpdateNode } from './system/variableUpdate';
import { LafModule } from './system/laf';
import { IfElseNode } from './system/ifElse/index';
import { VariableUpdateNode } from './system/variableUpdate';
/* app flow module templates */
export const appSystemModuleTemplates: FlowNodeTemplateType[] = [
@@ -38,9 +38,9 @@ export const appSystemModuleTemplates: FlowNodeTemplateType[] = [
ContextExtractModule,
HttpModule468,
AiQueryExtension,
lafModule,
ifElseNode,
variableUpdateNode
LafModule,
IfElseNode,
VariableUpdateNode
];
/* plugin flow module templates */
export const pluginSystemModuleTemplates: FlowNodeTemplateType[] = [
@@ -57,9 +57,9 @@ export const pluginSystemModuleTemplates: FlowNodeTemplateType[] = [
ContextExtractModule,
HttpModule468,
AiQueryExtension,
lafModule,
ifElseNode,
variableUpdateNode
LafModule,
IfElseNode,
VariableUpdateNode
];
/* all module */
@@ -82,7 +82,7 @@ export const moduleTemplatesFlat: FlowNodeTemplateType[] = [
PluginOutputModule,
RunPluginModule,
AiQueryExtension,
lafModule,
ifElseNode,
variableUpdateNode
LafModule,
IfElseNode,
VariableUpdateNode
];

View File

@@ -12,7 +12,7 @@ import {
import { FlowNodeTemplateType } from '../../../type';
import { getHandleConfig } from '../../utils';
export const ifElseNode: FlowNodeTemplateType = {
export const IfElseNode: FlowNodeTemplateType = {
id: FlowNodeTypeEnum.ifElseNode,
templateType: FlowNodeTemplateTypeEnum.tools,
flowNodeType: FlowNodeTypeEnum.ifElseNode,

View File

@@ -14,7 +14,7 @@ import { Input_Template_DynamicInput } from '../input';
import { Output_Template_AddOutput } from '../output';
import { getHandleConfig } from '../utils';
export const lafModule: FlowNodeTemplateType = {
export const LafModule: FlowNodeTemplateType = {
id: FlowNodeTypeEnum.lafModule,
templateType: FlowNodeTemplateTypeEnum.externalCall,
flowNodeType: FlowNodeTypeEnum.lafModule,

View File

@@ -7,7 +7,7 @@ import {
} from '../../../constants';
import { getHandleConfig } from '../../utils';
export const variableUpdateNode: FlowNodeTemplateType = {
export const VariableUpdateNode: FlowNodeTemplateType = {
id: FlowNodeTypeEnum.variableUpdate,
templateType: FlowNodeTemplateTypeEnum.tools,
flowNodeType: FlowNodeTypeEnum.variableUpdate,
@@ -28,7 +28,13 @@ export const variableUpdateNode: FlowNodeTemplateType = {
key: true,
valueType: true
},
value: []
value: [
{
variable: ['', ''],
value: '',
renderType: FlowNodeInputTypeEnum.input
}
]
}
],
outputs: []

View File

@@ -1,3 +1,5 @@
import { FlowNodeInputTypeEnum } from 'core/workflow/node/constant';
export type TUpdateListItem = {
variable?: ReferenceValueProps;
value?: ReferenceValueProps;

View File

@@ -30,6 +30,7 @@ import { SmallAddIcon } from '@chakra-ui/icons';
import MyTooltip from '@fastgpt/web/components/common/MyTooltip';
import { ReferenceValueProps } from '@fastgpt/global/core/workflow/type/io';
import { ReferSelector, useReference } from './render/RenderInput/templates/Reference';
import { getWorkflowGlobalVariables } from '@/web/core/workflow/utils';
const NodeVariableUpdate = ({ data, selected }: NodeProps<FlowNodeItemType>) => {
const { inputs = [], nodeId } = data;
@@ -37,6 +38,7 @@ const NodeVariableUpdate = ({ data, selected }: NodeProps<FlowNodeItemType>) =>
const onChangeNode = useContextSelector(WorkflowContext, (v) => v.onChangeNode);
const nodes = useContextSelector(WorkflowContext, (v) => v.nodes);
const nodeList = useContextSelector(WorkflowContext, (v) => v.nodeList);
const updateList = useMemo(
() =>
@@ -84,10 +86,10 @@ const NodeVariableUpdate = ({ data, selected }: NodeProps<FlowNodeItemType>) =>
const variable = updateItem.variable;
const variableNodeId = variable?.[0];
const variableNode = nodes.find((node) => node.id === variableNodeId);
if (!variableNode) return 'any';
const variableInput = variableNode.data.outputs.find(
(output) => output.id === variable?.[1]
);
const systemVariables = getWorkflowGlobalVariables(nodeList, t);
const variableInput = !variableNode
? systemVariables.find((item) => item.key === variable?.[1])
: variableNode?.data.outputs.find((output) => output.id === variable?.[1]);
if (!variableInput) return 'any';
return variableInput.valueType;
})();
@@ -95,9 +97,7 @@ const NodeVariableUpdate = ({ data, selected }: NodeProps<FlowNodeItemType>) =>
const renderTypeData = menuList.find((item) => item.renderType === updateItem.renderType);
const handleUpdate = (newValue: any) => {
onUpdateList(
updateList.map((update, i) =>
i === index ? { ...update, value: ['', newValue] } : update
)
updateList.map((update, i) => (i === index ? { ...update, value: newValue } : update))
);
};
return (
@@ -123,20 +123,22 @@ const NodeVariableUpdate = ({ data, selected }: NodeProps<FlowNodeItemType>) =>
}}
/>
<Box flex={1} />
<MyIcon
className="delete"
name={'delete'}
w={'14px'}
color={'myGray.600'}
cursor={'pointer'}
ml={2}
_hover={{ color: 'red.500' }}
onClick={() => {
onUpdateList(updateList.filter((_, i) => i !== index));
}}
/>
{updateList.length > 1 && (
<MyIcon
className="delete"
name={'delete'}
w={'14px'}
color={'myGray.600'}
cursor={'pointer'}
ml={2}
_hover={{ color: 'red.500' }}
onClick={() => {
onUpdateList(updateList.filter((_, i) => i !== index));
}}
/>
)}
</Flex>
<Flex mt={2} w={'full'} alignItems={'center'}>
<Flex mt={2} w={'full'} alignItems={'center'} className="nodrag">
<Flex w={'60px'} flex={0}>
<Box>{t('core.workflow.value')}</Box>
<MyTooltip

View File

@@ -101,7 +101,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
});
responseWrite({
res,
event: SseResponseEventEnum.variables,
event: SseResponseEventEnum.updateVariables,
data: JSON.stringify(newVariables)
});
res.end();

View File

@@ -290,7 +290,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
});
responseWrite({
res,
event: SseResponseEventEnum.variables,
event: SseResponseEventEnum.updateVariables,
data: JSON.stringify(newVariables)
});

View File

@@ -201,7 +201,7 @@ export const streamFetch = ({
});
} else if (event === SseResponseEventEnum.flowResponses && Array.isArray(parseJson)) {
responseData = parseJson;
} else if (event === SseResponseEventEnum.variables) {
} else if (event === SseResponseEventEnum.updateVariables) {
newVariables = parseJson;
} else if (event === SseResponseEventEnum.error) {
if (parseJson.statusText === TeamErrEnum.aiPointsNotEnough) {