import { Collapse } from '@/components/collapse'; import { FormContainer } from '@/components/form-container'; import { LargeModelFilterFormSchema, LargeModelFormField, } from '@/components/large-model-form-field'; import { LlmSettingSchema } from '@/components/llm-setting-items/next'; import { MessageHistoryWindowSizeFormField } from '@/components/message-history-window-size-item'; import { Form, FormControl, FormField, FormItem, FormLabel, } from '@/components/ui/form'; import { Input, NumberInput } from '@/components/ui/input'; import { RAGFlowSelect } from '@/components/ui/select'; import { LlmModelType } from '@/constants/knowledge'; import { useFindLlmByUuid } from '@/hooks/use-llm-request'; import { buildOptions } from '@/utils/form'; import { zodResolver } from '@hookform/resolvers/zod'; import { memo, useMemo } from 'react'; import { useForm, useWatch } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { z } from 'zod'; import { AgentExceptionMethod, VariableType, initialAgentValues, } from '../../constant'; import { INextOperatorForm } from '../../interface'; import useGraphStore from '../../store'; import { isBottomSubAgent } from '../../utils'; import { DescriptionField } from '../components/description-field'; import { Output } from '../components/output'; import { PromptEditor } from '../components/prompt-editor'; import { QueryVariable } from '../components/query-variable'; import { AgentTools, Agents } from './agent-tools'; import { useValues } from './use-values'; import { useWatchFormChange } from './use-watch-change'; const exceptionMethodOptions = buildOptions(AgentExceptionMethod); const FormSchema = z.object({ sys_prompt: z.string(), description: z.string().optional(), user_prompt: z.string().optional(), prompts: z.string().optional(), // prompts: z // .array( // z.object({ // role: z.string(), // content: z.string(), // }), // ) // .optional(), message_history_window_size: z.coerce.number(), tools: z .array( z.object({ component_name: z.string(), }), ) .optional(), ...LlmSettingSchema, max_retries: z.coerce.number(), delay_after_error: z.coerce.number().optional(), visual_files_var: z.string().optional(), max_rounds: z.coerce.number().optional(), exception_method: z.string().nullable(), exception_comment: z.string().optional(), exception_goto: z.string().optional(), ...LargeModelFilterFormSchema, }); function AgentForm({ node }: INextOperatorForm) { const { t } = useTranslation(); const { edges } = useGraphStore((state) => state); const defaultValues = useValues(node); const isSubAgent = useMemo(() => { return isBottomSubAgent(edges, node?.id); }, [edges, node?.id]); const outputList = useMemo(() => { return [ { title: 'content', type: initialAgentValues.outputs.content.type }, ]; }, []); const form = useForm>({ defaultValues: defaultValues, resolver: zodResolver(FormSchema), }); const llmId = useWatch({ control: form.control, name: 'llm_id' }); const findLlmByUuid = useFindLlmByUuid(); useWatchFormChange(node?.id, form); return (
{ e.preventDefault(); }} > {isSubAgent && } {findLlmByUuid(llmId)?.model_type === LlmModelType.Image2text && ( )} ( Prompt )} /> {isSubAgent || ( {/* */} ( User Prompt
)} />
)} Advanced Settings}> ( Max retries )} /> ( Delay after error )} /> ( Max rounds )} /> ( Exception method )} /> ( Exception comment )} />
); } export default memo(AgentForm);