i_question_node.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. # coding=utf-8
  2. """
  3. @project: maxkb
  4. @Author:虎
  5. @file: i_chat_node.py
  6. @date:2024/6/4 13:58
  7. @desc:
  8. """
  9. from typing import Type
  10. from django.utils.translation import gettext_lazy as _
  11. from rest_framework import serializers
  12. from application.flow.common import WorkflowMode
  13. from application.flow.i_step_node import INode, NodeResult
  14. class QuestionNodeSerializer(serializers.Serializer):
  15. model_id = serializers.CharField(required=False, allow_blank=True, allow_null=True, label=_("Model id"))
  16. model_id_type = serializers.CharField(required=False, default='custom', label=_("Model id type"))
  17. model_id_reference = serializers.ListField(required=False, child=serializers.CharField(), allow_empty=True,
  18. label=_("Reference Field"))
  19. system = serializers.CharField(required=False, allow_blank=True, allow_null=True,
  20. label=_("Role Setting"))
  21. prompt = serializers.CharField(required=True, label=_("Prompt word"))
  22. # 多轮对话数量
  23. dialogue_number = serializers.IntegerField(required=True, label=
  24. _("Number of multi-round conversations"))
  25. is_result = serializers.BooleanField(required=False,
  26. label=_('Whether to return content'))
  27. model_params_setting = serializers.DictField(required=False,
  28. label=_("Model parameter settings"))
  29. class IQuestionNode(INode):
  30. type = 'question-node'
  31. support = [WorkflowMode.APPLICATION, WorkflowMode.APPLICATION_LOOP, WorkflowMode.KNOWLEDGE,
  32. WorkflowMode.KNOWLEDGE_LOOP, WorkflowMode.TOOL, WorkflowMode.TOOL_LOOP]
  33. def get_node_params_serializer_class(self) -> Type[serializers.Serializer]:
  34. return QuestionNodeSerializer
  35. def _run(self):
  36. if [WorkflowMode.KNOWLEDGE, WorkflowMode.KNOWLEDGE_LOOP, WorkflowMode.TOOL,
  37. WorkflowMode.TOOL_LOOP].__contains__(self.workflow_manage.flow.workflow_mode):
  38. return self.execute(**self.node_params_serializer.data, **self.flow_params_serializer.data,
  39. **{'history_chat_record': [], 'stream': True, 'chat_id': None, 'chat_record_id': None})
  40. else:
  41. return self.execute(**self.node_params_serializer.data, **self.flow_params_serializer.data)
  42. def execute(self, model_id, system, prompt, dialogue_number, history_chat_record, stream, chat_id, chat_record_id,
  43. model_params_setting=None, model_id_type=None, model_id_reference=None,
  44. **kwargs) -> NodeResult:
  45. pass