您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

queue_entities.py 21KB

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