diff --git a/client/src/api/plugins/kb.ts b/client/src/api/plugins/kb.ts index 02f1113ad..7c69a9ec5 100644 --- a/client/src/api/plugins/kb.ts +++ b/client/src/api/plugins/kb.ts @@ -23,6 +23,7 @@ import { QuoteItemType } from '@/types/chat'; /* knowledge base */ export const getKbList = (parentId?: string) => GET(`/plugins/kb/list`, { parentId }); +export const getAllDataset = () => GET(`/plugins/kb/allDataset`); export const getKbPaths = (parentId?: string) => GET('/plugins/kb/paths', { parentId }); diff --git a/client/src/components/ChatBox/SelectDataset.tsx b/client/src/components/ChatBox/SelectDataset.tsx index 46e693295..8d2f59727 100644 --- a/client/src/components/ChatBox/SelectDataset.tsx +++ b/client/src/components/ChatBox/SelectDataset.tsx @@ -12,7 +12,7 @@ import { import MyModal from '../MyModal'; import { useTranslation } from 'next-i18next'; import { useQuery } from '@tanstack/react-query'; -import { useUserStore } from '@/store/user'; +import { useDatasetStore } from '@/store/dataset'; import { useToast } from '@/hooks/useToast'; import Avatar from '../Avatar'; import MyIcon from '@/components/Icon'; @@ -29,7 +29,7 @@ const SelectDataset = ({ const theme = useTheme(); const { isPc } = useGlobalStore(); const { toast } = useToast(); - const { myKbList, loadKbList } = useUserStore(); + const { myKbList, loadKbList } = useDatasetStore(); const [selectedId, setSelectedId] = useState(); useQuery(['loadKbList'], () => loadKbList()); diff --git a/client/src/pages/api/plugins/kb/allDataset.ts b/client/src/pages/api/plugins/kb/allDataset.ts new file mode 100644 index 000000000..c230d4f2e --- /dev/null +++ b/client/src/pages/api/plugins/kb/allDataset.ts @@ -0,0 +1,34 @@ +import type { NextApiRequest, NextApiResponse } from 'next'; +import { jsonRes } from '@/service/response'; +import { connectToDatabase, KB } from '@/service/mongo'; +import { authUser } from '@/service/utils/auth'; +import { getVectorModel } from '@/service/utils/data'; +import { KbListItemType } from '@/types/plugin'; + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + try { + // 凭证校验 + const { userId } = await authUser({ req, authToken: true }); + + await connectToDatabase(); + + const kbList = await KB.find({ + userId, + type: 'dataset' + }); + + const data = kbList.map((item) => ({ + ...item.toJSON(), + vectorModel: getVectorModel(item.vectorModel) + })); + + jsonRes(res, { + data + }); + } catch (err) { + jsonRes(res, { + code: 500, + error: err + }); + } +} diff --git a/client/src/pages/app/detail/components/AdEdit/components/Nodes/NodeKbSearch.tsx b/client/src/pages/app/detail/components/AdEdit/components/Nodes/NodeKbSearch.tsx index ff534e2a9..aa388cc55 100644 --- a/client/src/pages/app/detail/components/AdEdit/components/Nodes/NodeKbSearch.tsx +++ b/client/src/pages/app/detail/components/AdEdit/components/Nodes/NodeKbSearch.tsx @@ -2,7 +2,7 @@ import React, { useMemo } from 'react'; import { NodeProps } from 'reactflow'; import { FlowModuleItemType } from '@/types/flow'; import { Flex, Box, Button, useTheme, useDisclosure, Grid } from '@chakra-ui/react'; -import { useUserStore } from '@/store/user'; +import { useDatasetStore } from '@/store/dataset'; import { useQuery } from '@tanstack/react-query'; import NodeCard from '../modules/NodeCard'; import Divider from '../modules/Divider'; @@ -21,7 +21,7 @@ const KBSelect = ({ onChange: (e: SelectedKbType) => void; }) => { const theme = useTheme(); - const { myKbList, loadKbList } = useUserStore(); + const { datasets, loadAllDatasets } = useDatasetStore(); const { isOpen: isOpenKbSelect, onOpen: onOpenKbSelect, @@ -29,11 +29,11 @@ const KBSelect = ({ } = useDisclosure(); const showKbList = useMemo( - () => myKbList.filter((item) => activeKbs.find((kb) => kb.kbId === item._id)), - [myKbList, activeKbs] + () => datasets.filter((item) => activeKbs.find((kb) => kb.kbId === item._id)), + [datasets, activeKbs] ); - useQuery(['initkb'], () => loadKbList()); + useQuery(['loadAllDatasets'], loadAllDatasets); return ( <> @@ -58,12 +58,7 @@ const KBSelect = ({ ))} {isOpenKbSelect && ( - + )} ); diff --git a/client/src/pages/app/detail/components/BasicEdit/index.tsx b/client/src/pages/app/detail/components/BasicEdit/index.tsx index b3262228c..5c07c41e2 100644 --- a/client/src/pages/app/detail/components/BasicEdit/index.tsx +++ b/client/src/pages/app/detail/components/BasicEdit/index.tsx @@ -56,18 +56,21 @@ import MyIcon from '@/components/Icon'; import ChatBox, { type ComponentRef, type StartChatFnProps } from '@/components/ChatBox'; import { addVariable } from '../VariableEditModal'; -import { KBSelectModal, KbParamsModal } from '../KBSelectModal'; +import { KbParamsModal } from '../KBSelectModal'; import { AppTypeEnum } from '@/constants/app'; +import { useDatasetStore } from '@/store/dataset'; const VariableEditModal = dynamic(() => import('../VariableEditModal')); const InfoModal = dynamic(() => import('../InfoModal')); +const KBSelectModal = dynamic(() => import('../KBSelectModal')); const Settings = ({ appId }: { appId: string }) => { const theme = useTheme(); const router = useRouter(); const { t } = useTranslation(); const { toast } = useToast(); - const { appDetail, updateAppDetail, loadKbList, myKbList } = useUserStore(); + const { appDetail, updateAppDetail } = useUserStore(); + const { loadAllDatasets, datasets } = useDatasetStore(); const { isPc } = useGlobalStore(); const [editVariable, setEditVariable] = useState(); @@ -122,8 +125,8 @@ const Settings = ({ appId }: { appId: string }) => { ); }, [getValues, refresh]); const selectedKbList = useMemo( - () => myKbList.filter((item) => kbList.find((kb) => kb.kbId === item._id)), - [myKbList, kbList] + () => datasets.filter((item) => kbList.find((kb) => kb.kbId === item._id)), + [datasets, kbList] ); /* 点击删除 */ @@ -167,7 +170,7 @@ const Settings = ({ appId }: { appId: string }) => { appModule2Form(); }, [appModule2Form]); - useQuery(['initkb', appId], () => loadKbList()); + useQuery(['loadAllDatasets'], loadAllDatasets); const BoxStyles: BoxProps = { bg: 'myWhite.200', @@ -304,6 +307,23 @@ const Settings = ({ appId }: { appId: string }) => { + {/* welcome */} + + + + 对话开场白 + + + + +