mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-09-01 15:17:15 +00:00
fix: add functions for deleting files
This commit is contained in:
@@ -93,6 +93,6 @@ class KnowledgeBaseRouterGroup(group.RouterGroup):
|
|||||||
methods=['DELETE'],
|
methods=['DELETE'],
|
||||||
endpoint='delete_specific_file_in_kb',
|
endpoint='delete_specific_file_in_kb',
|
||||||
)
|
)
|
||||||
async def delete_specific_file_in_kb(file_id: str) -> str:
|
async def delete_specific_file_in_kb(file_id: str,knowledge_base_uuid: str) -> str:
|
||||||
await self.ap.knowledge_base_service.delete_data_by_file_id(file_id)
|
await self.ap.knowledge_base_service.delete_data_by_file_id(file_id)
|
||||||
return self.success({})
|
return self.success({})
|
||||||
|
|||||||
@@ -207,20 +207,23 @@ class RAGManager:
|
|||||||
self.ap.logger.info(f'Starting data deletion process for file_id: {file_id}')
|
self.ap.logger.info(f'Starting data deletion process for file_id: {file_id}')
|
||||||
session = SessionLocal()
|
session = SessionLocal()
|
||||||
try:
|
try:
|
||||||
# 1. 从 ChromaDB 删除 embeddings
|
# delete vectors
|
||||||
await asyncio.to_thread(self.chroma_manager.delete_by_file_id_sync, file_id)
|
await asyncio.to_thread(self.chroma_manager.delete_by_file_id_sync, file_id)
|
||||||
self.ap.logger.info(f'Deleted embeddings from ChromaDB for file_id: {file_id}')
|
self.ap.logger.info(f'Deleted embeddings from ChromaDB for file_id: {file_id}')
|
||||||
|
|
||||||
# 2. 删除与文件关联的 chunks 记录
|
|
||||||
chunks_to_delete = session.query(Chunk).filter_by(file_id=file_id).all()
|
chunks_to_delete = session.query(Chunk).filter_by(file_id=file_id).all()
|
||||||
for chunk in chunks_to_delete:
|
for chunk in chunks_to_delete:
|
||||||
session.delete(chunk)
|
session.delete(chunk)
|
||||||
self.ap.logger.info(f'Deleted {len(chunks_to_delete)} chunk records for file_id: {file_id}')
|
self.ap.logger.info(f'Deleted {len(chunks_to_delete)} chunk records for file_id: {file_id}')
|
||||||
|
|
||||||
# 3. 删除文件记录本身
|
|
||||||
file_to_delete = session.query(File).filter_by(id=file_id).first()
|
file_to_delete = session.query(File).filter_by(id=file_id).first()
|
||||||
if file_to_delete:
|
if file_to_delete:
|
||||||
session.delete(file_to_delete)
|
session.delete(file_to_delete)
|
||||||
|
try:
|
||||||
|
await self.ap.storage_mgr.storage_provider.delete(file_id)
|
||||||
|
except Exception as e:
|
||||||
|
self.ap.logger.error(f'Error deleting file from storage for file_id {file_id}: {str(e)}', exc_info=True)
|
||||||
|
await self.ap.storage_mgr.storage_provider.delete(file_id)
|
||||||
self.ap.logger.info(f'Deleted file record for file_id: {file_id}')
|
self.ap.logger.info(f'Deleted file record for file_id: {file_id}')
|
||||||
else:
|
else:
|
||||||
self.ap.logger.warning(
|
self.ap.logger.warning(
|
||||||
|
|||||||
Reference in New Issue
Block a user