12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- from typing import Any, Literal, Optional
- from pydantic import Field
- from core.workflow.nodes.base import BaseLoopNodeData, BaseLoopState, BaseNodeData
- from core.workflow.utils.condition.entities import Condition
- class LoopNodeData(BaseLoopNodeData):
- """
- Loop Node Data.
- """
- loop_count: int # Maximum number of loops
- break_conditions: list[Condition] # Conditions to break the loop
- logical_operator: Literal["and", "or"]
- class LoopStartNodeData(BaseNodeData):
- """
- Loop Start Node Data.
- """
- pass
- class LoopState(BaseLoopState):
- """
- Loop State.
- """
- outputs: list[Any] = Field(default_factory=list)
- current_output: Optional[Any] = None
- class MetaData(BaseLoopState.MetaData):
- """
- Data.
- """
- loop_length: int
- def get_last_output(self) -> Optional[Any]:
- """
- Get last output.
- """
- if self.outputs:
- return self.outputs[-1]
- return None
- def get_current_output(self) -> Optional[Any]:
- """
- Get current output.
- """
- return self.current_output
|