import { DataFlowSelect } from '@/components/data-pipeline-select'; import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields'; import { Button } from '@/components/ui/button'; import Divider from '@/components/ui/divider'; import { Form } from '@/components/ui/form'; import { FormLayout } from '@/constants/form'; import { DocumentParserType } from '@/constants/knowledge'; import { PermissionRole } from '@/constants/permission'; import { IConnector } from '@/interfaces/database/knowledge'; import { DataSourceInfo } from '@/pages/user-setting/data-source/contant'; import { IDataSourceBase } from '@/pages/user-setting/data-source/interface'; import { zodResolver } from '@hookform/resolvers/zod'; import { useEffect, useState } from 'react'; import { useForm, useWatch } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { z } from 'zod'; import { TopTitle } from '../dataset-title'; import { GenerateType, IGenerateLogButtonProps, } from '../dataset/generate-button/generate'; import { ChunkMethodForm } from './chunk-method-form'; import ChunkMethodLearnMore from './chunk-method-learn-more'; import LinkDataSource, { IDataSourceNodeProps, } from './components/link-data-source'; import { MainContainer } from './configuration-form-container'; import { ChunkMethodItem, ParseTypeItem } from './configuration/common-item'; import { formSchema } from './form-schema'; import { GeneralForm } from './general-form'; import { useFetchKnowledgeConfigurationOnMount } from './hooks'; import { SavingButton } from './saving-button'; const enum DocumentType { DeepDOC = 'DeepDOC', PlainText = 'Plain Text', } const initialEntityTypes = [ 'organization', 'person', 'geo', 'event', 'category', ]; const enum MethodValue { General = 'general', Light = 'light', } export default function DatasetSettings() { const { t } = useTranslation(); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { name: '', parser_id: DocumentParserType.Naive, permission: PermissionRole.Me, parser_config: { layout_recognize: DocumentType.DeepDOC, chunk_token_num: 512, delimiter: `\n`, auto_keywords: 0, auto_questions: 0, html4excel: false, topn_tags: 3, toc_extraction: false, overlapped_percent: 0, raptor: { use_raptor: true, max_token: 256, threshold: 0.1, max_cluster: 64, random_seed: 0, scope: 'file', prompt: t('knowledgeConfiguration.promptText'), }, graphrag: { use_graphrag: true, entity_types: initialEntityTypes, method: MethodValue.Light, }, }, pipeline_id: '', parseType: 1, pagerank: 0, connectors: [], }, }); const knowledgeDetails = useFetchKnowledgeConfigurationOnMount(form); // const [pipelineData, setPipelineData] = useState(); const [sourceData, setSourceData] = useState(); const [graphRagGenerateData, setGraphRagGenerateData] = useState(); const [raptorGenerateData, setRaptorGenerateData] = useState(); useEffect(() => { console.log('🚀 ~ DatasetSettings ~ knowledgeDetails:', knowledgeDetails); if (knowledgeDetails) { // const data: IDataPipelineNodeProps = { // id: knowledgeDetails.pipeline_id, // name: knowledgeDetails.pipeline_name, // avatar: knowledgeDetails.pipeline_avatar, // linked: true, // }; // setPipelineData(data); const source_data: IDataSourceNodeProps[] = knowledgeDetails?.connectors?.map((connector) => { return { ...connector, icon: DataSourceInfo[connector.source as keyof typeof DataSourceInfo] ?.icon || '', }; }); setSourceData(source_data); setGraphRagGenerateData({ finish_at: knowledgeDetails.graphrag_task_finish_at, task_id: knowledgeDetails.graphrag_task_id, } as IGenerateLogButtonProps); setRaptorGenerateData({ finish_at: knowledgeDetails.raptor_task_finish_at, task_id: knowledgeDetails.raptor_task_id, } as IGenerateLogButtonProps); form.setValue('parseType', knowledgeDetails.pipeline_id ? 2 : 1); form.setValue('pipeline_id', knowledgeDetails.pipeline_id || ''); } }, [knowledgeDetails, form]); async function onSubmit(data: z.infer) { try { console.log('Form validation passed, submit data', data); } catch (error) { console.error('An error occurred during submission:', error); } } // const handleLinkOrEditSubmit = ( // data: IDataPipelineSelectNode | undefined, // ) => { // console.log('🚀 ~ DatasetSettings ~ data:', data); // if (data) { // setPipelineData(data); // form.setValue('pipeline_id', data.id || ''); // // form.setValue('pipeline_name', data.name || ''); // // form.setValue('pipeline_avatar', data.avatar || ''); // } // }; const handleLinkOrEditSubmit = (data: IConnector[] | undefined) => { if (data) { const connectors = data.map((connector) => { return { ...connector, auto_parse: connector.auto_parse === '0' ? '0' : '1', icon: DataSourceInfo[connector.source as keyof typeof DataSourceInfo] ?.icon || '', }; }); setSourceData(connectors as IDataSourceNodeProps[]); form.setValue('connectors', connectors || []); // form.setValue('pipeline_name', data.name || ''); // form.setValue('pipeline_avatar', data.avatar || ''); } }; const handleDeletePipelineTask = (type: GenerateType) => { if (type === GenerateType.KnowledgeGraph) { setGraphRagGenerateData({ finish_at: '', task_id: '', } as IGenerateLogButtonProps); } else if (type === GenerateType.Raptor) { setRaptorGenerateData({ finish_at: '', task_id: '', } as IGenerateLogButtonProps); } }; const parseType = useWatch({ control: form.control, name: 'parseType', defaultValue: knowledgeDetails.pipeline_id ? 2 : 1, }); const selectedTag = useWatch({ name: 'parser_id', control: form.control, }); useEffect(() => { if (parseType === 1) { form.setValue('pipeline_id', ''); } console.log('parseType', parseType); }, [parseType, form]); const unbindFunc = (data: IDataSourceBase) => { if (data) { const connectors = sourceData?.filter((connector) => { return connector.id !== data.id; }); console.log('🚀 ~ DatasetSettings ~ connectors:', connectors); setSourceData(connectors as IDataSourceNodeProps[]); form.setValue('connectors', connectors || []); // form.setValue('pipeline_name', data.name || ''); // form.setValue('pipeline_avatar', data.avatar || ''); } }; const handleAutoParse = ({ source_id, isAutoParse, }: { source_id: string; isAutoParse: boolean; }) => { if (source_id) { const connectors = sourceData?.map((connector) => { if (connector.id === source_id) { return { ...connector, auto_parse: isAutoParse ? '1' : '0', }; } return connector; }); console.log('🚀 ~ DatasetSettings ~ connectors:', connectors); setSourceData(connectors as IDataSourceNodeProps[]); form.setValue('connectors', connectors || []); // form.setValue('pipeline_name', data.name || ''); // form.setValue('pipeline_avatar', data.avatar || ''); } }; return (
{t('knowledgeConfiguration.baseInfo')}
{t('knowledgeConfiguration.globalIndex')}
handleDeletePipelineTask(GenerateType.KnowledgeGraph) } > handleDeletePipelineTask(GenerateType.Raptor)} >
{t('knowledgeConfiguration.dataPipeline')}
{parseType === 1 && ( )} {parseType === 2 && ( )} {/* */} {parseType === 1 && } {/* */}
{parseType === 1 && }
); }