| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334 | 
							- import {
 -   Dialog,
 -   DialogContent,
 -   DialogFooter,
 -   DialogHeader,
 -   DialogTitle,
 - } from '@/components/ui/dialog';
 - import {
 -   Form,
 -   FormControl,
 -   FormField,
 -   FormItem,
 -   FormLabel,
 -   FormMessage,
 - } from '@/components/ui/form';
 - import { DocumentParserType } from '@/constants/knowledge';
 - import { useFetchKnowledgeBaseConfiguration } from '@/hooks/use-knowledge-request';
 - import { IModalProps } from '@/interfaces/common';
 - import { IParserConfig } from '@/interfaces/database/document';
 - import { IChangeParserConfigRequestBody } from '@/interfaces/request/document';
 - import { zodResolver } from '@hookform/resolvers/zod';
 - import get from 'lodash/get';
 - import omit from 'lodash/omit';
 - import {} from 'module';
 - import { useEffect, useMemo } from 'react';
 - import { useForm, useWatch } from 'react-hook-form';
 - import { useTranslation } from 'react-i18next';
 - import { z } from 'zod';
 - import {
 -   AutoKeywordsFormField,
 -   AutoQuestionsFormField,
 - } from '../auto-keywords-form-field';
 - import { DatasetConfigurationContainer } from '../dataset-configuration-container';
 - import { DelimiterFormField } from '../delimiter-form-field';
 - import { EntityTypesFormField } from '../entity-types-form-field';
 - import { ExcelToHtmlFormField } from '../excel-to-html-form-field';
 - import { LayoutRecognizeFormField } from '../layout-recognize-form-field';
 - import { MaxTokenNumberFormField } from '../max-token-number-from-field';
 - import {
 -   UseGraphRagFormField,
 -   showGraphRagItems,
 - } from '../parse-configuration/graph-rag-form-fields';
 - import RaptorFormFields, {
 -   showRaptorParseConfiguration,
 - } from '../parse-configuration/raptor-form-fields';
 - import { ButtonLoading } from '../ui/button';
 - import { Input } from '../ui/input';
 - import { RAGFlowSelect } from '../ui/select';
 - import { DynamicPageRange } from './dynamic-page-range';
 - import { useFetchParserListOnMount, useShowAutoKeywords } from './hooks';
 - import {
 -   useDefaultParserValues,
 -   useFillDefaultValueOnMount,
 - } from './use-default-parser-values';
 - 
 - const FormId = 'ChunkMethodDialogForm';
 - 
 - interface IProps
 -   extends IModalProps<{
 -     parserId: string;
 -     parserConfig: IChangeParserConfigRequestBody;
 -   }> {
 -   loading: boolean;
 -   parserId: string;
 -   parserConfig: IParserConfig;
 -   documentExtension: string;
 -   documentId: string;
 - }
 - 
 - const hidePagesChunkMethods = [
 -   DocumentParserType.Qa,
 -   DocumentParserType.Table,
 -   DocumentParserType.Picture,
 -   DocumentParserType.Resume,
 -   DocumentParserType.One,
 -   DocumentParserType.KnowledgeGraph,
 - ];
 - 
 - export function ChunkMethodDialog({
 -   hideModal,
 -   onOk,
 -   parserId,
 -   documentId,
 -   documentExtension,
 -   visible,
 -   parserConfig,
 -   loading,
 - }: IProps) {
 -   const { t } = useTranslation();
 - 
 -   const { parserList } = useFetchParserListOnMount(
 -     documentId,
 -     parserId,
 -     documentExtension,
 -     // form,
 -   );
 - 
 -   const { data: knowledgeDetails } = useFetchKnowledgeBaseConfiguration();
 - 
 -   const useGraphRag = useMemo(() => {
 -     return knowledgeDetails.parser_config?.graphrag?.use_graphrag;
 -   }, [knowledgeDetails.parser_config?.graphrag?.use_graphrag]);
 - 
 -   const defaultParserValues = useDefaultParserValues();
 - 
 -   const fillDefaultParserValue = useFillDefaultValueOnMount();
 - 
 -   const FormSchema = z.object({
 -     parser_id: z
 -       .string()
 -       .min(1, {
 -         message: t('common.pleaseSelect'),
 -       })
 -       .trim(),
 -     parser_config: z.object({
 -       task_page_size: z.coerce.number().optional(),
 -       layout_recognize: z.string().optional(),
 -       chunk_token_num: z.coerce.number().optional(),
 -       delimiter: z.string().optional(),
 -       auto_keywords: z.coerce.number().optional(),
 -       auto_questions: z.coerce.number().optional(),
 -       html4excel: z.boolean().optional(),
 -       raptor: z
 -         .object({
 -           use_raptor: z.boolean().optional(),
 -           prompt: z.string().optional().optional(),
 -           max_token: z.coerce.number().optional(),
 -           threshold: z.coerce.number().optional(),
 -           max_cluster: z.coerce.number().optional(),
 -           random_seed: z.coerce.number().optional(),
 -         })
 -         .optional(),
 -       graphrag: z.object({
 -         use_graphrag: z.boolean().optional(),
 -       }),
 -       entity_types: z.array(z.string()).optional(),
 -       pages: z
 -         .array(z.object({ from: z.coerce.number(), to: z.coerce.number() }))
 -         .optional(),
 -     }),
 -   });
 - 
 -   const form = useForm<z.infer<typeof FormSchema>>({
 -     resolver: zodResolver(FormSchema),
 -     defaultValues: {
 -       parser_id: parserId,
 - 
 -       parser_config: defaultParserValues,
 -     },
 -   });
 - 
 -   const layoutRecognize = useWatch({
 -     name: 'parser_config.layout_recognize',
 -     control: form.control,
 -   });
 - 
 -   const selectedTag = useWatch({
 -     name: 'parser_id',
 -     control: form.control,
 -   });
 - 
 -   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();
 - 
 -   async function onSubmit(data: z.infer<typeof FormSchema>) {
 -     console.log('🚀 ~ onSubmit ~ data:', data);
 -     const nextData = {
 -       ...data,
 -       parser_config: {
 -         ...data.parser_config,
 -         pages: data.parser_config?.pages?.map((x: any) => [x.from, x.to]) ?? [],
 -       },
 -     };
 -     console.log('🚀 ~ onSubmit ~ nextData:', nextData);
 -     const ret = await onOk?.(nextData);
 -     if (ret) {
 -       hideModal?.();
 -     }
 -   }
 - 
 -   useEffect(() => {
 -     if (visible) {
 -       const pages =
 -         parserConfig?.pages?.map((x) => ({ from: x[0], to: x[1] })) ?? [];
 -       form.reset({
 -         parser_id: parserId,
 -         parser_config: fillDefaultParserValue({
 -           pages: pages.length > 0 ? pages : [{ from: 1, to: 1024 }],
 -           ...omit(parserConfig, 'pages'),
 -           graphrag: {
 -             use_graphrag: get(
 -               parserConfig,
 -               'graphrag.use_graphrag',
 -               useGraphRag,
 -             ),
 -           },
 -         }),
 -       });
 -     }
 -   }, [
 -     fillDefaultParserValue,
 -     form,
 -     knowledgeDetails.parser_config,
 -     parserConfig,
 -     parserId,
 -     useGraphRag,
 -     visible,
 -   ]);
 - 
 -   return (
 -     <Dialog open onOpenChange={hideModal}>
 -       <DialogContent className="max-w-[50vw]">
 -         <DialogHeader>
 -           <DialogTitle>{t('knowledgeDetails.chunkMethod')}</DialogTitle>
 -         </DialogHeader>
 -         <Form {...form}>
 -           <form
 -             onSubmit={form.handleSubmit(onSubmit)}
 -             className="space-y-6 max-h-[70vh] overflow-auto"
 -             id={FormId}
 -           >
 -             <FormField
 -               control={form.control}
 -               name="parser_id"
 -               render={({ field }) => (
 -                 <FormItem>
 -                   <FormLabel>{t('knowledgeDetails.chunkMethod')}</FormLabel>
 -                   <FormControl>
 -                     <RAGFlowSelect
 -                       {...field}
 -                       options={parserList}
 -                     ></RAGFlowSelect>
 -                   </FormControl>
 -                   <FormMessage />
 -                 </FormItem>
 -               )}
 -             />
 -             {showPages && <DynamicPageRange></DynamicPageRange>}
 -             {showPages && layoutRecognize && (
 -               <FormField
 -                 control={form.control}
 -                 name="parser_config.task_page_size"
 -                 render={({ field }) => (
 -                   <FormItem>
 -                     <FormLabel tooltip={t('knowledgeDetails.taskPageSizeTip')}>
 -                       {t('knowledgeDetails.taskPageSize')}
 -                     </FormLabel>
 -                     <FormControl>
 -                       <Input
 -                         {...field}
 -                         type={'number'}
 -                         min={1}
 -                         max={128}
 -                       ></Input>
 -                     </FormControl>
 -                     <FormMessage />
 -                   </FormItem>
 -                 )}
 -               />
 -             )}
 -             <DatasetConfigurationContainer
 -               show={showOne || showMaxTokenNumber}
 -               className="space-y-3"
 -             >
 -               {showOne && <LayoutRecognizeFormField></LayoutRecognizeFormField>}
 -               {showMaxTokenNumber && (
 -                 <>
 -                   <MaxTokenNumberFormField
 -                     max={
 -                       selectedTag === DocumentParserType.KnowledgeGraph
 -                         ? 8192 * 2
 -                         : 2048
 -                     }
 -                   ></MaxTokenNumberFormField>
 -                   <DelimiterFormField></DelimiterFormField>
 -                 </>
 -               )}
 -             </DatasetConfigurationContainer>
 -             <DatasetConfigurationContainer
 -               show={showAutoKeywords(selectedTag) || showExcelToHtml}
 -               className="space-y-3"
 -             >
 -               {showAutoKeywords(selectedTag) && (
 -                 <>
 -                   <AutoKeywordsFormField></AutoKeywordsFormField>
 -                   <AutoQuestionsFormField></AutoQuestionsFormField>
 -                 </>
 -               )}
 -               {showExcelToHtml && <ExcelToHtmlFormField></ExcelToHtmlFormField>}
 -             </DatasetConfigurationContainer>
 -             {showRaptorParseConfiguration(
 -               selectedTag as DocumentParserType,
 -             ) && (
 -               <DatasetConfigurationContainer>
 -                 <RaptorFormFields></RaptorFormFields>
 -               </DatasetConfigurationContainer>
 -             )}
 -             {showGraphRagItems(selectedTag as DocumentParserType) &&
 -               useGraphRag && <UseGraphRagFormField></UseGraphRagFormField>}
 -             {showEntityTypes && <EntityTypesFormField></EntityTypesFormField>}
 -           </form>
 -         </Form>
 -         <DialogFooter>
 -           <ButtonLoading type="submit" form={FormId} loading={loading}>
 -             {t('common.save')}
 -           </ButtonLoading>
 -         </DialogFooter>
 -       </DialogContent>
 -     </Dialog>
 -   );
 - }
 
 
  |