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 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; } const hidePagesChunkMethods = ['qa', 'table', 'picture', 'resume', 'one']; const ChunkMethodModal: React.FC = ({ parserId, onOk, hideModal, visible, documentExtension, parserConfig, }) => { const { parserList, handleChange, selectedTag } = useFetchParserListOnMount( parserId, documentExtension, ); const [form] = Form.useForm(); 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 showPages = useMemo(() => { return hidePagesChunkMethods.every((x) => x !== selectedTag); }, [selectedTag]); const showOne = useMemo(() => { return showPages || selectedTag === 'one'; }, [showPages, selectedTag]); 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} ); })}
{documentExtension === 'pdf' && (
{showPages && ( <>

Page Ranges:

{(fields, { add, remove }) => ( <> {fields.map(({ key, name, ...restField }) => ( 0 ? [name - 1, 'to'] : []} rules={[ { required: true, message: 'Missing start page number', }, ({ getFieldValue }) => ({ validator(_, value) { if ( name === 0 || !value || getFieldValue(['pages', name - 1, 'to']) < value ) { return Promise.resolve(); } return Promise.reject( new Error( 'The current value must be greater than the previous to!', ), ); }, }), ]} > ({ validator(_, value) { if ( !value || getFieldValue(['pages', name, 'from']) < value ) { return Promise.resolve(); } return Promise.reject( new Error( 'The current value must be greater than to!', ), ); }, }), ]} > {name > 0 && ( remove(name)} /> )} ))} )} )} {showOne && ( )} {showPages && ( {({ getFieldValue }) => getFieldValue(['parser_config', 'layout_recognize']) && ( ) } )} {selectedTag === 'naive' && }
)}
); }; export default ChunkMethodModal;