"""GraphWorkflow explicit DAG builder.""" from __future__ import annotations from typing import Any, Iterable from beaver.coordinator.models import ExecutionGraph from .base import ( WorkflowAgentSpec, build_graph_from_dependencies, edges_to_dependencies, parse_agents, validate_output_agent, ) WORKFLOW_NAME = "GraphWorkflow" def build_graph( *, task: str, agents: Iterable[WorkflowAgentSpec | dict[str, Any]], edges: Iterable[tuple[str, str] | list[str]], output_agent: str, allow_disconnected: bool = False, ) -> ExecutionGraph: del task parsed = parse_agents(agents) edge_list = list(edges or []) if not edge_list: raise ValueError("GraphWorkflow requires edges") dependencies = edges_to_dependencies(agents=parsed, edges=edge_list) validate_output_agent( agents=parsed, dependencies=dependencies, output_agent=str(output_agent or "").strip(), allow_disconnected=allow_disconnected, ) return build_graph_from_dependencies( workflow_name=WORKFLOW_NAME, strategy="dag", agents=parsed, dependencies=dependencies, )