From 75ee16acb02bffd96171d6da20d2bff957c32e46 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Thu, 22 Feb 2024 23:36:02 -0300 Subject: [PATCH] Refactor RoutingVertex to handle missing condition and result values --- src/backend/langflow/graph/vertex/types.py | 31 +++++----------------- 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/src/backend/langflow/graph/vertex/types.py b/src/backend/langflow/graph/vertex/types.py index 5a9576fe5..babe82a2d 100644 --- a/src/backend/langflow/graph/vertex/types.py +++ b/src/backend/langflow/graph/vertex/types.py @@ -373,35 +373,18 @@ class RoutingVertex(StatelessVertex): return self.artifacts["repr"] or super()._built_object_repr() return super()._built_object_repr() - def _build(self, *args, **kwargs): - super()._build(*args, **kwargs) - - # After building, the _built_object should be a dict with - # {"result": Any, "condition": bool} - # if true, we need to set should_run attr in the target of true edge - # to true and should_run attr in the target of false edge to false - # TODO: Add support for multiple conditions - def _run(self, *args, **kwargs): if self._built_object: condition = self._built_object.get("condition") result = self._built_object.get("result") - if condition is not None: - for edge in self.edges: - if edge.source_id == self.id: - target_vertex = self.graph.get_vertex(edge.target_id) - # source_handle.channel and condition should be the same - channel_bool = edge.source_handle.channel == "true" - if condition == channel_bool: - target_vertex.should_run = True - else: - target_vertex.should_run = False + if condition is None: + raise ValueError("Condition is required for the routing vertex.") + if result is None: + raise ValueError("Result is required for the routing vertex.") + if condition is True: + self._built_result = result else: - raise ValueError(f"RoutingVertex {self.id} must have a condition in the _built_object") - - self._built_result = result - else: - raise ValueError(f"RoutingVertex {self.id} must have a _built_object with a condition and a result") + self.graph.mark_branch(self.id, "INACTIVE") def dict_to_codeblock(d: dict) -> str: