You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

queue_entities.py 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736
  1. from collections.abc import Mapping
  2. from datetime import datetime
  3. from enum import Enum, StrEnum
  4. from typing import Any, Optional
  5. from pydantic import BaseModel
  6. from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk
  7. from core.workflow.entities.node_entities import AgentNodeStrategyInit, NodeRunMetadataKey
  8. from core.workflow.graph_engine.entities.graph_runtime_state import GraphRuntimeState
  9. from core.workflow.nodes import NodeType
  10. from core.workflow.nodes.base import BaseNodeData
  11. class QueueEvent(StrEnum):
  12. """
  13. QueueEvent enum
  14. """
  15. LLM_CHUNK = "llm_chunk"
  16. TEXT_CHUNK = "text_chunk"
  17. AGENT_MESSAGE = "agent_message"
  18. MESSAGE_REPLACE = "message_replace"
  19. MESSAGE_END = "message_end"
  20. ADVANCED_CHAT_MESSAGE_END = "advanced_chat_message_end"
  21. WORKFLOW_STARTED = "workflow_started"
  22. WORKFLOW_SUCCEEDED = "workflow_succeeded"
  23. WORKFLOW_FAILED = "workflow_failed"
  24. WORKFLOW_PARTIAL_SUCCEEDED = "workflow_partial_succeeded"
  25. ITERATION_START = "iteration_start"
  26. ITERATION_NEXT = "iteration_next"
  27. ITERATION_COMPLETED = "iteration_completed"
  28. LOOP_START = "loop_start"
  29. LOOP_NEXT = "loop_next"
  30. LOOP_COMPLETED = "loop_completed"
  31. NODE_STARTED = "node_started"
  32. NODE_SUCCEEDED = "node_succeeded"
  33. NODE_FAILED = "node_failed"
  34. NODE_EXCEPTION = "node_exception"
  35. RETRIEVER_RESOURCES = "retriever_resources"
  36. ANNOTATION_REPLY = "annotation_reply"
  37. AGENT_THOUGHT = "agent_thought"
  38. MESSAGE_FILE = "message_file"
  39. PARALLEL_BRANCH_RUN_STARTED = "parallel_branch_run_started"
  40. PARALLEL_BRANCH_RUN_SUCCEEDED = "parallel_branch_run_succeeded"
  41. PARALLEL_BRANCH_RUN_FAILED = "parallel_branch_run_failed"
  42. AGENT_LOG = "agent_log"
  43. ERROR = "error"
  44. PING = "ping"
  45. STOP = "stop"
  46. RETRY = "retry"
  47. class AppQueueEvent(BaseModel):
  48. """
  49. QueueEvent abstract entity
  50. """
  51. event: QueueEvent
  52. class QueueLLMChunkEvent(AppQueueEvent):
  53. """
  54. QueueLLMChunkEvent entity
  55. Only for basic mode apps
  56. """
  57. event: QueueEvent = QueueEvent.LLM_CHUNK
  58. chunk: LLMResultChunk
  59. class QueueIterationStartEvent(AppQueueEvent):
  60. """
  61. QueueIterationStartEvent entity
  62. """
  63. event: QueueEvent = QueueEvent.ITERATION_START
  64. node_execution_id: str
  65. node_id: str
  66. node_type: NodeType
  67. node_data: BaseNodeData
  68. parallel_id: Optional[str] = None
  69. """parallel id if node is in parallel"""
  70. parallel_start_node_id: Optional[str] = None
  71. """parallel start node id if node is in parallel"""
  72. parent_parallel_id: Optional[str] = None
  73. """parent parallel id if node is in parallel"""
  74. parent_parallel_start_node_id: Optional[str] = None
  75. """parent parallel start node id if node is in parallel"""
  76. start_at: datetime
  77. node_run_index: int
  78. inputs: Optional[Mapping[str, Any]] = None
  79. predecessor_node_id: Optional[str] = None
  80. metadata: Optional[Mapping[str, Any]] = None
  81. class QueueIterationNextEvent(AppQueueEvent):
  82. """
  83. QueueIterationNextEvent entity
  84. """
  85. event: QueueEvent = QueueEvent.ITERATION_NEXT
  86. index: int
  87. node_execution_id: str
  88. node_id: str
  89. node_type: NodeType
  90. node_data: BaseNodeData
  91. parallel_id: Optional[str] = None
  92. """parallel id if node is in parallel"""
  93. parallel_start_node_id: Optional[str] = None
  94. """parallel start node id if node is in parallel"""
  95. parent_parallel_id: Optional[str] = None
  96. """parent parallel id if node is in parallel"""
  97. parent_parallel_start_node_id: Optional[str] = None
  98. """parent parallel start node id if node is in parallel"""
  99. parallel_mode_run_id: Optional[str] = None
  100. """iteratoin run in parallel mode run id"""
  101. node_run_index: int
  102. output: Optional[Any] = None # output for the current iteration
  103. duration: Optional[float] = None
  104. class QueueIterationCompletedEvent(AppQueueEvent):
  105. """
  106. QueueIterationCompletedEvent entity
  107. """
  108. event: QueueEvent = QueueEvent.ITERATION_COMPLETED
  109. node_execution_id: str
  110. node_id: str
  111. node_type: NodeType
  112. node_data: BaseNodeData
  113. parallel_id: Optional[str] = None
  114. """parallel id if node is in parallel"""
  115. parallel_start_node_id: Optional[str] = None
  116. """parallel start node id if node is in parallel"""
  117. parent_parallel_id: Optional[str] = None
  118. """parent parallel id if node is in parallel"""
  119. parent_parallel_start_node_id: Optional[str] = None
  120. """parent parallel start node id if node is in parallel"""
  121. start_at: datetime
  122. node_run_index: int
  123. inputs: Optional[Mapping[str, Any]] = None
  124. outputs: Optional[Mapping[str, Any]] = None
  125. metadata: Optional[Mapping[str, Any]] = None
  126. steps: int = 0
  127. error: Optional[str] = None
  128. class QueueLoopStartEvent(AppQueueEvent):
  129. """
  130. QueueLoopStartEvent entity
  131. """
  132. event: QueueEvent = QueueEvent.LOOP_START
  133. node_execution_id: str
  134. node_id: str
  135. node_type: NodeType
  136. node_data: BaseNodeData
  137. parallel_id: Optional[str] = None
  138. """parallel id if node is in parallel"""
  139. parallel_start_node_id: Optional[str] = None
  140. """parallel start node id if node is in parallel"""
  141. parent_parallel_id: Optional[str] = None
  142. """parent parallel id if node is in parallel"""
  143. parent_parallel_start_node_id: Optional[str] = None
  144. """parent parallel start node id if node is in parallel"""
  145. start_at: datetime
  146. node_run_index: int
  147. inputs: Optional[Mapping[str, Any]] = None
  148. predecessor_node_id: Optional[str] = None
  149. metadata: Optional[Mapping[str, Any]] = None
  150. class QueueLoopNextEvent(AppQueueEvent):
  151. """
  152. QueueLoopNextEvent entity
  153. """
  154. event: QueueEvent = QueueEvent.LOOP_NEXT
  155. index: int
  156. node_execution_id: str
  157. node_id: str
  158. node_type: NodeType
  159. node_data: BaseNodeData
  160. parallel_id: Optional[str] = None
  161. """parallel id if node is in parallel"""
  162. parallel_start_node_id: Optional[str] = None
  163. """parallel start node id if node is in parallel"""
  164. parent_parallel_id: Optional[str] = None
  165. """parent parallel id if node is in parallel"""
  166. parent_parallel_start_node_id: Optional[str] = None
  167. """parent parallel start node id if node is in parallel"""
  168. parallel_mode_run_id: Optional[str] = None
  169. """iteratoin run in parallel mode run id"""
  170. node_run_index: int
  171. output: Optional[Any] = None # output for the current loop
  172. duration: Optional[float] = None
  173. class QueueLoopCompletedEvent(AppQueueEvent):
  174. """
  175. QueueLoopCompletedEvent entity
  176. """
  177. event: QueueEvent = QueueEvent.LOOP_COMPLETED
  178. node_execution_id: str
  179. node_id: str
  180. node_type: NodeType
  181. node_data: BaseNodeData
  182. parallel_id: Optional[str] = None
  183. """parallel id if node is in parallel"""
  184. parallel_start_node_id: Optional[str] = None
  185. """parallel start node id if node is in parallel"""
  186. parent_parallel_id: Optional[str] = None
  187. """parent parallel id if node is in parallel"""
  188. parent_parallel_start_node_id: Optional[str] = None
  189. """parent parallel start node id if node is in parallel"""
  190. start_at: datetime
  191. node_run_index: int
  192. inputs: Optional[Mapping[str, Any]] = None
  193. outputs: Optional[Mapping[str, Any]] = None
  194. metadata: Optional[Mapping[str, Any]] = None
  195. steps: int = 0
  196. error: Optional[str] = None
  197. class QueueTextChunkEvent(AppQueueEvent):
  198. """
  199. QueueTextChunkEvent entity
  200. """
  201. event: QueueEvent = QueueEvent.TEXT_CHUNK
  202. text: str
  203. from_variable_selector: Optional[list[str]] = None
  204. """from variable selector"""
  205. in_iteration_id: Optional[str] = None
  206. """iteration id if node is in iteration"""
  207. in_loop_id: Optional[str] = None
  208. """loop id if node is in loop"""
  209. class QueueAgentMessageEvent(AppQueueEvent):
  210. """
  211. QueueMessageEvent entity
  212. """
  213. event: QueueEvent = QueueEvent.AGENT_MESSAGE
  214. chunk: LLMResultChunk
  215. class QueueMessageReplaceEvent(AppQueueEvent):
  216. """
  217. QueueMessageReplaceEvent entity
  218. """
  219. class MessageReplaceReason(StrEnum):
  220. """
  221. Reason for message replace event
  222. """
  223. OUTPUT_MODERATION = "output_moderation"
  224. event: QueueEvent = QueueEvent.MESSAGE_REPLACE
  225. text: str
  226. reason: str
  227. class QueueRetrieverResourcesEvent(AppQueueEvent):
  228. """
  229. QueueRetrieverResourcesEvent entity
  230. """
  231. event: QueueEvent = QueueEvent.RETRIEVER_RESOURCES
  232. retriever_resources: list[dict]
  233. in_iteration_id: Optional[str] = None
  234. """iteration id if node is in iteration"""
  235. in_loop_id: Optional[str] = None
  236. """loop id if node is in loop"""
  237. class QueueAnnotationReplyEvent(AppQueueEvent):
  238. """
  239. QueueAnnotationReplyEvent entity
  240. """
  241. event: QueueEvent = QueueEvent.ANNOTATION_REPLY
  242. message_annotation_id: str
  243. class QueueMessageEndEvent(AppQueueEvent):
  244. """
  245. QueueMessageEndEvent entity
  246. """
  247. event: QueueEvent = QueueEvent.MESSAGE_END
  248. llm_result: Optional[LLMResult] = None
  249. class QueueAdvancedChatMessageEndEvent(AppQueueEvent):
  250. """
  251. QueueAdvancedChatMessageEndEvent entity
  252. """
  253. event: QueueEvent = QueueEvent.ADVANCED_CHAT_MESSAGE_END
  254. class QueueWorkflowStartedEvent(AppQueueEvent):
  255. """
  256. QueueWorkflowStartedEvent entity
  257. """
  258. event: QueueEvent = QueueEvent.WORKFLOW_STARTED
  259. graph_runtime_state: GraphRuntimeState
  260. class QueueWorkflowSucceededEvent(AppQueueEvent):
  261. """
  262. QueueWorkflowSucceededEvent entity
  263. """
  264. event: QueueEvent = QueueEvent.WORKFLOW_SUCCEEDED
  265. outputs: Optional[dict[str, Any]] = None
  266. class QueueWorkflowFailedEvent(AppQueueEvent):
  267. """
  268. QueueWorkflowFailedEvent entity
  269. """
  270. event: QueueEvent = QueueEvent.WORKFLOW_FAILED
  271. error: str
  272. exceptions_count: int
  273. class QueueWorkflowPartialSuccessEvent(AppQueueEvent):
  274. """
  275. QueueWorkflowFailedEvent entity
  276. """
  277. event: QueueEvent = QueueEvent.WORKFLOW_PARTIAL_SUCCEEDED
  278. exceptions_count: int
  279. outputs: Optional[dict[str, Any]] = None
  280. class QueueNodeStartedEvent(AppQueueEvent):
  281. """
  282. QueueNodeStartedEvent entity
  283. """
  284. event: QueueEvent = QueueEvent.NODE_STARTED
  285. node_execution_id: str
  286. node_id: str
  287. node_type: NodeType
  288. node_data: BaseNodeData
  289. node_run_index: int = 1
  290. predecessor_node_id: Optional[str] = None
  291. parallel_id: Optional[str] = None
  292. """parallel id if node is in parallel"""
  293. parallel_start_node_id: Optional[str] = None
  294. """parallel start node id if node is in parallel"""
  295. parent_parallel_id: Optional[str] = None
  296. """parent parallel id if node is in parallel"""
  297. parent_parallel_start_node_id: Optional[str] = None
  298. """parent parallel start node id if node is in parallel"""
  299. in_iteration_id: Optional[str] = None
  300. """iteration id if node is in iteration"""
  301. in_loop_id: Optional[str] = None
  302. """loop id if node is in loop"""
  303. start_at: datetime
  304. parallel_mode_run_id: Optional[str] = None
  305. """iteratoin run in parallel mode run id"""
  306. agent_strategy: Optional[AgentNodeStrategyInit] = None
  307. class QueueNodeSucceededEvent(AppQueueEvent):
  308. """
  309. QueueNodeSucceededEvent entity
  310. """
  311. event: QueueEvent = QueueEvent.NODE_SUCCEEDED
  312. node_execution_id: str
  313. node_id: str
  314. node_type: NodeType
  315. node_data: BaseNodeData
  316. parallel_id: Optional[str] = None
  317. """parallel id if node is in parallel"""
  318. parallel_start_node_id: Optional[str] = None
  319. """parallel start node id if node is in parallel"""
  320. parent_parallel_id: Optional[str] = None
  321. """parent parallel id if node is in parallel"""
  322. parent_parallel_start_node_id: Optional[str] = None
  323. """parent parallel start node id if node is in parallel"""
  324. in_iteration_id: Optional[str] = None
  325. """iteration id if node is in iteration"""
  326. in_loop_id: Optional[str] = None
  327. """loop id if node is in loop"""
  328. start_at: datetime
  329. inputs: Optional[Mapping[str, Any]] = None
  330. process_data: Optional[Mapping[str, Any]] = None
  331. outputs: Optional[Mapping[str, Any]] = None
  332. execution_metadata: Optional[Mapping[NodeRunMetadataKey, Any]] = None
  333. error: Optional[str] = None
  334. """single iteration duration map"""
  335. iteration_duration_map: Optional[dict[str, float]] = None
  336. """single loop duration map"""
  337. loop_duration_map: Optional[dict[str, float]] = None
  338. class QueueAgentLogEvent(AppQueueEvent):
  339. """
  340. QueueAgentLogEvent entity
  341. """
  342. event: QueueEvent = QueueEvent.AGENT_LOG
  343. id: str
  344. label: str
  345. node_execution_id: str
  346. parent_id: str | None
  347. error: str | None
  348. status: str
  349. data: Mapping[str, Any]
  350. metadata: Optional[Mapping[str, Any]] = None
  351. node_id: str
  352. class QueueNodeRetryEvent(QueueNodeStartedEvent):
  353. """QueueNodeRetryEvent entity"""
  354. event: QueueEvent = QueueEvent.RETRY
  355. inputs: Optional[Mapping[str, Any]] = None
  356. process_data: Optional[Mapping[str, Any]] = None
  357. outputs: Optional[Mapping[str, Any]] = None
  358. execution_metadata: Optional[Mapping[NodeRunMetadataKey, Any]] = None
  359. error: str
  360. retry_index: int # retry index
  361. class QueueNodeInIterationFailedEvent(AppQueueEvent):
  362. """
  363. QueueNodeInIterationFailedEvent entity
  364. """
  365. event: QueueEvent = QueueEvent.NODE_FAILED
  366. node_execution_id: str
  367. node_id: str
  368. node_type: NodeType
  369. node_data: BaseNodeData
  370. parallel_id: Optional[str] = None
  371. """parallel id if node is in parallel"""
  372. parallel_start_node_id: Optional[str] = None
  373. """parallel start node id if node is in parallel"""
  374. parent_parallel_id: Optional[str] = None
  375. """parent parallel id if node is in parallel"""
  376. parent_parallel_start_node_id: Optional[str] = None
  377. """parent parallel start node id if node is in parallel"""
  378. in_iteration_id: Optional[str] = None
  379. """iteration id if node is in iteration"""
  380. in_loop_id: Optional[str] = None
  381. """loop id if node is in loop"""
  382. start_at: datetime
  383. inputs: Optional[Mapping[str, Any]] = None
  384. process_data: Optional[Mapping[str, Any]] = None
  385. outputs: Optional[Mapping[str, Any]] = None
  386. execution_metadata: Optional[Mapping[NodeRunMetadataKey, Any]] = None
  387. error: str
  388. class QueueNodeInLoopFailedEvent(AppQueueEvent):
  389. """
  390. QueueNodeInLoopFailedEvent entity
  391. """
  392. event: QueueEvent = QueueEvent.NODE_FAILED
  393. node_execution_id: str
  394. node_id: str
  395. node_type: NodeType
  396. node_data: BaseNodeData
  397. parallel_id: Optional[str] = None
  398. """parallel id if node is in parallel"""
  399. parallel_start_node_id: Optional[str] = None
  400. """parallel start node id if node is in parallel"""
  401. parent_parallel_id: Optional[str] = None
  402. """parent parallel id if node is in parallel"""
  403. parent_parallel_start_node_id: Optional[str] = None
  404. """parent parallel start node id if node is in parallel"""
  405. in_iteration_id: Optional[str] = None
  406. """iteration id if node is in iteration"""
  407. in_loop_id: Optional[str] = None
  408. """loop id if node is in loop"""
  409. start_at: datetime
  410. inputs: Optional[Mapping[str, Any]] = None
  411. process_data: Optional[Mapping[str, Any]] = None
  412. outputs: Optional[Mapping[str, Any]] = None
  413. execution_metadata: Optional[Mapping[NodeRunMetadataKey, Any]] = None
  414. error: str
  415. class QueueNodeExceptionEvent(AppQueueEvent):
  416. """
  417. QueueNodeExceptionEvent entity
  418. """
  419. event: QueueEvent = QueueEvent.NODE_EXCEPTION
  420. node_execution_id: str
  421. node_id: str
  422. node_type: NodeType
  423. node_data: BaseNodeData
  424. parallel_id: Optional[str] = None
  425. """parallel id if node is in parallel"""
  426. parallel_start_node_id: Optional[str] = None
  427. """parallel start node id if node is in parallel"""
  428. parent_parallel_id: Optional[str] = None
  429. """parent parallel id if node is in parallel"""
  430. parent_parallel_start_node_id: Optional[str] = None
  431. """parent parallel start node id if node is in parallel"""
  432. in_iteration_id: Optional[str] = None
  433. """iteration id if node is in iteration"""
  434. in_loop_id: Optional[str] = None
  435. """loop id if node is in loop"""
  436. start_at: datetime
  437. inputs: Optional[Mapping[str, Any]] = None
  438. process_data: Optional[Mapping[str, Any]] = None
  439. outputs: Optional[Mapping[str, Any]] = None
  440. execution_metadata: Optional[Mapping[NodeRunMetadataKey, Any]] = None
  441. error: str
  442. class QueueNodeFailedEvent(AppQueueEvent):
  443. """
  444. QueueNodeFailedEvent entity
  445. """
  446. event: QueueEvent = QueueEvent.NODE_FAILED
  447. node_execution_id: str
  448. node_id: str
  449. node_type: NodeType
  450. node_data: BaseNodeData
  451. parallel_id: Optional[str] = None
  452. """parallel id if node is in parallel"""
  453. parallel_start_node_id: Optional[str] = None
  454. """parallel start node id if node is in parallel"""
  455. parent_parallel_id: Optional[str] = None
  456. """parent parallel id if node is in parallel"""
  457. parent_parallel_start_node_id: Optional[str] = None
  458. """parent parallel start node id if node is in parallel"""
  459. in_iteration_id: Optional[str] = None
  460. """iteration id if node is in iteration"""
  461. in_loop_id: Optional[str] = None
  462. """loop id if node is in loop"""
  463. start_at: datetime
  464. inputs: Optional[Mapping[str, Any]] = None
  465. process_data: Optional[Mapping[str, Any]] = None
  466. outputs: Optional[Mapping[str, Any]] = None
  467. execution_metadata: Optional[Mapping[NodeRunMetadataKey, Any]] = None
  468. error: str
  469. class QueueAgentThoughtEvent(AppQueueEvent):
  470. """
  471. QueueAgentThoughtEvent entity
  472. """
  473. event: QueueEvent = QueueEvent.AGENT_THOUGHT
  474. agent_thought_id: str
  475. class QueueMessageFileEvent(AppQueueEvent):
  476. """
  477. QueueAgentThoughtEvent entity
  478. """
  479. event: QueueEvent = QueueEvent.MESSAGE_FILE
  480. message_file_id: str
  481. class QueueErrorEvent(AppQueueEvent):
  482. """
  483. QueueErrorEvent entity
  484. """
  485. event: QueueEvent = QueueEvent.ERROR
  486. error: Any = None
  487. class QueuePingEvent(AppQueueEvent):
  488. """
  489. QueuePingEvent entity
  490. """
  491. event: QueueEvent = QueueEvent.PING
  492. class QueueStopEvent(AppQueueEvent):
  493. """
  494. QueueStopEvent entity
  495. """
  496. class StopBy(Enum):
  497. """
  498. Stop by enum
  499. """
  500. USER_MANUAL = "user-manual"
  501. ANNOTATION_REPLY = "annotation-reply"
  502. OUTPUT_MODERATION = "output-moderation"
  503. INPUT_MODERATION = "input-moderation"
  504. event: QueueEvent = QueueEvent.STOP
  505. stopped_by: StopBy
  506. def get_stop_reason(self) -> str:
  507. """
  508. To stop reason
  509. """
  510. reason_mapping = {
  511. QueueStopEvent.StopBy.USER_MANUAL: "Stopped by user.",
  512. QueueStopEvent.StopBy.ANNOTATION_REPLY: "Stopped by annotation reply.",
  513. QueueStopEvent.StopBy.OUTPUT_MODERATION: "Stopped by output moderation.",
  514. QueueStopEvent.StopBy.INPUT_MODERATION: "Stopped by input moderation.",
  515. }
  516. return reason_mapping.get(self.stopped_by, "Stopped by unknown reason.")
  517. class QueueMessage(BaseModel):
  518. """
  519. QueueMessage abstract entity
  520. """
  521. task_id: str
  522. app_mode: str
  523. event: AppQueueEvent
  524. class MessageQueueMessage(QueueMessage):
  525. """
  526. MessageQueueMessage entity
  527. """
  528. message_id: str
  529. conversation_id: str
  530. class WorkflowQueueMessage(QueueMessage):
  531. """
  532. WorkflowQueueMessage entity
  533. """
  534. pass
  535. class QueueParallelBranchRunStartedEvent(AppQueueEvent):
  536. """
  537. QueueParallelBranchRunStartedEvent entity
  538. """
  539. event: QueueEvent = QueueEvent.PARALLEL_BRANCH_RUN_STARTED
  540. parallel_id: str
  541. parallel_start_node_id: str
  542. parent_parallel_id: Optional[str] = None
  543. """parent parallel id if node is in parallel"""
  544. parent_parallel_start_node_id: Optional[str] = None
  545. """parent parallel start node id if node is in parallel"""
  546. in_iteration_id: Optional[str] = None
  547. """iteration id if node is in iteration"""
  548. in_loop_id: Optional[str] = None
  549. """loop id if node is in loop"""
  550. class QueueParallelBranchRunSucceededEvent(AppQueueEvent):
  551. """
  552. QueueParallelBranchRunSucceededEvent entity
  553. """
  554. event: QueueEvent = QueueEvent.PARALLEL_BRANCH_RUN_SUCCEEDED
  555. parallel_id: str
  556. parallel_start_node_id: str
  557. parent_parallel_id: Optional[str] = None
  558. """parent parallel id if node is in parallel"""
  559. parent_parallel_start_node_id: Optional[str] = None
  560. """parent parallel start node id if node is in parallel"""
  561. in_iteration_id: Optional[str] = None
  562. """iteration id if node is in iteration"""
  563. in_loop_id: Optional[str] = None
  564. """loop id if node is in loop"""
  565. class QueueParallelBranchRunFailedEvent(AppQueueEvent):
  566. """
  567. QueueParallelBranchRunFailedEvent entity
  568. """
  569. event: QueueEvent = QueueEvent.PARALLEL_BRANCH_RUN_FAILED
  570. parallel_id: str
  571. parallel_start_node_id: str
  572. parent_parallel_id: Optional[str] = None
  573. """parent parallel id if node is in parallel"""
  574. parent_parallel_start_node_id: Optional[str] = None
  575. """parent parallel start node id if node is in parallel"""
  576. in_iteration_id: Optional[str] = None
  577. """iteration id if node is in iteration"""
  578. in_loop_id: Optional[str] = None
  579. """loop id if node is in loop"""
  580. error: str