Spaces:
Runtime error
Runtime error
| import asyncio | |
| import os | |
| import copy | |
| import logging | |
| from agentverse.environments.tasksolving_env.basic import BasicEnvironment | |
| from agentverse.initialization import load_agent, load_environment, prepare_task_config | |
| from agentverse.utils import AGENT_TYPES | |
| openai_logger = logging.getLogger("openai") | |
| openai_logger.setLevel(logging.WARNING) | |
| class TaskSolving: | |
| environment: BasicEnvironment | |
| task: str = "" | |
| logs: list = [] | |
| def __init__(self, environment: BasicEnvironment, task: str = ""): | |
| self.environment = environment | |
| self.task = task | |
| def from_task(cls, task: str, tasks_dir: str): | |
| """Build an AgentVerse from a task name. | |
| The task name should correspond to a directory in `tasks` directory. | |
| Then this method will load the configuration from the yaml file in that directory. | |
| """ | |
| # Prepare the config of the task | |
| task_config = prepare_task_config(task, tasks_dir) | |
| # Build the environment | |
| env_config = task_config["environment"] | |
| # Build agents for all pipeline (task) | |
| agents = {} | |
| for i, agent_config in enumerate(task_config["agents"]): | |
| agent_type = AGENT_TYPES(i) | |
| if i == 2 and agent_config.get("agent_type", "") == "critic": | |
| agent = load_agent(agent_config) | |
| agents[agent_type] = [ | |
| copy.deepcopy(agent) | |
| for _ in range(task_config.get("cnt_agents", 1) - 1) | |
| ] | |
| else: | |
| agents[agent_type] = load_agent(agent_config) | |
| env_config["agents"] = agents | |
| env_config["task_description"] = task_config.get("task_description", "") | |
| env_config["max_rounds"] = task_config.get("max_rounds", 3) | |
| environment: BasicEnvironment = load_environment(env_config) | |
| return cls(environment=environment, task=task) | |
| def run(self): | |
| """Run the environment from scratch until it is done.""" | |
| self.environment.reset() | |
| self.logs = [] | |
| advice = "No advice yet." | |
| previous_plan = "No solution yet." | |
| while not self.environment.is_done(): | |
| result, advice, previous_plan, logs, success = asyncio.run( | |
| self.environment.step(advice, previous_plan) | |
| ) | |
| self.logs += logs | |
| self.environment.report_metrics() | |
| self.save_result(previous_plan, result, self.environment.get_spend()) | |
| return previous_plan, result, self.logs | |
| def singleagent_thinking(self, preliminary_solution, advice) -> str: | |
| preliminary_solution = self.environment.solve( | |
| former_solution=preliminary_solution, | |
| critic_opinions=[(self.environment.evaluator, advice)], | |
| ) | |
| return preliminary_solution | |
| def reset(self): | |
| self.environment.reset() | |
| def save_result(self, plan: str, result: str, spend: float): | |
| """Save the result to the result file""" | |
| result_file_path = "./results/" + self.task + ".txt" | |
| os.makedirs(os.path.dirname(result_file_path), exist_ok=True) | |
| with open(result_file_path, "w") as f: | |
| f.write("[Final Plan]\n" + plan + "\n\n") | |
| f.write("[Result]\n" + result) | |
| f.write(f"[Spent]\n${spend}") | |