aboutsummaryrefslogtreecommitdiff
path: root/autogpts/autogpt/tests/conftest.py
diff options
context:
space:
mode:
Diffstat (limited to 'autogpts/autogpt/tests/conftest.py')
-rw-r--r--autogpts/autogpt/tests/conftest.py159
1 files changed, 159 insertions, 0 deletions
diff --git a/autogpts/autogpt/tests/conftest.py b/autogpts/autogpt/tests/conftest.py
new file mode 100644
index 000000000..a73aa7571
--- /dev/null
+++ b/autogpts/autogpt/tests/conftest.py
@@ -0,0 +1,159 @@
+import os
+import uuid
+from pathlib import Path
+from tempfile import TemporaryDirectory
+
+import pytest
+import yaml
+from pytest_mock import MockerFixture
+
+from autogpt.agents.agent import Agent, AgentConfiguration, AgentSettings
+from autogpt.app.main import _configure_openai_provider
+from autogpt.config import AIProfile, Config, ConfigBuilder
+from autogpt.core.resource.model_providers import ChatModelProvider, OpenAIProvider
+from autogpt.file_workspace.local import (
+ FileWorkspace,
+ FileWorkspaceConfiguration,
+ LocalFileWorkspace,
+)
+from autogpt.llm.api_manager import ApiManager
+from autogpt.logs.config import configure_logging
+from autogpt.models.command_registry import CommandRegistry
+
+pytest_plugins = [
+ "tests.integration.agent_factory",
+ "tests.integration.memory.utils",
+ "tests.vcr",
+]
+
+
+@pytest.fixture()
+def tmp_project_root(tmp_path: Path) -> Path:
+ return tmp_path
+
+
+@pytest.fixture()
+def app_data_dir(tmp_project_root: Path) -> Path:
+ dir = tmp_project_root / "data"
+ dir.mkdir(parents=True, exist_ok=True)
+ return dir
+
+
+@pytest.fixture()
+def agent_data_dir(app_data_dir: Path) -> Path:
+ return app_data_dir / "agents/AutoGPT"
+
+
+@pytest.fixture()
+def workspace_root(agent_data_dir: Path) -> Path:
+ return agent_data_dir / "workspace"
+
+
+@pytest.fixture()
+def workspace(workspace_root: Path) -> FileWorkspace:
+ workspace = LocalFileWorkspace(FileWorkspaceConfiguration(root=workspace_root))
+ workspace.initialize()
+ return workspace
+
+
+@pytest.fixture
+def temp_plugins_config_file():
+ """
+ Create a plugins_config.yaml file in a temp directory
+ so that it doesn't mess with existing ones.
+ """
+ config_directory = TemporaryDirectory()
+ config_file = Path(config_directory.name) / "plugins_config.yaml"
+ with open(config_file, "w+") as f:
+ f.write(yaml.dump({}))
+
+ yield config_file
+
+
+@pytest.fixture(scope="function")
+def config(
+ temp_plugins_config_file: Path,
+ tmp_project_root: Path,
+ app_data_dir: Path,
+ mocker: MockerFixture,
+):
+ if not os.environ.get("OPENAI_API_KEY"):
+ os.environ["OPENAI_API_KEY"] = "sk-dummy"
+ config = ConfigBuilder.build_config_from_env(project_root=tmp_project_root)
+
+ config.app_data_dir = app_data_dir
+
+ config.plugins_dir = "tests/unit/data/test_plugins"
+ config.plugins_config_file = temp_plugins_config_file
+
+ config.logging.log_dir = Path(__file__).parent / "logs"
+ config.logging.plain_console_output = True
+ config.noninteractive_mode = True
+
+ # avoid circular dependency
+ from autogpt.plugins.plugins_config import PluginsConfig
+
+ config.plugins_config = PluginsConfig.load_config(
+ plugins_config_file=config.plugins_config_file,
+ plugins_denylist=config.plugins_denylist,
+ plugins_allowlist=config.plugins_allowlist,
+ )
+ yield config
+
+
+@pytest.fixture(scope="session")
+def setup_logger(config: Config):
+ configure_logging(**config.logging.dict())
+
+
+@pytest.fixture()
+def api_manager() -> ApiManager:
+ if ApiManager in ApiManager._instances:
+ del ApiManager._instances[ApiManager]
+ return ApiManager()
+
+
+@pytest.fixture
+def llm_provider(config: Config) -> OpenAIProvider:
+ return _configure_openai_provider(config)
+
+
+@pytest.fixture
+def agent(
+ agent_data_dir: Path, config: Config, llm_provider: ChatModelProvider
+) -> Agent:
+ ai_profile = AIProfile(
+ ai_name="Base",
+ ai_role="A base AI",
+ ai_goals=[],
+ )
+
+ command_registry = CommandRegistry()
+
+ agent_prompt_config = Agent.default_settings.prompt_config.copy(deep=True)
+ agent_prompt_config.use_functions_api = config.openai_functions
+
+ agent_settings = AgentSettings(
+ name=Agent.default_settings.name,
+ description=Agent.default_settings.description,
+ agent_id=f"AutoGPT-test-agent-{str(uuid.uuid4())[:8]}",
+ ai_profile=ai_profile,
+ config=AgentConfiguration(
+ fast_llm=config.fast_llm,
+ smart_llm=config.smart_llm,
+ allow_fs_access=not config.restrict_to_workspace,
+ use_functions_api=config.openai_functions,
+ plugins=config.plugins,
+ ),
+ prompt_config=agent_prompt_config,
+ history=Agent.default_settings.history.copy(deep=True),
+ )
+
+ agent = Agent(
+ settings=agent_settings,
+ llm_provider=llm_provider,
+ command_registry=command_registry,
+ legacy_config=config,
+ )
+ agent.attach_fs(agent_data_dir)
+ return agent