MCPcopy Index your code
hub / github.com/OpenBMB/ToolBench / ExecutionGraph

Class ExecutionGraph

toolbench/tooleval/evaluation/dataclass.py:65–272  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

63 return str(self.edge_id)
64
65class ExecutionGraph(BaseModel):
66 init_node:Optional[GID] = None
67 nodes:Dict[GID,ExecutionNode] = {}
68 edges:Dict[GID,Dict[GID,DirectedEdge]] = {}
69
70 def convert_to_dict(self):
71 data = []
72 all_start_nodes = [node.node_id for node in self.nodes.values() if node.in_degree == 0]
73 all_visited_nodes = set()
74 for node in all_start_nodes:
75 def dfs(node:ExecutionNode)->Dict[Any,Any]:
76 if node.node_id in all_visited_nodes:
77 return None
78 all_visited_nodes.add(node.node_id)
79 node_json={
80 'role':node.role,
81 'message':node.message if node.role != 'system' and node.role !='user' else '',
82 'next':[]
83 }
84 for next_node in self.get_adjacent_node(node):
85 next_node_dict = dfs(self.nodes[next_node])
86 if next_node_dict is not None:
87 node_json['next'].append(next_node_dict)
88 return node_json
89
90 data.append(dfs(self.nodes[node]))
91
92 return data
93
94 def reduce_graph_to_sequence(self):
95 # random walk to a leaf node
96 eg = ExecutionGraph()
97 node = self.nodes[self.init_node]
98 eg.set_init_node(node)
99 last_node = node
100 adj_nodes = self.get_adjacent_node(node)
101 while len(adj_nodes)>0:
102 node = self.nodes[random.choice(adj_nodes)]
103 adj_nodes = self.get_adjacent_node(node)
104 eg.add_node(node)
105 eg[last_node,node] = None
106 last_node = node
107 return eg
108
109 def draw(self):
110 import pygraphviz as pgv
111 G = pgv.AGraph(directed=True)
112 G.add_nodes_from([str(node) for node in self.nodes.values()])
113 VIS_CONFIG={
114 'system':{'shape':'plaintext'},
115 'user': {'fillcolor':'yellow','style':'filled','shape':'circle'},
116 'tool': {
117 # 'fillcolor':'red','style':'filled',
118 'shape':'diamond'},
119 'assistant': {
120 # 'fillcolor':'green','style':'filled',
121 'shape':'box'}
122 }

Callers 5

process_valid_dataFunction · 0.90
process_invalid_dataFunction · 0.90
process_valid_dataFunction · 0.90
process_invalid_dataFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected