feat: sync api collection will refresh title;perf: invite link ux (#4237)

* update queue

* feat: sync api collection will refresh title

* sync collection

* remove lock

* perf: invite link ux
This commit is contained in:
Archer
2025-03-19 21:03:21 +08:00
committed by archer
parent 73451dbc64
commit 87e90c37bd
44 changed files with 368 additions and 327 deletions

View File

@@ -29,7 +29,6 @@ import {
DatasetCollectionTypeEnum,
DatasetStatusEnum,
DatasetCollectionSyncResultMap,
DatasetTypeEnum,
DatasetCollectionDataProcessModeMap
} from '@fastgpt/global/core/dataset/constants';
import { getCollectionIcon } from '@fastgpt/global/core/dataset/utils';
@@ -45,7 +44,10 @@ import { CollectionPageContext } from './Context';
import { DatasetPageContext } from '@/web/core/dataset/context/datasetPageContext';
import { formatTime2YMDHM } from '@fastgpt/global/common/string/time';
import MyTag from '@fastgpt/web/components/common/Tag/index';
import { checkCollectionIsFolder } from '@fastgpt/global/core/dataset/collection/utils';
import {
checkCollectionIsFolder,
collectionCanSync
} from '@fastgpt/global/core/dataset/collection/utils';
import { useFolderDrag } from '@/components/common/folder/useFolderDrag';
import TagsPopOver from './TagsPopOver';
import { useSystemStore } from '@/web/common/system/useSystemStore';
@@ -315,8 +317,7 @@ const CollectionCard = () => {
menuList={[
{
children: [
...(collection.type === DatasetCollectionTypeEnum.link ||
datasetDetail.type === DatasetTypeEnum.apiDataset
...(collectionCanSync(collection.type)
? [
{
label: (

View File

@@ -1,4 +1,4 @@
import React, { useCallback } from 'react';
import React, { useCallback, useMemo } from 'react';
import { useTranslation } from 'next-i18next';
import { Box, Flex, IconButton, useTheme, Progress } from '@chakra-ui/react';
import MyIcon from '@fastgpt/web/components/common/Icon';
@@ -9,6 +9,8 @@ import LightRowTabs from '@fastgpt/web/components/common/Tabs/LightRowTabs';
import { useSystem } from '@fastgpt/web/hooks/useSystem';
import MyPopover from '@fastgpt/web/components/common/MyPopover';
import ParentPaths from '@/components/common/ParentPaths';
import { getTrainingQueueLen } from '@/web/core/dataset/api';
import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
export enum TabEnum {
dataCard = 'dataCard',
@@ -24,8 +26,68 @@ const NavBar = ({ currentTab }: { currentTab: TabEnum }) => {
const router = useRouter();
const query = router.query;
const { isPc } = useSystem();
const { datasetDetail, vectorTrainingMap, agentTrainingMap, rebuildingCount, paths } =
useContextSelector(DatasetPageContext, (v) => v);
const { datasetDetail, rebuildingCount, paths } = useContextSelector(
DatasetPageContext,
(v) => v
);
// global queue
const {
data: {
vectorTrainingCount = 0,
qaTrainingCount = 0,
autoTrainingCount = 0,
imageTrainingCount = 0
} = {}
} = useRequest2(getTrainingQueueLen, {
manual: false,
retryInterval: 10000
});
const { vectorTrainingMap, qaTrainingMap, autoTrainingMap, imageTrainingMap } = useMemo(() => {
const vectorTrainingMap = (() => {
if (vectorTrainingCount < 1000)
return {
colorSchema: 'green',
tip: t('common:core.dataset.training.Leisure')
};
if (vectorTrainingCount < 20000)
return {
colorSchema: 'yellow',
tip: t('common:core.dataset.training.Waiting')
};
return {
colorSchema: 'red',
tip: t('common:core.dataset.training.Full')
};
})();
const countLLMMap = (count: number) => {
if (count < 100)
return {
colorSchema: 'green',
tip: t('common:core.dataset.training.Leisure')
};
if (count < 1000)
return {
colorSchema: 'yellow',
tip: t('common:core.dataset.training.Waiting')
};
return {
colorSchema: 'red',
tip: t('common:core.dataset.training.Full')
};
};
const qaTrainingMap = countLLMMap(qaTrainingCount);
const autoTrainingMap = countLLMMap(autoTrainingCount);
const imageTrainingMap = countLLMMap(imageTrainingCount);
return {
vectorTrainingMap,
qaTrainingMap,
autoTrainingMap,
imageTrainingMap
};
}, [qaTrainingCount, autoTrainingCount, imageTrainingCount, vectorTrainingCount, t]);
const tabList = [
{
@@ -172,12 +234,38 @@ const NavBar = ({ currentTab }: { currentTab: TabEnum }) => {
)}
<Box mb={3}>
<Box fontSize={'sm'} pb={1}>
{t('common:core.dataset.training.Agent queue')}({agentTrainingMap.tip})
{t('common:core.dataset.training.Agent queue')}({qaTrainingMap.tip})
</Box>
<Progress
value={100}
size={'xs'}
colorScheme={agentTrainingMap.colorSchema}
colorScheme={qaTrainingMap.colorSchema}
borderRadius={'md'}
isAnimated
hasStripe
/>
</Box>
<Box mb={3}>
<Box fontSize={'sm'} pb={1}>
{t('dataset:auto_training_queue')}({autoTrainingMap.tip})
</Box>
<Progress
value={100}
size={'xs'}
colorScheme={autoTrainingMap.colorSchema}
borderRadius={'md'}
isAnimated
hasStripe
/>
</Box>
<Box mb={3}>
<Box fontSize={'sm'} pb={1}>
{t('dataset:image_training_queue')}({imageTrainingMap.tip})
</Box>
<Progress
value={100}
size={'xs'}
colorScheme={imageTrainingMap.colorSchema}
borderRadius={'md'}
isAnimated
hasStripe