agentVerse / agentverse /simulation.py
AgentVerse's picture
bump version to 0.1.8
01523b5
raw
history blame
No virus
2.12 kB
import asyncio
import logging
from typing import List
# from agentverse.agents import Agent
from agentverse.agents.simulation_agent.conversation import BaseAgent
from agentverse.environments import BaseEnvironment
from agentverse.initialization import load_agent, load_environment, prepare_task_config
openai_logger = logging.getLogger("openai")
openai_logger.setLevel(logging.WARNING)
class Simulation:
def __init__(self, agents: List[BaseAgent], environment: BaseEnvironment):
self.agents = agents
self.environment = environment
@classmethod
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 agents
agents = []
for agent_configs in task_config["agents"]:
agent = load_agent(agent_configs)
agents.append(agent)
# Build the environment
env_config = task_config["environment"]
env_config["agents"] = agents
environment = load_environment(env_config)
return cls(agents, environment)
def run(self):
"""Run the environment from scratch until it is done."""
self.environment.reset()
while not self.environment.is_done():
asyncio.run(self.environment.step())
self.environment.report_metrics()
def reset(self):
self.environment.reset()
for agent in self.agents:
agent.reset()
def next(self, *args, **kwargs):
"""Run the environment for one step and return the return message."""
return_message = asyncio.run(self.environment.step(*args, **kwargs))
return return_message
def update_state(self, *args, **kwargs):
"""Run the environment for one step and return the return message."""
self.environment.update_state(*args, **kwargs)