import { Collapse } from '@/components/collapse'; import { CrossLanguageFormField } from '@/components/cross-language-form-field'; import { FormContainer } from '@/components/form-container'; import { KnowledgeBaseFormField } from '@/components/knowledge-base-item'; import { MemoriesFormField } from '@/components/memories-form-field'; import { MetadataFilter, MetadataFilterSchema, } from '@/components/metadata-filter'; import { RAGFlowFormItem } from '@/components/ragflow-form'; import { RerankFormFields } from '@/components/rerank'; import { SimilaritySliderFormField } from '@/components/similarity-slider'; import { TOCEnhanceFormField } from '@/components/toc-enhance-form-field'; import { TopNFormField } from '@/components/top-n-item'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form'; import { Radio } from '@/components/ui/radio'; import { Textarea } from '@/components/ui/textarea'; import { UseKnowledgeGraphFormField } from '@/components/use-knowledge-graph-item'; import { zodResolver } from '@hookform/resolvers/zod'; import { memo, useMemo } from 'react'; import { UseFormReturn, useForm, useFormContext, useWatch, } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { z } from 'zod'; import { RetrievalFrom, initialRetrievalValues } from '../../constant'; import { useWatchFormChange } from '../../hooks/use-watch-form-change'; import { INextOperatorForm } from '../../interface'; import { FormWrapper } from '../components/form-wrapper'; import { Output } from '../components/output'; import { PromptEditor } from '../components/prompt-editor'; import { useValues } from './use-values'; export const RetrievalPartialSchema = { similarity_threshold: z.coerce.number(), keywords_similarity_weight: z.coerce.number(), top_n: z.coerce.number(), top_k: z.coerce.number(), kb_ids: z.array(z.string()), rerank_id: z.string(), empty_response: z.string(), cross_languages: z.array(z.string()), use_kg: z.boolean(), toc_enhance: z.boolean(), ...MetadataFilterSchema, memory_ids: z.array(z.string()).optional(), retrieval_from: z.string(), }; export const FormSchema = z.object({ query: z.string().optional(), ...RetrievalPartialSchema, }); export type RetrievalFormSchemaType = z.infer; export function MemoryDatasetForm() { const { t } = useTranslation(); const form = useFormContext(); const retrievalFrom = useWatch({ control: form.control, name: 'retrieval_from', }); return ( <> {t('knowledgeDetails.dataset')} {t('header.memories')} {retrievalFrom === RetrievalFrom.Memory ? ( ) : ( )} ); } export function useHideKnowledgeGraphField(form: UseFormReturn) { const retrievalFrom = useWatch({ control: form.control, name: 'retrieval_from', }); return retrievalFrom === RetrievalFrom.Memory; } export function EmptyResponseField() { const { t } = useTranslation(); const form = useFormContext(); return ( ( {t('chat.emptyResponse')}