74 lines
2.8 KiB
Python
74 lines
2.8 KiB
Python
"""Framework wrapper import tests.
|
|
|
|
Verify that each showcase package's Python agent module can be imported
|
|
and has the expected tools/functions defined. Skips packages whose
|
|
framework dependencies aren't installed locally.
|
|
"""
|
|
|
|
import importlib
|
|
import sys
|
|
import os
|
|
import pytest
|
|
|
|
SHOWCASE_ROOT = os.path.join(os.path.dirname(__file__), "..", "..", "..", "packages")
|
|
SHARED_PYTHON = os.path.join(os.path.dirname(__file__), "..")
|
|
|
|
# Ensure shared tools are importable
|
|
if SHARED_PYTHON not in sys.path:
|
|
sys.path.insert(0, SHARED_PYTHON)
|
|
|
|
|
|
def _try_import_agent(package_name, agent_module_path, agent_module_name):
|
|
"""Try to import a package's agent module. Returns (module, error)."""
|
|
agent_dir = os.path.join(SHOWCASE_ROOT, package_name, *agent_module_path.split("/"))
|
|
if agent_dir not in sys.path:
|
|
sys.path.insert(0, agent_dir)
|
|
try:
|
|
# Remove cached module if present
|
|
if agent_module_name in sys.modules:
|
|
del sys.modules[agent_module_name]
|
|
mod = importlib.import_module(agent_module_name)
|
|
return mod, None
|
|
except ImportError as e:
|
|
return None, str(e)
|
|
finally:
|
|
if agent_dir in sys.path:
|
|
sys.path.remove(agent_dir)
|
|
|
|
|
|
# Each entry: (package_name, path_to_agent_dir, module_name, expected_attributes)
|
|
PACKAGES = [
|
|
("langgraph-python", "src", "agents.main", ["graph"]),
|
|
(
|
|
"langgraph-python",
|
|
"src",
|
|
"agents.tools",
|
|
["query_data", "get_weather", "schedule_meeting"],
|
|
),
|
|
("langgraph-fastapi", "src/agents", "src.agent", ["graph"]),
|
|
("pydantic-ai", "src", "agents.agent", ["agent"]),
|
|
("crewai-crews", "src", "agents.crew", ["LatestAiDevelopment"]),
|
|
("google-adk", "src", "agents.main", ["sales_pipeline_agent"]),
|
|
("agno", "src", "agents.main", ["agent"]),
|
|
("claude-sdk-python", "src", "agents.agent", ["create_app"]),
|
|
("ag2", "src", "agents.agent", ["agent"]),
|
|
("strands", "src", "agents.agent", ["strands_agent", "agui_agent"]),
|
|
("llamaindex", "src", "agents.agent", ["agent_router"]),
|
|
("langroid", "src", "agents.agent", ["create_agent"]),
|
|
("ms-agent-python", "src", "agents.agent", ["create_agent"]),
|
|
]
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"pkg,path,mod_name,attrs", PACKAGES, ids=[p[0] for p in PACKAGES]
|
|
)
|
|
def test_agent_import(pkg, path, mod_name, attrs):
|
|
"""Verify agent module imports and has expected attributes."""
|
|
mod, err = _try_import_agent(pkg, path, mod_name)
|
|
if err and ("No module named" in err or "cannot import name" in err):
|
|
# Framework not installed locally — skip gracefully
|
|
pytest.skip(f"Framework dependency not installed: {err}")
|
|
assert mod is not None, f"Import failed for {pkg}: {err}"
|
|
for attr in attrs:
|
|
assert hasattr(mod, attr), f"{pkg} agent missing expected attribute: {attr}"
|