fix: get plugin input variables from history (#2255)

This commit is contained in:
heheer
2024-08-03 12:31:31 +08:00
committed by GitHub
parent 48f2c95bb9
commit 110bf9391f
4 changed files with 47 additions and 7 deletions

View File

@@ -5,6 +5,20 @@ import { FlowNodeTypeEnum } from '../../workflow/node/constant';
export const getPluginInputsFromStoreNodes = (nodes: StoreNodeItemType[]) => {
return nodes.find((node) => node.flowNodeType === FlowNodeTypeEnum.pluginInput)?.inputs || [];
};
export const getPluginRunContent = (e: { pluginInputs: FlowNodeInputItemType[] }) => {
return JSON.stringify(e);
export const getPluginRunContent = ({
pluginInputs,
variables
}: {
pluginInputs: FlowNodeInputItemType[];
variables: Record<string, any>;
}) => {
const pluginInputsWithValue = pluginInputs.map((input) => {
const { key } = input;
const value = variables?.hasOwnProperty(key) ? variables[key] : input.defaultValue;
return {
...input,
value
};
});
return JSON.stringify(pluginInputsWithValue);
};

View File

@@ -31,10 +31,34 @@ const RenderInput = () => {
);
}, [pluginInputs]);
const historyFormValues = useMemo(() => {
if (histories.length === 0) return undefined;
try {
const inputValueString = histories[0].value[0].text?.content || '[]';
return JSON.parse(inputValueString).reduce(
(
acc: Record<string, any>,
{
key,
value
}: {
key: string;
value: any;
}
) => ({ ...acc, [key]: value }),
{}
);
} catch (error) {
console.error('Failed to parse input value:', error);
return undefined;
}
}, [histories]);
useEffect(() => {
if (isEqual(getValues(), defaultFormValues)) return;
reset(defaultFormValues);
}, [defaultFormValues, histories]);
reset(historyFormValues || defaultFormValues);
}, [defaultFormValues, historyFormValues]);
const isDisabledInput = histories.length > 0;

View File

@@ -51,7 +51,7 @@ const PluginRunContextProvider = ({
}, []);
const generatingMessage = useCallback(
({ event, text = '', status, name, tool, variables }: generatingMessageProps) => {
({ event, text = '', status, name, tool }: generatingMessageProps) => {
setHistories((state) =>
state.map((item, index) => {
if (index !== state.length - 1 || item.obj !== ChatRoleEnum.AI) return item;
@@ -170,7 +170,8 @@ const PluginRunContextProvider = ({
type: ChatItemValueTypeEnum.text,
text: {
content: getPluginRunContent({
pluginInputs
pluginInputs,
variables: e
})
}
}

View File

@@ -201,7 +201,8 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
type: ChatItemValueTypeEnum.text,
text: {
content: getPluginRunContent({
pluginInputs: getPluginInputsFromStoreNodes(app.modules)
pluginInputs: getPluginInputsFromStoreNodes(app.modules),
variables
})
}
}