mirror of
https://git.mirrors.martin98.com/https://github.com/infiniflow/ragflow.git
synced 2025-04-19 20:50:00 +08:00
Fix delete duplicate assistant (#6888)
### What problem does this PR solve? resolve this issue:https://github.com/infiniflow/ragflow/issues/6876 ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue) --------- Co-authored-by: wenju.li <wenju.li@deepctr.cn>
This commit is contained in:
parent
ae107f31d9
commit
aa99c6b896
@ -23,8 +23,7 @@ from api.db.services.knowledgebase_service import KnowledgebaseService
|
|||||||
from api.db.services.llm_service import TenantLLMService
|
from api.db.services.llm_service import TenantLLMService
|
||||||
from api.db.services.user_service import TenantService
|
from api.db.services.user_service import TenantService
|
||||||
from api.utils import get_uuid
|
from api.utils import get_uuid
|
||||||
from api.utils.api_utils import get_error_data_result, token_required
|
from api.utils.api_utils import get_error_data_result, token_required, get_result, check_duplicate_ids
|
||||||
from api.utils.api_utils import get_result
|
|
||||||
|
|
||||||
|
|
||||||
@manager.route('/chats', methods=['POST']) # noqa: F821
|
@manager.route('/chats', methods=['POST']) # noqa: F821
|
||||||
@ -252,6 +251,8 @@ def update(tenant_id, chat_id):
|
|||||||
@manager.route('/chats', methods=['DELETE']) # noqa: F821
|
@manager.route('/chats', methods=['DELETE']) # noqa: F821
|
||||||
@token_required
|
@token_required
|
||||||
def delete(tenant_id):
|
def delete(tenant_id):
|
||||||
|
errors = []
|
||||||
|
success_count = 0
|
||||||
req = request.json
|
req = request.json
|
||||||
if not req:
|
if not req:
|
||||||
ids = None
|
ids = None
|
||||||
@ -264,11 +265,36 @@ def delete(tenant_id):
|
|||||||
id_list.append(dia.id)
|
id_list.append(dia.id)
|
||||||
else:
|
else:
|
||||||
id_list = ids
|
id_list = ids
|
||||||
|
|
||||||
|
unique_id_list, duplicate_messages = check_duplicate_ids(id_list, "chat")
|
||||||
|
id_list = unique_id_list
|
||||||
|
|
||||||
for id in id_list:
|
for id in id_list:
|
||||||
if not DialogService.query(tenant_id=tenant_id, id=id, status=StatusEnum.VALID.value):
|
if not DialogService.query(tenant_id=tenant_id, id=id, status=StatusEnum.VALID.value):
|
||||||
return get_error_data_result(message=f"You don't own the chat {id}")
|
errors.append(f"You don't own the chat {id}")
|
||||||
|
continue
|
||||||
temp_dict = {"status": StatusEnum.INVALID.value}
|
temp_dict = {"status": StatusEnum.INVALID.value}
|
||||||
DialogService.update_by_id(id, temp_dict)
|
DialogService.update_by_id(id, temp_dict)
|
||||||
|
success_count += 1
|
||||||
|
|
||||||
|
if errors:
|
||||||
|
if success_count > 0:
|
||||||
|
return get_result(
|
||||||
|
data={"success_count": success_count, "errors": errors},
|
||||||
|
message=f"Partially deleted {success_count} chats with {len(errors)} errors"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return get_error_data_result(message="; ".join(errors))
|
||||||
|
|
||||||
|
if duplicate_messages:
|
||||||
|
if success_count > 0:
|
||||||
|
return get_result(
|
||||||
|
message=f"Partially deleted {success_count} chats with {len(duplicate_messages)} errors",
|
||||||
|
data={"success_count": success_count, "errors": duplicate_messages}
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return get_error_data_result(message=";".join(duplicate_messages))
|
||||||
|
|
||||||
return get_result()
|
return get_result()
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ from api.db.services.dialog_service import DialogService, ask, chat
|
|||||||
from api.db.services.file_service import FileService
|
from api.db.services.file_service import FileService
|
||||||
from api.db.services.knowledgebase_service import KnowledgebaseService
|
from api.db.services.knowledgebase_service import KnowledgebaseService
|
||||||
from api.utils import get_uuid
|
from api.utils import get_uuid
|
||||||
from api.utils.api_utils import get_result, token_required, get_data_openai, get_error_data_result, validate_request
|
from api.utils.api_utils import get_result, token_required, get_data_openai, get_error_data_result, validate_request, check_duplicate_ids
|
||||||
from api.db.services.llm_service import LLMBundle
|
from api.db.services.llm_service import LLMBundle
|
||||||
|
|
||||||
|
|
||||||
@ -547,6 +547,9 @@ def list_agent_session(tenant_id, agent_id):
|
|||||||
def delete(tenant_id, chat_id):
|
def delete(tenant_id, chat_id):
|
||||||
if not DialogService.query(id=chat_id, tenant_id=tenant_id, status=StatusEnum.VALID.value):
|
if not DialogService.query(id=chat_id, tenant_id=tenant_id, status=StatusEnum.VALID.value):
|
||||||
return get_error_data_result(message="You don't own the chat")
|
return get_error_data_result(message="You don't own the chat")
|
||||||
|
|
||||||
|
errors = []
|
||||||
|
success_count = 0
|
||||||
req = request.json
|
req = request.json
|
||||||
convs = ConversationService.query(dialog_id=chat_id)
|
convs = ConversationService.query(dialog_id=chat_id)
|
||||||
if not req:
|
if not req:
|
||||||
@ -560,17 +563,44 @@ def delete(tenant_id, chat_id):
|
|||||||
conv_list.append(conv.id)
|
conv_list.append(conv.id)
|
||||||
else:
|
else:
|
||||||
conv_list = ids
|
conv_list = ids
|
||||||
|
|
||||||
|
unique_conv_ids, duplicate_messages = check_duplicate_ids(conv_list, "session")
|
||||||
|
conv_list = unique_conv_ids
|
||||||
|
|
||||||
for id in conv_list:
|
for id in conv_list:
|
||||||
conv = ConversationService.query(id=id, dialog_id=chat_id)
|
conv = ConversationService.query(id=id, dialog_id=chat_id)
|
||||||
if not conv:
|
if not conv:
|
||||||
return get_error_data_result(message="The chat doesn't own the session")
|
errors.append(f"The chat doesn't own the session {id}")
|
||||||
|
continue
|
||||||
ConversationService.delete_by_id(id)
|
ConversationService.delete_by_id(id)
|
||||||
|
success_count += 1
|
||||||
|
|
||||||
|
if errors:
|
||||||
|
if success_count > 0:
|
||||||
|
return get_result(
|
||||||
|
data={"success_count": success_count, "errors": errors},
|
||||||
|
message=f"Partially deleted {success_count} sessions with {len(errors)} errors"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return get_error_data_result(message="; ".join(errors))
|
||||||
|
|
||||||
|
if duplicate_messages:
|
||||||
|
if success_count > 0:
|
||||||
|
return get_result(
|
||||||
|
message=f"Partially deleted {success_count} sessions with {len(duplicate_messages)} errors",
|
||||||
|
data={"success_count": success_count, "errors": duplicate_messages}
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return get_error_data_result(message=";".join(duplicate_messages))
|
||||||
|
|
||||||
return get_result()
|
return get_result()
|
||||||
|
|
||||||
|
|
||||||
@manager.route("/agents/<agent_id>/sessions", methods=["DELETE"]) # noqa: F821
|
@manager.route("/agents/<agent_id>/sessions", methods=["DELETE"]) # noqa: F821
|
||||||
@token_required
|
@token_required
|
||||||
def delete_agent_session(tenant_id, agent_id):
|
def delete_agent_session(tenant_id, agent_id):
|
||||||
|
errors = []
|
||||||
|
success_count = 0
|
||||||
req = request.json
|
req = request.json
|
||||||
cvs = UserCanvasService.query(user_id=tenant_id, id=agent_id)
|
cvs = UserCanvasService.query(user_id=tenant_id, id=agent_id)
|
||||||
if not cvs:
|
if not cvs:
|
||||||
@ -592,11 +622,35 @@ def delete_agent_session(tenant_id, agent_id):
|
|||||||
else:
|
else:
|
||||||
conv_list = ids
|
conv_list = ids
|
||||||
|
|
||||||
|
unique_conv_ids, duplicate_messages = check_duplicate_ids(conv_list, "session")
|
||||||
|
conv_list = unique_conv_ids
|
||||||
|
|
||||||
for session_id in conv_list:
|
for session_id in conv_list:
|
||||||
conv = API4ConversationService.query(id=session_id, dialog_id=agent_id)
|
conv = API4ConversationService.query(id=session_id, dialog_id=agent_id)
|
||||||
if not conv:
|
if not conv:
|
||||||
return get_error_data_result(f"The agent doesn't own the session ${session_id}")
|
errors.append(f"The agent doesn't own the session {session_id}")
|
||||||
|
continue
|
||||||
API4ConversationService.delete_by_id(session_id)
|
API4ConversationService.delete_by_id(session_id)
|
||||||
|
success_count += 1
|
||||||
|
|
||||||
|
if errors:
|
||||||
|
if success_count > 0:
|
||||||
|
return get_result(
|
||||||
|
data={"success_count": success_count, "errors": errors},
|
||||||
|
message=f"Partially deleted {success_count} sessions with {len(errors)} errors"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return get_error_data_result(message="; ".join(errors))
|
||||||
|
|
||||||
|
if duplicate_messages:
|
||||||
|
if success_count > 0:
|
||||||
|
return get_result(
|
||||||
|
message=f"Partially deleted {success_count} sessions with {len(duplicate_messages)} errors",
|
||||||
|
data={"success_count": success_count, "errors": duplicate_messages}
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return get_error_data_result(message=";".join(duplicate_messages))
|
||||||
|
|
||||||
return get_result()
|
return get_result()
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user