agentVerse / agentverse /initialization.py
AgentVerse's picture
bump version to 0.1.8
01523b5
from __future__ import annotations
import os
from typing import Dict, List, TYPE_CHECKING
import yaml
try:
from bmtools.agent.singletool import import_all_apis, load_single_tools
except:
print(
"BMTools is not installed, tools in the simulation environment cannot be used. To install BMTools, please follow the instruction in the README.md file."
)
from agentverse.llms import llm_registry
from agentverse.agents import agent_registry
from agentverse.environments import BaseEnvironment, env_registry
from agentverse.memory import memory_registry
from agentverse.memory_manipulator import memory_manipulator_registry
from agentverse.output_parser import output_parser_registry
if TYPE_CHECKING:
from agentverse.agents import BaseAgent
def load_llm(llm_config: Dict):
llm_type = llm_config.pop("llm_type", "text-davinci-003")
return llm_registry.build(llm_type, **llm_config)
def load_memory(memory_config: Dict):
memory_type = memory_config.pop("memory_type", "chat_history")
return memory_registry.build(memory_type, **memory_config)
def load_memory_manipulator(memory_manipulator_config: Dict):
memory_manipulator_type = memory_manipulator_config.pop(
"memory_manipulator_type", "basic"
)
return memory_manipulator_registry.build(
memory_manipulator_type, **memory_manipulator_config
)
def load_tools(tool_config: List[Dict]):
if len(tool_config) == 0:
return []
all_tools_list = []
for tool in tool_config:
_, config = load_single_tools(tool["tool_name"], tool["tool_url"])
all_tools_list += import_all_apis(config)
return all_tools_list
def load_environment(env_config: Dict) -> BaseEnvironment:
env_type = env_config.pop("env_type", "basic")
return env_registry.build(env_type, **env_config)
def load_agent(agent_config: Dict) -> BaseAgent:
agent_type = agent_config.pop("agent_type", "conversation")
agent = agent_registry.build(agent_type, **agent_config)
return agent
def prepare_task_config(task, tasks_dir):
"""Read the yaml config of the given task in `tasks` directory."""
all_task_dir = tasks_dir
task_path = os.path.join(all_task_dir, task)
config_path = os.path.join(task_path, "config.yaml")
if not os.path.exists(task_path):
all_tasks = []
for task in os.listdir(all_task_dir):
if (
os.path.isdir(os.path.join(all_task_dir, task))
and task != "__pycache__"
):
all_tasks.append(task)
for subtask in os.listdir(os.path.join(all_task_dir, task)):
if (
os.path.isdir(os.path.join(all_task_dir, task, subtask))
and subtask != "__pycache__"
):
all_tasks.append(f"{task}/{subtask}")
raise ValueError(f"Task {task} not found. Available tasks: {all_tasks}")
if not os.path.exists(config_path):
raise ValueError(
"You should include the config.yaml file in the task directory"
)
task_config = yaml.safe_load(open(config_path))
for i, agent_configs in enumerate(task_config["agents"]):
agent_configs["memory"] = load_memory(agent_configs.get("memory", {}))
if agent_configs.get("tool_memory", None) is not None:
agent_configs["tool_memory"] = load_memory(agent_configs["tool_memory"])
llm = load_llm(agent_configs.get("llm", "text-davinci-003"))
agent_configs["llm"] = llm
memory_manipulator = load_memory_manipulator(
agent_configs.get("memory_manipulator", {})
)
agent_configs["memory_manipulator"] = memory_manipulator
agent_configs["tools"] = load_tools(agent_configs.get("tools", []))
# Build the output parser
output_parser_config = agent_configs.get("output_parser", {"type": "dummy"})
if output_parser_config.get("type", None) == "role_assigner":
output_parser_config["cnt_critic_agents"] = task_config.get(
"cnt_critic_agents", 0
)
output_parser_name = output_parser_config.pop("type", task)
agent_configs["output_parser"] = output_parser_registry.build(
output_parser_name, **output_parser_config
)
return task_config