From 1527eb6e01d441225c979d12d78b7625edf1086f Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Wed, 20 May 2026 01:46:59 +0400 Subject: [PATCH] refac --- backend/open_webui/models/knowledge.py | 7 +++++- backend/open_webui/routers/knowledge.py | 7 ++++-- .../workspace/Knowledge/KnowledgeBase.svelte | 22 +++++++++++++++++-- .../KnowledgeBase/AddContentMenu.svelte | 16 ++++++++++++++ 4 files changed, 47 insertions(+), 5 deletions(-) diff --git a/backend/open_webui/models/knowledge.py b/backend/open_webui/models/knowledge.py index b582040175..fdedf51ea7 100644 --- a/backend/open_webui/models/knowledge.py +++ b/backend/open_webui/models/knowledge.py @@ -692,11 +692,16 @@ class KnowledgeTable: except Exception: return False - async def reset_knowledge_by_id(self, id: str, db: Optional[AsyncSession] = None) -> Optional[KnowledgeModel]: + async def reset_knowledge_by_id(self, id: str, include_directories: bool = True, db: Optional[AsyncSession] = None) -> Optional[KnowledgeModel]: try: async with get_async_db_context(db) as db: # Delete all knowledge_file entries for this knowledge_id await db.execute(delete(KnowledgeFile).filter_by(knowledge_id=id)) + + # Delete all directories if requested + if include_directories: + await db.execute(delete(KnowledgeDirectory).filter_by(knowledge_id=id)) + await db.commit() # Update the knowledge entry's updated_at timestamp diff --git a/backend/open_webui/routers/knowledge.py b/backend/open_webui/routers/knowledge.py index 9fdb8b539e..4bf48d370d 100644 --- a/backend/open_webui/routers/knowledge.py +++ b/backend/open_webui/routers/knowledge.py @@ -950,7 +950,10 @@ async def delete_knowledge_by_id( @router.post('/{id}/reset', response_model=KnowledgeResponse | None) async def reset_knowledge_by_id( - id: str, user=Depends(get_verified_user), db: AsyncSession = Depends(get_async_session) + id: str, + include_directories: bool = Query(True), + user=Depends(get_verified_user), + db: AsyncSession = Depends(get_async_session), ): knowledge = await Knowledges.get_knowledge_by_id(id=id, db=db) if not knowledge: @@ -981,7 +984,7 @@ async def reset_knowledge_by_id( log.debug(e) pass - knowledge = await Knowledges.reset_knowledge_by_id(id=id, db=db) + knowledge = await Knowledges.reset_knowledge_by_id(id=id, include_directories=include_directories, db=db) return knowledge diff --git a/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte b/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte index 26cef03a5f..b82666aa56 100644 --- a/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte +++ b/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte @@ -81,6 +81,7 @@ let pendingSyncFiles: Array<{ path: string; filename: string; file: File }> | null = null; let syncing: string | null = null; let showAccessControlModal = false; + let showResetConfirm = false; let minSize = 0; type Knowledge = { @@ -1292,8 +1293,11 @@ if (pendingSyncFiles?.length) { showSyncConfirmModal = true; } - }} - /> + }} + onReset={() => { + showResetConfirm = true; + }} + /> {/if} @@ -1528,3 +1532,17 @@ + + { + await resetKnowledgeById(localStorage.token, id); + toast.success($i18n.t('Knowledge base has been reset')); + init(); + }} +> +
+ {$i18n.t('This will remove all files and directories from this knowledge base. This action cannot be undone.')} +
+
diff --git a/src/lib/components/workspace/Knowledge/KnowledgeBase/AddContentMenu.svelte b/src/lib/components/workspace/Knowledge/KnowledgeBase/AddContentMenu.svelte index 6a8cd25a85..23bb300a40 100644 --- a/src/lib/components/workspace/Knowledge/KnowledgeBase/AddContentMenu.svelte +++ b/src/lib/components/workspace/Knowledge/KnowledgeBase/AddContentMenu.svelte @@ -10,6 +10,8 @@ import NewFolderAlt from '$lib/components/icons/NewFolderAlt.svelte'; import ArrowPath from '$lib/components/icons/ArrowPath.svelte'; import GlobeAlt from '$lib/components/icons/GlobeAlt.svelte'; + import GarbageBin from '$lib/components/icons/GarbageBin.svelte'; + import ArrowUturnLeft from '$lib/components/icons/ArrowUturnLeft.svelte'; const i18n = getContext('i18n'); @@ -17,6 +19,7 @@ export let onSync: Function = () => {}; export let onUpload: Function = (data) => {}; + export let onReset: Function = () => {}; let show = false; @@ -124,6 +127,19 @@
{$i18n.t('Add text content')}
+ +
+ +