From 3aa5dd36942bc16b6fc9b6f508487e5fd3460d30 Mon Sep 17 00:00:00 2001 From: shaohuzhang1 <80892890+shaohuzhang1@users.noreply.github.com> Date: Mon, 24 Feb 2025 18:53:21 +0800 Subject: [PATCH] feat: The demonstration page supports modifying dialogue summaries (#2348) --- .../serializers/chat_serializers.py | 13 +++ apps/application/swagger_api/chat_api.py | 28 ++++++ apps/application/views/chat_views.py | 19 +++- apps/locales/en_US/LC_MESSAGES/django.po | 2 + apps/locales/zh_CN/LC_MESSAGES/django.po | 3 +- apps/locales/zh_Hant/LC_MESSAGES/django.po | 5 +- ui/src/api/log.ts | 26 +++++- .../ai-chat/ExecutionDetailDialog.vue | 8 +- .../ai-chat/ParagraphSourceDialog.vue | 7 +- ui/src/locales/lang/en-US/ai-chat.ts | 3 +- ui/src/locales/lang/zh-CN/ai-chat.ts | 4 +- ui/src/locales/lang/zh-Hant/ai-chat.ts | 3 +- ui/src/stores/modules/log.ts | 12 +++ ui/src/styles/app.scss | 6 ++ ui/src/views/chat/embed/index.vue | 46 ++++++++-- ui/src/views/chat/pc/EditTitleDialog.vue | 87 +++++++++++++++++++ ui/src/views/chat/pc/index.vue | 33 +++++-- 17 files changed, 273 insertions(+), 32 deletions(-) create mode 100644 ui/src/views/chat/pc/EditTitleDialog.vue diff --git a/apps/application/serializers/chat_serializers.py b/apps/application/serializers/chat_serializers.py index 3d8d7696f..055ec4a62 100644 --- a/apps/application/serializers/chat_serializers.py +++ b/apps/application/serializers/chat_serializers.py @@ -66,6 +66,10 @@ def valid_model_params_setting(model_id, model_params_setting): credential.get_model_params_setting_form(model.model_name).valid_form(model_params_setting) +class ReAbstractInstanceSerializers(serializers.Serializer): + abstract = serializers.CharField(required=True, error_messages=ErrMessage.char(_("abstract"))) + + class ChatSerializers(serializers.Serializer): class Operate(serializers.Serializer): chat_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid(_("Conversation ID"))) @@ -78,6 +82,15 @@ class ChatSerializers(serializers.Serializer): is_deleted=True) return True + def re_abstract(self, instance, with_valid=True): + if with_valid: + self.is_valid(raise_exception=True) + ReAbstractInstanceSerializers(data=instance).is_valid(raise_exception=True) + + QuerySet(Chat).filter(id=self.data.get('chat_id'), application_id=self.data.get('application_id')).update( + abstract=instance.get('abstract')) + return True + def delete(self, with_valid=True): if with_valid: self.is_valid(raise_exception=True) diff --git a/apps/application/swagger_api/chat_api.py b/apps/application/swagger_api/chat_api.py index a0cfc8e1b..32522fd94 100644 --- a/apps/application/swagger_api/chat_api.py +++ b/apps/application/swagger_api/chat_api.py @@ -23,6 +23,34 @@ class ChatClientHistoryApi(ApiMixin): description=_('Application ID')) ] + class Operate(ApiMixin): + @staticmethod + def get_request_params_api(): + return [openapi.Parameter(name='application_id', + in_=openapi.IN_PATH, + type=openapi.TYPE_STRING, + required=True, + description=_('Application ID')), + openapi.Parameter(name='chat_id', + in_=openapi.IN_PATH, + type=openapi.TYPE_STRING, + required=True, + description=_('Conversation ID')), + ] + + class ReAbstract(ApiMixin): + @staticmethod + def get_request_body_api(): + return openapi.Schema( + type=openapi.TYPE_OBJECT, + required=['abstract'], + properties={ + 'abstract': openapi.Schema(type=openapi.TYPE_STRING, title=_("abstract"), + description=_("abstract")) + + } + ) + class OpenAIChatApi(ApiMixin): @staticmethod diff --git a/apps/application/views/chat_views.py b/apps/application/views/chat_views.py index b87309bb2..556f99f26 100644 --- a/apps/application/views/chat_views.py +++ b/apps/application/views/chat_views.py @@ -150,7 +150,7 @@ class ChatView(APIView): operation_id=_("Get the conversation list"), manual_parameters=ChatApi.get_request_params_api(), responses=result.get_api_array_response(ChatApi.get_response_body_api()), - tags=[_("Application/Conversation Log")] + tags=[_("Application/Conversation Log")] ) @has_permissions( ViewPermission([RoleConstants.ADMIN, RoleConstants.USER, RoleConstants.APPLICATION_KEY], @@ -222,6 +222,23 @@ class ChatView(APIView): data={'application_id': application_id, 'user_id': request.user.id, 'chat_id': chat_id}).logic_delete()) + @action(methods=['PUT'], detail=False) + @swagger_auto_schema(operation_summary=_("Client modifies dialogue summary"), + operation_id=_("Client modifies dialogue summary"), + request_body=ChatClientHistoryApi.Operate.ReAbstract.get_request_body_api(), + tags=[_("Application/Conversation Log")]) + @has_permissions(ViewPermission( + [RoleConstants.APPLICATION_ACCESS_TOKEN], + [lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE, + dynamic_tag=keywords.get('application_id'))], + compare=CompareConstants.AND), + compare=CompareConstants.AND) + def put(self, request: Request, application_id: str, chat_id: str): + return result.success( + ChatSerializers.Operate( + data={'application_id': application_id, 'user_id': request.user.id, + 'chat_id': chat_id}).re_abstract(request.data)) + class Page(APIView): authentication_classes = [TokenAuth] diff --git a/apps/locales/en_US/LC_MESSAGES/django.po b/apps/locales/en_US/LC_MESSAGES/django.po index 04cb138e3..eab7f3db8 100644 --- a/apps/locales/en_US/LC_MESSAGES/django.po +++ b/apps/locales/en_US/LC_MESSAGES/django.po @@ -6753,3 +6753,5 @@ msgstr "" msgid "Image download failed, check network" msgstr "" +msgid "Client modifies dialogue summary" +msgstr "" diff --git a/apps/locales/zh_CN/LC_MESSAGES/django.po b/apps/locales/zh_CN/LC_MESSAGES/django.po index 77d444758..9e29bb722 100644 --- a/apps/locales/zh_CN/LC_MESSAGES/django.po +++ b/apps/locales/zh_CN/LC_MESSAGES/django.po @@ -6892,4 +6892,5 @@ msgstr "超出许可证使用限制。" msgid "Image download failed, check network" msgstr "图片下载失败,请检查网络" - +msgid "Client modifies dialogue summary" +msgstr "客户端修改对话摘要" diff --git a/apps/locales/zh_Hant/LC_MESSAGES/django.po b/apps/locales/zh_Hant/LC_MESSAGES/django.po index e0386d030..d61d8e98c 100644 --- a/apps/locales/zh_Hant/LC_MESSAGES/django.po +++ b/apps/locales/zh_Hant/LC_MESSAGES/django.po @@ -6902,4 +6902,7 @@ msgid "License usage limit exceeded." msgstr "超出許可證使用限制。" msgid "Image download failed, check network" -msgstr "圖片下載失敗,檢查網絡" \ No newline at end of file +msgstr "圖片下載失敗,檢查網絡" + +msgid "Client modifies dialogue summary" +msgstr "用戶端修改對話摘要" \ No newline at end of file diff --git a/ui/src/api/log.ts b/ui/src/api/log.ts index 20973a371..edcd4d93e 100644 --- a/ui/src/api/log.ts +++ b/ui/src/api/log.ts @@ -220,6 +220,29 @@ const delChatClientLog: ( return del(`${prefix}/${application_id}/chat/client/${chat_id}`, undefined, {}, loading) } +/** + * 修改历史日志abstract + * @param 参数 + * application_id, chat_id, + * data { + "abstract": "string", + } + */ + +const putChatClientLog: ( + application_id: string, + chat_id: string, + data: any, + loading?: Ref +) => Promise> = (application_id, chat_id, data, loading) => { + return put( + `${prefix}/${application_id}/chat/client/${chat_id}`, + data, + undefined, + loading + ) +} + export default { getChatLog, delChatLog, @@ -231,5 +254,6 @@ export default { exportChatLog, getChatLogClient, delChatClientLog, - postChatRecordLog + postChatRecordLog, + putChatClientLog } diff --git a/ui/src/components/ai-chat/ExecutionDetailDialog.vue b/ui/src/components/ai-chat/ExecutionDetailDialog.vue index 636af52f3..4f97c0085 100644 --- a/ui/src/components/ai-chat/ExecutionDetailDialog.vue +++ b/ui/src/components/ai-chat/ExecutionDetailDialog.vue @@ -1,6 +1,6 @@