From fc029299462d677a6b01f925b40f6518b87a421e Mon Sep 17 00:00:00 2001 From: balibabu Date: Wed, 2 Apr 2025 11:20:37 +0800 Subject: [PATCH] Feat: Support deleting knowledge graph #6747 (#6748) ### What problem does this PR solve? Feat: Support deleting knowledge graph #6747 ### Type of change - [x] New Feature (non-breaking change which adds functionality) --- .../components/chunk-method-modal/index.tsx | 5 ++-- .../parse-configuration/graph-rag-items.tsx | 26 ++++++++++++------- web/src/hooks/knowledge-hooks.ts | 26 +++++++++++++++++++ .../components/knowledge-graph/index.tsx | 22 +++++++++++++--- .../knowledge-graph/use-delete-graph.ts | 21 +++++++++++++++ web/src/services/knowledge-service.ts | 4 +++ 6 files changed, 90 insertions(+), 14 deletions(-) create mode 100644 web/src/pages/add-knowledge/components/knowledge-graph/use-delete-graph.ts diff --git a/web/src/components/chunk-method-modal/index.tsx b/web/src/components/chunk-method-modal/index.tsx index 1806fc81c..586703da8 100644 --- a/web/src/components/chunk-method-modal/index.tsx +++ b/web/src/components/chunk-method-modal/index.tsx @@ -32,7 +32,8 @@ import LayoutRecognize from '../layout-recognize'; import ParseConfiguration, { showRaptorParseConfiguration, } from '../parse-configuration'; -import GraphRagItems, { +import { + UseGraphRagItem, showGraphRagItems, } from '../parse-configuration/graph-rag-items'; import styles from './index.less'; @@ -316,7 +317,7 @@ const ChunkMethodModal: React.FC = ({ )} - {showGraphRagItems(selectedTag) && } + {showGraphRagItems(selectedTag) && } {showEntityTypes && } diff --git a/web/src/components/parse-configuration/graph-rag-items.tsx b/web/src/components/parse-configuration/graph-rag-items.tsx index 43b3e4ad8..04e3f0150 100644 --- a/web/src/components/parse-configuration/graph-rag-items.tsx +++ b/web/src/components/parse-configuration/graph-rag-items.tsx @@ -39,6 +39,22 @@ type GraphRagItemsProps = { marginBottom?: boolean; }; +export function UseGraphRagItem() { + const { t } = useTranslate('knowledgeConfiguration'); + + return ( + + + + ); +} + // The three types "table", "resume" and "one" do not display this configuration. const GraphRagItems = ({ marginBottom = false }: GraphRagItemsProps) => { const { t } = useTranslate('knowledgeConfiguration'); @@ -62,15 +78,7 @@ const GraphRagItems = ({ marginBottom = false }: GraphRagItemsProps) => { return ( - - - + prevValues.parser_config.graphrag.use_graphrag !== diff --git a/web/src/hooks/knowledge-hooks.ts b/web/src/hooks/knowledge-hooks.ts index 3c737b8b9..cbdd3a778 100644 --- a/web/src/hooks/knowledge-hooks.ts +++ b/web/src/hooks/knowledge-hooks.ts @@ -7,6 +7,7 @@ import { } from '@/interfaces/database/knowledge'; import i18n from '@/locales/config'; import kbService, { + deleteKnowledgeGraph, getKnowledgeGraph, listTag, removeTag, @@ -392,3 +393,28 @@ export function useFetchKnowledgeGraph() { return { data, loading }; } + +export const useRemoveKnowledgeGraph = () => { + const knowledgeBaseId = useKnowledgeBaseId(); + + const queryClient = useQueryClient(); + const { + data, + isPending: loading, + mutateAsync, + } = useMutation({ + mutationKey: ['removeKnowledgeGraph'], + mutationFn: async () => { + const { data } = await deleteKnowledgeGraph(knowledgeBaseId); + if (data.code === 0) { + message.success(i18n.t(`message.deleted`)); + queryClient.invalidateQueries({ + queryKey: ['fetchKnowledgeGraph'], + }); + } + return data?.code; + }, + }); + + return { data, loading, removeKnowledgeGraph: mutateAsync }; +}; diff --git a/web/src/pages/add-knowledge/components/knowledge-graph/index.tsx b/web/src/pages/add-knowledge/components/knowledge-graph/index.tsx index 9b728d71c..1c33438e5 100644 --- a/web/src/pages/add-knowledge/components/knowledge-graph/index.tsx +++ b/web/src/pages/add-knowledge/components/knowledge-graph/index.tsx @@ -1,15 +1,31 @@ +import { ConfirmDeleteDialog } from '@/components/confirm-delete-dialog'; +import { Button } from '@/components/ui/button'; import { useFetchKnowledgeGraph } from '@/hooks/knowledge-hooks'; +import { Trash2 } from 'lucide-react'; import React from 'react'; +import { useTranslation } from 'react-i18next'; import ForceGraph from './force-graph'; +import { useDeleteKnowledgeGraph } from './use-delete-graph'; -const KnowledgeGraphModal: React.FC = () => { +const KnowledgeGraph: React.FC = () => { const { data } = useFetchKnowledgeGraph(); + const { t } = useTranslation(); + const { handleDeleteKnowledgeGraph } = useDeleteKnowledgeGraph(); return ( -
+
+ + +
); }; -export default KnowledgeGraphModal; +export default KnowledgeGraph; diff --git a/web/src/pages/add-knowledge/components/knowledge-graph/use-delete-graph.ts b/web/src/pages/add-knowledge/components/knowledge-graph/use-delete-graph.ts new file mode 100644 index 000000000..49c42986f --- /dev/null +++ b/web/src/pages/add-knowledge/components/knowledge-graph/use-delete-graph.ts @@ -0,0 +1,21 @@ +import { + useKnowledgeBaseId, + useRemoveKnowledgeGraph, +} from '@/hooks/knowledge-hooks'; +import { useCallback } from 'react'; +import { useNavigate } from 'umi'; + +export function useDeleteKnowledgeGraph() { + const { removeKnowledgeGraph, loading } = useRemoveKnowledgeGraph(); + const navigate = useNavigate(); + const knowledgeBaseId = useKnowledgeBaseId(); + + const handleDeleteKnowledgeGraph = useCallback(async () => { + const ret = await removeKnowledgeGraph(); + if (ret === 0) { + navigate(`/knowledge/dataset?id=${knowledgeBaseId}`); + } + }, [knowledgeBaseId, navigate, removeKnowledgeGraph]); + + return { handleDeleteKnowledgeGraph, loading }; +} diff --git a/web/src/services/knowledge-service.ts b/web/src/services/knowledge-service.ts index f32dc2c04..c057d125f 100644 --- a/web/src/services/knowledge-service.ts +++ b/web/src/services/knowledge-service.ts @@ -169,4 +169,8 @@ export function getKnowledgeGraph(knowledgeId: string) { return request.get(api.getKnowledgeGraph(knowledgeId)); } +export function deleteKnowledgeGraph(knowledgeId: string) { + return request.delete(api.getKnowledgeGraph(knowledgeId)); +} + export default kbService;