import React, { useCallback, useMemo } from 'react'; import { useRouter } from 'next/router'; import { Box, Flex, IconButton, useTheme, Progress } from '@chakra-ui/react'; import { useToast } from '@fastgpt/web/hooks/useToast'; import { useQuery } from '@tanstack/react-query'; import { getErrText } from '@fastgpt/global/common/error/utils'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import Tabs from '@/components/Tabs'; import dynamic from 'next/dynamic'; import MyIcon from '@fastgpt/web/components/common/Icon'; import SideTabs from '@/components/SideTabs'; import PageContainer from '@/components/PageContainer'; import Avatar from '@/components/Avatar'; import { serviceSideProps } from '@/web/common/utils/i18n'; import { useTranslation } from 'next-i18next'; import { getTrainingQueueLen } from '@/web/core/dataset/api'; import MyTooltip from '@/components/MyTooltip'; import CollectionCard from './components/CollectionCard'; import { useDatasetStore } from '@/web/core/dataset/store/dataset'; import { useUserStore } from '@/web/support/user/useUserStore'; import { DatasetStatusEnum, DatasetTypeEnum, DatasetTypeMap } from '@fastgpt/global/core/dataset/constants'; import { useConfirm } from '@fastgpt/web/hooks/useConfirm'; import { useRequest } from '@fastgpt/web/hooks/useRequest'; import DatasetTypeTag from '@/components/core/dataset/DatasetTypeTag'; import Head from 'next/head'; import MyBox from '@/components/common/MyBox'; const DataCard = dynamic(() => import('./components/DataCard')); const Test = dynamic(() => import('./components/Test')); const Info = dynamic(() => import('./components/Info')); const Import = dynamic(() => import('./components/Import')); export enum TabEnum { dataCard = 'dataCard', collectionCard = 'collectionCard', test = 'test', info = 'info', import = 'import' } const Detail = ({ datasetId, currentTab }: { datasetId: string; currentTab: `${TabEnum}` }) => { const theme = useTheme(); const { t } = useTranslation(); const { toast } = useToast(); const router = useRouter(); const { isPc } = useSystemStore(); const { datasetDetail, loadDatasetDetail, startWebsiteSync } = useDatasetStore(); const { userInfo } = useUserStore(); const tabList = [ { label: t('core.dataset.Collection'), id: TabEnum.collectionCard, icon: 'common/overviewLight' }, { label: t('core.dataset.test.Search Test'), id: TabEnum.test, icon: 'kbTest' }, ...(userInfo?.team.canWrite && datasetDetail.isOwner ? [{ label: t('common.Config'), id: TabEnum.info, icon: 'common/settingLight' }] : []) ]; const { ConfirmModal: ConfirmSyncModal, openConfirm: openConfirmSync } = useConfirm({ type: 'common' }); const { mutate: onUpdateDatasetWebsiteConfig, isLoading: isUpdating } = useRequest({ mutationFn: () => startWebsiteSync(), errorToast: t('common.Update Failed') }); const setCurrentTab = useCallback( (tab: `${TabEnum}`) => { router.replace({ query: { datasetId, currentTab: tab } }); }, [datasetId, router] ); useQuery([datasetId], () => loadDatasetDetail(datasetId), { onError(err: any) { router.replace(`/dataset/list`); toast({ title: t(getErrText(err, t('common.Load Failed'))), status: 'error' }); } }); const { data: { vectorTrainingCount = 0, agentTrainingCount = 0 } = {} } = useQuery( ['getTrainingQueueLen'], () => getTrainingQueueLen({ vectorModel: datasetDetail.vectorModel.model, agentModel: datasetDetail.agentModel.model }), { refetchInterval: 10000 } ); const { vectorTrainingMap, agentTrainingMap } = useMemo(() => { const vectorTrainingMap = (() => { if (vectorTrainingCount < 1000) return { colorSchema: 'green', tip: t('core.dataset.training.Leisure') }; if (vectorTrainingCount < 10000) return { colorSchema: 'yellow', tip: t('core.dataset.training.Waiting') }; return { colorSchema: 'red', tip: t('core.dataset.training.Full') }; })(); const agentTrainingMap = (() => { if (agentTrainingCount < 100) return { colorSchema: 'green', tip: t('core.dataset.training.Leisure') }; if (agentTrainingCount < 1000) return { colorSchema: 'yellow', tip: t('core.dataset.training.Waiting') }; return { colorSchema: 'red', tip: t('core.dataset.training.Full') }; })(); return { vectorTrainingMap, agentTrainingMap }; }, [agentTrainingCount, t, vectorTrainingCount]); return ( <>