diff --git a/src/backend/base/langflow/graph/graph/utils.py b/src/backend/base/langflow/graph/graph/utils.py index b0c3a746b..12f0cd502 100644 --- a/src/backend/base/langflow/graph/graph/utils.py +++ b/src/backend/base/langflow/graph/graph/utils.py @@ -435,13 +435,14 @@ def should_continue(yielded_counts: dict[str, int], max_iterations: int | None) def find_cycle_vertices(edges): - # Create a directed graph from the edges graph = nx.DiGraph(edges) - # Find all simple cycles in the graph - cycles = list(nx.simple_cycles(graph)) + # Initialize a set to collect vertices part of any cycle + cycle_vertices = set() - # Flatten the list of cycles and remove duplicates - cycle_vertices = {vertex for cycle in cycles for vertex in cycle} + # Utilize the strong component feature in NetworkX to find cycles + for component in nx.strongly_connected_components(graph): + if len(component) > 1 or graph.has_edge(tuple(component)[0], tuple(component)[0]): # noqa: RUF015 + cycle_vertices.update(component) return sorted(cycle_vertices)