import MaxTokenNumber from '@/components/max-token-number'; import { IModalManagerChildrenProps } from '@/components/modal-manager'; import { MinusCircleOutlined, PlusOutlined, QuestionCircleOutlined, } from '@ant-design/icons'; import { Button, Divider, Form, InputNumber, Modal, Select, Space, Tooltip, } from 'antd'; import omit from 'lodash/omit'; import React, { useEffect, useMemo } from 'react'; import { useFetchParserListOnMount, useShowAutoKeywords } from './hooks'; import { DocumentParserType } from '@/constants/knowledge'; import { useTranslate } from '@/hooks/common-hooks'; import { IParserConfig } from '@/interfaces/database/document'; import { IChangeParserConfigRequestBody } from '@/interfaces/request/document'; import { AutoKeywordsItem, AutoQuestionsItem } from '../auto-keywords-item'; import { DatasetConfigurationContainer } from '../dataset-configuration-container'; import Delimiter from '../delimiter'; import EntityTypesItem from '../entity-types-item'; import ExcelToHtml from '../excel-to-html'; import LayoutRecognize from '../layout-recognize'; import ParseConfiguration, { showRaptorParseConfiguration, } from '../parse-configuration'; import GraphRagItems, { showGraphRagItems, } from '../parse-configuration/graph-rag-items'; import styles from './index.less'; interface IProps extends Omit { loading: boolean; onOk: ( parserId: DocumentParserType | undefined, parserConfig: IChangeParserConfigRequestBody, ) => void; showModal?(): void; parserId: DocumentParserType; parserConfig: IParserConfig; documentExtension: string; documentId: string; } const hidePagesChunkMethods = [ DocumentParserType.Qa, DocumentParserType.Table, DocumentParserType.Picture, DocumentParserType.Resume, DocumentParserType.One, DocumentParserType.KnowledgeGraph, ]; const ChunkMethodModal: React.FC = ({ documentId, parserId, onOk, hideModal, visible, documentExtension, parserConfig, loading, }) => { const [form] = Form.useForm(); const { parserList, handleChange, selectedTag } = useFetchParserListOnMount( documentId, parserId, documentExtension, form, ); const { t } = useTranslate('knowledgeDetails'); const handleOk = async () => { const values = await form.validateFields(); const parser_config = { ...values.parser_config, pages: values.pages?.map((x: any) => [x.from, x.to]) ?? [], }; onOk(selectedTag, parser_config); }; const isPdf = documentExtension === 'pdf'; const showPages = useMemo(() => { return isPdf && hidePagesChunkMethods.every((x) => x !== selectedTag); }, [selectedTag, isPdf]); const showOne = useMemo(() => { return ( isPdf && hidePagesChunkMethods .filter((x) => x !== DocumentParserType.One) .every((x) => x !== selectedTag) ); }, [selectedTag, isPdf]); const showMaxTokenNumber = selectedTag === DocumentParserType.Naive || selectedTag === DocumentParserType.KnowledgeGraph; const showEntityTypes = selectedTag === DocumentParserType.KnowledgeGraph; const showExcelToHtml = selectedTag === DocumentParserType.Naive && documentExtension === 'xlsx'; const showAutoKeywords = useShowAutoKeywords(); const afterClose = () => { form.resetFields(); }; useEffect(() => { if (visible) { const pages = parserConfig?.pages?.map((x) => ({ from: x[0], to: x[1] })) ?? []; form.setFieldsValue({ pages: pages.length > 0 ? pages : [{ from: 1, to: 1024 }], parser_config: omit(parserConfig, 'pages'), }); } }, [form, parserConfig, visible]); return (