### 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
| 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; |
| 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 && ( | ||||
| <> | <> |
| 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), |
| 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> | ||||
| ); | ); |
| 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>; | |||||
| } |
| 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> | |||||
| ); | ); | ||||
| } | } |
| 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> | |||||
| ); | ); | ||||
| } | } |
| 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> | |||||
| ); | ); | ||||
| } | } |
| export function KnowledgeGraphConfiguration() { | export function KnowledgeGraphConfiguration() { | ||||
| return ( | return ( | ||||
| <> | <> | ||||
| <EmbeddingModelItem></EmbeddingModelItem> | |||||
| <ChunkMethodItem></ChunkMethodItem> | <ChunkMethodItem></ChunkMethodItem> | ||||
| <EmbeddingModelItem></EmbeddingModelItem> | |||||
| <PageRankFormField></PageRankFormField> | <PageRankFormField></PageRankFormField> | ||||
| 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> | |||||
| ); | ); | ||||
| } | } |
| 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> | |||||
| ); | ); | ||||
| } | } |
| } 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> | |||||
| ); | ); | ||||
| } | } |
| 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> | |||||
| ); | ); | ||||
| } | } |
| 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> | |||||
| ); | ); | ||||
| } | } |
| 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> | |||||
| ); | ); | ||||
| } | } |
| 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> | |||||
| ); | ); | ||||
| } | } |
| 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> | |||||
| ); | ); | ||||
| } | } |
| 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> | |||||
| ); | ); | ||||
| } | } |
| 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> | |||||
| ); | ); | ||||
| } | } |
| 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> | |||||
| ); | ); | ||||
| } | } |
| 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)), | |||||
| }); |
| 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" |
| 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', |
| 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> | ||||
| ); | ); |