From 7950a8c9d0fa1fc28ffb3a2f90deb08da4dd6fa6 Mon Sep 17 00:00:00 2001 From: shaohuzhang1 Date: Mon, 4 Mar 2024 17:01:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=A0=87=E6=B3=A8?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serializers/chat_serializers.py | 36 ++++++++++++++++++- apps/application/urls.py | 7 ++-- apps/application/views/chat_views.py | 30 ++++++++++++++++ 3 files changed, 70 insertions(+), 3 deletions(-) diff --git a/apps/application/serializers/chat_serializers.py b/apps/application/serializers/chat_serializers.py index 0fd6b264d..c551ef24e 100644 --- a/apps/application/serializers/chat_serializers.py +++ b/apps/application/serializers/chat_serializers.py @@ -34,6 +34,7 @@ from common.util.lock import try_lock, un_lock from common.util.rsa_util import decrypt from common.util.split_model import flat_map from dataset.models import Document, Problem, Paragraph +from dataset.serializers.paragraph_serializers import ParagraphSerializers from setting.models import Model from setting.models_provider.constants.model_provider_constants import ModelProvideConstants from smartdoc.conf import PROJECT_DIR @@ -355,7 +356,7 @@ class ChatRecordSerializer(serializers.Serializer): class Improve(serializers.Serializer): chat_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid("对话id")) - chat_record_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid("对话id")) + chat_record_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid("对话记录id")) dataset_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid("知识库id")) @@ -403,3 +404,36 @@ class ChatRecordSerializer(serializers.Serializer): # 添加标注 chat_record.save() return ChatRecordSerializerModel(chat_record).data, paragraph.id + + class Operate(serializers.Serializer): + chat_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid("对话id")) + + chat_record_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid("对话记录id")) + + dataset_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid("知识库id")) + + document_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid("文档id")) + + paragraph_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid("段落id")) + + def delete(self, with_valid=True): + if with_valid: + self.is_valid(raise_exception=True) + + chat_record_id = self.data.get('chat_record_id') + chat_id = self.data.get('chat_id') + dataset_id = self.data.get('dataset_id') + document_id = self.data.get('document_id') + paragraph_id = self.data.get('paragraph_id') + chat_record = QuerySet(ChatRecord).filter(id=chat_record_id, chat_id=chat_id).first() + if chat_record is None: + raise AppApiException(500, '不存在的对话记录') + if not chat_record.improve_paragraph_id_list.__contains__(uuid.UUID(paragraph_id)): + raise AppApiException(500, f'段落id错误,当前对话记录不存在【{paragraph_id}】段落id') + chat_record.improve_paragraph_id_list = [row for row in chat_record.improve_paragraph_id_list if + str(row) != paragraph_id] + chat_record.save() + o = ParagraphSerializers.Operate( + data={"dataset_id": dataset_id, 'document_id': document_id, "paragraph_id": paragraph_id}) + o.is_valid(raise_exception=True) + return o.delete() diff --git a/apps/application/urls.py b/apps/application/urls.py index 6944b4e6a..6842737b8 100644 --- a/apps/application/urls.py +++ b/apps/application/urls.py @@ -36,6 +36,9 @@ urlpatterns = [ name=''), path('application//chat//chat_record//improve', views.ChatView.ChatRecord.ChatRecordImprove.as_view()), - path('application/chat_message/', views.ChatView.Message.as_view()) - + path('application/chat_message/', views.ChatView.Message.as_view()), + path( + 'application//chat//chat_record//dataset//document_id//improve/', + views.ChatView.ChatRecord.Improve.Operate.as_view(), + name='') ] diff --git a/apps/application/views/chat_views.py b/apps/application/views/chat_views.py index a91a66c61..b50ba79c4 100644 --- a/apps/application/views/chat_views.py +++ b/apps/application/views/chat_views.py @@ -264,3 +264,33 @@ class ChatView(APIView): return result.success(ChatRecordSerializer.Improve( data={'chat_id': chat_id, 'chat_record_id': chat_record_id, 'dataset_id': dataset_id, 'document_id': document_id}).improve(request.data)) + + class Operate(APIView): + authentication_classes = [TokenAuth] + + @action(methods=['DELETE'], detail=False) + @swagger_auto_schema(operation_summary="标注", + operation_id="标注", + manual_parameters=ImproveApi.get_request_params_api(), + responses=result.get_api_response(ChatRecordApi.get_response_body_api()), + tags=["应用/对话日志/标注"] + ) + @has_permissions( + ViewPermission([RoleConstants.ADMIN, RoleConstants.USER], + [lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE, + dynamic_tag=keywords.get('application_id'))], + + ), ViewPermission([RoleConstants.ADMIN, RoleConstants.USER], + [lambda r, keywords: Permission(group=Group.DATASET, + operate=Operate.MANAGE, + dynamic_tag=keywords.get( + 'dataset_id'))], + compare=CompareConstants.AND + ), compare=CompareConstants.AND) + def delete(self, request: Request, application_id: str, chat_id: str, chat_record_id: str, + dataset_id: str, + document_id: str, paragraph_id: str): + return result.success(ChatRecordSerializer.Improve.Operate( + data={'chat_id': chat_id, 'chat_record_id': chat_record_id, + 'dataset_id': dataset_id, 'document_id': document_id, + 'paragraph_id': paragraph_id}).delete())