### 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
| @@ -1,7 +1,7 @@ | |||
| import { cn } from '@/lib/utils'; | |||
| import { PropsWithChildren } from 'react'; | |||
| type FormContainerProps = { | |||
| export type FormContainerProps = { | |||
| className?: string; | |||
| show?: boolean; | |||
| } & PropsWithChildren; | |||
| @@ -46,6 +46,7 @@ export const showGraphRagItems = (parserId: DocumentParserType | undefined) => { | |||
| type GraphRagItemsProps = { | |||
| marginBottom?: boolean; | |||
| className?: string; | |||
| }; | |||
| export function UseGraphRagFormField() { | |||
| @@ -75,7 +76,10 @@ export function UseGraphRagFormField() { | |||
| } | |||
| // 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 form = useFormContext(); | |||
| @@ -99,7 +103,7 @@ const GraphRagItems = ({ marginBottom = false }: GraphRagItemsProps) => { | |||
| ); | |||
| return ( | |||
| <FormContainer className={cn({ 'mb-4': marginBottom })}> | |||
| <FormContainer className={cn({ 'mb-4': marginBottom }, className)}> | |||
| <UseGraphRagFormField></UseGraphRagFormField> | |||
| {useRaptor && ( | |||
| <> | |||
| @@ -18,7 +18,7 @@ import { getLLMIconName, getRealModelName } from '@/utils/llm-util'; | |||
| import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; | |||
| import { Flex, message } from 'antd'; | |||
| import { DefaultOptionType } from 'antd/es/select'; | |||
| import { useMemo } from 'react'; | |||
| import { useCallback, useMemo } from 'react'; | |||
| import { useTranslation } from 'react-i18next'; | |||
| export const useFetchLlmList = ( | |||
| @@ -77,7 +77,7 @@ function buildLlmOptionsWithIcon(x: IThirdOAIModel) { | |||
| export const useSelectLlmOptionsByModelType = () => { | |||
| const llmInfo: IThirdOAIModelCollection = useFetchLlmList(); | |||
| const groupImage2TextOptions = () => { | |||
| const groupImage2TextOptions = useCallback(() => { | |||
| const modelType = LlmModelType.Image2text; | |||
| const modelTag = modelType.toUpperCase(); | |||
| @@ -96,27 +96,32 @@ export const useSelectLlmOptionsByModelType = () => { | |||
| }; | |||
| }) | |||
| .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 { | |||
| [LlmModelType.Chat]: groupOptionsByModelType(LlmModelType.Chat), | |||
| @@ -1,8 +1,7 @@ | |||
| import { useFormContext, useWatch } from 'react-hook-form'; | |||
| import { useTranslation } from 'react-i18next'; | |||
| import { DocumentParserType } from '@/constants/knowledge'; | |||
| import { useMemo, useState } from 'react'; | |||
| import { useMemo } from 'react'; | |||
| import { AudioConfiguration } from './configuration/audio'; | |||
| import { BookConfiguration } from './configuration/book'; | |||
| import { EmailConfiguration } from './configuration/email'; | |||
| @@ -18,7 +17,6 @@ import { QAConfiguration } from './configuration/qa'; | |||
| import { ResumeConfiguration } from './configuration/resume'; | |||
| import { TableConfiguration } from './configuration/table'; | |||
| import { TagConfiguration } from './configuration/tag'; | |||
| import { useFetchKnowledgeConfigurationOnMount } from './hooks'; | |||
| const ConfigurationComponentMap = { | |||
| [DocumentParserType.Naive]: NaiveConfiguration, | |||
| @@ -44,14 +42,8 @@ function EmptyComponent() { | |||
| export function ChunkMethodForm() { | |||
| 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, | |||
| name: 'parser_id', | |||
| }); | |||
| @@ -62,16 +54,8 @@ export function ChunkMethodForm() { | |||
| : EmptyComponent; | |||
| }, [finalParserId]); | |||
| // useEffect(() => { | |||
| // setFinalParserId(parserId); | |||
| // }, [parserId]); | |||
| // useEffect(() => { | |||
| // setFinalParserId(knowledgeDetails.parser_id as DocumentParserType); | |||
| // }, [knowledgeDetails.parser_id]); | |||
| return ( | |||
| <section> | |||
| <section className="overflow-auto max-h-[76vh]"> | |||
| <ConfigurationComponent></ConfigurationComponent> | |||
| </section> | |||
| ); | |||
| @@ -0,0 +1,16 @@ | |||
| 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>; | |||
| } | |||
| @@ -5,14 +5,15 @@ import { | |||
| import PageRankFormField from '@/components/page-rank-form-field'; | |||
| import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; | |||
| import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields'; | |||
| import { ConfigurationFormContainer } from '../configuration-form-container'; | |||
| import { TagItems } from '../tag-item'; | |||
| import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; | |||
| export function AudioConfiguration() { | |||
| return ( | |||
| <> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <ConfigurationFormContainer> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <PageRankFormField></PageRankFormField> | |||
| @@ -26,6 +27,6 @@ export function AudioConfiguration() { | |||
| <GraphRagItems marginBottom></GraphRagItems> | |||
| <TagItems></TagItems> | |||
| </> | |||
| </ConfigurationFormContainer> | |||
| ); | |||
| } | |||
| @@ -6,28 +6,38 @@ import { LayoutRecognizeFormField } from '@/components/layout-recognize-form-fie | |||
| import PageRankFormField from '@/components/page-rank-form-field'; | |||
| import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; | |||
| import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields'; | |||
| import { | |||
| ConfigurationFormContainer, | |||
| MainContainer, | |||
| } from '../configuration-form-container'; | |||
| import { TagItems } from '../tag-item'; | |||
| import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; | |||
| export function BookConfiguration() { | |||
| return ( | |||
| <> | |||
| <LayoutRecognizeFormField></LayoutRecognizeFormField> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <MainContainer> | |||
| <ConfigurationFormContainer> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <LayoutRecognizeFormField></LayoutRecognizeFormField> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <PageRankFormField></PageRankFormField> | |||
| <PageRankFormField></PageRankFormField> | |||
| </ConfigurationFormContainer> | |||
| <> | |||
| <ConfigurationFormContainer> | |||
| <AutoKeywordsFormField></AutoKeywordsFormField> | |||
| <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> | |||
| ); | |||
| } | |||
| @@ -5,14 +5,15 @@ import { | |||
| import PageRankFormField from '@/components/page-rank-form-field'; | |||
| import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; | |||
| import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields'; | |||
| import { ConfigurationFormContainer } from '../configuration-form-container'; | |||
| import { TagItems } from '../tag-item'; | |||
| import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; | |||
| export function EmailConfiguration() { | |||
| return ( | |||
| <> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <ConfigurationFormContainer> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <PageRankFormField></PageRankFormField> | |||
| @@ -26,6 +27,6 @@ export function EmailConfiguration() { | |||
| <GraphRagItems marginBottom></GraphRagItems> | |||
| <TagItems></TagItems> | |||
| </> | |||
| </ConfigurationFormContainer> | |||
| ); | |||
| } | |||
| @@ -7,8 +7,8 @@ import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; | |||
| export function KnowledgeGraphConfiguration() { | |||
| return ( | |||
| <> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <PageRankFormField></PageRankFormField> | |||
| @@ -6,28 +6,38 @@ import { LayoutRecognizeFormField } from '@/components/layout-recognize-form-fie | |||
| import PageRankFormField from '@/components/page-rank-form-field'; | |||
| import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; | |||
| import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields'; | |||
| import { | |||
| ConfigurationFormContainer, | |||
| MainContainer, | |||
| } from '../configuration-form-container'; | |||
| import { TagItems } from '../tag-item'; | |||
| import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; | |||
| export function LawsConfiguration() { | |||
| return ( | |||
| <> | |||
| <LayoutRecognizeFormField></LayoutRecognizeFormField> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <MainContainer> | |||
| <ConfigurationFormContainer> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <LayoutRecognizeFormField></LayoutRecognizeFormField> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <PageRankFormField></PageRankFormField> | |||
| <PageRankFormField></PageRankFormField> | |||
| </ConfigurationFormContainer> | |||
| <> | |||
| <ConfigurationFormContainer> | |||
| <AutoKeywordsFormField></AutoKeywordsFormField> | |||
| <AutoQuestionsFormField></AutoQuestionsFormField> | |||
| </> | |||
| </ConfigurationFormContainer> | |||
| <RaptorFormFields></RaptorFormFields> | |||
| <ConfigurationFormContainer> | |||
| <RaptorFormFields></RaptorFormFields> | |||
| </ConfigurationFormContainer> | |||
| <GraphRagItems marginBottom></GraphRagItems> | |||
| <TagItems></TagItems> | |||
| </> | |||
| <ConfigurationFormContainer> | |||
| <TagItems></TagItems> | |||
| </ConfigurationFormContainer> | |||
| </MainContainer> | |||
| ); | |||
| } | |||
| @@ -6,28 +6,35 @@ import { LayoutRecognizeFormField } from '@/components/layout-recognize-form-fie | |||
| import PageRankFormField from '@/components/page-rank-form-field'; | |||
| import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; | |||
| import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields'; | |||
| import { | |||
| ConfigurationFormContainer, | |||
| MainContainer, | |||
| } from '../configuration-form-container'; | |||
| import { TagItems } from '../tag-item'; | |||
| import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; | |||
| export function ManualConfiguration() { | |||
| return ( | |||
| <> | |||
| <LayoutRecognizeFormField></LayoutRecognizeFormField> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <MainContainer> | |||
| <ConfigurationFormContainer> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <LayoutRecognizeFormField></LayoutRecognizeFormField> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <PageRankFormField></PageRankFormField> | |||
| <PageRankFormField></PageRankFormField> | |||
| </ConfigurationFormContainer> | |||
| <> | |||
| <ConfigurationFormContainer> | |||
| <AutoKeywordsFormField></AutoKeywordsFormField> | |||
| <AutoQuestionsFormField></AutoQuestionsFormField> | |||
| </> | |||
| <RaptorFormFields></RaptorFormFields> | |||
| </ConfigurationFormContainer> | |||
| <ConfigurationFormContainer> | |||
| <RaptorFormFields></RaptorFormFields> | |||
| </ConfigurationFormContainer> | |||
| <GraphRagItems marginBottom></GraphRagItems> | |||
| <TagItems></TagItems> | |||
| </> | |||
| </MainContainer> | |||
| ); | |||
| } | |||
| @@ -4,36 +4,39 @@ import { | |||
| } from '@/components/auto-keywords-form-field'; | |||
| import { DelimiterFormField } from '@/components/delimiter-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 { MaxTokenNumberFormField } from '@/components/max-token-number-from-field'; | |||
| import PageRankFormField from '@/components/page-rank-form-field'; | |||
| import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; | |||
| import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields'; | |||
| import { | |||
| ConfigurationFormContainer, | |||
| MainContainer, | |||
| } from '../configuration-form-container'; | |||
| import { TagItems } from '../tag-item'; | |||
| import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; | |||
| export function NaiveConfiguration() { | |||
| return ( | |||
| <section className="space-y-5 mb-4 overflow-auto"> | |||
| <FormContainer> | |||
| <MainContainer> | |||
| <ConfigurationFormContainer> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <LayoutRecognizeFormField></LayoutRecognizeFormField> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <MaxTokenNumberFormField></MaxTokenNumberFormField> | |||
| <DelimiterFormField></DelimiterFormField> | |||
| </FormContainer> | |||
| <FormContainer> | |||
| </ConfigurationFormContainer> | |||
| <ConfigurationFormContainer> | |||
| <PageRankFormField></PageRankFormField> | |||
| <AutoKeywordsFormField></AutoKeywordsFormField> | |||
| <AutoQuestionsFormField></AutoQuestionsFormField> | |||
| <ExcelToHtmlFormField></ExcelToHtmlFormField> | |||
| <TagItems></TagItems> | |||
| </FormContainer> | |||
| <FormContainer> | |||
| </ConfigurationFormContainer> | |||
| <ConfigurationFormContainer> | |||
| <RaptorFormFields></RaptorFormFields> | |||
| </FormContainer> | |||
| </ConfigurationFormContainer> | |||
| <GraphRagItems></GraphRagItems> | |||
| </section> | |||
| </MainContainer> | |||
| ); | |||
| } | |||
| @@ -5,15 +5,16 @@ import { | |||
| import { LayoutRecognizeFormField } from '@/components/layout-recognize-form-field'; | |||
| import PageRankFormField from '@/components/page-rank-form-field'; | |||
| import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; | |||
| import { ConfigurationFormContainer } from '../configuration-form-container'; | |||
| import { TagItems } from '../tag-item'; | |||
| import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; | |||
| export function OneConfiguration() { | |||
| return ( | |||
| <> | |||
| <ConfigurationFormContainer> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <LayoutRecognizeFormField></LayoutRecognizeFormField> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <PageRankFormField></PageRankFormField> | |||
| @@ -25,6 +26,6 @@ export function OneConfiguration() { | |||
| <GraphRagItems marginBottom></GraphRagItems> | |||
| <TagItems></TagItems> | |||
| </> | |||
| </ConfigurationFormContainer> | |||
| ); | |||
| } | |||
| @@ -6,28 +6,38 @@ import { LayoutRecognizeFormField } from '@/components/layout-recognize-form-fie | |||
| import PageRankFormField from '@/components/page-rank-form-field'; | |||
| import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; | |||
| import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields'; | |||
| import { | |||
| ConfigurationFormContainer, | |||
| MainContainer, | |||
| } from '../configuration-form-container'; | |||
| import { TagItems } from '../tag-item'; | |||
| import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; | |||
| export function PaperConfiguration() { | |||
| return ( | |||
| <> | |||
| <LayoutRecognizeFormField></LayoutRecognizeFormField> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <MainContainer> | |||
| <ConfigurationFormContainer> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <LayoutRecognizeFormField></LayoutRecognizeFormField> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <PageRankFormField></PageRankFormField> | |||
| <PageRankFormField></PageRankFormField> | |||
| </ConfigurationFormContainer> | |||
| <> | |||
| <ConfigurationFormContainer> | |||
| <AutoKeywordsFormField></AutoKeywordsFormField> | |||
| <AutoQuestionsFormField></AutoQuestionsFormField> | |||
| </> | |||
| </ConfigurationFormContainer> | |||
| <RaptorFormFields></RaptorFormFields> | |||
| <ConfigurationFormContainer> | |||
| <RaptorFormFields></RaptorFormFields> | |||
| </ConfigurationFormContainer> | |||
| <GraphRagItems marginBottom></GraphRagItems> | |||
| <TagItems></TagItems> | |||
| </> | |||
| <ConfigurationFormContainer> | |||
| <TagItems></TagItems> | |||
| </ConfigurationFormContainer> | |||
| </MainContainer> | |||
| ); | |||
| } | |||
| @@ -3,14 +3,15 @@ import { | |||
| AutoQuestionsFormField, | |||
| } from '@/components/auto-keywords-form-field'; | |||
| import PageRankFormField from '@/components/page-rank-form-field'; | |||
| import { ConfigurationFormContainer } from '../configuration-form-container'; | |||
| import { TagItems } from '../tag-item'; | |||
| import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; | |||
| export function PictureConfiguration() { | |||
| return ( | |||
| <> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <ConfigurationFormContainer> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <PageRankFormField></PageRankFormField> | |||
| @@ -19,6 +20,6 @@ export function PictureConfiguration() { | |||
| <AutoQuestionsFormField></AutoQuestionsFormField> | |||
| </> | |||
| <TagItems></TagItems> | |||
| </> | |||
| </ConfigurationFormContainer> | |||
| ); | |||
| } | |||
| @@ -6,28 +6,37 @@ import { LayoutRecognizeFormField } from '@/components/layout-recognize-form-fie | |||
| import PageRankFormField from '@/components/page-rank-form-field'; | |||
| import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields'; | |||
| import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields'; | |||
| import { | |||
| ConfigurationFormContainer, | |||
| MainContainer, | |||
| } from '../configuration-form-container'; | |||
| import { TagItems } from '../tag-item'; | |||
| import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; | |||
| export function PresentationConfiguration() { | |||
| return ( | |||
| <> | |||
| <LayoutRecognizeFormField></LayoutRecognizeFormField> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <MainContainer> | |||
| <ConfigurationFormContainer> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <LayoutRecognizeFormField></LayoutRecognizeFormField> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <PageRankFormField></PageRankFormField> | |||
| <PageRankFormField></PageRankFormField> | |||
| </ConfigurationFormContainer> | |||
| <> | |||
| <ConfigurationFormContainer> | |||
| <AutoKeywordsFormField></AutoKeywordsFormField> | |||
| <AutoQuestionsFormField></AutoQuestionsFormField> | |||
| </> | |||
| </ConfigurationFormContainer> | |||
| <RaptorFormFields></RaptorFormFields> | |||
| <ConfigurationFormContainer> | |||
| <RaptorFormFields></RaptorFormFields> | |||
| </ConfigurationFormContainer> | |||
| <GraphRagItems marginBottom></GraphRagItems> | |||
| <TagItems></TagItems> | |||
| </> | |||
| <ConfigurationFormContainer> | |||
| <TagItems></TagItems> | |||
| </ConfigurationFormContainer> | |||
| </MainContainer> | |||
| ); | |||
| } | |||
| @@ -1,16 +1,17 @@ | |||
| import PageRankFormField from '@/components/page-rank-form-field'; | |||
| import { ConfigurationFormContainer } from '../configuration-form-container'; | |||
| import { TagItems } from '../tag-item'; | |||
| import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; | |||
| export function QAConfiguration() { | |||
| return ( | |||
| <> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <ConfigurationFormContainer> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <PageRankFormField></PageRankFormField> | |||
| <TagItems></TagItems> | |||
| </> | |||
| </ConfigurationFormContainer> | |||
| ); | |||
| } | |||
| @@ -1,16 +1,17 @@ | |||
| import PageRankFormField from '@/components/page-rank-form-field'; | |||
| import { ConfigurationFormContainer } from '../configuration-form-container'; | |||
| import { TagItems } from '../tag-item'; | |||
| import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; | |||
| export function ResumeConfiguration() { | |||
| return ( | |||
| <> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <ConfigurationFormContainer> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <PageRankFormField></PageRankFormField> | |||
| <TagItems></TagItems> | |||
| </> | |||
| </ConfigurationFormContainer> | |||
| ); | |||
| } | |||
| @@ -1,13 +1,14 @@ | |||
| import PageRankFormField from '@/components/page-rank-form-field'; | |||
| import { ConfigurationFormContainer } from '../configuration-form-container'; | |||
| import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; | |||
| export function TableConfiguration() { | |||
| return ( | |||
| <> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <ConfigurationFormContainer> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <PageRankFormField></PageRankFormField> | |||
| </> | |||
| </ConfigurationFormContainer> | |||
| ); | |||
| } | |||
| @@ -1,13 +1,14 @@ | |||
| import PageRankFormField from '@/components/page-rank-form-field'; | |||
| import { ConfigurationFormContainer } from '../configuration-form-container'; | |||
| import { ChunkMethodItem, EmbeddingModelItem } from './common-item'; | |||
| export function TagConfiguration() { | |||
| return ( | |||
| <> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <ConfigurationFormContainer> | |||
| <ChunkMethodItem></ChunkMethodItem> | |||
| <EmbeddingModelItem></EmbeddingModelItem> | |||
| <PageRankFormField></PageRankFormField> | |||
| </> | |||
| </ConfigurationFormContainer> | |||
| ); | |||
| } | |||
| @@ -0,0 +1,41 @@ | |||
| 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)), | |||
| }); | |||
| @@ -17,7 +17,7 @@ export function GeneralForm() { | |||
| const { t } = useTranslation(); | |||
| return ( | |||
| <FormContainer className="space-y-2"> | |||
| <FormContainer className="space-y-2 p-10"> | |||
| <FormField | |||
| control={form.control} | |||
| name="name" | |||
| @@ -15,9 +15,11 @@ import { | |||
| import { useIsFetching } from '@tanstack/react-query'; | |||
| import { Form, UploadFile } from 'antd'; | |||
| import { FormInstance } from 'antd/lib'; | |||
| import pick from 'lodash/pick'; | |||
| import { pick } from 'lodash'; | |||
| import { useCallback, useEffect, useState } from 'react'; | |||
| import { UseFormReturn } from 'react-hook-form'; | |||
| import { z } from 'zod'; | |||
| import { formSchema } from './form-schema'; | |||
| export const useSubmitKnowledgeConfiguration = (form: FormInstance) => { | |||
| const { saveKnowledgeConfiguration, loading } = useUpdateKnowledge(); | |||
| @@ -59,13 +61,17 @@ export function useHasParsedDocument() { | |||
| 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(); | |||
| useEffect(() => { | |||
| const fileList: UploadFile[] = getUploadFileListFromBase64( | |||
| knowledgeDetails.avatar, | |||
| ); | |||
| console.log('🚀 ~ useEffect ~ fileList:', fileList); | |||
| form.reset({ | |||
| ...pick(knowledgeDetails, [ | |||
| 'description', | |||
| @@ -1,12 +1,15 @@ | |||
| import { ButtonLoading } from '@/components/ui/button'; | |||
| import { Form } from '@/components/ui/form'; | |||
| import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; | |||
| import { DocumentParserType } from '@/constants/knowledge'; | |||
| import { zodResolver } from '@hookform/resolvers/zod'; | |||
| import { useForm } from 'react-hook-form'; | |||
| import { useForm, useWatch } from 'react-hook-form'; | |||
| import { z } from 'zod'; | |||
| import CategoryPanel from './category-panel'; | |||
| import { ChunkMethodForm } from './chunk-method-form'; | |||
| import { formSchema } from './form-schema'; | |||
| import { GeneralForm } from './general-form'; | |||
| import { useFetchKnowledgeConfigurationOnMount } from './hooks'; | |||
| const enum DocumentType { | |||
| DeepDOC = 'DeepDOC', | |||
| @@ -27,45 +30,6 @@ const enum MethodValue { | |||
| } | |||
| 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>>({ | |||
| resolver: zodResolver(formSchema), | |||
| defaultValues: { | |||
| @@ -97,6 +61,13 @@ export default function DatasetSettings() { | |||
| }, | |||
| }); | |||
| useFetchKnowledgeConfigurationOnMount(form); | |||
| const parserId = useWatch({ | |||
| control: form.control, | |||
| name: 'parser_id', | |||
| }); | |||
| async function onSubmit(data: z.infer<typeof formSchema>) { | |||
| console.log('🚀 ~ DatasetSettings ~ data:', data); | |||
| } | |||
| @@ -128,9 +99,13 @@ export default function DatasetSettings() { | |||
| <ChunkMethodForm></ChunkMethodForm> | |||
| </TabsContent> | |||
| </Tabs> | |||
| <div className="text-right"> | |||
| <ButtonLoading type="submit">Submit</ButtonLoading> | |||
| </div> | |||
| </form> | |||
| </Form> | |||
| <CategoryPanel chunkMethod={DocumentParserType.Naive}></CategoryPanel> | |||
| <CategoryPanel chunkMethod={parserId}></CategoryPanel> | |||
| </div> | |||
| </section> | |||
| ); | |||