queue_entities.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. from enum import Enum
  2. from typing import Any, Optional
  3. from pydantic import BaseModel, 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(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.LLM_CHUNK
  43. chunk: LLMResultChunk
  44. class QueueIterationStartEvent(AppQueueEvent):
  45. """
  46. QueueIterationStartEvent entity
  47. """
  48. event = 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.ITERATION_NEXT
  61. index: int
  62. node_id: str
  63. node_type: NodeType
  64. node_run_index: int
  65. output: Optional[Any] # output for the current iteration
  66. @validator('output', pre=True, always=True)
  67. def set_output(cls, v):
  68. """
  69. Set output
  70. """
  71. if v is None:
  72. return None
  73. if isinstance(v, int | float | str | bool | dict | list):
  74. return v
  75. raise ValueError('output must be a valid type')
  76. class QueueIterationCompletedEvent(AppQueueEvent):
  77. """
  78. QueueIterationCompletedEvent entity
  79. """
  80. event = QueueEvent.ITERATION_COMPLETED
  81. node_id: str
  82. node_type: NodeType
  83. node_run_index: int
  84. outputs: dict
  85. class QueueTextChunkEvent(AppQueueEvent):
  86. """
  87. QueueTextChunkEvent entity
  88. """
  89. event = QueueEvent.TEXT_CHUNK
  90. text: str
  91. metadata: Optional[dict] = None
  92. class QueueAgentMessageEvent(AppQueueEvent):
  93. """
  94. QueueMessageEvent entity
  95. """
  96. event = QueueEvent.AGENT_MESSAGE
  97. chunk: LLMResultChunk
  98. class QueueMessageReplaceEvent(AppQueueEvent):
  99. """
  100. QueueMessageReplaceEvent entity
  101. """
  102. event = QueueEvent.MESSAGE_REPLACE
  103. text: str
  104. class QueueRetrieverResourcesEvent(AppQueueEvent):
  105. """
  106. QueueRetrieverResourcesEvent entity
  107. """
  108. event = QueueEvent.RETRIEVER_RESOURCES
  109. retriever_resources: list[dict]
  110. class QueueAnnotationReplyEvent(AppQueueEvent):
  111. """
  112. QueueAnnotationReplyEvent entity
  113. """
  114. event = QueueEvent.ANNOTATION_REPLY
  115. message_annotation_id: str
  116. class QueueMessageEndEvent(AppQueueEvent):
  117. """
  118. QueueMessageEndEvent entity
  119. """
  120. event = QueueEvent.MESSAGE_END
  121. llm_result: Optional[LLMResult] = None
  122. class QueueAdvancedChatMessageEndEvent(AppQueueEvent):
  123. """
  124. QueueAdvancedChatMessageEndEvent entity
  125. """
  126. event = QueueEvent.ADVANCED_CHAT_MESSAGE_END
  127. class QueueWorkflowStartedEvent(AppQueueEvent):
  128. """
  129. QueueWorkflowStartedEvent entity
  130. """
  131. event = QueueEvent.WORKFLOW_STARTED
  132. class QueueWorkflowSucceededEvent(AppQueueEvent):
  133. """
  134. QueueWorkflowSucceededEvent entity
  135. """
  136. event = QueueEvent.WORKFLOW_SUCCEEDED
  137. class QueueWorkflowFailedEvent(AppQueueEvent):
  138. """
  139. QueueWorkflowFailedEvent entity
  140. """
  141. event = QueueEvent.WORKFLOW_FAILED
  142. error: str
  143. class QueueNodeStartedEvent(AppQueueEvent):
  144. """
  145. QueueNodeStartedEvent entity
  146. """
  147. event = QueueEvent.NODE_STARTED
  148. node_id: str
  149. node_type: NodeType
  150. node_data: BaseNodeData
  151. node_run_index: int = 1
  152. predecessor_node_id: Optional[str] = None
  153. class QueueNodeSucceededEvent(AppQueueEvent):
  154. """
  155. QueueNodeSucceededEvent entity
  156. """
  157. event = QueueEvent.NODE_SUCCEEDED
  158. node_id: str
  159. node_type: NodeType
  160. node_data: BaseNodeData
  161. inputs: Optional[dict] = None
  162. process_data: Optional[dict] = None
  163. outputs: Optional[dict] = None
  164. execution_metadata: Optional[dict] = None
  165. error: Optional[str] = None
  166. class QueueNodeFailedEvent(AppQueueEvent):
  167. """
  168. QueueNodeFailedEvent entity
  169. """
  170. event = QueueEvent.NODE_FAILED
  171. node_id: str
  172. node_type: NodeType
  173. node_data: BaseNodeData
  174. inputs: Optional[dict] = None
  175. outputs: Optional[dict] = None
  176. process_data: Optional[dict] = None
  177. error: str
  178. class QueueAgentThoughtEvent(AppQueueEvent):
  179. """
  180. QueueAgentThoughtEvent entity
  181. """
  182. event = QueueEvent.AGENT_THOUGHT
  183. agent_thought_id: str
  184. class QueueMessageFileEvent(AppQueueEvent):
  185. """
  186. QueueAgentThoughtEvent entity
  187. """
  188. event = QueueEvent.MESSAGE_FILE
  189. message_file_id: str
  190. class QueueErrorEvent(AppQueueEvent):
  191. """
  192. QueueErrorEvent entity
  193. """
  194. event = QueueEvent.ERROR
  195. error: Any
  196. class QueuePingEvent(AppQueueEvent):
  197. """
  198. QueuePingEvent entity
  199. """
  200. event = QueueEvent.PING
  201. class QueueStopEvent(AppQueueEvent):
  202. """
  203. QueueStopEvent entity
  204. """
  205. class StopBy(Enum):
  206. """
  207. Stop by enum
  208. """
  209. USER_MANUAL = "user-manual"
  210. ANNOTATION_REPLY = "annotation-reply"
  211. OUTPUT_MODERATION = "output-moderation"
  212. INPUT_MODERATION = "input-moderation"
  213. event = QueueEvent.STOP
  214. stopped_by: StopBy
  215. class QueueMessage(BaseModel):
  216. """
  217. QueueMessage entity
  218. """
  219. task_id: str
  220. app_mode: str
  221. event: AppQueueEvent
  222. class MessageQueueMessage(QueueMessage):
  223. """
  224. MessageQueueMessage entity
  225. """
  226. message_id: str
  227. conversation_id: str
  228. class WorkflowQueueMessage(QueueMessage):
  229. """
  230. WorkflowQueueMessage entity
  231. """
  232. pass