import MaxTokenNumber from '@/components/max-token-number'; import { IModalManagerChildrenProps } from '@/components/modal-manager'; import { IKnowledgeFileParserConfig } from '@/interfaces/database/knowledge'; import { IChangeParserConfigRequestBody } from '@/interfaces/request/document'; import { MinusCircleOutlined, PlusOutlined, QuestionCircleOutlined, } from '@ant-design/icons'; import { Button, Divider, Form, InputNumber, Modal, Space, Switch, Tag, Tooltip, } from 'antd'; import omit from 'lodash/omit'; import React, { useEffect, useMemo } from 'react'; import { useFetchParserListOnMount } from './hooks'; import { useTranslate } from '@/hooks/commonHooks'; import styles from './index.less'; const { CheckableTag } = Tag; interface IProps extends Omit { loading: boolean; onOk: ( parserId: string, parserConfig: IChangeParserConfigRequestBody, ) => void; showModal?(): void; parserId: string; parserConfig: IKnowledgeFileParserConfig; documentExtension: string; documentId: string; } const hidePagesChunkMethods = ['qa', 'table', 'picture', 'resume', 'one']; const ChunkMethodModal: React.FC = ({ documentId, parserId, onOk, hideModal, visible, documentExtension, parserConfig, }) => { const { parserList, handleChange, selectedTag } = useFetchParserListOnMount( documentId, parserId, documentExtension, ); const [form] = Form.useForm(); 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 !== 'one') .every((x) => x !== selectedTag) ); }, [selectedTag, isPdf]); const showMaxTokenNumber = selectedTag === 'naive'; const hideDivider = [showPages, showOne, showMaxTokenNumber].every( (x) => x === false, ); 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 (
{parserList.map((x) => { return ( { handleChange(x.value, checked); }} > {x.label} ); })}
{hideDivider || }
{showPages && ( <>

{t('pageRanges')}:

{(fields, { add, remove }) => ( <> {fields.map(({ key, name, ...restField }) => ( 0 ? [name - 1, 'to'] : []} rules={[ { required: true, message: t('fromMessage'), }, ({ getFieldValue }) => ({ validator(_, value) { if ( name === 0 || !value || getFieldValue(['pages', name - 1, 'to']) < value ) { return Promise.resolve(); } return Promise.reject( new Error(t('greaterThanPrevious')), ); }, }), ]} > ({ validator(_, value) { if ( !value || getFieldValue(['pages', name, 'from']) < value ) { return Promise.resolve(); } return Promise.reject( new Error(t('greaterThan')), ); }, }), ]} > {name > 0 && ( remove(name)} /> )} ))} )} )} {showOne && ( )} {showPages && ( {({ getFieldValue }) => getFieldValue(['parser_config', 'layout_recognize']) && ( ) } )} {showMaxTokenNumber && }
); }; export default ChunkMethodModal;