gagent / tests /agents /fixtures.py
uoc's picture
GAIA agent project.
a6998ef verified
"""
Pytest configuration for agent testing.
"""
import os
import pytest
from typing import Dict, List, Optional
from gagent.agents import registry, BaseAgent, OllamaAgent, GeminiAgent, OpenAIAgent
@pytest.fixture
def agent_factory():
"""
Factory fixture to create agent instances with flexible configuration.
Returns:
Function that creates and returns an agent instance
"""
def _create_agent(
agent_type: str,
model_name: Optional[str] = None,
api_key: Optional[str] = None,
base_url: Optional[str] = None,
**kwargs,
) -> BaseAgent:
"""
Create an agent with the specified configuration.
Args:
agent_type: The type of agent to create
model_name: The model name to use
api_key: The API key to use
base_url: The base URL to use
**kwargs: Additional parameters for the agent
Returns:
An initialized agent instance
"""
# Get environment variables or defaults for any non-provided values
env_model = os.environ.get(f"{agent_type.upper()}_MODEL", "qwen3" if agent_type == "ollama" else None)
env_api_key = os.environ.get(f"{agent_type.upper()}_API_KEY", None)
env_base_url = os.environ.get(
f"{agent_type.upper()}_BASE_URL", "http://localhost:11434" if agent_type == "ollama" else None
)
return registry.get_agent(
agent_type=agent_type,
model_name=model_name or env_model,
api_key=api_key or env_api_key,
base_url=base_url or env_base_url,
**kwargs,
)
return _create_agent
@pytest.fixture
def ollama_agent(agent_factory) -> OllamaAgent:
"""Fixture to provide an Ollama agent."""
return agent_factory("ollama")
@pytest.fixture
def gemini_agent(agent_factory) -> GeminiAgent:
"""Fixture to provide a Gemini agent if environment variables are set."""
api_key = os.environ.get("GOOGLE_API_KEY", None)
if not api_key:
pytest.skip("GOOGLE_API_KEY environment variable not set")
return agent_factory("gemini")
@pytest.fixture
def openai_agent(agent_factory) -> OpenAIAgent:
"""Fixture to provide an OpenAI agent if environment variables are set."""
api_key = os.environ.get("OPENAI_API_KEY", None)
if not api_key:
pytest.skip("OPENAI_API_KEY environment variable not set")
return agent_factory("openai")
@pytest.fixture
def gaia_questions() -> List[Dict]:
"""Load GAIA questions for testing."""
import json
with open("exp/questions.json", "r") as f:
return json.load(f)
@pytest.fixture
def gaia_validation_data() -> Dict:
"""Load GAIA validation data."""
import json
validation_data = {}
with open("metadata.jsonl", "r") as f:
for line in f:
data = json.loads(line)
validation_data[data["task_id"]] = data["Final answer"]
return validation_data