autogen/test/agentchat/contrib/test_agent_builder.py
Linxin Song e673500129
[AutoBuild] Supporting build agents from library; supporting generating agent descriptions (#1039)
* try to fix blog

* modify blog

* fix test error in #717; fix blog typo in installation; update blogs with output examples.

* pre-commit

* pre-commit

* Update website/blog/2023-11-26-Agent-AutoBuild/index.mdx

Co-authored-by: Qingyun Wu <qingyun.wu@psu.edu>

* add future work

* fix grammar

* update agent_builder

* solve #941; add detailed debug info; support json string config

* pre-commit

* solve #954

* pre-commit

* [new feature] build group chat agents from library.

* pre-commit

* add authors' info in notebook; add a new notebook for build_from_library; reduce prompt effort

* update test and example for build_from_library

* pre-commit

* add notebook; update docs

* change notebook name

* change description for notebook and doc

* remove default value for default_llm_config

* add embedding similarity agent selection

* pre-commit

* update test

* add dependency installation in github workflow

* update test

* pre-commit

* update notebook

* support directly json as library; support customize embedding model

* update test

* pre-commit

* update github test workflow

* Update autobuild_agent_library.ipynb

* add agent description

* refine prompt; update notebook

* pre-commit

* update test example

* update test

* update test

* update test

* change `config_path` to `config_path_or_env`; update test

* pre-commit

* update test

* update test

* update test: add config_file_location

* change `config_path_or_env` to `config_file_or_env`

* update test

* solve noqa

* fix import error for conftest

* fix test error

* pre-commit

* * update error message in `_create_agent`.
* replace `gpt-4-1106-preview` to `gpt-4` in test file.

* add comment on local server creation; modify notebook; update contrib-openai.yml for test; add autobuild option in setup.py; add autotest model name statement

* move import huggingface_hub to _create_agent

* pre-commit

* add uncover comment in the endpoint creation code block

* recover contrib-openai.yml for merge

---------

Co-authored-by: Jieyu Zhang <jieyuz2@cs.washington.edu>
Co-authored-by: Qingyun Wu <qingyun.wu@psu.edu>
2024-01-06 17:23:23 +00:00

217 lines
6.7 KiB
Python

import pytest
import os
import json
import sys
from autogen.agentchat.contrib.agent_builder import AgentBuilder
sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
sys.path.append(os.path.join(os.path.dirname(__file__), "../.."))
from conftest import skip_openai # noqa: E402
from test_assistant_agent import OAI_CONFIG_LIST, KEY_LOC # noqa: E402
here = os.path.abspath(os.path.dirname(__file__))
try:
import openai
except ImportError:
skip = True
else:
skip = False or skip_openai
def _config_check(config):
# check config loading
assert config.get("coding", None) is not None
assert config.get("default_llm_config", None) is not None
assert config.get("code_execution_config", None) is not None
for agent_config in config["agent_configs"]:
assert agent_config.get("name", None) is not None
assert agent_config.get("model", None) is not None
assert agent_config.get("description", None) is not None
assert agent_config.get("system_message", None) is not None
@pytest.mark.skipif(
skip,
reason="do not run when dependency is not installed or requested to skip",
)
def test_build():
builder = AgentBuilder(
config_file_or_env=OAI_CONFIG_LIST, config_file_location=KEY_LOC, builder_model="gpt-4", agent_model="gpt-4"
)
building_task = (
"Find a paper on arxiv by programming, and analyze its application in some domain. "
"For example, find a recent paper about gpt-4 on arxiv "
"and find its potential applications in software."
)
agent_list, agent_config = builder.build(
building_task=building_task,
default_llm_config={"temperature": 0},
code_execution_config={
"last_n_messages": 2,
"work_dir": f"{here}/test_agent_scripts",
"timeout": 60,
"use_docker": "python:3",
},
)
_config_check(agent_config)
# check number of agents
assert len(agent_config["agent_configs"]) <= builder.max_agents
# check system message
for cfg in agent_config["agent_configs"]:
assert "TERMINATE" in cfg["system_message"]
@pytest.mark.skipif(
skip,
reason="do not run when dependency is not installed or requested to skip",
)
def test_build_from_library():
builder = AgentBuilder(
config_file_or_env=OAI_CONFIG_LIST, config_file_location=KEY_LOC, builder_model="gpt-4", agent_model="gpt-4"
)
building_task = (
"Find a paper on arxiv by programming, and analyze its application in some domain. "
"For example, find a recent paper about gpt-4 on arxiv "
"and find its potential applications in software."
)
agent_list, agent_config = builder.build_from_library(
building_task=building_task,
library_path_or_json=f"{here}/example_agent_builder_library.json",
default_llm_config={"temperature": 0},
code_execution_config={
"last_n_messages": 2,
"work_dir": f"{here}/test_agent_scripts",
"timeout": 60,
"use_docker": "python:3",
},
)
_config_check(agent_config)
# check number of agents
assert len(agent_config["agent_configs"]) <= builder.max_agents
# check system message
for cfg in agent_config["agent_configs"]:
assert "TERMINATE" in cfg["system_message"]
builder.clear_all_agents()
# test embedding similarity selection
agent_list, agent_config = builder.build_from_library(
building_task=building_task,
library_path_or_json=f"{here}/example_agent_builder_library.json",
default_llm_config={"temperature": 0},
embedding_model="all-mpnet-base-v2",
code_execution_config={
"last_n_messages": 2,
"work_dir": f"{here}/test_agent_scripts",
"timeout": 60,
"use_docker": "python:3",
},
)
_config_check(agent_config)
# check number of agents
assert len(agent_config["agent_configs"]) <= builder.max_agents
# check system message
for cfg in agent_config["agent_configs"]:
assert "TERMINATE" in cfg["system_message"]
@pytest.mark.skipif(
skip,
reason="do not run when dependency is not installed or requested to skip",
)
def test_save():
builder = AgentBuilder(
config_file_or_env=OAI_CONFIG_LIST, config_file_location=KEY_LOC, builder_model="gpt-4", agent_model="gpt-4"
)
building_task = (
"Find a paper on arxiv by programming, and analyze its application in some domain. "
"For example, find a recent paper about gpt-4 on arxiv "
"and find its potential applications in software."
)
builder.build(
building_task=building_task,
default_llm_config={"temperature": 0},
code_execution_config={
"last_n_messages": 2,
"work_dir": f"{here}/test_agent_scripts",
"timeout": 60,
"use_docker": "python:3",
},
)
saved_files = builder.save(f"{here}/example_save_agent_builder_config.json")
# check config file path
assert os.path.isfile(saved_files)
saved_configs = json.load(open(saved_files))
_config_check(saved_configs)
@pytest.mark.skipif(
skip,
reason="do not run when dependency is not installed or requested to skip",
)
def test_load():
builder = AgentBuilder(
config_file_or_env=OAI_CONFIG_LIST, config_file_location=KEY_LOC, builder_model="gpt-4", agent_model="gpt-4"
)
config_save_path = f"{here}/example_test_agent_builder_config.json"
json.load(open(config_save_path, "r"))
agent_list, loaded_agent_configs = builder.load(
config_save_path,
code_execution_config={
"last_n_messages": 2,
"work_dir": f"{here}/test_agent_scripts",
"timeout": 60,
"use_docker": "python:3",
},
)
print(loaded_agent_configs)
_config_check(loaded_agent_configs)
@pytest.mark.skipif(
skip,
reason="do not run when dependency is not installed or requested to skip",
)
def test_clear_agent():
builder = AgentBuilder(
config_file_or_env=OAI_CONFIG_LIST, config_file_location=KEY_LOC, builder_model="gpt-4", agent_model="gpt-4"
)
config_save_path = f"{here}/example_test_agent_builder_config.json"
builder.load(
config_save_path,
code_execution_config={
"last_n_messages": 2,
"work_dir": f"{here}/test_agent_scripts",
"timeout": 60,
"use_docker": "python:3",
},
)
builder.clear_all_agents()
# check if the agent cleared
assert len(builder.agent_procs_assign) == 0
if __name__ == "__main__":
test_build()
test_build_from_library()
test_save()
test_load()
test_clear_agent()