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.

task_entities.py 20KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832
  1. from collections.abc import Mapping, Sequence
  2. from enum import Enum
  3. from typing import Any, Optional
  4. from pydantic import BaseModel, ConfigDict, Field
  5. from core.model_runtime.entities.llm_entities import LLMResult, LLMUsage
  6. from core.rag.entities.citation_metadata import RetrievalSourceMetadata
  7. from core.workflow.entities.node_entities import AgentNodeStrategyInit
  8. from core.workflow.entities.workflow_node_execution import WorkflowNodeExecutionMetadataKey, WorkflowNodeExecutionStatus
  9. class AnnotationReplyAccount(BaseModel):
  10. id: str
  11. name: str
  12. class AnnotationReply(BaseModel):
  13. id: str
  14. account: AnnotationReplyAccount
  15. class TaskStateMetadata(BaseModel):
  16. annotation_reply: AnnotationReply | None = None
  17. retriever_resources: Sequence[RetrievalSourceMetadata] = Field(default_factory=list)
  18. usage: LLMUsage | None = None
  19. class TaskState(BaseModel):
  20. """
  21. TaskState entity
  22. """
  23. metadata: TaskStateMetadata = Field(default_factory=TaskStateMetadata)
  24. class EasyUITaskState(TaskState):
  25. """
  26. EasyUITaskState entity
  27. """
  28. llm_result: LLMResult
  29. class WorkflowTaskState(TaskState):
  30. """
  31. WorkflowTaskState entity
  32. """
  33. answer: str = ""
  34. class StreamEvent(Enum):
  35. """
  36. Stream event
  37. """
  38. PING = "ping"
  39. ERROR = "error"
  40. MESSAGE = "message"
  41. MESSAGE_END = "message_end"
  42. TTS_MESSAGE = "tts_message"
  43. TTS_MESSAGE_END = "tts_message_end"
  44. MESSAGE_FILE = "message_file"
  45. MESSAGE_REPLACE = "message_replace"
  46. AGENT_THOUGHT = "agent_thought"
  47. AGENT_MESSAGE = "agent_message"
  48. WORKFLOW_STARTED = "workflow_started"
  49. WORKFLOW_FINISHED = "workflow_finished"
  50. NODE_STARTED = "node_started"
  51. NODE_FINISHED = "node_finished"
  52. NODE_RETRY = "node_retry"
  53. PARALLEL_BRANCH_STARTED = "parallel_branch_started"
  54. PARALLEL_BRANCH_FINISHED = "parallel_branch_finished"
  55. ITERATION_STARTED = "iteration_started"
  56. ITERATION_NEXT = "iteration_next"
  57. ITERATION_COMPLETED = "iteration_completed"
  58. LOOP_STARTED = "loop_started"
  59. LOOP_NEXT = "loop_next"
  60. LOOP_COMPLETED = "loop_completed"
  61. TEXT_CHUNK = "text_chunk"
  62. TEXT_REPLACE = "text_replace"
  63. AGENT_LOG = "agent_log"
  64. class StreamResponse(BaseModel):
  65. """
  66. StreamResponse entity
  67. """
  68. event: StreamEvent
  69. task_id: str
  70. class ErrorStreamResponse(StreamResponse):
  71. """
  72. ErrorStreamResponse entity
  73. """
  74. event: StreamEvent = StreamEvent.ERROR
  75. err: Exception
  76. model_config = ConfigDict(arbitrary_types_allowed=True)
  77. class MessageStreamResponse(StreamResponse):
  78. """
  79. MessageStreamResponse entity
  80. """
  81. event: StreamEvent = StreamEvent.MESSAGE
  82. id: str
  83. answer: str
  84. from_variable_selector: Optional[list[str]] = None
  85. class MessageAudioStreamResponse(StreamResponse):
  86. """
  87. MessageStreamResponse entity
  88. """
  89. event: StreamEvent = StreamEvent.TTS_MESSAGE
  90. audio: str
  91. class MessageAudioEndStreamResponse(StreamResponse):
  92. """
  93. MessageStreamResponse entity
  94. """
  95. event: StreamEvent = StreamEvent.TTS_MESSAGE_END
  96. audio: str
  97. class MessageEndStreamResponse(StreamResponse):
  98. """
  99. MessageEndStreamResponse entity
  100. """
  101. event: StreamEvent = StreamEvent.MESSAGE_END
  102. id: str
  103. metadata: dict = Field(default_factory=dict)
  104. files: Optional[Sequence[Mapping[str, Any]]] = None
  105. class MessageFileStreamResponse(StreamResponse):
  106. """
  107. MessageFileStreamResponse entity
  108. """
  109. event: StreamEvent = StreamEvent.MESSAGE_FILE
  110. id: str
  111. type: str
  112. belongs_to: str
  113. url: str
  114. class MessageReplaceStreamResponse(StreamResponse):
  115. """
  116. MessageReplaceStreamResponse entity
  117. """
  118. event: StreamEvent = StreamEvent.MESSAGE_REPLACE
  119. answer: str
  120. reason: str
  121. class AgentThoughtStreamResponse(StreamResponse):
  122. """
  123. AgentThoughtStreamResponse entity
  124. """
  125. event: StreamEvent = StreamEvent.AGENT_THOUGHT
  126. id: str
  127. position: int
  128. thought: Optional[str] = None
  129. observation: Optional[str] = None
  130. tool: Optional[str] = None
  131. tool_labels: Optional[dict] = None
  132. tool_input: Optional[str] = None
  133. message_files: Optional[list[str]] = None
  134. class AgentMessageStreamResponse(StreamResponse):
  135. """
  136. AgentMessageStreamResponse entity
  137. """
  138. event: StreamEvent = StreamEvent.AGENT_MESSAGE
  139. id: str
  140. answer: str
  141. class WorkflowStartStreamResponse(StreamResponse):
  142. """
  143. WorkflowStartStreamResponse entity
  144. """
  145. class Data(BaseModel):
  146. """
  147. Data entity
  148. """
  149. id: str
  150. workflow_id: str
  151. inputs: Mapping[str, Any]
  152. created_at: int
  153. event: StreamEvent = StreamEvent.WORKFLOW_STARTED
  154. workflow_run_id: str
  155. data: Data
  156. class WorkflowFinishStreamResponse(StreamResponse):
  157. """
  158. WorkflowFinishStreamResponse entity
  159. """
  160. class Data(BaseModel):
  161. """
  162. Data entity
  163. """
  164. id: str
  165. workflow_id: str
  166. status: str
  167. outputs: Optional[Mapping[str, Any]] = None
  168. error: Optional[str] = None
  169. elapsed_time: float
  170. total_tokens: int
  171. total_steps: int
  172. created_by: Optional[dict] = None
  173. created_at: int
  174. finished_at: int
  175. exceptions_count: Optional[int] = 0
  176. files: Optional[Sequence[Mapping[str, Any]]] = []
  177. event: StreamEvent = StreamEvent.WORKFLOW_FINISHED
  178. workflow_run_id: str
  179. data: Data
  180. class NodeStartStreamResponse(StreamResponse):
  181. """
  182. NodeStartStreamResponse entity
  183. """
  184. class Data(BaseModel):
  185. """
  186. Data entity
  187. """
  188. id: str
  189. node_id: str
  190. node_type: str
  191. title: str
  192. index: int
  193. predecessor_node_id: Optional[str] = None
  194. inputs: Optional[Mapping[str, Any]] = None
  195. created_at: int
  196. extras: dict = Field(default_factory=dict)
  197. parallel_id: Optional[str] = None
  198. parallel_start_node_id: Optional[str] = None
  199. parent_parallel_id: Optional[str] = None
  200. parent_parallel_start_node_id: Optional[str] = None
  201. iteration_id: Optional[str] = None
  202. loop_id: Optional[str] = None
  203. parallel_run_id: Optional[str] = None
  204. agent_strategy: Optional[AgentNodeStrategyInit] = None
  205. event: StreamEvent = StreamEvent.NODE_STARTED
  206. workflow_run_id: str
  207. data: Data
  208. def to_ignore_detail_dict(self):
  209. return {
  210. "event": self.event.value,
  211. "task_id": self.task_id,
  212. "workflow_run_id": self.workflow_run_id,
  213. "data": {
  214. "id": self.data.id,
  215. "node_id": self.data.node_id,
  216. "node_type": self.data.node_type,
  217. "title": self.data.title,
  218. "index": self.data.index,
  219. "predecessor_node_id": self.data.predecessor_node_id,
  220. "inputs": None,
  221. "created_at": self.data.created_at,
  222. "extras": {},
  223. "parallel_id": self.data.parallel_id,
  224. "parallel_start_node_id": self.data.parallel_start_node_id,
  225. "parent_parallel_id": self.data.parent_parallel_id,
  226. "parent_parallel_start_node_id": self.data.parent_parallel_start_node_id,
  227. "iteration_id": self.data.iteration_id,
  228. "loop_id": self.data.loop_id,
  229. },
  230. }
  231. class NodeFinishStreamResponse(StreamResponse):
  232. """
  233. NodeFinishStreamResponse entity
  234. """
  235. class Data(BaseModel):
  236. """
  237. Data entity
  238. """
  239. id: str
  240. node_id: str
  241. node_type: str
  242. title: str
  243. index: int
  244. predecessor_node_id: Optional[str] = None
  245. inputs: Optional[Mapping[str, Any]] = None
  246. process_data: Optional[Mapping[str, Any]] = None
  247. outputs: Optional[Mapping[str, Any]] = None
  248. status: str
  249. error: Optional[str] = None
  250. elapsed_time: float
  251. execution_metadata: Optional[Mapping[WorkflowNodeExecutionMetadataKey, Any]] = None
  252. created_at: int
  253. finished_at: int
  254. files: Optional[Sequence[Mapping[str, Any]]] = []
  255. parallel_id: Optional[str] = None
  256. parallel_start_node_id: Optional[str] = None
  257. parent_parallel_id: Optional[str] = None
  258. parent_parallel_start_node_id: Optional[str] = None
  259. iteration_id: Optional[str] = None
  260. loop_id: Optional[str] = None
  261. event: StreamEvent = StreamEvent.NODE_FINISHED
  262. workflow_run_id: str
  263. data: Data
  264. def to_ignore_detail_dict(self):
  265. return {
  266. "event": self.event.value,
  267. "task_id": self.task_id,
  268. "workflow_run_id": self.workflow_run_id,
  269. "data": {
  270. "id": self.data.id,
  271. "node_id": self.data.node_id,
  272. "node_type": self.data.node_type,
  273. "title": self.data.title,
  274. "index": self.data.index,
  275. "predecessor_node_id": self.data.predecessor_node_id,
  276. "inputs": None,
  277. "process_data": None,
  278. "outputs": None,
  279. "status": self.data.status,
  280. "error": None,
  281. "elapsed_time": self.data.elapsed_time,
  282. "execution_metadata": None,
  283. "created_at": self.data.created_at,
  284. "finished_at": self.data.finished_at,
  285. "files": [],
  286. "parallel_id": self.data.parallel_id,
  287. "parallel_start_node_id": self.data.parallel_start_node_id,
  288. "parent_parallel_id": self.data.parent_parallel_id,
  289. "parent_parallel_start_node_id": self.data.parent_parallel_start_node_id,
  290. "iteration_id": self.data.iteration_id,
  291. "loop_id": self.data.loop_id,
  292. },
  293. }
  294. class NodeRetryStreamResponse(StreamResponse):
  295. """
  296. NodeFinishStreamResponse entity
  297. """
  298. class Data(BaseModel):
  299. """
  300. Data entity
  301. """
  302. id: str
  303. node_id: str
  304. node_type: str
  305. title: str
  306. index: int
  307. predecessor_node_id: Optional[str] = None
  308. inputs: Optional[Mapping[str, Any]] = None
  309. process_data: Optional[Mapping[str, Any]] = None
  310. outputs: Optional[Mapping[str, Any]] = None
  311. status: str
  312. error: Optional[str] = None
  313. elapsed_time: float
  314. execution_metadata: Optional[Mapping[WorkflowNodeExecutionMetadataKey, Any]] = None
  315. created_at: int
  316. finished_at: int
  317. files: Optional[Sequence[Mapping[str, Any]]] = []
  318. parallel_id: Optional[str] = None
  319. parallel_start_node_id: Optional[str] = None
  320. parent_parallel_id: Optional[str] = None
  321. parent_parallel_start_node_id: Optional[str] = None
  322. iteration_id: Optional[str] = None
  323. loop_id: Optional[str] = None
  324. retry_index: int = 0
  325. event: StreamEvent = StreamEvent.NODE_RETRY
  326. workflow_run_id: str
  327. data: Data
  328. def to_ignore_detail_dict(self):
  329. return {
  330. "event": self.event.value,
  331. "task_id": self.task_id,
  332. "workflow_run_id": self.workflow_run_id,
  333. "data": {
  334. "id": self.data.id,
  335. "node_id": self.data.node_id,
  336. "node_type": self.data.node_type,
  337. "title": self.data.title,
  338. "index": self.data.index,
  339. "predecessor_node_id": self.data.predecessor_node_id,
  340. "inputs": None,
  341. "process_data": None,
  342. "outputs": None,
  343. "status": self.data.status,
  344. "error": None,
  345. "elapsed_time": self.data.elapsed_time,
  346. "execution_metadata": None,
  347. "created_at": self.data.created_at,
  348. "finished_at": self.data.finished_at,
  349. "files": [],
  350. "parallel_id": self.data.parallel_id,
  351. "parallel_start_node_id": self.data.parallel_start_node_id,
  352. "parent_parallel_id": self.data.parent_parallel_id,
  353. "parent_parallel_start_node_id": self.data.parent_parallel_start_node_id,
  354. "iteration_id": self.data.iteration_id,
  355. "loop_id": self.data.loop_id,
  356. "retry_index": self.data.retry_index,
  357. },
  358. }
  359. class ParallelBranchStartStreamResponse(StreamResponse):
  360. """
  361. ParallelBranchStartStreamResponse entity
  362. """
  363. class Data(BaseModel):
  364. """
  365. Data entity
  366. """
  367. parallel_id: str
  368. parallel_branch_id: str
  369. parent_parallel_id: Optional[str] = None
  370. parent_parallel_start_node_id: Optional[str] = None
  371. iteration_id: Optional[str] = None
  372. loop_id: Optional[str] = None
  373. created_at: int
  374. event: StreamEvent = StreamEvent.PARALLEL_BRANCH_STARTED
  375. workflow_run_id: str
  376. data: Data
  377. class ParallelBranchFinishedStreamResponse(StreamResponse):
  378. """
  379. ParallelBranchFinishedStreamResponse entity
  380. """
  381. class Data(BaseModel):
  382. """
  383. Data entity
  384. """
  385. parallel_id: str
  386. parallel_branch_id: str
  387. parent_parallel_id: Optional[str] = None
  388. parent_parallel_start_node_id: Optional[str] = None
  389. iteration_id: Optional[str] = None
  390. loop_id: Optional[str] = None
  391. status: str
  392. error: Optional[str] = None
  393. created_at: int
  394. event: StreamEvent = StreamEvent.PARALLEL_BRANCH_FINISHED
  395. workflow_run_id: str
  396. data: Data
  397. class IterationNodeStartStreamResponse(StreamResponse):
  398. """
  399. NodeStartStreamResponse entity
  400. """
  401. class Data(BaseModel):
  402. """
  403. Data entity
  404. """
  405. id: str
  406. node_id: str
  407. node_type: str
  408. title: str
  409. created_at: int
  410. extras: dict = Field(default_factory=dict)
  411. metadata: Mapping = {}
  412. inputs: Mapping = {}
  413. parallel_id: Optional[str] = None
  414. parallel_start_node_id: Optional[str] = None
  415. event: StreamEvent = StreamEvent.ITERATION_STARTED
  416. workflow_run_id: str
  417. data: Data
  418. class IterationNodeNextStreamResponse(StreamResponse):
  419. """
  420. NodeStartStreamResponse entity
  421. """
  422. class Data(BaseModel):
  423. """
  424. Data entity
  425. """
  426. id: str
  427. node_id: str
  428. node_type: str
  429. title: str
  430. index: int
  431. created_at: int
  432. pre_iteration_output: Optional[Any] = None
  433. extras: dict = Field(default_factory=dict)
  434. parallel_id: Optional[str] = None
  435. parallel_start_node_id: Optional[str] = None
  436. parallel_mode_run_id: Optional[str] = None
  437. duration: Optional[float] = None
  438. event: StreamEvent = StreamEvent.ITERATION_NEXT
  439. workflow_run_id: str
  440. data: Data
  441. class IterationNodeCompletedStreamResponse(StreamResponse):
  442. """
  443. NodeCompletedStreamResponse entity
  444. """
  445. class Data(BaseModel):
  446. """
  447. Data entity
  448. """
  449. id: str
  450. node_id: str
  451. node_type: str
  452. title: str
  453. outputs: Optional[Mapping] = None
  454. created_at: int
  455. extras: Optional[dict] = None
  456. inputs: Optional[Mapping] = None
  457. status: WorkflowNodeExecutionStatus
  458. error: Optional[str] = None
  459. elapsed_time: float
  460. total_tokens: int
  461. execution_metadata: Optional[Mapping] = None
  462. finished_at: int
  463. steps: int
  464. parallel_id: Optional[str] = None
  465. parallel_start_node_id: Optional[str] = None
  466. event: StreamEvent = StreamEvent.ITERATION_COMPLETED
  467. workflow_run_id: str
  468. data: Data
  469. class LoopNodeStartStreamResponse(StreamResponse):
  470. """
  471. NodeStartStreamResponse entity
  472. """
  473. class Data(BaseModel):
  474. """
  475. Data entity
  476. """
  477. id: str
  478. node_id: str
  479. node_type: str
  480. title: str
  481. created_at: int
  482. extras: dict = Field(default_factory=dict)
  483. metadata: Mapping = {}
  484. inputs: Mapping = {}
  485. parallel_id: Optional[str] = None
  486. parallel_start_node_id: Optional[str] = None
  487. event: StreamEvent = StreamEvent.LOOP_STARTED
  488. workflow_run_id: str
  489. data: Data
  490. class LoopNodeNextStreamResponse(StreamResponse):
  491. """
  492. NodeStartStreamResponse entity
  493. """
  494. class Data(BaseModel):
  495. """
  496. Data entity
  497. """
  498. id: str
  499. node_id: str
  500. node_type: str
  501. title: str
  502. index: int
  503. created_at: int
  504. pre_loop_output: Optional[Any] = None
  505. extras: dict = Field(default_factory=dict)
  506. parallel_id: Optional[str] = None
  507. parallel_start_node_id: Optional[str] = None
  508. parallel_mode_run_id: Optional[str] = None
  509. duration: Optional[float] = None
  510. event: StreamEvent = StreamEvent.LOOP_NEXT
  511. workflow_run_id: str
  512. data: Data
  513. class LoopNodeCompletedStreamResponse(StreamResponse):
  514. """
  515. NodeCompletedStreamResponse entity
  516. """
  517. class Data(BaseModel):
  518. """
  519. Data entity
  520. """
  521. id: str
  522. node_id: str
  523. node_type: str
  524. title: str
  525. outputs: Optional[Mapping] = None
  526. created_at: int
  527. extras: Optional[dict] = None
  528. inputs: Optional[Mapping] = None
  529. status: WorkflowNodeExecutionStatus
  530. error: Optional[str] = None
  531. elapsed_time: float
  532. total_tokens: int
  533. execution_metadata: Optional[Mapping] = None
  534. finished_at: int
  535. steps: int
  536. parallel_id: Optional[str] = None
  537. parallel_start_node_id: Optional[str] = None
  538. event: StreamEvent = StreamEvent.LOOP_COMPLETED
  539. workflow_run_id: str
  540. data: Data
  541. class TextChunkStreamResponse(StreamResponse):
  542. """
  543. TextChunkStreamResponse entity
  544. """
  545. class Data(BaseModel):
  546. """
  547. Data entity
  548. """
  549. text: str
  550. from_variable_selector: Optional[list[str]] = None
  551. event: StreamEvent = StreamEvent.TEXT_CHUNK
  552. data: Data
  553. class TextReplaceStreamResponse(StreamResponse):
  554. """
  555. TextReplaceStreamResponse entity
  556. """
  557. class Data(BaseModel):
  558. """
  559. Data entity
  560. """
  561. text: str
  562. event: StreamEvent = StreamEvent.TEXT_REPLACE
  563. data: Data
  564. class PingStreamResponse(StreamResponse):
  565. """
  566. PingStreamResponse entity
  567. """
  568. event: StreamEvent = StreamEvent.PING
  569. class AppStreamResponse(BaseModel):
  570. """
  571. AppStreamResponse entity
  572. """
  573. stream_response: StreamResponse
  574. class ChatbotAppStreamResponse(AppStreamResponse):
  575. """
  576. ChatbotAppStreamResponse entity
  577. """
  578. conversation_id: str
  579. message_id: str
  580. created_at: int
  581. class CompletionAppStreamResponse(AppStreamResponse):
  582. """
  583. CompletionAppStreamResponse entity
  584. """
  585. message_id: str
  586. created_at: int
  587. class WorkflowAppStreamResponse(AppStreamResponse):
  588. """
  589. WorkflowAppStreamResponse entity
  590. """
  591. workflow_run_id: Optional[str] = None
  592. class AppBlockingResponse(BaseModel):
  593. """
  594. AppBlockingResponse entity
  595. """
  596. task_id: str
  597. class ChatbotAppBlockingResponse(AppBlockingResponse):
  598. """
  599. ChatbotAppBlockingResponse entity
  600. """
  601. class Data(BaseModel):
  602. """
  603. Data entity
  604. """
  605. id: str
  606. mode: str
  607. conversation_id: str
  608. message_id: str
  609. answer: str
  610. metadata: dict = Field(default_factory=dict)
  611. created_at: int
  612. data: Data
  613. class CompletionAppBlockingResponse(AppBlockingResponse):
  614. """
  615. CompletionAppBlockingResponse entity
  616. """
  617. class Data(BaseModel):
  618. """
  619. Data entity
  620. """
  621. id: str
  622. mode: str
  623. message_id: str
  624. answer: str
  625. metadata: dict = Field(default_factory=dict)
  626. created_at: int
  627. data: Data
  628. class WorkflowAppBlockingResponse(AppBlockingResponse):
  629. """
  630. WorkflowAppBlockingResponse entity
  631. """
  632. class Data(BaseModel):
  633. """
  634. Data entity
  635. """
  636. id: str
  637. workflow_id: str
  638. status: str
  639. outputs: Optional[Mapping[str, Any]] = None
  640. error: Optional[str] = None
  641. elapsed_time: float
  642. total_tokens: int
  643. total_steps: int
  644. created_at: int
  645. finished_at: int
  646. workflow_run_id: str
  647. data: Data
  648. class AgentLogStreamResponse(StreamResponse):
  649. """
  650. AgentLogStreamResponse entity
  651. """
  652. class Data(BaseModel):
  653. """
  654. Data entity
  655. """
  656. node_execution_id: str
  657. id: str
  658. label: str
  659. parent_id: str | None = None
  660. error: str | None = None
  661. status: str
  662. data: Mapping[str, Any]
  663. metadata: Optional[Mapping[str, Any]] = None
  664. node_id: str
  665. event: StreamEvent = StreamEvent.AGENT_LOG
  666. data: Data