(node:ExecutionNode)
| 124 | |
| 125 | # purify the graph |
| 126 | def purify_graph(node:ExecutionNode): |
| 127 | if node.role == 'Action': |
| 128 | adj_nodes = eg.get_adjacent_node(node) |
| 129 | for adj_node in adj_nodes: |
| 130 | adj_node = eg[adj_node] |
| 131 | if adj_node.role == 'Action Input': |
| 132 | node.role = 'tool' |
| 133 | node.message = { |
| 134 | 'name':node.message['description'], |
| 135 | 'arguments':(adj_node.message['description']), |
| 136 | 'response':(adj_node.message['observation']) |
| 137 | |
| 138 | } |
| 139 | # remove adj_node |
| 140 | adj_node = eg.pop_node(adj_node) |
| 141 | to_nodes = eg.edges.pop(adj_node.node_id,{}) |
| 142 | eg.edges[node.node_id].update(to_nodes) |
| 143 | eg.edges[node.node_id].pop(adj_node.node_id) |
| 144 | node.out_degree += len(to_nodes) |
| 145 | break |
| 146 | elif node.role == 'Thought': |
| 147 | node.role = 'assistant' |
| 148 | node.message = node.message['description'] |
| 149 | elif node.role == 'Action Input': |
| 150 | print('Founding Extra Action Input Node') |
| 151 | pass |
| 152 | elif node.role =='system' or node.role=='user': |
| 153 | pass |
| 154 | else: |
| 155 | raise Exception('Unknown role {}'.format(node.role)) |
| 156 | adj_nodes = eg.get_adjacent_node(node) |
| 157 | for adj_node in adj_nodes: |
| 158 | purify_graph(eg[adj_node]) |
| 159 | |
| 160 | purify_graph(last_node) |
| 161 | eg = eg.reduce_graph_to_sequence() |
no test coverage detected