node.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. from core.plugin.backwards_invocation.base import BaseBackwardsInvocation
  2. from core.workflow.nodes.parameter_extractor.entities import (
  3. ModelConfig as ParameterExtractorModelConfig,
  4. )
  5. from core.workflow.nodes.parameter_extractor.entities import (
  6. ParameterConfig,
  7. ParameterExtractorNodeData,
  8. )
  9. from core.workflow.nodes.question_classifier.entities import (
  10. ClassConfig,
  11. QuestionClassifierNodeData,
  12. )
  13. from core.workflow.nodes.question_classifier.entities import (
  14. ModelConfig as QuestionClassifierModelConfig,
  15. )
  16. from services.workflow_service import WorkflowService
  17. class PluginNodeBackwardsInvocation(BaseBackwardsInvocation):
  18. @classmethod
  19. def invoke_parameter_extractor(
  20. cls,
  21. tenant_id: str,
  22. user_id: str,
  23. parameters: list[ParameterConfig],
  24. model_config: ParameterExtractorModelConfig,
  25. instruction: str,
  26. query: str,
  27. ) -> dict:
  28. """
  29. Invoke parameter extractor node.
  30. :param tenant_id: str
  31. :param user_id: str
  32. :param parameters: list[ParameterConfig]
  33. :param model_config: ModelConfig
  34. :param instruction: str
  35. :param query: str
  36. :return: dict with __reason, __is_success, and other parameters
  37. """
  38. workflow_service = WorkflowService()
  39. node_id = "1919810"
  40. node_data = ParameterExtractorNodeData(
  41. title="parameter_extractor",
  42. desc="parameter_extractor",
  43. parameters=parameters,
  44. reasoning_mode="function_call",
  45. query=[node_id, "query"],
  46. model=model_config,
  47. instruction=instruction, # instruct with variables are not supported
  48. )
  49. node_data_dict = node_data.model_dump()
  50. execution = workflow_service.run_free_workflow_node(
  51. node_data_dict,
  52. tenant_id=tenant_id,
  53. user_id=user_id,
  54. node_id=node_id,
  55. user_inputs={
  56. f"{node_id}.query": query,
  57. },
  58. )
  59. output = execution.outputs_dict
  60. return output or {
  61. "__reason": "No parameters extracted",
  62. "__is_success": False,
  63. }
  64. @classmethod
  65. def invoke_question_classifier(
  66. cls,
  67. tenant_id: str,
  68. user_id: str,
  69. model_config: QuestionClassifierModelConfig,
  70. classes: list[ClassConfig],
  71. instruction: str,
  72. query: str,
  73. ) -> dict:
  74. """
  75. Invoke question classifier node.
  76. :param tenant_id: str
  77. :param user_id: str
  78. :param model_config: ModelConfig
  79. :param classes: list[ClassConfig]
  80. :param instruction: str
  81. :param query: str
  82. :return: dict with class_name
  83. """
  84. workflow_service = WorkflowService()
  85. node_id = "1919810"
  86. node_data = QuestionClassifierNodeData(
  87. title="question_classifier",
  88. desc="question_classifier",
  89. query_variable_selector=[node_id, "query"],
  90. model=model_config,
  91. classes=classes,
  92. instruction=instruction, # instruct with variables are not supported
  93. )
  94. node_data_dict = node_data.model_dump()
  95. execution = workflow_service.run_free_workflow_node(
  96. node_data_dict,
  97. tenant_id=tenant_id,
  98. user_id=user_id,
  99. node_id=node_id,
  100. user_inputs={
  101. f"{node_id}.query": query,
  102. },
  103. )
  104. output = execution.outputs_dict
  105. return output or {
  106. "class_name": classes[0].name,
  107. }