mirror of
https://github.com/csunny/DB-GPT.git
synced 2025-09-12 12:37:14 +00:00
docs: New AWEL tutorial (#1245)
This commit is contained in:
@@ -274,6 +274,8 @@ class DAGNode(DAGLifecycle, DependencyMixin, ViewMixin, ABC):
|
||||
node_id = self._dag._new_node_id()
|
||||
self._node_id: Optional[str] = node_id
|
||||
self._node_name: Optional[str] = node_name
|
||||
if self._dag:
|
||||
self._dag._append_node(self)
|
||||
|
||||
@property
|
||||
def node_id(self) -> str:
|
||||
@@ -421,7 +423,7 @@ class DAGNode(DAGLifecycle, DependencyMixin, ViewMixin, ABC):
|
||||
def __repr__(self):
|
||||
"""Return the representation of current DAGNode."""
|
||||
cls_name = self.__class__.__name__
|
||||
if self.node_name and self.node_name:
|
||||
if self.node_id and self.node_name:
|
||||
return f"{cls_name}(node_id={self.node_id}, node_name={self.node_name})"
|
||||
if self.node_id:
|
||||
return f"{cls_name}(node_id={self.node_id})"
|
||||
@@ -430,6 +432,19 @@ class DAGNode(DAGLifecycle, DependencyMixin, ViewMixin, ABC):
|
||||
else:
|
||||
return f"{cls_name}"
|
||||
|
||||
@property
|
||||
def graph_str(self):
|
||||
"""Return the graph string of current DAGNode."""
|
||||
cls_name = self.__class__.__name__
|
||||
if self.node_id and self.node_name:
|
||||
return f"{self.node_id}({cls_name},{self.node_name})"
|
||||
if self.node_id:
|
||||
return f"{self.node_id}({cls_name})"
|
||||
if self.node_name:
|
||||
return f"{self.node_name}_{cls_name}({cls_name})"
|
||||
else:
|
||||
return f"{cls_name}"
|
||||
|
||||
def __str__(self):
|
||||
"""Return the string of current DAGNode."""
|
||||
return self.__repr__()
|
||||
@@ -798,12 +813,16 @@ def _handle_dag_nodes(
|
||||
_handle_dag_nodes(is_down_to_up, level, node, func)
|
||||
|
||||
|
||||
def _visualize_dag(dag: DAG, view: bool = True, **kwargs) -> Optional[str]:
|
||||
def _visualize_dag(
|
||||
dag: DAG, view: bool = True, generate_mermaid: bool = True, **kwargs
|
||||
) -> Optional[str]:
|
||||
"""Visualize the DAG.
|
||||
|
||||
Args:
|
||||
dag (DAG): The DAG to visualize
|
||||
view (bool, optional): Whether view the DAG graph. Defaults to True.
|
||||
generate_mermaid (bool, optional): Whether to generate a Mermaid syntax file.
|
||||
Defaults to True.
|
||||
|
||||
Returns:
|
||||
Optional[str]: The filename of the DAG graph
|
||||
@@ -815,15 +834,20 @@ def _visualize_dag(dag: DAG, view: bool = True, **kwargs) -> Optional[str]:
|
||||
return None
|
||||
|
||||
dot = Digraph(name=dag.dag_id)
|
||||
mermaid_str = "graph TD;\n" # Initialize Mermaid graph definition
|
||||
# Record the added edges to avoid adding duplicate edges
|
||||
added_edges = set()
|
||||
|
||||
def add_edges(node: DAGNode):
|
||||
nonlocal mermaid_str
|
||||
if node.downstream:
|
||||
for downstream_node in node.downstream:
|
||||
# Check if the edge has been added
|
||||
if (str(node), str(downstream_node)) not in added_edges:
|
||||
dot.edge(str(node), str(downstream_node))
|
||||
mermaid_str += (
|
||||
f" {node.graph_str} --> {downstream_node.graph_str};\n"
|
||||
)
|
||||
added_edges.add((str(node), str(downstream_node)))
|
||||
add_edges(downstream_node)
|
||||
|
||||
@@ -839,4 +863,13 @@ def _visualize_dag(dag: DAG, view: bool = True, **kwargs) -> Optional[str]:
|
||||
|
||||
kwargs["directory"] = LOGDIR
|
||||
|
||||
# Generate Mermaid syntax file if requested
|
||||
if generate_mermaid:
|
||||
mermaid_filename = filename.replace(".gv", ".md")
|
||||
with open(
|
||||
f"{kwargs.get('directory', '')}/{mermaid_filename}", "w"
|
||||
) as mermaid_file:
|
||||
logger.info(f"Writing Mermaid syntax to {mermaid_filename}")
|
||||
mermaid_file.write(mermaid_str)
|
||||
|
||||
return dot.render(filename, view=view, **kwargs)
|
||||
|
Reference in New Issue
Block a user