queue_entities.py 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729
  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. event: QueueEvent = QueueEvent.MESSAGE_REPLACE
  220. text: str
  221. class QueueRetrieverResourcesEvent(AppQueueEvent):
  222. """
  223. QueueRetrieverResourcesEvent entity
  224. """
  225. event: QueueEvent = QueueEvent.RETRIEVER_RESOURCES
  226. retriever_resources: list[dict]
  227. in_iteration_id: Optional[str] = None
  228. """iteration id if node is in iteration"""
  229. in_loop_id: Optional[str] = None
  230. """loop id if node is in loop"""
  231. class QueueAnnotationReplyEvent(AppQueueEvent):
  232. """
  233. QueueAnnotationReplyEvent entity
  234. """
  235. event: QueueEvent = QueueEvent.ANNOTATION_REPLY
  236. message_annotation_id: str
  237. class QueueMessageEndEvent(AppQueueEvent):
  238. """
  239. QueueMessageEndEvent entity
  240. """
  241. event: QueueEvent = QueueEvent.MESSAGE_END
  242. llm_result: Optional[LLMResult] = None
  243. class QueueAdvancedChatMessageEndEvent(AppQueueEvent):
  244. """
  245. QueueAdvancedChatMessageEndEvent entity
  246. """
  247. event: QueueEvent = QueueEvent.ADVANCED_CHAT_MESSAGE_END
  248. class QueueWorkflowStartedEvent(AppQueueEvent):
  249. """
  250. QueueWorkflowStartedEvent entity
  251. """
  252. event: QueueEvent = QueueEvent.WORKFLOW_STARTED
  253. graph_runtime_state: GraphRuntimeState
  254. class QueueWorkflowSucceededEvent(AppQueueEvent):
  255. """
  256. QueueWorkflowSucceededEvent entity
  257. """
  258. event: QueueEvent = QueueEvent.WORKFLOW_SUCCEEDED
  259. outputs: Optional[dict[str, Any]] = None
  260. class QueueWorkflowFailedEvent(AppQueueEvent):
  261. """
  262. QueueWorkflowFailedEvent entity
  263. """
  264. event: QueueEvent = QueueEvent.WORKFLOW_FAILED
  265. error: str
  266. exceptions_count: int
  267. class QueueWorkflowPartialSuccessEvent(AppQueueEvent):
  268. """
  269. QueueWorkflowFailedEvent entity
  270. """
  271. event: QueueEvent = QueueEvent.WORKFLOW_PARTIAL_SUCCEEDED
  272. exceptions_count: int
  273. outputs: Optional[dict[str, Any]] = None
  274. class QueueNodeStartedEvent(AppQueueEvent):
  275. """
  276. QueueNodeStartedEvent entity
  277. """
  278. event: QueueEvent = QueueEvent.NODE_STARTED
  279. node_execution_id: str
  280. node_id: str
  281. node_type: NodeType
  282. node_data: BaseNodeData
  283. node_run_index: int = 1
  284. predecessor_node_id: Optional[str] = None
  285. parallel_id: Optional[str] = None
  286. """parallel id if node is in parallel"""
  287. parallel_start_node_id: Optional[str] = None
  288. """parallel start node id if node is in parallel"""
  289. parent_parallel_id: Optional[str] = None
  290. """parent parallel id if node is in parallel"""
  291. parent_parallel_start_node_id: Optional[str] = None
  292. """parent parallel start node id if node is in parallel"""
  293. in_iteration_id: Optional[str] = None
  294. """iteration id if node is in iteration"""
  295. in_loop_id: Optional[str] = None
  296. """loop id if node is in loop"""
  297. start_at: datetime
  298. parallel_mode_run_id: Optional[str] = None
  299. """iteratoin run in parallel mode run id"""
  300. agent_strategy: Optional[AgentNodeStrategyInit] = None
  301. class QueueNodeSucceededEvent(AppQueueEvent):
  302. """
  303. QueueNodeSucceededEvent entity
  304. """
  305. event: QueueEvent = QueueEvent.NODE_SUCCEEDED
  306. node_execution_id: str
  307. node_id: str
  308. node_type: NodeType
  309. node_data: BaseNodeData
  310. parallel_id: Optional[str] = None
  311. """parallel id if node is in parallel"""
  312. parallel_start_node_id: Optional[str] = None
  313. """parallel start node id if node is in parallel"""
  314. parent_parallel_id: Optional[str] = None
  315. """parent parallel id if node is in parallel"""
  316. parent_parallel_start_node_id: Optional[str] = None
  317. """parent parallel start node id if node is in parallel"""
  318. in_iteration_id: Optional[str] = None
  319. """iteration id if node is in iteration"""
  320. in_loop_id: Optional[str] = None
  321. """loop id if node is in loop"""
  322. start_at: datetime
  323. inputs: Optional[Mapping[str, Any]] = None
  324. process_data: Optional[Mapping[str, Any]] = None
  325. outputs: Optional[Mapping[str, Any]] = None
  326. execution_metadata: Optional[Mapping[NodeRunMetadataKey, Any]] = None
  327. error: Optional[str] = None
  328. """single iteration duration map"""
  329. iteration_duration_map: Optional[dict[str, float]] = None
  330. """single loop duration map"""
  331. loop_duration_map: Optional[dict[str, float]] = None
  332. class QueueAgentLogEvent(AppQueueEvent):
  333. """
  334. QueueAgentLogEvent entity
  335. """
  336. event: QueueEvent = QueueEvent.AGENT_LOG
  337. id: str
  338. label: str
  339. node_execution_id: str
  340. parent_id: str | None
  341. error: str | None
  342. status: str
  343. data: Mapping[str, Any]
  344. metadata: Optional[Mapping[str, Any]] = None
  345. node_id: str
  346. class QueueNodeRetryEvent(QueueNodeStartedEvent):
  347. """QueueNodeRetryEvent entity"""
  348. event: QueueEvent = QueueEvent.RETRY
  349. inputs: Optional[Mapping[str, Any]] = None
  350. process_data: Optional[Mapping[str, Any]] = None
  351. outputs: Optional[Mapping[str, Any]] = None
  352. execution_metadata: Optional[Mapping[NodeRunMetadataKey, Any]] = None
  353. error: str
  354. retry_index: int # retry index
  355. class QueueNodeInIterationFailedEvent(AppQueueEvent):
  356. """
  357. QueueNodeInIterationFailedEvent entity
  358. """
  359. event: QueueEvent = QueueEvent.NODE_FAILED
  360. node_execution_id: str
  361. node_id: str
  362. node_type: NodeType
  363. node_data: BaseNodeData
  364. parallel_id: Optional[str] = None
  365. """parallel id if node is in parallel"""
  366. parallel_start_node_id: Optional[str] = None
  367. """parallel start node id if node is in parallel"""
  368. parent_parallel_id: Optional[str] = None
  369. """parent parallel id if node is in parallel"""
  370. parent_parallel_start_node_id: Optional[str] = None
  371. """parent parallel start node id if node is in parallel"""
  372. in_iteration_id: Optional[str] = None
  373. """iteration id if node is in iteration"""
  374. in_loop_id: Optional[str] = None
  375. """loop id if node is in loop"""
  376. start_at: datetime
  377. inputs: Optional[Mapping[str, Any]] = None
  378. process_data: Optional[Mapping[str, Any]] = None
  379. outputs: Optional[Mapping[str, Any]] = None
  380. execution_metadata: Optional[Mapping[NodeRunMetadataKey, Any]] = None
  381. error: str
  382. class QueueNodeInLoopFailedEvent(AppQueueEvent):
  383. """
  384. QueueNodeInLoopFailedEvent entity
  385. """
  386. event: QueueEvent = QueueEvent.NODE_FAILED
  387. node_execution_id: str
  388. node_id: str
  389. node_type: NodeType
  390. node_data: BaseNodeData
  391. parallel_id: Optional[str] = None
  392. """parallel id if node is in parallel"""
  393. parallel_start_node_id: Optional[str] = None
  394. """parallel start node id if node is in parallel"""
  395. parent_parallel_id: Optional[str] = None
  396. """parent parallel id if node is in parallel"""
  397. parent_parallel_start_node_id: Optional[str] = None
  398. """parent parallel start node id if node is in parallel"""
  399. in_iteration_id: Optional[str] = None
  400. """iteration id if node is in iteration"""
  401. in_loop_id: Optional[str] = None
  402. """loop id if node is in loop"""
  403. start_at: datetime
  404. inputs: Optional[Mapping[str, Any]] = None
  405. process_data: Optional[Mapping[str, Any]] = None
  406. outputs: Optional[Mapping[str, Any]] = None
  407. execution_metadata: Optional[Mapping[NodeRunMetadataKey, Any]] = None
  408. error: str
  409. class QueueNodeExceptionEvent(AppQueueEvent):
  410. """
  411. QueueNodeExceptionEvent entity
  412. """
  413. event: QueueEvent = QueueEvent.NODE_EXCEPTION
  414. node_execution_id: str
  415. node_id: str
  416. node_type: NodeType
  417. node_data: BaseNodeData
  418. parallel_id: Optional[str] = None
  419. """parallel id if node is in parallel"""
  420. parallel_start_node_id: Optional[str] = None
  421. """parallel start node id if node is in parallel"""
  422. parent_parallel_id: Optional[str] = None
  423. """parent parallel id if node is in parallel"""
  424. parent_parallel_start_node_id: Optional[str] = None
  425. """parent parallel start node id if node is in parallel"""
  426. in_iteration_id: Optional[str] = None
  427. """iteration id if node is in iteration"""
  428. in_loop_id: Optional[str] = None
  429. """loop id if node is in loop"""
  430. start_at: datetime
  431. inputs: Optional[Mapping[str, Any]] = None
  432. process_data: Optional[Mapping[str, Any]] = None
  433. outputs: Optional[Mapping[str, Any]] = None
  434. execution_metadata: Optional[Mapping[NodeRunMetadataKey, Any]] = None
  435. error: str
  436. class QueueNodeFailedEvent(AppQueueEvent):
  437. """
  438. QueueNodeFailedEvent entity
  439. """
  440. event: QueueEvent = QueueEvent.NODE_FAILED
  441. node_execution_id: str
  442. node_id: str
  443. node_type: NodeType
  444. node_data: BaseNodeData
  445. parallel_id: Optional[str] = None
  446. """parallel id if node is in parallel"""
  447. parallel_start_node_id: Optional[str] = None
  448. """parallel start node id if node is in parallel"""
  449. parent_parallel_id: Optional[str] = None
  450. """parent parallel id if node is in parallel"""
  451. parent_parallel_start_node_id: Optional[str] = None
  452. """parent parallel start node id if node is in parallel"""
  453. in_iteration_id: Optional[str] = None
  454. """iteration id if node is in iteration"""
  455. in_loop_id: Optional[str] = None
  456. """loop id if node is in loop"""
  457. start_at: datetime
  458. inputs: Optional[Mapping[str, Any]] = None
  459. process_data: Optional[Mapping[str, Any]] = None
  460. outputs: Optional[Mapping[str, Any]] = None
  461. execution_metadata: Optional[Mapping[NodeRunMetadataKey, Any]] = None
  462. error: str
  463. class QueueAgentThoughtEvent(AppQueueEvent):
  464. """
  465. QueueAgentThoughtEvent entity
  466. """
  467. event: QueueEvent = QueueEvent.AGENT_THOUGHT
  468. agent_thought_id: str
  469. class QueueMessageFileEvent(AppQueueEvent):
  470. """
  471. QueueAgentThoughtEvent entity
  472. """
  473. event: QueueEvent = QueueEvent.MESSAGE_FILE
  474. message_file_id: str
  475. class QueueErrorEvent(AppQueueEvent):
  476. """
  477. QueueErrorEvent entity
  478. """
  479. event: QueueEvent = QueueEvent.ERROR
  480. error: Any = None
  481. class QueuePingEvent(AppQueueEvent):
  482. """
  483. QueuePingEvent entity
  484. """
  485. event: QueueEvent = QueueEvent.PING
  486. class QueueStopEvent(AppQueueEvent):
  487. """
  488. QueueStopEvent entity
  489. """
  490. class StopBy(Enum):
  491. """
  492. Stop by enum
  493. """
  494. USER_MANUAL = "user-manual"
  495. ANNOTATION_REPLY = "annotation-reply"
  496. OUTPUT_MODERATION = "output-moderation"
  497. INPUT_MODERATION = "input-moderation"
  498. event: QueueEvent = QueueEvent.STOP
  499. stopped_by: StopBy
  500. def get_stop_reason(self) -> str:
  501. """
  502. To stop reason
  503. """
  504. reason_mapping = {
  505. QueueStopEvent.StopBy.USER_MANUAL: "Stopped by user.",
  506. QueueStopEvent.StopBy.ANNOTATION_REPLY: "Stopped by annotation reply.",
  507. QueueStopEvent.StopBy.OUTPUT_MODERATION: "Stopped by output moderation.",
  508. QueueStopEvent.StopBy.INPUT_MODERATION: "Stopped by input moderation.",
  509. }
  510. return reason_mapping.get(self.stopped_by, "Stopped by unknown reason.")
  511. class QueueMessage(BaseModel):
  512. """
  513. QueueMessage abstract entity
  514. """
  515. task_id: str
  516. app_mode: str
  517. event: AppQueueEvent
  518. class MessageQueueMessage(QueueMessage):
  519. """
  520. MessageQueueMessage entity
  521. """
  522. message_id: str
  523. conversation_id: str
  524. class WorkflowQueueMessage(QueueMessage):
  525. """
  526. WorkflowQueueMessage entity
  527. """
  528. pass
  529. class QueueParallelBranchRunStartedEvent(AppQueueEvent):
  530. """
  531. QueueParallelBranchRunStartedEvent entity
  532. """
  533. event: QueueEvent = QueueEvent.PARALLEL_BRANCH_RUN_STARTED
  534. parallel_id: str
  535. parallel_start_node_id: str
  536. parent_parallel_id: Optional[str] = None
  537. """parent parallel id if node is in parallel"""
  538. parent_parallel_start_node_id: Optional[str] = None
  539. """parent parallel start node id if node is in parallel"""
  540. in_iteration_id: Optional[str] = None
  541. """iteration id if node is in iteration"""
  542. in_loop_id: Optional[str] = None
  543. """loop id if node is in loop"""
  544. class QueueParallelBranchRunSucceededEvent(AppQueueEvent):
  545. """
  546. QueueParallelBranchRunSucceededEvent entity
  547. """
  548. event: QueueEvent = QueueEvent.PARALLEL_BRANCH_RUN_SUCCEEDED
  549. parallel_id: str
  550. parallel_start_node_id: str
  551. parent_parallel_id: Optional[str] = None
  552. """parent parallel id if node is in parallel"""
  553. parent_parallel_start_node_id: Optional[str] = None
  554. """parent parallel start node id if node is in parallel"""
  555. in_iteration_id: Optional[str] = None
  556. """iteration id if node is in iteration"""
  557. in_loop_id: Optional[str] = None
  558. """loop id if node is in loop"""
  559. class QueueParallelBranchRunFailedEvent(AppQueueEvent):
  560. """
  561. QueueParallelBranchRunFailedEvent entity
  562. """
  563. event: QueueEvent = QueueEvent.PARALLEL_BRANCH_RUN_FAILED
  564. parallel_id: str
  565. parallel_start_node_id: str
  566. parent_parallel_id: Optional[str] = None
  567. """parent parallel id if node is in parallel"""
  568. parent_parallel_start_node_id: Optional[str] = None
  569. """parent parallel start node id if node is in parallel"""
  570. in_iteration_id: Optional[str] = None
  571. """iteration id if node is in iteration"""
  572. in_loop_id: Optional[str] = None
  573. """loop id if node is in loop"""
  574. error: str