queue_entities.py 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727
  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. class QueueNodeRetryEvent(QueueNodeStartedEvent):
  346. """QueueNodeRetryEvent entity"""
  347. event: QueueEvent = QueueEvent.RETRY
  348. inputs: Optional[Mapping[str, Any]] = None
  349. process_data: Optional[Mapping[str, Any]] = None
  350. outputs: Optional[Mapping[str, Any]] = None
  351. execution_metadata: Optional[Mapping[NodeRunMetadataKey, Any]] = None
  352. error: str
  353. retry_index: int # retry index
  354. class QueueNodeInIterationFailedEvent(AppQueueEvent):
  355. """
  356. QueueNodeInIterationFailedEvent entity
  357. """
  358. event: QueueEvent = QueueEvent.NODE_FAILED
  359. node_execution_id: str
  360. node_id: str
  361. node_type: NodeType
  362. node_data: BaseNodeData
  363. parallel_id: Optional[str] = None
  364. """parallel id if node is in parallel"""
  365. parallel_start_node_id: Optional[str] = None
  366. """parallel start node id if node is in parallel"""
  367. parent_parallel_id: Optional[str] = None
  368. """parent parallel id if node is in parallel"""
  369. parent_parallel_start_node_id: Optional[str] = None
  370. """parent parallel start node id if node is in parallel"""
  371. in_iteration_id: Optional[str] = None
  372. """iteration id if node is in iteration"""
  373. in_loop_id: Optional[str] = None
  374. """loop id if node is in loop"""
  375. start_at: datetime
  376. inputs: Optional[Mapping[str, Any]] = None
  377. process_data: Optional[Mapping[str, Any]] = None
  378. outputs: Optional[Mapping[str, Any]] = None
  379. execution_metadata: Optional[Mapping[NodeRunMetadataKey, Any]] = None
  380. error: str
  381. class QueueNodeInLoopFailedEvent(AppQueueEvent):
  382. """
  383. QueueNodeInLoopFailedEvent entity
  384. """
  385. event: QueueEvent = QueueEvent.NODE_FAILED
  386. node_execution_id: str
  387. node_id: str
  388. node_type: NodeType
  389. node_data: BaseNodeData
  390. parallel_id: Optional[str] = None
  391. """parallel id if node is in parallel"""
  392. parallel_start_node_id: Optional[str] = None
  393. """parallel start node id if node is in parallel"""
  394. parent_parallel_id: Optional[str] = None
  395. """parent parallel id if node is in parallel"""
  396. parent_parallel_start_node_id: Optional[str] = None
  397. """parent parallel start node id if node is in parallel"""
  398. in_iteration_id: Optional[str] = None
  399. """iteration id if node is in iteration"""
  400. in_loop_id: Optional[str] = None
  401. """loop id if node is in loop"""
  402. start_at: datetime
  403. inputs: Optional[Mapping[str, Any]] = None
  404. process_data: Optional[Mapping[str, Any]] = None
  405. outputs: Optional[Mapping[str, Any]] = None
  406. execution_metadata: Optional[Mapping[NodeRunMetadataKey, Any]] = None
  407. error: str
  408. class QueueNodeExceptionEvent(AppQueueEvent):
  409. """
  410. QueueNodeExceptionEvent entity
  411. """
  412. event: QueueEvent = QueueEvent.NODE_EXCEPTION
  413. node_execution_id: str
  414. node_id: str
  415. node_type: NodeType
  416. node_data: BaseNodeData
  417. parallel_id: Optional[str] = None
  418. """parallel id if node is in parallel"""
  419. parallel_start_node_id: Optional[str] = None
  420. """parallel start node id if node is in parallel"""
  421. parent_parallel_id: Optional[str] = None
  422. """parent parallel id if node is in parallel"""
  423. parent_parallel_start_node_id: Optional[str] = None
  424. """parent parallel start node id if node is in parallel"""
  425. in_iteration_id: Optional[str] = None
  426. """iteration id if node is in iteration"""
  427. in_loop_id: Optional[str] = None
  428. """loop id if node is in loop"""
  429. start_at: datetime
  430. inputs: Optional[Mapping[str, Any]] = None
  431. process_data: Optional[Mapping[str, Any]] = None
  432. outputs: Optional[Mapping[str, Any]] = None
  433. execution_metadata: Optional[Mapping[NodeRunMetadataKey, Any]] = None
  434. error: str
  435. class QueueNodeFailedEvent(AppQueueEvent):
  436. """
  437. QueueNodeFailedEvent entity
  438. """
  439. event: QueueEvent = QueueEvent.NODE_FAILED
  440. node_execution_id: str
  441. node_id: str
  442. node_type: NodeType
  443. node_data: BaseNodeData
  444. parallel_id: Optional[str] = None
  445. """parallel id if node is in parallel"""
  446. parallel_start_node_id: Optional[str] = None
  447. """parallel start node id if node is in parallel"""
  448. parent_parallel_id: Optional[str] = None
  449. """parent parallel id if node is in parallel"""
  450. parent_parallel_start_node_id: Optional[str] = None
  451. """parent parallel start node id if node is in parallel"""
  452. in_iteration_id: Optional[str] = None
  453. """iteration id if node is in iteration"""
  454. in_loop_id: Optional[str] = None
  455. """loop id if node is in loop"""
  456. start_at: datetime
  457. inputs: Optional[Mapping[str, Any]] = None
  458. process_data: Optional[Mapping[str, Any]] = None
  459. outputs: Optional[Mapping[str, Any]] = None
  460. execution_metadata: Optional[Mapping[NodeRunMetadataKey, Any]] = None
  461. error: str
  462. class QueueAgentThoughtEvent(AppQueueEvent):
  463. """
  464. QueueAgentThoughtEvent entity
  465. """
  466. event: QueueEvent = QueueEvent.AGENT_THOUGHT
  467. agent_thought_id: str
  468. class QueueMessageFileEvent(AppQueueEvent):
  469. """
  470. QueueAgentThoughtEvent entity
  471. """
  472. event: QueueEvent = QueueEvent.MESSAGE_FILE
  473. message_file_id: str
  474. class QueueErrorEvent(AppQueueEvent):
  475. """
  476. QueueErrorEvent entity
  477. """
  478. event: QueueEvent = QueueEvent.ERROR
  479. error: Any = None
  480. class QueuePingEvent(AppQueueEvent):
  481. """
  482. QueuePingEvent entity
  483. """
  484. event: QueueEvent = QueueEvent.PING
  485. class QueueStopEvent(AppQueueEvent):
  486. """
  487. QueueStopEvent entity
  488. """
  489. class StopBy(Enum):
  490. """
  491. Stop by enum
  492. """
  493. USER_MANUAL = "user-manual"
  494. ANNOTATION_REPLY = "annotation-reply"
  495. OUTPUT_MODERATION = "output-moderation"
  496. INPUT_MODERATION = "input-moderation"
  497. event: QueueEvent = QueueEvent.STOP
  498. stopped_by: StopBy
  499. def get_stop_reason(self) -> str:
  500. """
  501. To stop reason
  502. """
  503. reason_mapping = {
  504. QueueStopEvent.StopBy.USER_MANUAL: "Stopped by user.",
  505. QueueStopEvent.StopBy.ANNOTATION_REPLY: "Stopped by annotation reply.",
  506. QueueStopEvent.StopBy.OUTPUT_MODERATION: "Stopped by output moderation.",
  507. QueueStopEvent.StopBy.INPUT_MODERATION: "Stopped by input moderation.",
  508. }
  509. return reason_mapping.get(self.stopped_by, "Stopped by unknown reason.")
  510. class QueueMessage(BaseModel):
  511. """
  512. QueueMessage abstract entity
  513. """
  514. task_id: str
  515. app_mode: str
  516. event: AppQueueEvent
  517. class MessageQueueMessage(QueueMessage):
  518. """
  519. MessageQueueMessage entity
  520. """
  521. message_id: str
  522. conversation_id: str
  523. class WorkflowQueueMessage(QueueMessage):
  524. """
  525. WorkflowQueueMessage entity
  526. """
  527. pass
  528. class QueueParallelBranchRunStartedEvent(AppQueueEvent):
  529. """
  530. QueueParallelBranchRunStartedEvent entity
  531. """
  532. event: QueueEvent = QueueEvent.PARALLEL_BRANCH_RUN_STARTED
  533. parallel_id: str
  534. parallel_start_node_id: str
  535. parent_parallel_id: Optional[str] = None
  536. """parent parallel id if node is in parallel"""
  537. parent_parallel_start_node_id: Optional[str] = None
  538. """parent parallel start node id if node is in parallel"""
  539. in_iteration_id: Optional[str] = None
  540. """iteration id if node is in iteration"""
  541. in_loop_id: Optional[str] = None
  542. """loop id if node is in loop"""
  543. class QueueParallelBranchRunSucceededEvent(AppQueueEvent):
  544. """
  545. QueueParallelBranchRunSucceededEvent entity
  546. """
  547. event: QueueEvent = QueueEvent.PARALLEL_BRANCH_RUN_SUCCEEDED
  548. parallel_id: str
  549. parallel_start_node_id: str
  550. parent_parallel_id: Optional[str] = None
  551. """parent parallel id if node is in parallel"""
  552. parent_parallel_start_node_id: Optional[str] = None
  553. """parent parallel start node id if node is in parallel"""
  554. in_iteration_id: Optional[str] = None
  555. """iteration id if node is in iteration"""
  556. in_loop_id: Optional[str] = None
  557. """loop id if node is in loop"""
  558. class QueueParallelBranchRunFailedEvent(AppQueueEvent):
  559. """
  560. QueueParallelBranchRunFailedEvent entity
  561. """
  562. event: QueueEvent = QueueEvent.PARALLEL_BRANCH_RUN_FAILED
  563. parallel_id: str
  564. parallel_start_node_id: str
  565. parent_parallel_id: Optional[str] = None
  566. """parent parallel id if node is in parallel"""
  567. parent_parallel_start_node_id: Optional[str] = None
  568. """parent parallel start node id if node is in parallel"""
  569. in_iteration_id: Optional[str] = None
  570. """iteration id if node is in iteration"""
  571. in_loop_id: Optional[str] = None
  572. """loop id if node is in loop"""
  573. error: str