queue_entities.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. from enum import Enum
  2. from typing import Any, Optional
  3. from pydantic import BaseModel, field_validator
  4. from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk
  5. from core.workflow.entities.base_node_data_entities import BaseNodeData
  6. from core.workflow.entities.node_entities import NodeType
  7. class QueueEvent(str, Enum):
  8. """
  9. QueueEvent enum
  10. """
  11. LLM_CHUNK = "llm_chunk"
  12. TEXT_CHUNK = "text_chunk"
  13. AGENT_MESSAGE = "agent_message"
  14. MESSAGE_REPLACE = "message_replace"
  15. MESSAGE_END = "message_end"
  16. ADVANCED_CHAT_MESSAGE_END = "advanced_chat_message_end"
  17. WORKFLOW_STARTED = "workflow_started"
  18. WORKFLOW_SUCCEEDED = "workflow_succeeded"
  19. WORKFLOW_FAILED = "workflow_failed"
  20. ITERATION_START = "iteration_start"
  21. ITERATION_NEXT = "iteration_next"
  22. ITERATION_COMPLETED = "iteration_completed"
  23. NODE_STARTED = "node_started"
  24. NODE_SUCCEEDED = "node_succeeded"
  25. NODE_FAILED = "node_failed"
  26. RETRIEVER_RESOURCES = "retriever_resources"
  27. ANNOTATION_REPLY = "annotation_reply"
  28. AGENT_THOUGHT = "agent_thought"
  29. MESSAGE_FILE = "message_file"
  30. ERROR = "error"
  31. PING = "ping"
  32. STOP = "stop"
  33. class AppQueueEvent(BaseModel):
  34. """
  35. QueueEvent entity
  36. """
  37. event: QueueEvent
  38. class QueueLLMChunkEvent(AppQueueEvent):
  39. """
  40. QueueLLMChunkEvent entity
  41. """
  42. event: QueueEvent = QueueEvent.LLM_CHUNK
  43. chunk: LLMResultChunk
  44. class QueueIterationStartEvent(AppQueueEvent):
  45. """
  46. QueueIterationStartEvent entity
  47. """
  48. event: QueueEvent = QueueEvent.ITERATION_START
  49. node_id: str
  50. node_type: NodeType
  51. node_data: BaseNodeData
  52. node_run_index: int
  53. inputs: dict = None
  54. predecessor_node_id: Optional[str] = None
  55. metadata: Optional[dict] = None
  56. class QueueIterationNextEvent(AppQueueEvent):
  57. """
  58. QueueIterationNextEvent entity
  59. """
  60. event: QueueEvent = QueueEvent.ITERATION_NEXT
  61. index: int
  62. node_id: str
  63. node_type: NodeType
  64. node_run_index: int
  65. output: Optional[Any] = None # output for the current iteration
  66. @field_validator('output', mode='before')
  67. @classmethod
  68. def set_output(cls, v):
  69. """
  70. Set output
  71. """
  72. if v is None:
  73. return None
  74. if isinstance(v, int | float | str | bool | dict | list):
  75. return v
  76. raise ValueError('output must be a valid type')
  77. class QueueIterationCompletedEvent(AppQueueEvent):
  78. """
  79. QueueIterationCompletedEvent entity
  80. """
  81. event:QueueEvent = QueueEvent.ITERATION_COMPLETED
  82. node_id: str
  83. node_type: NodeType
  84. node_run_index: int
  85. outputs: dict
  86. class QueueTextChunkEvent(AppQueueEvent):
  87. """
  88. QueueTextChunkEvent entity
  89. """
  90. event: QueueEvent = QueueEvent.TEXT_CHUNK
  91. text: str
  92. metadata: Optional[dict] = None
  93. class QueueAgentMessageEvent(AppQueueEvent):
  94. """
  95. QueueMessageEvent entity
  96. """
  97. event: QueueEvent = QueueEvent.AGENT_MESSAGE
  98. chunk: LLMResultChunk
  99. class QueueMessageReplaceEvent(AppQueueEvent):
  100. """
  101. QueueMessageReplaceEvent entity
  102. """
  103. event: QueueEvent = QueueEvent.MESSAGE_REPLACE
  104. text: str
  105. class QueueRetrieverResourcesEvent(AppQueueEvent):
  106. """
  107. QueueRetrieverResourcesEvent entity
  108. """
  109. event: QueueEvent = QueueEvent.RETRIEVER_RESOURCES
  110. retriever_resources: list[dict]
  111. class QueueAnnotationReplyEvent(AppQueueEvent):
  112. """
  113. QueueAnnotationReplyEvent entity
  114. """
  115. event: QueueEvent = QueueEvent.ANNOTATION_REPLY
  116. message_annotation_id: str
  117. class QueueMessageEndEvent(AppQueueEvent):
  118. """
  119. QueueMessageEndEvent entity
  120. """
  121. event: QueueEvent = QueueEvent.MESSAGE_END
  122. llm_result: Optional[LLMResult] = None
  123. class QueueAdvancedChatMessageEndEvent(AppQueueEvent):
  124. """
  125. QueueAdvancedChatMessageEndEvent entity
  126. """
  127. event: QueueEvent = QueueEvent.ADVANCED_CHAT_MESSAGE_END
  128. class QueueWorkflowStartedEvent(AppQueueEvent):
  129. """
  130. QueueWorkflowStartedEvent entity
  131. """
  132. event: QueueEvent = QueueEvent.WORKFLOW_STARTED
  133. class QueueWorkflowSucceededEvent(AppQueueEvent):
  134. """
  135. QueueWorkflowSucceededEvent entity
  136. """
  137. event: QueueEvent = QueueEvent.WORKFLOW_SUCCEEDED
  138. class QueueWorkflowFailedEvent(AppQueueEvent):
  139. """
  140. QueueWorkflowFailedEvent entity
  141. """
  142. event: QueueEvent = QueueEvent.WORKFLOW_FAILED
  143. error: str
  144. class QueueNodeStartedEvent(AppQueueEvent):
  145. """
  146. QueueNodeStartedEvent entity
  147. """
  148. event: QueueEvent = QueueEvent.NODE_STARTED
  149. node_id: str
  150. node_type: NodeType
  151. node_data: BaseNodeData
  152. node_run_index: int = 1
  153. predecessor_node_id: Optional[str] = None
  154. class QueueNodeSucceededEvent(AppQueueEvent):
  155. """
  156. QueueNodeSucceededEvent entity
  157. """
  158. event: QueueEvent = QueueEvent.NODE_SUCCEEDED
  159. node_id: str
  160. node_type: NodeType
  161. node_data: BaseNodeData
  162. inputs: Optional[dict] = None
  163. process_data: Optional[dict] = None
  164. outputs: Optional[dict] = None
  165. execution_metadata: Optional[dict] = None
  166. error: Optional[str] = None
  167. class QueueNodeFailedEvent(AppQueueEvent):
  168. """
  169. QueueNodeFailedEvent entity
  170. """
  171. event: QueueEvent = QueueEvent.NODE_FAILED
  172. node_id: str
  173. node_type: NodeType
  174. node_data: BaseNodeData
  175. inputs: Optional[dict] = None
  176. outputs: Optional[dict] = None
  177. process_data: Optional[dict] = None
  178. error: str
  179. class QueueAgentThoughtEvent(AppQueueEvent):
  180. """
  181. QueueAgentThoughtEvent entity
  182. """
  183. event: QueueEvent = QueueEvent.AGENT_THOUGHT
  184. agent_thought_id: str
  185. class QueueMessageFileEvent(AppQueueEvent):
  186. """
  187. QueueAgentThoughtEvent entity
  188. """
  189. event: QueueEvent = QueueEvent.MESSAGE_FILE
  190. message_file_id: str
  191. class QueueErrorEvent(AppQueueEvent):
  192. """
  193. QueueErrorEvent entity
  194. """
  195. event: QueueEvent = QueueEvent.ERROR
  196. error: Any = None
  197. class QueuePingEvent(AppQueueEvent):
  198. """
  199. QueuePingEvent entity
  200. """
  201. event: QueueEvent = QueueEvent.PING
  202. class QueueStopEvent(AppQueueEvent):
  203. """
  204. QueueStopEvent entity
  205. """
  206. class StopBy(Enum):
  207. """
  208. Stop by enum
  209. """
  210. USER_MANUAL = "user-manual"
  211. ANNOTATION_REPLY = "annotation-reply"
  212. OUTPUT_MODERATION = "output-moderation"
  213. INPUT_MODERATION = "input-moderation"
  214. event: QueueEvent = QueueEvent.STOP
  215. stopped_by: StopBy
  216. class QueueMessage(BaseModel):
  217. """
  218. QueueMessage entity
  219. """
  220. task_id: str
  221. app_mode: str
  222. event: AppQueueEvent
  223. class MessageQueueMessage(QueueMessage):
  224. """
  225. MessageQueueMessage entity
  226. """
  227. message_id: str
  228. conversation_id: str
  229. class WorkflowQueueMessage(QueueMessage):
  230. """
  231. WorkflowQueueMessage entity
  232. """
  233. pass