node_entities.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. from enum import Enum
  2. from typing import Any, Optional
  3. from pydantic import BaseModel
  4. from models.workflow import WorkflowNodeExecutionStatus
  5. class NodeType(Enum):
  6. """
  7. Node Types.
  8. """
  9. START = 'start'
  10. END = 'end'
  11. ANSWER = 'answer'
  12. LLM = 'llm'
  13. KNOWLEDGE_RETRIEVAL = 'knowledge-retrieval'
  14. IF_ELSE = 'if-else'
  15. CODE = 'code'
  16. TEMPLATE_TRANSFORM = 'template-transform'
  17. QUESTION_CLASSIFIER = 'question-classifier'
  18. HTTP_REQUEST = 'http-request'
  19. TOOL = 'tool'
  20. VARIABLE_AGGREGATOR = 'variable-aggregator'
  21. VARIABLE_ASSIGNER = 'variable-assigner'
  22. LOOP = 'loop'
  23. ITERATION = 'iteration'
  24. PARAMETER_EXTRACTOR = 'parameter-extractor'
  25. @classmethod
  26. def value_of(cls, value: str) -> 'NodeType':
  27. """
  28. Get value of given node type.
  29. :param value: node type value
  30. :return: node type
  31. """
  32. for node_type in cls:
  33. if node_type.value == value:
  34. return node_type
  35. raise ValueError(f'invalid node type value {value}')
  36. class SystemVariable(Enum):
  37. """
  38. System Variables.
  39. """
  40. QUERY = 'query'
  41. FILES = 'files'
  42. CONVERSATION_ID = 'conversation_id'
  43. USER_ID = 'user_id'
  44. @classmethod
  45. def value_of(cls, value: str) -> 'SystemVariable':
  46. """
  47. Get value of given system variable.
  48. :param value: system variable value
  49. :return: system variable
  50. """
  51. for system_variable in cls:
  52. if system_variable.value == value:
  53. return system_variable
  54. raise ValueError(f'invalid system variable value {value}')
  55. class NodeRunMetadataKey(Enum):
  56. """
  57. Node Run Metadata Key.
  58. """
  59. TOTAL_TOKENS = 'total_tokens'
  60. TOTAL_PRICE = 'total_price'
  61. CURRENCY = 'currency'
  62. TOOL_INFO = 'tool_info'
  63. ITERATION_ID = 'iteration_id'
  64. ITERATION_INDEX = 'iteration_index'
  65. class NodeRunResult(BaseModel):
  66. """
  67. Node Run Result.
  68. """
  69. status: WorkflowNodeExecutionStatus = WorkflowNodeExecutionStatus.RUNNING
  70. inputs: Optional[dict] = None # node inputs
  71. process_data: Optional[dict] = None # process data
  72. outputs: Optional[dict] = None # node outputs
  73. metadata: Optional[dict[NodeRunMetadataKey, Any]] = None # node metadata
  74. edge_source_handle: Optional[str] = None # source handle id of node with multiple branches
  75. error: Optional[str] = None # error message if status is failed