-
Notifications
You must be signed in to change notification settings - Fork 0
/
tree.py
52 lines (47 loc) · 2.1 KB
/
tree.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import logging
from config import load_config
from agent import Agent, SupervisorAgent
from graphviz import Digraph
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class TreeOfThought:
def __init__(self, config_path='config.json'):
self.config_path = config_path
self.knowledge_base = {}
self.max_depth = 3
self.graph = None
def decompose_problem(self, problem):
try:
config = load_config(self.config_path)
steps = config.get("decomposition_steps", [])
logger.info(f"Problem decomposed into steps: {steps}")
return steps
except Exception as e:
logger.error(f"Error decomposing the problem: {e}")
return []
def generate_thoughts(self, problem, state):
thoughts = []
try:
agent = Agent(self.config_path, problem, state, agent_id=0)
thoughts = agent.evaluate_thought()
logger.info(f"Thoughts generated for state '{state}': {thoughts}")
except Exception as e:
logger.error(f"Error generating thoughts: {e}")
return thoughts
def evaluate_thoughts_with_agents(self, problem, agent):
try:
config = load_config(self.config_path)
num_agents = config.get('num_agents', 1)
agents = [Agent(self.config_path, problem, f"Thought for agent {agent_id}, Thought: {agent['thought']} and justification: {agent['justification']}", agent_id) for agent_id in range(1, num_agents + 1)]
evaluated_thoughts_with_info = [agent.evaluate_thought() for agent in agents]
supervisor = SupervisorAgent(self.config_path, problem)
best_thought = supervisor.select_best_thought(evaluated_thoughts_with_info)
return best_thought
except Exception as e:
logger.error(f"Error evaluating thoughts by agents: {e}")
return {
"agent_id": None,
"thought": "Error during evaluation",
"justification": "Error during evaluation",
"history": []
}