瀏覽代碼

Feat: Fixed the issue where the dataset configuration page kept refreshing #3221 (#7666)

### What problem does this PR solve?

Feat: Fixed the issue where the dataset configuration page kept
refreshing #3221
### Type of change


- [x] New Feature (non-breaking change which adds functionality)
tags/v0.19.0
balibabu 5 月之前
父節點
當前提交
0e9ff8c1f7
No account linked to committer's email address
共有 24 個文件被更改,包括 263 次插入175 次删除
  1. 1
    1
      web/src/components/form-container.tsx
  2. 6
    2
      web/src/components/parse-configuration/graph-rag-form-fields.tsx
  3. 27
    22
      web/src/hooks/llm-hooks.tsx
  4. 3
    19
      web/src/pages/dataset/setting/chunk-method-form.tsx
  5. 16
    0
      web/src/pages/dataset/setting/configuration-form-container.tsx
  6. 4
    3
      web/src/pages/dataset/setting/configuration/audio.tsx
  7. 21
    11
      web/src/pages/dataset/setting/configuration/book.tsx
  8. 4
    3
      web/src/pages/dataset/setting/configuration/email.tsx
  9. 1
    1
      web/src/pages/dataset/setting/configuration/knowledge-graph.tsx
  10. 20
    10
      web/src/pages/dataset/setting/configuration/laws.tsx
  11. 17
    10
      web/src/pages/dataset/setting/configuration/manual.tsx
  12. 13
    10
      web/src/pages/dataset/setting/configuration/naive.tsx
  13. 4
    3
      web/src/pages/dataset/setting/configuration/one.tsx
  14. 20
    10
      web/src/pages/dataset/setting/configuration/paper.tsx
  15. 4
    3
      web/src/pages/dataset/setting/configuration/picture.tsx
  16. 20
    11
      web/src/pages/dataset/setting/configuration/presentation.tsx
  17. 4
    3
      web/src/pages/dataset/setting/configuration/qa.tsx
  18. 4
    3
      web/src/pages/dataset/setting/configuration/resume.tsx
  19. 4
    3
      web/src/pages/dataset/setting/configuration/table.tsx
  20. 4
    3
      web/src/pages/dataset/setting/configuration/tag.tsx
  21. 41
    0
      web/src/pages/dataset/setting/form-schema.ts
  22. 1
    1
      web/src/pages/dataset/setting/general-form.tsx
  23. 8
    2
      web/src/pages/dataset/setting/hooks.ts
  24. 16
    41
      web/src/pages/dataset/setting/index.tsx

+ 1
- 1
web/src/components/form-container.tsx 查看文件

import { cn } from '@/lib/utils'; import { cn } from '@/lib/utils';
import { PropsWithChildren } from 'react'; import { PropsWithChildren } from 'react';


type FormContainerProps = {
export type FormContainerProps = {
className?: string; className?: string;
show?: boolean; show?: boolean;
} & PropsWithChildren; } & PropsWithChildren;

+ 6
- 2
web/src/components/parse-configuration/graph-rag-form-fields.tsx 查看文件



type GraphRagItemsProps = { type GraphRagItemsProps = {
marginBottom?: boolean; marginBottom?: boolean;
className?: string;
}; };


export function UseGraphRagFormField() { export function UseGraphRagFormField() {
} }


// The three types "table", "resume" and "one" do not display this configuration. // The three types "table", "resume" and "one" do not display this configuration.
const GraphRagItems = ({ marginBottom = false }: GraphRagItemsProps) => {
const GraphRagItems = ({
marginBottom = false,
className = 'p-10',
}: GraphRagItemsProps) => {
const { t } = useTranslate('knowledgeConfiguration'); const { t } = useTranslate('knowledgeConfiguration');
const form = useFormContext(); const form = useFormContext();


); );


