| 92 | |
| 93 | # use planner evidences to assign tasks to respective workers. |
| 94 | def _get_worker_evidences(self): |
| 95 | for e, tool_call in self.planner_evidences.items(): |
| 96 | if "[" not in tool_call: |
| 97 | self.worker_evidences[e] = tool_call |
| 98 | continue |
| 99 | tool, tool_input = tool_call.split("[", 1) |
| 100 | tool_input = tool_input[:-1] |
| 101 | # find variables in input and replace with previous evidences |
| 102 | for var in re.findall(r"#E\d+", tool_input): |
| 103 | if var in self.worker_evidences: |
| 104 | tool_input = tool_input.replace(var, "[" + self.worker_evidences[var] + "]") |
| 105 | if tool in self.workers: |
| 106 | self.worker_evidences[e] = WORKER_REGISTRY[tool].run(tool_input) |
| 107 | if tool == "Google": |
| 108 | self.tool_counter["Google"] = self.tool_counter.get("Google", 0) + 1 # number of query |
| 109 | elif tool == "LLM": |
| 110 | self.tool_counter["LLM_token"] = self.tool_counter.get("LLM_token", 0) + len( |
| 111 | tool_input + self.worker_evidences[e]) // 4 |
| 112 | elif tool == "Calculator": |
| 113 | self.tool_counter["Calculator_token"] = self.tool_counter.get("Calculator_token", 0) \ |
| 114 | + len( |
| 115 | LLMMathChain(llm=OpenAI(), verbose=False).prompt.template + tool_input + self.worker_evidences[ |
| 116 | e]) // 4 |
| 117 | else: |
| 118 | self.worker_evidences[e] = "No evidence found" |
| 119 | |
| 120 | def _reinitialize(self): |
| 121 | self.plans = [] |