entities.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from typing import Any, Literal, Optional
  2. from pydantic import Field
  3. from core.workflow.nodes.base import BaseLoopNodeData, BaseLoopState, BaseNodeData
  4. from core.workflow.utils.condition.entities import Condition
  5. class LoopNodeData(BaseLoopNodeData):
  6. """
  7. Loop Node Data.
  8. """
  9. loop_count: int # Maximum number of loops
  10. break_conditions: list[Condition] # Conditions to break the loop
  11. logical_operator: Literal["and", "or"]
  12. class LoopStartNodeData(BaseNodeData):
  13. """
  14. Loop Start Node Data.
  15. """
  16. pass
  17. class LoopState(BaseLoopState):
  18. """
  19. Loop State.
  20. """
  21. outputs: list[Any] = Field(default_factory=list)
  22. current_output: Optional[Any] = None
  23. class MetaData(BaseLoopState.MetaData):
  24. """
  25. Data.
  26. """
  27. loop_length: int
  28. def get_last_output(self) -> Optional[Any]:
  29. """
  30. Get last output.
  31. """
  32. if self.outputs:
  33. return self.outputs[-1]
  34. return None
  35. def get_current_output(self) -> Optional[Any]:
  36. """
  37. Get current output.
  38. """
  39. return self.current_output