return ( return (
<FormContainer className={cn({ 'mb-4': marginBottom })}>
<FormContainer className={cn({ 'mb-4': marginBottom }, className)}>
<UseGraphRagFormField></UseGraphRagFormField> <UseGraphRagFormField></UseGraphRagFormField>
{useRaptor && ( {useRaptor && (
<> <>

+ 27
- 22
web/src/hooks/llm-hooks.tsx 查看文件

import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { Flex, message } from 'antd'; import { Flex, message } from 'antd';
import { DefaultOptionType } from 'antd/es/select'; import { DefaultOptionType } from 'antd/es/select';
import { useMemo } from 'react';
import { useCallback, useMemo } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';


export const useFetchLlmList = ( export const useFetchLlmList = (
export const useSelectLlmOptionsByModelType = () => { export const useSelectLlmOptionsByModelType = () => {
const llmInfo: IThirdOAIModelCollection = useFetchLlmList(); const llmInfo: IThirdOAIModelCollection = useFetchLlmList();


const groupImage2TextOptions = () => {
const groupImage2TextOptions = useCallback(() => {
const modelType = LlmModelType.Image2text; const modelType = LlmModelType.Image2text;
const modelTag = modelType.toUpperCase(); const modelTag = modelType.toUpperCase();


}; };
}) })
.filter((x) => x.options.length > 0); .filter((x) => x.options.length > 0);
};
}, [llmInfo]);


const groupOptionsByModelType = (modelType: LlmModelType) => {
return Object.entries(llmInfo)
.filter(([, value]) =>
modelType ? value.some((x) => x.model_type.includes(modelType)) : true,
)
.map(([key, value]) => {
return {
label: key,
options: value
.filter(
(x) =>
(modelType ? x.model_type.includes(modelType) : true) &&
x.available,
)
.map(buildLlmOptionsWithIcon),
};
})
.filter((x) => x.options.length > 0);
};
const groupOptionsByModelType = useCallback(
(modelType: LlmModelType) => {
return Object.entries(llmInfo)
.filter(([, value]) =>
modelType
? value.some((x) => x.model_type.includes(modelType))
: true,
)
.map(([key, value]) => {
return {
label: key,
options: value
.filter(
(x) =>
(modelType ? x.model_type.includes(modelType) : true) &&
x.available,
)
.map(buildLlmOptionsWithIcon),
};
})
.filter((x) => x.options.length > 0);
},
[llmInfo],
);


return { return {
[LlmModelType.Chat]: groupOptionsByModelType(LlmModelType.Chat), [LlmModelType.Chat]: groupOptionsByModelType(LlmModelType.Chat),

+ 3
- 19
web/src/pages/dataset/setting/chunk-method-form.tsx 查看文件

import { useFormContext, useWatch } from 'react-hook-form'; import { useFormContext, useWatch } from 'react-hook-form';
import { useTranslation } from 'react-i18next';


import { DocumentParserType } from '@/constants/knowledge'; import { DocumentParserType } from '@/constants/knowledge';
import { useMemo, useState } from 'react';
import { useMemo } from 'react';
import { AudioConfiguration } from './configuration/audio'; import { AudioConfiguration } from './configuration/audio';
import { BookConfiguration } from './configuration/book'; import { BookConfiguration } from './configuration/book';
import { EmailConfiguration } from './configuration/email'; import { EmailConfiguration } from './configuration/email';
import { ResumeConfiguration } from './configuration/resume'; import { ResumeConfiguration } from './configuration/resume';
import { TableConfiguration } from './configuration/table'; import { TableConfiguration } from './configuration/table';
import { TagConfiguration } from './configuration/tag'; import { TagConfiguration } from './configuration/tag';
import { useFetchKnowledgeConfigurationOnMount } from './hooks';


const ConfigurationComponentMap = { const ConfigurationComponentMap = {
[DocumentParserType.Naive]: NaiveConfiguration, [DocumentParserType.Naive]: NaiveConfiguration,


export function ChunkMethodForm() { export function ChunkMethodForm() {
const form = useFormContext(); const form = useFormContext();
const { t } = useTranslation();
const [finalParserId, setFinalParserId] = useState<DocumentParserType>(
DocumentParserType.Naive,
);

const knowledgeDetails = useFetchKnowledgeConfigurationOnMount(form);


const parserId: DocumentParserType = useWatch({
const finalParserId: DocumentParserType = useWatch({
control: form.control, control: form.control,
name: 'parser_id', name: 'parser_id',
}); });
: EmptyComponent; : EmptyComponent;
}, [finalParserId]); }, [finalParserId]);


// useEffect(() => {
// setFinalParserId(parserId);
// }, [parserId]);

// useEffect(() => {
// setFinalParserId(knowledgeDetails.parser_id as DocumentParserType);
// }, [knowledgeDetails.parser_id]);

return ( return (
<section>
<section className="overflow-auto max-h-[76vh]">
<ConfigurationComponent></ConfigurationComponent> <ConfigurationComponent></ConfigurationComponent>
</section> </section>
); );

+ 16
- 0
web/src/pages/dataset/setting/configuration-form-container.tsx 查看文件

import { FormContainer, FormContainerProps } from '@/components/form-container';
import { cn } from '@/lib/utils';
import { PropsWithChildren } from 'react';

export function ConfigurationFormContainer({
children,
className,
}: FormContainerProps) {
return (
<FormContainer className={cn('p-10', className)}>{children}</FormContainer>
);
}

export function MainContainer({ children }: PropsWithChildren) {
return <section className="space-y-5">{children}</section>;
}

+ 4
- 3
web/src/pages/dataset/setting/configuration/audio.tsx 查看文件

import PageRankFormField from '@/components/page-rank-form-field'; import PageRankFormField from '@/components/page-rank-form-field';
import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields';
import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields'; import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields';
import { ConfigurationFormContainer } from '../configuration-form-container';
import { TagItems } from '../tag-item'; import { TagItems } from '../tag-item';
import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; import { ChunkMethodItem, EmbeddingModelItem } from './common-item';


export function AudioConfiguration() { export function AudioConfiguration() {
return ( return (
<>
<EmbeddingModelItem></EmbeddingModelItem>
<ConfigurationFormContainer>
<ChunkMethodItem></ChunkMethodItem> <ChunkMethodItem></ChunkMethodItem>
<EmbeddingModelItem></EmbeddingModelItem>


<PageRankFormField></PageRankFormField> <PageRankFormField></PageRankFormField>


<GraphRagItems marginBottom></GraphRagItems> <GraphRagItems marginBottom></GraphRagItems>


<TagItems></TagItems> <TagItems></TagItems>
</>
</ConfigurationFormContainer>
); );
} }

+ 21
- 11
web/src/pages/dataset/setting/configuration/book.tsx 查看文件

import PageRankFormField from '@/components/page-rank-form-field'; import PageRankFormField from '@/components/page-rank-form-field';
import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields';
import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields'; import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields';
import {
ConfigurationFormContainer,
MainContainer,
} from '../configuration-form-container';
import { TagItems } from '../tag-item'; import { TagItems } from '../tag-item';
import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; import { ChunkMethodItem, EmbeddingModelItem } from './common-item';


export function BookConfiguration() { export function BookConfiguration() {
return ( return (
<>
<LayoutRecognizeFormField></LayoutRecognizeFormField>
<EmbeddingModelItem></EmbeddingModelItem>
<ChunkMethodItem></ChunkMethodItem>
<MainContainer>
<ConfigurationFormContainer>
<ChunkMethodItem></ChunkMethodItem>
<LayoutRecognizeFormField></LayoutRecognizeFormField>
<EmbeddingModelItem></EmbeddingModelItem>


<PageRankFormField></PageRankFormField>
<PageRankFormField></PageRankFormField>
</ConfigurationFormContainer>


<>
<ConfigurationFormContainer>
<AutoKeywordsFormField></AutoKeywordsFormField> <AutoKeywordsFormField></AutoKeywordsFormField>
<AutoQuestionsFormField></AutoQuestionsFormField> <AutoQuestionsFormField></AutoQuestionsFormField>
</>
</ConfigurationFormContainer>


<RaptorFormFields></RaptorFormFields>
<ConfigurationFormContainer>
<RaptorFormFields></RaptorFormFields>
</ConfigurationFormContainer>


<GraphRagItems marginBottom></GraphRagItems>
<GraphRagItems marginBottom className="p-10"></GraphRagItems>


<TagItems></TagItems>
</>
<ConfigurationFormContainer>
<TagItems></TagItems>
</ConfigurationFormContainer>
</MainContainer>
); );
} }

+ 4
- 3
web/src/pages/dataset/setting/configuration/email.tsx 查看文件

import PageRankFormField from '@/components/page-rank-form-field'; import PageRankFormField from '@/components/page-rank-form-field';
import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields';
import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields'; import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields';
import { ConfigurationFormContainer } from '../configuration-form-container';
import { TagItems } from '../tag-item'; import { TagItems } from '../tag-item';
import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; import { ChunkMethodItem, EmbeddingModelItem } from './common-item';


export function EmailConfiguration() { export function EmailConfiguration() {
return ( return (
<>
<EmbeddingModelItem></EmbeddingModelItem>
<ConfigurationFormContainer>
<ChunkMethodItem></ChunkMethodItem> <ChunkMethodItem></ChunkMethodItem>
<EmbeddingModelItem></EmbeddingModelItem>


<PageRankFormField></PageRankFormField> <PageRankFormField></PageRankFormField>


<GraphRagItems marginBottom></GraphRagItems> <GraphRagItems marginBottom></GraphRagItems>


<TagItems></TagItems> <TagItems></TagItems>
</>
</ConfigurationFormContainer>
); );
} }

+ 1
- 1
web/src/pages/dataset/setting/configuration/knowledge-graph.tsx 查看文件

export function KnowledgeGraphConfiguration() { export function KnowledgeGraphConfiguration() {
return ( return (
<> <>
<EmbeddingModelItem></EmbeddingModelItem>
<ChunkMethodItem></ChunkMethodItem> <ChunkMethodItem></ChunkMethodItem>
<EmbeddingModelItem></EmbeddingModelItem>


<PageRankFormField></PageRankFormField> <PageRankFormField></PageRankFormField>



+ 20
- 10
web/src/pages/dataset/setting/configuration/laws.tsx 查看文件

import PageRankFormField from '@/components/page-rank-form-field'; import PageRankFormField from '@/components/page-rank-form-field';
import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields';
import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields'; import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields';
import {
ConfigurationFormContainer,
MainContainer,
} from '../configuration-form-container';
import { TagItems } from '../tag-item'; import { TagItems } from '../tag-item';
import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; import { ChunkMethodItem, EmbeddingModelItem } from './common-item';


export function LawsConfiguration() { export function LawsConfiguration() {
return ( return (
<>
<LayoutRecognizeFormField></LayoutRecognizeFormField>
<EmbeddingModelItem></EmbeddingModelItem>
<ChunkMethodItem></ChunkMethodItem>
<MainContainer>
<ConfigurationFormContainer>
<ChunkMethodItem></ChunkMethodItem>
<LayoutRecognizeFormField></LayoutRecognizeFormField>
<EmbeddingModelItem></EmbeddingModelItem>


<PageRankFormField></PageRankFormField>
<PageRankFormField></PageRankFormField>
</ConfigurationFormContainer>


<>
<ConfigurationFormContainer>
<AutoKeywordsFormField></AutoKeywordsFormField> <AutoKeywordsFormField></AutoKeywordsFormField>
<AutoQuestionsFormField></AutoQuestionsFormField> <AutoQuestionsFormField></AutoQuestionsFormField>
</>
</ConfigurationFormContainer>


<RaptorFormFields></RaptorFormFields>
<ConfigurationFormContainer>
<RaptorFormFields></RaptorFormFields>
</ConfigurationFormContainer>


<GraphRagItems marginBottom></GraphRagItems> <GraphRagItems marginBottom></GraphRagItems>


<TagItems></TagItems>
</>
<ConfigurationFormContainer>
<TagItems></TagItems>
</ConfigurationFormContainer>
</MainContainer>
); );
} }

+ 17
- 10
web/src/pages/dataset/setting/configuration/manual.tsx 查看文件

import PageRankFormField from '@/components/page-rank-form-field'; import PageRankFormField from '@/components/page-rank-form-field';
import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields';
import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields'; import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields';
import {
ConfigurationFormContainer,
MainContainer,
} from '../configuration-form-container';
import { TagItems } from '../tag-item'; import { TagItems } from '../tag-item';
import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; import { ChunkMethodItem, EmbeddingModelItem } from './common-item';


export function ManualConfiguration() { export function ManualConfiguration() {
return ( return (
<>
<LayoutRecognizeFormField></LayoutRecognizeFormField>
<EmbeddingModelItem></EmbeddingModelItem>
<ChunkMethodItem></ChunkMethodItem>
<MainContainer>
<ConfigurationFormContainer>
<ChunkMethodItem></ChunkMethodItem>
<LayoutRecognizeFormField></LayoutRecognizeFormField>
<EmbeddingModelItem></EmbeddingModelItem>


<PageRankFormField></PageRankFormField>
<PageRankFormField></PageRankFormField>
</ConfigurationFormContainer>


<>
<ConfigurationFormContainer>
<AutoKeywordsFormField></AutoKeywordsFormField> <AutoKeywordsFormField></AutoKeywordsFormField>
<AutoQuestionsFormField></AutoQuestionsFormField> <AutoQuestionsFormField></AutoQuestionsFormField>
</>

<RaptorFormFields></RaptorFormFields>
</ConfigurationFormContainer>
<ConfigurationFormContainer>
<RaptorFormFields></RaptorFormFields>
</ConfigurationFormContainer>


<GraphRagItems marginBottom></GraphRagItems> <GraphRagItems marginBottom></GraphRagItems>


<TagItems></TagItems> <TagItems></TagItems>
</>
</MainContainer>
); );
} }

+ 13
- 10
web/src/pages/dataset/setting/configuration/naive.tsx 查看文件

} from '@/components/auto-keywords-form-field'; } from '@/components/auto-keywords-form-field';
import { DelimiterFormField } from '@/components/delimiter-form-field'; import { DelimiterFormField } from '@/components/delimiter-form-field';
import { ExcelToHtmlFormField } from '@/components/excel-to-html-form-field'; import { ExcelToHtmlFormField } from '@/components/excel-to-html-form-field';
import { FormContainer } from '@/components/form-container';
import { LayoutRecognizeFormField } from '@/components/layout-recognize-form-field'; import { LayoutRecognizeFormField } from '@/components/layout-recognize-form-field';
import { MaxTokenNumberFormField } from '@/components/max-token-number-from-field'; import { MaxTokenNumberFormField } from '@/components/max-token-number-from-field';
import PageRankFormField from '@/components/page-rank-form-field'; import PageRankFormField from '@/components/page-rank-form-field';
import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields';
import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields'; import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields';
import {
ConfigurationFormContainer,
MainContainer,
} from '../configuration-form-container';
import { TagItems } from '../tag-item'; import { TagItems } from '../tag-item';
import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; import { ChunkMethodItem, EmbeddingModelItem } from './common-item';


export function NaiveConfiguration() { export function NaiveConfiguration() {
return ( return (
<section className="space-y-5 mb-4 overflow-auto">
<FormContainer>
<MainContainer>
<ConfigurationFormContainer>
<ChunkMethodItem></ChunkMethodItem>
<LayoutRecognizeFormField></LayoutRecognizeFormField> <LayoutRecognizeFormField></LayoutRecognizeFormField>
<EmbeddingModelItem></EmbeddingModelItem> <EmbeddingModelItem></EmbeddingModelItem>
<ChunkMethodItem></ChunkMethodItem>
<MaxTokenNumberFormField></MaxTokenNumberFormField> <MaxTokenNumberFormField></MaxTokenNumberFormField>
<DelimiterFormField></DelimiterFormField> <DelimiterFormField></DelimiterFormField>
</FormContainer>
<FormContainer>
</ConfigurationFormContainer>
<ConfigurationFormContainer>
<PageRankFormField></PageRankFormField> <PageRankFormField></PageRankFormField>
<AutoKeywordsFormField></AutoKeywordsFormField> <AutoKeywordsFormField></AutoKeywordsFormField>
<AutoQuestionsFormField></AutoQuestionsFormField> <AutoQuestionsFormField></AutoQuestionsFormField>
<ExcelToHtmlFormField></ExcelToHtmlFormField> <ExcelToHtmlFormField></ExcelToHtmlFormField>
<TagItems></TagItems> <TagItems></TagItems>
</FormContainer>
<FormContainer>
</ConfigurationFormContainer>
<ConfigurationFormContainer>
<RaptorFormFields></RaptorFormFields> <RaptorFormFields></RaptorFormFields>
</FormContainer>
</ConfigurationFormContainer>
<GraphRagItems></GraphRagItems> <GraphRagItems></GraphRagItems>
</section>
</MainContainer>
); );
} }

+ 4
- 3
web/src/pages/dataset/setting/configuration/one.tsx 查看文件

import { LayoutRecognizeFormField } from '@/components/layout-recognize-form-field'; import { LayoutRecognizeFormField } from '@/components/layout-recognize-form-field';
import PageRankFormField from '@/components/page-rank-form-field'; import PageRankFormField from '@/components/page-rank-form-field';
import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields';
import { ConfigurationFormContainer } from '../configuration-form-container';
import { TagItems } from '../tag-item'; import { TagItems } from '../tag-item';
import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; import { ChunkMethodItem, EmbeddingModelItem } from './common-item';


export function OneConfiguration() { export function OneConfiguration() {
return ( return (
<>
<ConfigurationFormContainer>
<ChunkMethodItem></ChunkMethodItem>
<LayoutRecognizeFormField></LayoutRecognizeFormField> <LayoutRecognizeFormField></LayoutRecognizeFormField>
<EmbeddingModelItem></EmbeddingModelItem> <EmbeddingModelItem></EmbeddingModelItem>
<ChunkMethodItem></ChunkMethodItem>


<PageRankFormField></PageRankFormField> <PageRankFormField></PageRankFormField>


<GraphRagItems marginBottom></GraphRagItems> <GraphRagItems marginBottom></GraphRagItems>


<TagItems></TagItems> <TagItems></TagItems>
</>
</ConfigurationFormContainer>
); );
} }

+ 20
- 10
web/src/pages/dataset/setting/configuration/paper.tsx 查看文件

import PageRankFormField from '@/components/page-rank-form-field'; import PageRankFormField from '@/components/page-rank-form-field';
import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields';
import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields'; import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields';
import {
ConfigurationFormContainer,
MainContainer,
} from '../configuration-form-container';
import { TagItems } from '../tag-item'; import { TagItems } from '../tag-item';
import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; import { ChunkMethodItem, EmbeddingModelItem } from './common-item';


export function PaperConfiguration() { export function PaperConfiguration() {
return ( return (
<>
<LayoutRecognizeFormField></LayoutRecognizeFormField>
<EmbeddingModelItem></EmbeddingModelItem>
<ChunkMethodItem></ChunkMethodItem>
<MainContainer>
<ConfigurationFormContainer>
<ChunkMethodItem></ChunkMethodItem>
<LayoutRecognizeFormField></LayoutRecognizeFormField>
<EmbeddingModelItem></EmbeddingModelItem>


<PageRankFormField></PageRankFormField>
<PageRankFormField></PageRankFormField>
</ConfigurationFormContainer>


<>
<ConfigurationFormContainer>
<AutoKeywordsFormField></AutoKeywordsFormField> <AutoKeywordsFormField></AutoKeywordsFormField>
<AutoQuestionsFormField></AutoQuestionsFormField> <AutoQuestionsFormField></AutoQuestionsFormField>
</>
</ConfigurationFormContainer>


<RaptorFormFields></RaptorFormFields>
<ConfigurationFormContainer>
<RaptorFormFields></RaptorFormFields>
</ConfigurationFormContainer>


<GraphRagItems marginBottom></GraphRagItems> <GraphRagItems marginBottom></GraphRagItems>


<TagItems></TagItems>
</>
<ConfigurationFormContainer>
<TagItems></TagItems>
</ConfigurationFormContainer>
</MainContainer>
); );
} }

+ 4
- 3
web/src/pages/dataset/setting/configuration/picture.tsx 查看文件

AutoQuestionsFormField, AutoQuestionsFormField,
} from '@/components/auto-keywords-form-field'; } from '@/components/auto-keywords-form-field';
import PageRankFormField from '@/components/page-rank-form-field'; import PageRankFormField from '@/components/page-rank-form-field';
import { ConfigurationFormContainer } from '../configuration-form-container';
import { TagItems } from '../tag-item'; import { TagItems } from '../tag-item';
import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; import { ChunkMethodItem, EmbeddingModelItem } from './common-item';


export function PictureConfiguration() { export function PictureConfiguration() {
return ( return (
<>
<EmbeddingModelItem></EmbeddingModelItem>
<ConfigurationFormContainer>
<ChunkMethodItem></ChunkMethodItem> <ChunkMethodItem></ChunkMethodItem>
<EmbeddingModelItem></EmbeddingModelItem>


<PageRankFormField></PageRankFormField> <PageRankFormField></PageRankFormField>


<AutoQuestionsFormField></AutoQuestionsFormField> <AutoQuestionsFormField></AutoQuestionsFormField>
</> </>
<TagItems></TagItems> <TagItems></TagItems>
</>
</ConfigurationFormContainer>
); );
} }

+ 20
- 11
web/src/pages/dataset/setting/configuration/presentation.tsx 查看文件

import PageRankFormField from '@/components/page-rank-form-field'; import PageRankFormField from '@/components/page-rank-form-field';
import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields';
import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields'; import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields';
import {
ConfigurationFormContainer,
MainContainer,
} from '../configuration-form-container';
import { TagItems } from '../tag-item'; import { TagItems } from '../tag-item';
import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; import { ChunkMethodItem, EmbeddingModelItem } from './common-item';


export function PresentationConfiguration() { export function PresentationConfiguration() {
return ( return (
<>
<LayoutRecognizeFormField></LayoutRecognizeFormField>
<EmbeddingModelItem></EmbeddingModelItem>
<ChunkMethodItem></ChunkMethodItem>
<MainContainer>
<ConfigurationFormContainer>
<ChunkMethodItem></ChunkMethodItem>
<LayoutRecognizeFormField></LayoutRecognizeFormField>
<EmbeddingModelItem></EmbeddingModelItem>


<PageRankFormField></PageRankFormField>
<PageRankFormField></PageRankFormField>
</ConfigurationFormContainer>


<>
<ConfigurationFormContainer>
<AutoKeywordsFormField></AutoKeywordsFormField> <AutoKeywordsFormField></AutoKeywordsFormField>
<AutoQuestionsFormField></AutoQuestionsFormField> <AutoQuestionsFormField></AutoQuestionsFormField>
</>
</ConfigurationFormContainer>


<RaptorFormFields></RaptorFormFields>
<ConfigurationFormContainer>
<RaptorFormFields></RaptorFormFields>
</ConfigurationFormContainer>


<GraphRagItems marginBottom></GraphRagItems> <GraphRagItems marginBottom></GraphRagItems>

<TagItems></TagItems>
</>
<ConfigurationFormContainer>
<TagItems></TagItems>
</ConfigurationFormContainer>
</MainContainer>
); );
} }

+ 4
- 3
web/src/pages/dataset/setting/configuration/qa.tsx 查看文件

import PageRankFormField from '@/components/page-rank-form-field'; import PageRankFormField from '@/components/page-rank-form-field';
import { ConfigurationFormContainer } from '../configuration-form-container';
import { TagItems } from '../tag-item'; import { TagItems } from '../tag-item';
import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; import { ChunkMethodItem, EmbeddingModelItem } from './common-item';


export function QAConfiguration() { export function QAConfiguration() {
return ( return (
<>
<EmbeddingModelItem></EmbeddingModelItem>
<ConfigurationFormContainer>
<ChunkMethodItem></ChunkMethodItem> <ChunkMethodItem></ChunkMethodItem>
<EmbeddingModelItem></EmbeddingModelItem>


<PageRankFormField></PageRankFormField> <PageRankFormField></PageRankFormField>


<TagItems></TagItems> <TagItems></TagItems>
</>
</ConfigurationFormContainer>
); );
} }

+ 4
- 3
web/src/pages/dataset/setting/configuration/resume.tsx 查看文件

import PageRankFormField from '@/components/page-rank-form-field'; import PageRankFormField from '@/components/page-rank-form-field';
import { ConfigurationFormContainer } from '../configuration-form-container';
import { TagItems } from '../tag-item'; import { TagItems } from '../tag-item';
import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; import { ChunkMethodItem, EmbeddingModelItem } from './common-item';


export function ResumeConfiguration() { export function ResumeConfiguration() {
return ( return (
<>
<EmbeddingModelItem></EmbeddingModelItem>
<ConfigurationFormContainer>
<ChunkMethodItem></ChunkMethodItem> <ChunkMethodItem></ChunkMethodItem>
<EmbeddingModelItem></EmbeddingModelItem>


<PageRankFormField></PageRankFormField> <PageRankFormField></PageRankFormField>


<TagItems></TagItems> <TagItems></TagItems>
</>
</ConfigurationFormContainer>
); );
} }

+ 4
- 3
web/src/pages/dataset/setting/configuration/table.tsx 查看文件

import PageRankFormField from '@/components/page-rank-form-field'; import PageRankFormField from '@/components/page-rank-form-field';
import { ConfigurationFormContainer } from '../configuration-form-container';
import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; import { ChunkMethodItem, EmbeddingModelItem } from './common-item';


export function TableConfiguration() { export function TableConfiguration() {
return ( return (
<>
<EmbeddingModelItem></EmbeddingModelItem>
<ConfigurationFormContainer>
<ChunkMethodItem></ChunkMethodItem> <ChunkMethodItem></ChunkMethodItem>
<EmbeddingModelItem></EmbeddingModelItem>


<PageRankFormField></PageRankFormField> <PageRankFormField></PageRankFormField>
</>
</ConfigurationFormContainer>
); );
} }

+ 4
- 3
web/src/pages/dataset/setting/configuration/tag.tsx 查看文件

import PageRankFormField from '@/components/page-rank-form-field'; import PageRankFormField from '@/components/page-rank-form-field';
import { ConfigurationFormContainer } from '../configuration-form-container';
import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; import { ChunkMethodItem, EmbeddingModelItem } from './common-item';


export function TagConfiguration() { export function TagConfiguration() {
return ( return (
<>
<EmbeddingModelItem></EmbeddingModelItem>
<ConfigurationFormContainer>
<ChunkMethodItem></ChunkMethodItem> <ChunkMethodItem></ChunkMethodItem>
<EmbeddingModelItem></EmbeddingModelItem>


<PageRankFormField></PageRankFormField> <PageRankFormField></PageRankFormField>
</>
</ConfigurationFormContainer>
); );
} }

+ 41
- 0
web/src/pages/dataset/setting/form-schema.ts 查看文件

import { z } from 'zod';

export const formSchema = z.object({
name: z.string().min(1, {
message: 'Username must be at least 2 characters.',
}),
description: z.string().min(2, {
message: 'Username must be at least 2 characters.',
}),
avatar: z.instanceof(File),
permission: z.string(),
parser_id: z.string(),
embd_id: z.string(),
parser_config: z.object({
layout_recognize: z.string(),
chunk_token_num: z.number(),
delimiter: z.string(),
auto_keywords: z.number(),
auto_questions: z.number(),
html4excel: z.boolean(),
tag_kb_ids: z.array(z.string()),
topn_tags: z.number(),
raptor: z.object({
use_raptor: z.boolean(),
prompt: z.string(),
max_token: z.number(),
threshold: z.number(),
max_cluster: z.number(),
random_seed: z.number(),
}),
graphrag: z.object({
use_graphrag: z.boolean(),
entity_types: z.array(z.string()),
method: z.string(),
resolution: z.boolean(),
community: z.boolean(),
}),
}),
pagerank: z.number(),
// icon: z.array(z.instanceof(File)),
});

+ 1
- 1
web/src/pages/dataset/setting/general-form.tsx 查看文件

const { t } = useTranslation(); const { t } = useTranslation();


return ( return (
<FormContainer className="space-y-2">
<FormContainer className="space-y-2 p-10">
<FormField <FormField
control={form.control} control={form.control}
name="name" name="name"

+ 8
- 2
web/src/pages/dataset/setting/hooks.ts 查看文件

import { useIsFetching } from '@tanstack/react-query'; import { useIsFetching } from '@tanstack/react-query';
import { Form, UploadFile } from 'antd'; import { Form, UploadFile } from 'antd';
import { FormInstance } from 'antd/lib'; import { FormInstance } from 'antd/lib';
import pick from 'lodash/pick';
import { pick } from 'lodash';
import { useCallback, useEffect, useState } from 'react'; import { useCallback, useEffect, useState } from 'react';
import { UseFormReturn } from 'react-hook-form'; import { UseFormReturn } from 'react-hook-form';
import { z } from 'zod';
import { formSchema } from './form-schema';


export const useSubmitKnowledgeConfiguration = (form: FormInstance) => { export const useSubmitKnowledgeConfiguration = (form: FormInstance) => {
const { saveKnowledgeConfiguration, loading } = useUpdateKnowledge(); const { saveKnowledgeConfiguration, loading } = useUpdateKnowledge();
return knowledgeDetails.chunk_num > 0; return knowledgeDetails.chunk_num > 0;
} }


export const useFetchKnowledgeConfigurationOnMount = (form: UseFormReturn) => {
export const useFetchKnowledgeConfigurationOnMount = (
form: UseFormReturn<z.infer<typeof formSchema>, any, undefined>,
) => {
const { data: knowledgeDetails } = useFetchKnowledgeBaseConfiguration(); const { data: knowledgeDetails } = useFetchKnowledgeBaseConfiguration();


useEffect(() => { useEffect(() => {
const fileList: UploadFile[] = getUploadFileListFromBase64( const fileList: UploadFile[] = getUploadFileListFromBase64(
knowledgeDetails.avatar, knowledgeDetails.avatar,
); );

console.log('🚀 ~ useEffect ~ fileList:', fileList);
form.reset({ form.reset({
...pick(knowledgeDetails, [ ...pick(knowledgeDetails, [
'description', 'description',

+ 16
- 41
web/src/pages/dataset/setting/index.tsx 查看文件

import { ButtonLoading } from '@/components/ui/button';
import { Form } from '@/components/ui/form'; import { Form } from '@/components/ui/form';
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
import { DocumentParserType } from '@/constants/knowledge'; import { DocumentParserType } from '@/constants/knowledge';
import { zodResolver } from '@hookform/resolvers/zod'; import { zodResolver } from '@hookform/resolvers/zod';
import { useForm } from 'react-hook-form';
import { useForm, useWatch } from 'react-hook-form';
import { z } from 'zod'; import { z } from 'zod';
import CategoryPanel from './category-panel'; import CategoryPanel from './category-panel';
import { ChunkMethodForm } from './chunk-method-form'; import { ChunkMethodForm } from './chunk-method-form';
import { formSchema } from './form-schema';
import { GeneralForm } from './general-form'; import { GeneralForm } from './general-form';
import { useFetchKnowledgeConfigurationOnMount } from './hooks';


const enum DocumentType { const enum DocumentType {
DeepDOC = 'DeepDOC', DeepDOC = 'DeepDOC',
} }


export default function DatasetSettings() { export default function DatasetSettings() {
const formSchema = z.object({
name: z.string().min(1, {
message: 'Username must be at least 2 characters.',
}),
description: z.string().min(2, {
message: 'Username must be at least 2 characters.',
}),
avatar: z.instanceof(File),
permission: z.string(),
parser_id: z.string(),
parser_config: z.object({
layout_recognize: z.string(),
chunk_token_num: z.number(),
delimiter: z.string(),
auto_keywords: z.number(),
auto_questions: z.number(),
html4excel: z.boolean(),
tag_kb_ids: z.array(z.string()),
topn_tags: z.number(),
raptor: z.object({
use_raptor: z.boolean(),
prompt: z.string(),
max_token: z.number(),
threshold: z.number(),
max_cluster: z.number(),
random_seed: z.number(),
}),
graphrag: z.object({
use_graphrag: z.boolean(),
entity_types: z.array(z.string()),
method: z.string(),
resolution: z.boolean(),
community: z.boolean(),
}),
}),
pagerank: z.number(),
// icon: z.array(z.instanceof(File)),
});

const form = useForm<z.infer<typeof formSchema>>({ const form = useForm<z.infer<typeof formSchema>>({
resolver: zodResolver(formSchema), resolver: zodResolver(formSchema),
defaultValues: { defaultValues: {
}, },
}); });


useFetchKnowledgeConfigurationOnMount(form);

const parserId = useWatch({
control: form.control,
name: 'parser_id',
});

async function onSubmit(data: z.infer<typeof formSchema>) { async function onSubmit(data: z.infer<typeof formSchema>) {
console.log('🚀 ~ DatasetSettings ~ data:', data); console.log('🚀 ~ DatasetSettings ~ data:', data);
} }
<ChunkMethodForm></ChunkMethodForm> <ChunkMethodForm></ChunkMethodForm>
</TabsContent> </TabsContent>
</Tabs> </Tabs>
<div className="text-right">
<ButtonLoading type="submit">Submit</ButtonLoading>
</div>
</form> </form>
</Form> </Form>
<CategoryPanel chunkMethod={DocumentParserType.Naive}></CategoryPanel>

<CategoryPanel chunkMethod={parserId}></CategoryPanel>
</div> </div>
</section> </section>
); );

Loading…
取消
儲存