From 6e070485876eb79d99fb520ac38466383707cbff Mon Sep 17 00:00:00 2001 From: Akhil-Jasson Date: Tue, 4 Aug 2026 02:33:26 +0530 Subject: [PATCH] fix(kb): clean up files when resetting knowledge bases --- backend/open_webui/routers/knowledge.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/backend/open_webui/routers/knowledge.py b/backend/open_webui/routers/knowledge.py index fa0065b18e..67d02865d3 100644 --- a/backend/open_webui/routers/knowledge.py +++ b/backend/open_webui/routers/knowledge.py @@ -1752,6 +1752,7 @@ async def reset_knowledge_by_id( request: Request, id: str, include_directories: bool = Query(True), + delete_file: bool = Query(True), user=Depends(get_verified_user), db: AsyncSession = Depends(get_async_session), ): @@ -1780,6 +1781,8 @@ async def reset_knowledge_by_id( detail=ERROR_MESSAGES.ACCESS_PROHIBITED, ) + files = await Knowledges.get_files_by_id(knowledge_id=id, db=db) + try: await ASYNC_VECTOR_DB_CLIENT.delete_collection(collection_name=id) except Exception as e: @@ -1787,13 +1790,33 @@ async def reset_knowledge_by_id( pass knowledge = await Knowledges.reset_knowledge_by_id(id=id, include_directories=include_directories, db=db) + + if knowledge and delete_file: + for file in files: + if file.user_id != user.id and user.role != 'admin': + continue + + try: + file_collection = f'file-{file.id}' + if await ASYNC_VECTOR_DB_CLIENT.has_collection(collection_name=file_collection): + await ASYNC_VECTOR_DB_CLIENT.delete_collection(collection_name=file_collection) + except Exception as e: + log.debug('This was most likely caused by bypassing embedding processing') + log.debug(e) + + await Files.delete_file_by_id(file.id, db=db) + try: + await asyncio.to_thread(Storage.delete_file, file.path) + except Exception as e: + log.debug('Error deleting reset knowledge file storage: %s', e) + if knowledge: await publish_event( request, EVENTS.KNOWLEDGE_RESET, actor=user, subject_id=id, - data={'include_directories': include_directories}, + data={'include_directories': include_directories, 'delete_file': delete_file}, ) return knowledge