import { FormContainer } from '@/components/form-container'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; import { RAGFlowSelect } from '@/components/ui/select'; import { Switch } from '@/components/ui/switch'; import { buildOptions } from '@/utils/form'; import { zodResolver } from '@hookform/resolvers/zod'; import { t } from 'i18next'; import { memo } from 'react'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import { TavilySearchDepth, TavilyTopic, initialTavilyValues, } from '../../constant'; import { INextOperatorForm } from '../../interface'; import { buildOutputList } from '../../utils/build-output-list'; import { ApiKeyField } from '../components/api-key-field'; import { FormWrapper } from '../components/form-wrapper'; import { Output } from '../components/output'; import { QueryVariable } from '../components/query-variable'; import { DynamicDomain } from './dynamic-domain'; import { useValues } from './use-values'; import { useWatchFormChange } from './use-watch-change'; export const TavilyFormSchema = { api_key: z.string(), }; const outputList = buildOutputList(initialTavilyValues.outputs); function TavilyForm({ node }: INextOperatorForm) { const values = useValues(node); const FormSchema = z.object({ ...TavilyFormSchema, query: z.string(), search_depth: z.enum([TavilySearchDepth.Advanced, TavilySearchDepth.Basic]), topic: z.enum([TavilyTopic.News, TavilyTopic.General]), max_results: z.coerce.number(), days: z.coerce.number(), include_answer: z.boolean(), include_raw_content: z.boolean(), include_images: z.boolean(), include_image_descriptions: z.boolean(), include_domains: z.array(z.object({ value: z.any() })), // TODO: z.string should be used, but an error will be reported exclude_domains: z.array(z.object({ value: z.any() })), }); const form = useForm>({ defaultValues: values, resolver: zodResolver(FormSchema), }); useWatchFormChange(node?.id, form); return (
( {t('flow.searchDepth')} )} /> ( {t('flow.tavilyTopic')} )} /> ( {t('flow.maxResults')} )} /> ( {t('flow.days')} )} /> ( {t('flow.includeAnswer')} )} /> ( {t('flow.includeRawContent')} )} /> ( {t('flow.includeImages')} )} /> ( {t('flow.includeImageDescriptions')} )} />
); } export default memo(TavilyForm);