diff --git a/web/src/components/metadata-filter/metadata-filter-conditions.tsx b/web/src/components/metadata-filter/metadata-filter-conditions.tsx
index bc0c028ad..80cb6409b 100644
--- a/web/src/components/metadata-filter/metadata-filter-conditions.tsx
+++ b/web/src/components/metadata-filter/metadata-filter-conditions.tsx
@@ -15,10 +15,10 @@ import {
} from '@/components/ui/form';
import { Input } from '@/components/ui/input';
import { Separator } from '@/components/ui/separator';
+import { SwitchOperatorOptions } from '@/constants/agent';
+import { useBuildSwitchOperatorOptions } from '@/hooks/logic-hooks/use-build-operator-options';
import { useFetchKnowledgeMetadata } from '@/hooks/use-knowledge-request';
-import { SwitchOperatorOptions } from '@/pages/agent/constant';
import { PromptEditor } from '@/pages/agent/form/components/prompt-editor';
-import { useBuildSwitchOperatorOptions } from '@/pages/agent/form/switch-form';
import { Plus, X } from 'lucide-react';
import { useCallback } from 'react';
import { useFieldArray, useFormContext } from 'react-hook-form';
diff --git a/web/src/constants/agent.ts b/web/src/constants/agent.tsx
similarity index 67%
rename from web/src/constants/agent.ts
rename to web/src/constants/agent.tsx
index f60a74716..c73fbfa60 100644
--- a/web/src/constants/agent.ts
+++ b/web/src/constants/agent.tsx
@@ -1,4 +1,5 @@
import { setInitialChatVariableEnabledFieldValue } from '@/utils/chat';
+import { Circle, CircleSlash2 } from 'lucide-react';
import { ChatVariableEnabledField, variableEnabledFieldMap } from './chat';
export enum ProgrammingLanguage {
@@ -117,3 +118,53 @@ export enum Operator {
HierarchicalMerger = 'HierarchicalMerger',
Extractor = 'Extractor',
}
+
+export enum ComparisonOperator {
+ Equal = '=',
+ NotEqual = '≠',
+ GreatThan = '>',
+ GreatEqual = '≥',
+ LessThan = '<',
+ LessEqual = '≤',
+ Contains = 'contains',
+ NotContains = 'not contains',
+ StartWith = 'start with',
+ EndWith = 'end with',
+ Empty = 'empty',
+ NotEmpty = 'not empty',
+}
+
+export const SwitchOperatorOptions = [
+ { value: ComparisonOperator.Equal, label: 'equal', icon: 'equal' },
+ { value: ComparisonOperator.NotEqual, label: 'notEqual', icon: 'not-equals' },
+ { value: ComparisonOperator.GreatThan, label: 'gt', icon: 'Less' },
+ {
+ value: ComparisonOperator.GreatEqual,
+ label: 'ge',
+ icon: 'Greater-or-equal',
+ },
+ { value: ComparisonOperator.LessThan, label: 'lt', icon: 'Less' },
+ { value: ComparisonOperator.LessEqual, label: 'le', icon: 'less-or-equal' },
+ { value: ComparisonOperator.Contains, label: 'contains', icon: 'Contains' },
+ {
+ value: ComparisonOperator.NotContains,
+ label: 'notContains',
+ icon: 'not-contains',
+ },
+ {
+ value: ComparisonOperator.StartWith,
+ label: 'startWith',
+ icon: 'list-start',
+ },
+ { value: ComparisonOperator.EndWith, label: 'endWith', icon: 'list-end' },
+ {
+ value: ComparisonOperator.Empty,
+ label: 'empty',
+ icon: ,
+ },
+ {
+ value: ComparisonOperator.NotEmpty,
+ label: 'notEmpty',
+ icon: ,
+ },
+];
diff --git a/web/src/hooks/logic-hooks/use-build-operator-options.tsx b/web/src/hooks/logic-hooks/use-build-operator-options.tsx
new file mode 100644
index 000000000..52441e359
--- /dev/null
+++ b/web/src/hooks/logic-hooks/use-build-operator-options.tsx
@@ -0,0 +1,45 @@
+import { IconFont } from '@/components/icon-font';
+import { ComparisonOperator, SwitchOperatorOptions } from '@/constants/agent';
+import { cn } from '@/lib/utils';
+import { useMemo } from 'react';
+import { useTranslation } from 'react-i18next';
+
+export const LogicalOperatorIcon = function OperatorIcon({
+ icon,
+ value,
+}: Omit<(typeof SwitchOperatorOptions)[0], 'label'>) {
+ if (typeof icon === 'string') {
+ return (
+ ',
+ })}
+ >
+ );
+ }
+ return icon;
+};
+
+export function useBuildSwitchOperatorOptions(
+ subset: ComparisonOperator[] = [],
+) {
+ const { t } = useTranslation();
+
+ const switchOperatorOptions = useMemo(() => {
+ return SwitchOperatorOptions.filter((x) =>
+ subset.some((y) => y === x.value),
+ ).map((x) => ({
+ value: x.value,
+ icon: (
+
+ ),
+ label: t(`flow.switchOperatorOptions.${x.label}`),
+ }));
+ }, [t]);
+
+ return switchOperatorOptions;
+}
diff --git a/web/src/pages/agent/canvas/node/switch-node.tsx b/web/src/pages/agent/canvas/node/switch-node.tsx
index 9622e1f48..d350dbdc0 100644
--- a/web/src/pages/agent/canvas/node/switch-node.tsx
+++ b/web/src/pages/agent/canvas/node/switch-node.tsx
@@ -1,9 +1,9 @@
import { Card, CardContent } from '@/components/ui/card';
+import { SwitchOperatorOptions } from '@/constants/agent';
+import { LogicalOperatorIcon } from '@/hooks/logic-hooks/use-build-operator-options';
import { ISwitchCondition, ISwitchNode } from '@/interfaces/database/flow';
import { NodeProps, Position } from '@xyflow/react';
import { memo, useCallback } from 'react';
-import { SwitchOperatorOptions } from '../../constant';
-import { LogicalOperatorIcon } from '../../form/switch-form';
import { useGetVariableLabelByValue } from '../../hooks/use-get-begin-query';
import { CommonHandle, LeftEndHandle } from './handle';
import { RightHandleStyle } from './handle-icon';
diff --git a/web/src/pages/agent/constant/index.tsx b/web/src/pages/agent/constant/index.tsx
index 007127532..5470bb7c7 100644
--- a/web/src/pages/agent/constant/index.tsx
+++ b/web/src/pages/agent/constant/index.tsx
@@ -6,8 +6,10 @@ import {
AgentGlobals,
AgentGlobalsSysQueryWithBrace,
CodeTemplateStrMap,
+ ComparisonOperator,
Operator,
ProgrammingLanguage,
+ SwitchOperatorOptions,
initialLlmBaseValues,
} from '@/constants/agent';
export { Operator } from '@/constants/agent';
@@ -35,8 +37,6 @@ export enum PromptRole {
}
import {
- Circle,
- CircleSlash2,
CloudUpload,
ListOrdered,
OptionIcon,
@@ -166,27 +166,12 @@ export const componentMenuList = [
},
];
-export const SwitchOperatorOptions = [
- { value: '=', label: 'equal', icon: 'equal' },
- { value: '≠', label: 'notEqual', icon: 'not-equals' },
- { value: '>', label: 'gt', icon: 'Less' },
- { value: '≥', label: 'ge', icon: 'Greater-or-equal' },
- { value: '<', label: 'lt', icon: 'Less' },
- { value: '≤', label: 'le', icon: 'less-or-equal' },
- { value: 'contains', label: 'contains', icon: 'Contains' },
- { value: 'not contains', label: 'notContains', icon: 'not-contains' },
- { value: 'start with', label: 'startWith', icon: 'list-start' },
- { value: 'end with', label: 'endWith', icon: 'list-end' },
- {
- value: 'empty',
- label: 'empty',
- icon: ,
- },
- {
- value: 'not empty',
- label: 'notEmpty',
- icon: ,
- },
+export const DataOperationsOperatorOptions = [
+ ComparisonOperator.Equal,
+ ComparisonOperator.NotEqual,
+ ComparisonOperator.Contains,
+ ComparisonOperator.StartWith,
+ ComparisonOperator.EndWith,
];
export const SwitchElseTo = 'end_cpn_ids';
@@ -716,16 +701,17 @@ export const initialPlaceholderValues = {
};
export enum Operations {
- SelectKeys = 'select keys',
- LiteralEval = 'literal eval',
+ SelectKeys = 'select_keys',
+ LiteralEval = 'literal_eval',
Combine = 'combine',
- FilterValues = 'filter values',
- AppendOrUpdate = 'append or update',
- RemoveKeys = 'remove keys',
- RenameKeys = 'rename keys',
+ FilterValues = 'filter_values',
+ AppendOrUpdate = 'append_or_update',
+ RemoveKeys = 'remove_keys',
+ RenameKeys = 'rename_keys',
}
export const initialDataOperationsValues = {
+ query: [],
operations: Operations.SelectKeys,
outputs: {
result: {
diff --git a/web/src/pages/agent/form/components/dynamic-fom-header.tsx b/web/src/pages/agent/form/components/dynamic-fom-header.tsx
new file mode 100644
index 000000000..66ff5d1a6
--- /dev/null
+++ b/web/src/pages/agent/form/components/dynamic-fom-header.tsx
@@ -0,0 +1,25 @@
+import { Button } from '@/components/ui/button';
+import { FormLabel } from '@/components/ui/form';
+import { Plus } from 'lucide-react';
+import { ReactNode } from 'react';
+
+export type FormListHeaderProps = {
+ label: ReactNode;
+ tooltip?: string;
+ onClick?: () => void;
+};
+
+export function DynamicFormHeader({
+ label,
+ tooltip,
+ onClick,
+}: FormListHeaderProps) {
+ return (
+
+ );
+}
diff --git a/web/src/pages/agent/form/components/output.tsx b/web/src/pages/agent/form/components/output.tsx
index 3419761e2..68551ab3c 100644
--- a/web/src/pages/agent/form/components/output.tsx
+++ b/web/src/pages/agent/form/components/output.tsx
@@ -1,4 +1,7 @@
+import { RAGFlowFormItem } from '@/components/ragflow-form';
+import { Input } from '@/components/ui/input';
import { t } from 'i18next';
+import { z } from 'zod';
export type OutputType = {
title: string;
@@ -7,6 +10,7 @@ export type OutputType = {
type OutputProps = {
list: Array;
+ isFormRequired?: boolean;
};
export function transferOutputs(outputs: Record) {
@@ -16,7 +20,11 @@ export function transferOutputs(outputs: Record) {
}));
}
-export function Output({ list }: OutputProps) {
+export const OutputSchema = {
+ outputs: z.record(z.any()),
+};
+
+export function Output({ list, isFormRequired = false }: OutputProps) {
return (
);
}
diff --git a/web/src/pages/agent/form/components/query-variable-list.tsx b/web/src/pages/agent/form/components/query-variable-list.tsx
index a01f5c1e8..73734532a 100644
--- a/web/src/pages/agent/form/components/query-variable-list.tsx
+++ b/web/src/pages/agent/form/components/query-variable-list.tsx
@@ -1,17 +1,20 @@
-import { BlockButton, Button } from '@/components/ui/button';
+import { Button } from '@/components/ui/button';
import { X } from 'lucide-react';
import { useFieldArray, useFormContext } from 'react-hook-form';
-import { useTranslation } from 'react-i18next';
import { JsonSchemaDataType } from '../../constant';
+import { DynamicFormHeader, FormListHeaderProps } from './dynamic-fom-header';
import { QueryVariable } from './query-variable';
type QueryVariableListProps = {
types?: JsonSchemaDataType[];
-};
-export function QueryVariableList({ types }: QueryVariableListProps) {
- const { t } = useTranslation();
+} & FormListHeaderProps;
+export function QueryVariableList({
+ types,
+ label,
+ tooltip,
+}: QueryVariableListProps) {
const form = useFormContext();
- const name = 'inputs';
+ const name = 'query';
const { fields, remove, append } = useFieldArray({
name: name,
@@ -19,28 +22,31 @@ export function QueryVariableList({ types }: QueryVariableListProps) {
});
return (
-
- {fields.map((field, index) => {
- const nameField = `${name}.${index}.input`;
+
+ append({ input: '' })}
+ >
+
+ {fields.map((field, index) => {
+ const nameField = `${name}.${index}.input`;
- return (
-
-
-
-
- );
- })}
-
-
append({ input: '' })}>
- {t('common.add')}
-
-
+ return (
+
+
+
+
+ );
+ })}
+
+
);
}
diff --git a/web/src/pages/agent/form/data-operations-form/filter-values.tsx b/web/src/pages/agent/form/data-operations-form/filter-values.tsx
index cea0751be..fca49f5ef 100644
--- a/web/src/pages/agent/form/data-operations-form/filter-values.tsx
+++ b/web/src/pages/agent/form/data-operations-form/filter-values.tsx
@@ -1,13 +1,14 @@
import { SelectWithSearch } from '@/components/originui/select-with-search';
import { RAGFlowFormItem } from '@/components/ragflow-form';
-import { BlockButton, Button } from '@/components/ui/button';
-import { FormLabel } from '@/components/ui/form';
+import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Separator } from '@/components/ui/separator';
+import { useBuildSwitchOperatorOptions } from '@/hooks/logic-hooks/use-build-operator-options';
import { X } from 'lucide-react';
import { ReactNode } from 'react';
import { useFieldArray, useFormContext } from 'react-hook-form';
-import { useTranslation } from 'react-i18next';
+import { DataOperationsOperatorOptions } from '../../constant';
+import { DynamicFormHeader } from '../components/dynamic-fom-header';
type SelectKeysProps = {
name: string;
@@ -25,7 +26,6 @@ export function FilterValues({
valueField = 'value',
operatorField = 'operator',
}: SelectKeysProps) {
- const { t } = useTranslation();
const form = useFormContext();
const { fields, remove, append } = useFieldArray({
@@ -33,9 +33,18 @@ export function FilterValues({
control: form.control,
});
+ const operatorOptions = useBuildSwitchOperatorOptions(
+ DataOperationsOperatorOptions,
+ );
+
return (
);
}
diff --git a/web/src/pages/agent/form/data-operations-form/index.tsx b/web/src/pages/agent/form/data-operations-form/index.tsx
index 838f75f96..8dd2848ed 100644
--- a/web/src/pages/agent/form/data-operations-form/index.tsx
+++ b/web/src/pages/agent/form/data-operations-form/index.tsx
@@ -1,6 +1,7 @@
import { SelectWithSearch } from '@/components/originui/select-with-search';
import { RAGFlowFormItem } from '@/components/ragflow-form';
-import { Form, FormLabel } from '@/components/ui/form';
+import { Form } from '@/components/ui/form';
+import { Separator } from '@/components/ui/separator';
import { buildOptions } from '@/utils/form';
import { zodResolver } from '@hookform/resolvers/zod';
import { memo } from 'react';
@@ -17,14 +18,14 @@ import { useWatchFormChange } from '../../hooks/use-watch-form-change';
import { INextOperatorForm } from '../../interface';
import { buildOutputList } from '../../utils/build-output-list';
import { FormWrapper } from '../components/form-wrapper';
-import { Output } from '../components/output';
+import { Output, OutputSchema } from '../components/output';
import { QueryVariableList } from '../components/query-variable-list';
import { FilterValues } from './filter-values';
import { SelectKeys } from './select-keys';
import { Updates } from './updates';
export const RetrievalPartialSchema = {
- inputs: z.array(z.object({ input: z.string().optional() })),
+ query: z.array(z.object({ input: z.string().optional() })),
operations: z.string(),
select_keys: z.array(z.object({ name: z.string().optional() })).optional(),
remove_keys: z.array(z.object({ name: z.string().optional() })).optional(),
@@ -50,6 +51,7 @@ export const RetrievalPartialSchema = {
}),
)
.optional(),
+ ...OutputSchema,
};
export const FormSchema = z.object(RetrievalPartialSchema);
@@ -65,6 +67,7 @@ function DataOperationsForm({ node }: INextOperatorForm) {
const form = useForm({
defaultValues: defaultValues,
+ mode: 'onChange',
resolver: zodResolver(FormSchema),
shouldUnregister: true,
});
@@ -78,17 +81,17 @@ function DataOperationsForm({ node }: INextOperatorForm) {
true,
);
- useWatchFormChange(node?.id, form);
+ useWatchFormChange(node?.id, form, true);
return (
);
diff --git a/web/src/pages/agent/form/data-operations-form/select-keys.tsx b/web/src/pages/agent/form/data-operations-form/select-keys.tsx
index 918ca977e..2d494463b 100644
--- a/web/src/pages/agent/form/data-operations-form/select-keys.tsx
+++ b/web/src/pages/agent/form/data-operations-form/select-keys.tsx
@@ -1,11 +1,10 @@
import { RAGFlowFormItem } from '@/components/ragflow-form';
-import { BlockButton, Button } from '@/components/ui/button';
-import { FormLabel } from '@/components/ui/form';
+import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { X } from 'lucide-react';
import { ReactNode } from 'react';
import { useFieldArray, useFormContext } from 'react-hook-form';
-import { useTranslation } from 'react-i18next';
+import { DynamicFormHeader } from '../components/dynamic-fom-header';
type SelectKeysProps = {
name: string;
@@ -13,7 +12,6 @@ type SelectKeysProps = {
tooltip?: string;
};
export function SelectKeys({ name, label, tooltip }: SelectKeysProps) {
- const { t } = useTranslation();
const form = useFormContext();
const { fields, remove, append } = useFieldArray({
@@ -23,7 +21,11 @@ export function SelectKeys({ name, label, tooltip }: SelectKeysProps) {
return (
- {label}
+ append({ name: '' })}
+ >
{fields.map((field, index) => {
const nameField = `${name}.${index}.name`;
@@ -40,10 +42,6 @@ export function SelectKeys({ name, label, tooltip }: SelectKeysProps) {
);
})}
-
- append({ name: '' })}>
- {t('common.add')}
-
);
}
diff --git a/web/src/pages/agent/form/data-operations-form/updates.tsx b/web/src/pages/agent/form/data-operations-form/updates.tsx
index 953c89d36..fba1cd5ac 100644
--- a/web/src/pages/agent/form/data-operations-form/updates.tsx
+++ b/web/src/pages/agent/form/data-operations-form/updates.tsx
@@ -1,11 +1,11 @@
import { RAGFlowFormItem } from '@/components/ragflow-form';
-import { BlockButton, Button } from '@/components/ui/button';
-import { FormLabel } from '@/components/ui/form';
+import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
+import { Separator } from '@/components/ui/separator';
import { X } from 'lucide-react';
import { ReactNode } from 'react';
import { useFieldArray, useFormContext } from 'react-hook-form';
-import { useTranslation } from 'react-i18next';
+import { DynamicFormHeader } from '../components/dynamic-fom-header';
type SelectKeysProps = {
name: string;
@@ -21,7 +21,6 @@ export function Updates({
keyField,
valueField,
}: SelectKeysProps) {
- const { t } = useTranslation();
const form = useFormContext();
const { fields, remove, append } = useFieldArray({
@@ -31,7 +30,11 @@ export function Updates({
return (
);
}
diff --git a/web/src/pages/agent/form/switch-form/index.tsx b/web/src/pages/agent/form/switch-form/index.tsx
index b6dcf45bd..6d6849147 100644
--- a/web/src/pages/agent/form/switch-form/index.tsx
+++ b/web/src/pages/agent/form/switch-form/index.tsx
@@ -1,5 +1,4 @@
import { FormContainer } from '@/components/form-container';
-import { IconFont } from '@/components/icon-font';
import { SelectWithSearch } from '@/components/originui/select-with-search';
import { BlockButton, Button } from '@/components/ui/button';
import { Card, CardContent } from '@/components/ui/card';
@@ -13,6 +12,7 @@ import {
import { RAGFlowSelect } from '@/components/ui/select';
import { Separator } from '@/components/ui/separator';
import { Textarea } from '@/components/ui/textarea';
+import { useBuildSwitchOperatorOptions } from '@/hooks/logic-hooks/use-build-operator-options';
import { cn } from '@/lib/utils';
import { zodResolver } from '@hookform/resolvers/zod';
import { t } from 'i18next';
@@ -22,11 +22,7 @@ import { memo, useCallback, useMemo } from 'react';
import { useFieldArray, useForm, useFormContext } from 'react-hook-form';
import { useTranslation } from 'react-i18next';
import { z } from 'zod';
-import {
- SwitchLogicOperatorOptions,
- SwitchOperatorOptions,
- VariableType,
-} from '../../constant';
+import { SwitchLogicOperatorOptions, VariableType } from '../../constant';
import { useBuildQueryVariableOptions } from '../../hooks/use-get-begin-query';
import { IOperatorForm } from '../../interface';
import { FormWrapper } from '../components/form-wrapper';
@@ -43,42 +39,6 @@ type ConditionCardsProps = {
parentLength: number;
} & IOperatorForm;
-export const LogicalOperatorIcon = function OperatorIcon({
- icon,
- value,
-}: Omit<(typeof SwitchOperatorOptions)[0], 'label'>) {
- if (typeof icon === 'string') {
- return (
- ',
- })}
- >
- );
- }
- return icon;
-};
-
-export function useBuildSwitchOperatorOptions() {
- const { t } = useTranslation();
-
- const switchOperatorOptions = useMemo(() => {
- return SwitchOperatorOptions.map((x) => ({
- value: x.value,
- icon: (
-
- ),
- label: t(`flow.switchOperatorOptions.${x.label}`),
- }));
- }, [t]);
-
- return switchOperatorOptions;
-}
-
function ConditionCards({
name: parentName,
parentIndex,
diff --git a/web/src/pages/agent/hooks/use-watch-form-change.ts b/web/src/pages/agent/hooks/use-watch-form-change.ts
index 534c2e2a9..6a0f18091 100644
--- a/web/src/pages/agent/hooks/use-watch-form-change.ts
+++ b/web/src/pages/agent/hooks/use-watch-form-change.ts
@@ -2,9 +2,13 @@ import { useEffect } from 'react';
import { UseFormReturn, useWatch } from 'react-hook-form';
import useGraphStore from '../store';
-export function useWatchFormChange(id?: string, form?: UseFormReturn) {
+export function useWatchFormChange(
+ id?: string,
+ form?: UseFormReturn,
+ enableReplacement = false,
+) {
let values = useWatch({ control: form?.control });
- const updateNodeForm = useGraphStore((state) => state.updateNodeForm);
+ const { updateNodeForm, replaceNodeForm } = useGraphStore((state) => state);
useEffect(() => {
// Manually triggered form updates are synchronized to the canvas
@@ -12,7 +16,7 @@ export function useWatchFormChange(id?: string, form?: UseFormReturn) {
values = form?.getValues() || {};
let nextValues: any = values;
- updateNodeForm(id, nextValues);
+ (enableReplacement ? replaceNodeForm : updateNodeForm)(id, nextValues);
}
}, [form?.formState.isDirty, id, updateNodeForm, values]);
}
diff --git a/web/src/pages/agent/store.ts b/web/src/pages/agent/store.ts
index 50046bde6..75fc06f48 100644
--- a/web/src/pages/agent/store.ts
+++ b/web/src/pages/agent/store.ts
@@ -14,7 +14,7 @@ import {
applyEdgeChanges,
applyNodeChanges,
} from '@xyflow/react';
-import { omit } from 'lodash';
+import { cloneDeep, omit } from 'lodash';
import differenceWith from 'lodash/differenceWith';
import intersectionWith from 'lodash/intersectionWith';
import lodashSet from 'lodash/set';
@@ -53,6 +53,7 @@ export type RFState = {
values: any,
path?: (string | number)[],
) => RAGFlowNodeType[];
+ replaceNodeForm: (nodeId: string, values: any) => void;
onSelectionChange: OnSelectionChangeFunc;
addNode: (nodes: RAGFlowNodeType) => void;
getNode: (id?: string | null) => RAGFlowNodeType | undefined;
@@ -433,6 +434,19 @@ const useGraphStore = create()(
return nextNodes;
},
+ replaceNodeForm(nodeId, values) {
+ if (nodeId) {
+ set((state) => {
+ for (const node of state.nodes) {
+ if (node.id === nodeId) {
+ //cloneDeep Solving the issue of react-hook-form errors
+ node.data.form = cloneDeep(values); // TypeError: Cannot assign to read only property '0' of object '[object Array]'
+ break;
+ }
+ }
+ });
+ }
+ },
updateSwitchFormData: (source, sourceHandle, target, isConnecting) => {
const { updateNodeForm, edges } = get();
if (sourceHandle) {
diff --git a/web/src/pages/agent/utils.ts b/web/src/pages/agent/utils.ts
index 89fd06ede..9d6aa63f0 100644
--- a/web/src/pages/agent/utils.ts
+++ b/web/src/pages/agent/utils.ts
@@ -273,7 +273,7 @@ function transformDataOperationsParams(params: DataOperationsFormSchemaType) {
...params,
select_keys: params?.select_keys?.map((x) => x.name),
remove_keys: params?.remove_keys?.map((x) => x.name),
- inputs: params.inputs.map((x) => x.input),
+ query: params.query.map((x) => x.input),
};
}
diff --git a/web/src/pages/chat/chat-configuration-modal/metadata-filter-conditions.tsx b/web/src/pages/chat/chat-configuration-modal/metadata-filter-conditions.tsx
index c34b8b8b9..ce2a0b59a 100644
--- a/web/src/pages/chat/chat-configuration-modal/metadata-filter-conditions.tsx
+++ b/web/src/pages/chat/chat-configuration-modal/metadata-filter-conditions.tsx
@@ -1,6 +1,6 @@
+import { SwitchOperatorOptions } from '@/constants/agent';
+import { useBuildSwitchOperatorOptions } from '@/hooks/logic-hooks/use-build-operator-options';
import { useFetchKnowledgeMetadata } from '@/hooks/use-knowledge-request';
-import { SwitchOperatorOptions } from '@/pages/agent/constant';
-import { useBuildSwitchOperatorOptions } from '@/pages/agent/form/switch-form';
import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
import {
Button,
diff --git a/web/src/pages/next-chats/chat/app-settings/metadata-filter-conditions.tsx b/web/src/pages/next-chats/chat/app-settings/metadata-filter-conditions.tsx
index 62eb2dbe5..136cfdc57 100644
--- a/web/src/pages/next-chats/chat/app-settings/metadata-filter-conditions.tsx
+++ b/web/src/pages/next-chats/chat/app-settings/metadata-filter-conditions.tsx
@@ -15,9 +15,9 @@ import {
} from '@/components/ui/form';
import { Input } from '@/components/ui/input';
import { Separator } from '@/components/ui/separator';
+import { SwitchOperatorOptions } from '@/constants/agent';
+import { useBuildSwitchOperatorOptions } from '@/hooks/logic-hooks/use-build-operator-options';
import { useFetchKnowledgeMetadata } from '@/hooks/use-knowledge-request';
-import { SwitchOperatorOptions } from '@/pages/agent/constant';
-import { useBuildSwitchOperatorOptions } from '@/pages/agent/form/switch-form';
import { Plus, X } from 'lucide-react';
import { useCallback } from 'react';
import { useFieldArray, useFormContext } from 'react-hook-form';