(node:ExecutionNode)
| 149 | |
| 150 | # purify the graph |
| 151 | def purify_graph(node:ExecutionNode): |
| 152 | if node.role == 'Action': |
| 153 | adj_nodes = eg.get_adjacent_node(node) |
| 154 | for adj_node in adj_nodes: |
| 155 | adj_node = eg[adj_node] |
| 156 | if adj_node.role == 'Action Input': |
| 157 | node.role = 'tool' |
| 158 | node.message = { |
| 159 | 'name':node.message['description'], |
| 160 | 'arguments':(adj_node.message['description']), |
| 161 | 'response':(adj_node.message['observation']) |
| 162 | |
| 163 | } |
| 164 | # remove adj_node |
| 165 | adj_node = eg.pop_node(adj_node) |
| 166 | to_nodes = eg.edges.pop(adj_node.node_id,{}) |
| 167 | eg.edges[node.node_id].update(to_nodes) |
| 168 | eg.edges[node.node_id].pop(adj_node.node_id) |
| 169 | node.out_degree += len(to_nodes) |
| 170 | break |
| 171 | elif node.role == 'Thought': |
| 172 | node.role = 'assistant' |
| 173 | node.message = node.message['description'] |
| 174 | elif node.role == 'Action Input': |
| 175 | print('Founding Extra Action Input Node') |
| 176 | pass |
| 177 | elif node.role =='system' or node.role=='user': |
| 178 | pass |
| 179 | else: |
| 180 | raise Exception('Unknown role {}'.format(node.role)) |
| 181 | adj_nodes = eg.get_adjacent_node(node) |
| 182 | for adj_node in adj_nodes: |
| 183 | purify_graph(eg[adj_node]) |
| 184 | |
| 185 | purify_graph(last_node) |
| 186 | eg = eg.reduce_graph_to_sequence() |
no test coverage detected