From d48b51c3e0ce93d0d1d6bad2f798b531fec340c6 Mon Sep 17 00:00:00 2001 From: CaptainB Date: Mon, 9 Sep 2024 19:10:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --story=1016155 --user=刘瑞斌 【应用编排】-支持设置用户输入变量 https://www.tapd.cn/57709429/s/1576480 --- apps/application/flow/workflow_manage.py | 4 +- .../serializers/application_serializers.py | 14 +- .../serializers/chat_message_serializers.py | 4 +- apps/application/views/chat_views.py | 1 + ui/src/components/ai-chat/index.vue | 175 ++++++++++++++---- .../dynamics-form/items/DatePicker.vue | 5 + .../base-node/component/FieldFormDialog.vue | 159 ++++++++++++++++ ui/src/workflow/nodes/base-node/index.vue | 88 +++++++++ ui/src/workflow/nodes/start-node/index.vue | 33 +++- 9 files changed, 438 insertions(+), 45 deletions(-) create mode 100644 ui/src/components/dynamics-form/items/DatePicker.vue create mode 100644 ui/src/workflow/nodes/base-node/component/FieldFormDialog.vue diff --git a/apps/application/flow/workflow_manage.py b/apps/application/flow/workflow_manage.py index e6a1b411..1d7a7c0a 100644 --- a/apps/application/flow/workflow_manage.py +++ b/apps/application/flow/workflow_manage.py @@ -166,10 +166,10 @@ class Flow: class WorkflowManage: def __init__(self, flow: Flow, params, work_flow_post_handler: WorkFlowPostHandler, - base_to_response: BaseToResponse = SystemToResponse()): + base_to_response: BaseToResponse = SystemToResponse(), form_data = {}): self.params = params self.flow = flow - self.context = {} + self.context = form_data self.node_context = [] self.work_flow_post_handler = work_flow_post_handler self.current_node = None diff --git a/apps/application/serializers/application_serializers.py b/apps/application/serializers/application_serializers.py index 4dd65d12..7eab38f9 100644 --- a/apps/application/serializers/application_serializers.py +++ b/apps/application/serializers/application_serializers.py @@ -694,6 +694,7 @@ class ApplicationSerializer(serializers.Serializer): 'tts_model_id': application.tts_model_id, 'stt_model_enable': application.stt_model_enable, 'tts_model_enable': application.tts_model_enable, + 'work_flow': application.work_flow, 'show_source': application_access_token.show_source}) @transaction.atomic @@ -855,10 +856,15 @@ class ApplicationSerializer(serializers.Serializer): nodes = instance.get('work_flow')['nodes'] for node in nodes: if node['id'] == 'base-node': - instance['stt_model_id'] = node['properties']['node_data']['stt_model_id'] - instance['tts_model_id'] = node['properties']['node_data']['tts_model_id'] - instance['stt_model_enable'] = node['properties']['node_data']['stt_model_enable'] - instance['tts_model_enable'] = node['properties']['node_data']['tts_model_enable'] + node_data = node['properties']['node_data'] + if 'stt_model_id' in node_data: + instance['stt_model_id'] = node_data['stt_model_id'] + if 'tts_model_id' in node_data: + instance['tts_model_id'] = node_data['tts_model_id'] + if 'stt_model_enable' in node_data: + instance['stt_model_enable'] = node_data['stt_model_enable'] + if 'tts_model_enable' in node_data: + instance['tts_model_enable'] = node_data['tts_model_enable'] break def speech_to_text(self, file, with_valid=True): diff --git a/apps/application/serializers/chat_message_serializers.py b/apps/application/serializers/chat_message_serializers.py index a570f1ff..8fbf0dbb 100644 --- a/apps/application/serializers/chat_message_serializers.py +++ b/apps/application/serializers/chat_message_serializers.py @@ -208,6 +208,7 @@ class ChatMessageSerializer(serializers.Serializer): application_id = serializers.UUIDField(required=False, allow_null=True, error_messages=ErrMessage.uuid("应用id")) client_id = serializers.CharField(required=True, error_messages=ErrMessage.char("客户端id")) client_type = serializers.CharField(required=True, error_messages=ErrMessage.char("客户端类型")) + form_data = serializers.DictField(required=False, error_messages=ErrMessage.char("全局变量")) def is_valid_application_workflow(self, *, raise_exception=False): self.is_valid_intraday_access_num() @@ -284,6 +285,7 @@ class ChatMessageSerializer(serializers.Serializer): stream = self.data.get('stream') client_id = self.data.get('client_id') client_type = self.data.get('client_type') + form_data = self.data.get('form_data') user_id = chat_info.application.user_id work_flow_manage = WorkflowManage(Flow.new_instance(chat_info.work_flow_version.work_flow), {'history_chat_record': chat_info.chat_record_list, 'question': message, @@ -291,7 +293,7 @@ class ChatMessageSerializer(serializers.Serializer): 'stream': stream, 're_chat': re_chat, 'user_id': user_id}, WorkFlowPostHandler(chat_info, client_id, client_type), - base_to_response) + base_to_response, form_data) r = work_flow_manage.run() return r diff --git a/apps/application/views/chat_views.py b/apps/application/views/chat_views.py index 288e8a1f..48648809 100644 --- a/apps/application/views/chat_views.py +++ b/apps/application/views/chat_views.py @@ -126,6 +126,7 @@ class ChatView(APIView): 'application_id': (request.auth.keywords.get( 'application_id') if request.auth.client_type == AuthenticationType.APPLICATION_ACCESS_TOKEN.value else None), 'client_id': request.auth.client_id, + 'form_data': (request.data.get('form_data') if 'form_data' in request.data else []), 'client_type': request.auth.client_type}).chat() @action(methods=['GET'], detail=False) diff --git a/ui/src/components/ai-chat/index.vue b/ui/src/components/ai-chat/index.vue index 1d5a9426..7a75f994 100644 --- a/ui/src/components/ai-chat/index.vue +++ b/ui/src/components/ai-chat/index.vue @@ -17,7 +17,9 @@ class="problem-button ellipsis-2 mb-8" :class="log ? 'disabled' : 'cursor'" > - + + + {{ item.str }} +
+
+ + +
+
+ + + +
+
+