| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- # coding=utf-8
- from typing import Type
- from rest_framework import serializers
- from application.flow.common import WorkflowMode
- from application.flow.i_step_node import INode, NodeResult
- from django.utils.translation import gettext_lazy as _
- from application.models import ChatSourceChoices
- class ApplicationNodeSerializer(serializers.Serializer):
- application_id = serializers.CharField(required=True, label=_("Application ID"))
- question_reference_address = serializers.ListField(required=True,
- label=_("User Questions"))
- api_input_field_list = serializers.ListField(required=False, label=_("API Input Fields"))
- user_input_field_list = serializers.ListField(required=False,
- label=_("User Input Fields"))
- image_list = serializers.ListField(required=False, label=_("picture"))
- document_list = serializers.ListField(required=False, label=_("document"))
- audio_list = serializers.ListField(required=False, label=_("Audio"))
- video_list = serializers.ListField(required=False, label=_("Video"))
- child_node = serializers.DictField(required=False, allow_null=True,
- label=_("Child Nodes"))
- node_data = serializers.DictField(required=False, allow_null=True, label=_("Form Data"))
- class IApplicationNode(INode):
- type = 'application-node'
- support = [WorkflowMode.APPLICATION, WorkflowMode.APPLICATION_LOOP]
- def get_node_params_serializer_class(self) -> Type[serializers.Serializer]:
- return ApplicationNodeSerializer
- def _run(self):
- question = self.workflow_manage.get_reference_field(
- self.node_params_serializer.data.get('question_reference_address')[0],
- self.node_params_serializer.data.get('question_reference_address')[1:])
- kwargs = {}
- for api_input_field in self.node_params_serializer.data.get('api_input_field_list', []):
- value = api_input_field.get('value', [''])[0] if api_input_field.get('value') else ''
- kwargs[api_input_field['variable']] = self.workflow_manage.get_reference_field(value,
- api_input_field['value'][
- 1:]) if value != '' else ''
- for user_input_field in self.node_params_serializer.data.get('user_input_field_list', []):
- value = user_input_field.get('value', [''])[0] if user_input_field.get('value') else ''
- kwargs[user_input_field['field']] = self.workflow_manage.get_reference_field(value,
- user_input_field['value'][
- 1:]) if value != '' else ''
- # 判断是否包含这个属性
- app_document_list = self.node_params_serializer.data.get('document_list', [])
- if app_document_list and len(app_document_list) > 0:
- app_document_list = self.workflow_manage.get_reference_field(
- app_document_list[0],
- app_document_list[1:])
- for document in app_document_list:
- if 'file_id' not in document:
- raise ValueError(
- _("Parameter value error: The uploaded document lacks file_id, and the document upload fails"))
- app_image_list = self.node_params_serializer.data.get('image_list', [])
- if app_image_list and len(app_image_list) > 0:
- app_image_list = self.workflow_manage.get_reference_field(
- app_image_list[0],
- app_image_list[1:])
- for image in app_image_list:
- if 'file_id' not in image:
- raise ValueError(
- _("Parameter value error: The uploaded image lacks file_id, and the image upload fails"))
- app_audio_list = self.node_params_serializer.data.get('audio_list', [])
- if app_audio_list and len(app_audio_list) > 0:
- app_audio_list = self.workflow_manage.get_reference_field(
- app_audio_list[0],
- app_audio_list[1:])
- for audio in app_audio_list:
- if 'file_id' not in audio:
- raise ValueError(
- _("Parameter value error: The uploaded audio lacks file_id, and the audio upload fails."))
- app_video_list = self.node_params_serializer.data.get('video_list', [])
- if app_video_list and len(app_video_list) > 0:
- app_video_list = self.workflow_manage.get_reference_field(
- app_video_list[0],
- app_video_list[1:]
- )
- for video in app_video_list:
- if 'file_id' not in video:
- raise ValueError(
- _("Parameter value error: The uploaded video lacks file_id, and the video upload fails."))
- return self.execute(**{**self.flow_params_serializer.data, **self.node_params_serializer.data},
- app_document_list=app_document_list, app_image_list=app_image_list,
- app_audio_list=app_audio_list,
- app_video_list=app_video_list,
- ip_address=self.workflow_params.get('ip_address') or '-',
- source=self.workflow_params.get('source') or {"type": ChatSourceChoices.ONLINE.value},
- message=str(question), **kwargs)
- def execute(self, application_id, message, chat_id, chat_record_id, stream, re_chat, client_id, client_type,
- app_document_list=None, app_image_list=None, app_audio_list=None, app_video_list=None, child_node=None,
- node_data=None,
- ip_address=None,
- source=None,
- **kwargs) -> NodeResult:
- pass
|