|
|
|
|
|
""" |
|
|
Integration test for all GAIA Agent tools |
|
|
Tests Wikipedia, Web Search, Calculator, and File Processor tools |
|
|
""" |
|
|
|
|
|
import os |
|
|
import sys |
|
|
import time |
|
|
import tempfile |
|
|
from pathlib import Path |
|
|
|
|
|
|
|
|
sys.path.insert(0, str(Path(__file__).parent)) |
|
|
|
|
|
from tools.wikipedia_tool import WikipediaTool |
|
|
from tools.web_search_tool import WebSearchTool |
|
|
from tools.calculator import CalculatorTool |
|
|
from tools.file_processor import FileProcessorTool |
|
|
|
|
|
def test_all_tools(): |
|
|
"""Comprehensive test of all GAIA agent tools""" |
|
|
|
|
|
print("🧪 GAIA Agent Tools Integration Test") |
|
|
print("=" * 50) |
|
|
|
|
|
results = [] |
|
|
start_time = time.time() |
|
|
|
|
|
|
|
|
print("\n📚 Testing Wikipedia Tool...") |
|
|
wikipedia_tool = WikipediaTool() |
|
|
test_cases = [ |
|
|
"Albert Einstein", |
|
|
{"query": "Machine Learning", "action": "summary"} |
|
|
] |
|
|
|
|
|
for i, test_case in enumerate(test_cases, 1): |
|
|
result = wikipedia_tool.execute(test_case) |
|
|
success = result.success and result.result.get('found', False) |
|
|
results.append(('Wikipedia', f'Test {i}', success, result.execution_time)) |
|
|
status = "✅ PASS" if success else "❌ FAIL" |
|
|
print(f" Test {i}: {status} ({result.execution_time:.2f}s)") |
|
|
|
|
|
|
|
|
print("\n🔍 Testing Web Search Tool...") |
|
|
web_search_tool = WebSearchTool() |
|
|
test_cases = [ |
|
|
"Python programming", |
|
|
{"query": "https://www.python.org", "action": "extract"} |
|
|
] |
|
|
|
|
|
for i, test_case in enumerate(test_cases, 1): |
|
|
result = web_search_tool.execute(test_case) |
|
|
success = result.success and result.result.get('found', False) |
|
|
results.append(('Web Search', f'Test {i}', success, result.execution_time)) |
|
|
status = "✅ PASS" if success else "❌ FAIL" |
|
|
print(f" Test {i}: {status} ({result.execution_time:.2f}s)") |
|
|
|
|
|
|
|
|
print("\n🧮 Testing Calculator Tool...") |
|
|
calculator_tool = CalculatorTool() |
|
|
test_cases = [ |
|
|
"2 + 3 * 4", |
|
|
{"operation": "statistics", "data": [1, 2, 3, 4, 5]}, |
|
|
{"operation": "convert", "value": 100, "from_unit": "cm", "to_unit": "m"} |
|
|
] |
|
|
|
|
|
for i, test_case in enumerate(test_cases, 1): |
|
|
result = calculator_tool.execute(test_case) |
|
|
success = result.success and result.result.get('success', False) |
|
|
results.append(('Calculator', f'Test {i}', success, result.execution_time)) |
|
|
status = "✅ PASS" if success else "❌ FAIL" |
|
|
print(f" Test {i}: {status} ({result.execution_time:.3f}s)") |
|
|
|
|
|
|
|
|
print("\n📁 Testing File Processor Tool...") |
|
|
file_processor_tool = FileProcessorTool() |
|
|
|
|
|
|
|
|
with tempfile.TemporaryDirectory() as temp_dir: |
|
|
|
|
|
csv_path = os.path.join(temp_dir, "test.csv") |
|
|
with open(csv_path, 'w') as f: |
|
|
f.write("name,value\nTest,42\nData,100") |
|
|
|
|
|
|
|
|
py_path = os.path.join(temp_dir, "test.py") |
|
|
with open(py_path, 'w') as f: |
|
|
f.write("def test_function():\n return 'Hello, World!'") |
|
|
|
|
|
test_files = [csv_path, py_path] |
|
|
|
|
|
for i, file_path in enumerate(test_files, 1): |
|
|
result = file_processor_tool.execute(file_path) |
|
|
success = result.success and result.result.get('success', False) |
|
|
results.append(('File Processor', f'Test {i}', success, result.execution_time)) |
|
|
status = "✅ PASS" if success else "❌ FAIL" |
|
|
file_type = os.path.splitext(file_path)[1] |
|
|
print(f" Test {i} ({file_type}): {status} ({result.execution_time:.3f}s)") |
|
|
|
|
|
|
|
|
total_time = time.time() - start_time |
|
|
passed_tests = sum(1 for _, _, success, _ in results if success) |
|
|
total_tests = len(results) |
|
|
|
|
|
print("\n" + "=" * 50) |
|
|
print("📊 INTEGRATION TEST RESULTS") |
|
|
print("=" * 50) |
|
|
|
|
|
|
|
|
tools = {} |
|
|
for tool, test, success, exec_time in results: |
|
|
if tool not in tools: |
|
|
tools[tool] = {'passed': 0, 'total': 0, 'time': 0} |
|
|
tools[tool]['total'] += 1 |
|
|
tools[tool]['time'] += exec_time |
|
|
if success: |
|
|
tools[tool]['passed'] += 1 |
|
|
|
|
|
for tool, stats in tools.items(): |
|
|
pass_rate = (stats['passed'] / stats['total']) * 100 |
|
|
avg_time = stats['time'] / stats['total'] |
|
|
status = "✅" if pass_rate == 100 else "⚠️" if pass_rate >= 80 else "❌" |
|
|
print(f"{status} {tool:15}: {stats['passed']}/{stats['total']} ({pass_rate:5.1f}%) - Avg: {avg_time:.3f}s") |
|
|
|
|
|
|
|
|
overall_pass_rate = (passed_tests / total_tests) * 100 |
|
|
print(f"\n🎯 OVERALL: {passed_tests}/{total_tests} tests passed ({overall_pass_rate:.1f}%)") |
|
|
print(f"⏱️ TOTAL TIME: {total_time:.2f} seconds") |
|
|
|
|
|
|
|
|
if overall_pass_rate >= 90: |
|
|
print("🚀 EXCELLENT! All tools working correctly - Ready for agent integration!") |
|
|
return True |
|
|
elif overall_pass_rate >= 80: |
|
|
print("✅ GOOD! Most tools working - Minor issues to address") |
|
|
return True |
|
|
else: |
|
|
print("⚠️ NEEDS WORK! Significant issues found - Check individual tool failures") |
|
|
return False |
|
|
|
|
|
def test_tool_coordination(): |
|
|
"""Test how tools can work together in a coordinated workflow""" |
|
|
|
|
|
print("\n🤝 Testing Tool Coordination...") |
|
|
print("-" * 30) |
|
|
|
|
|
|
|
|
try: |
|
|
|
|
|
wiki_tool = WikipediaTool() |
|
|
wiki_result = wiki_tool.execute("Python (programming language)") |
|
|
|
|
|
if wiki_result.success: |
|
|
print("✅ Step 1: Wikipedia lookup successful") |
|
|
|
|
|
|
|
|
web_tool = WebSearchTool() |
|
|
web_result = web_tool.execute("Python programming language features") |
|
|
|
|
|
if web_result.success: |
|
|
print("✅ Step 2: Web search successful") |
|
|
|
|
|
|
|
|
calc_tool = CalculatorTool() |
|
|
search_count = len(web_result.result.get('results', [])) |
|
|
calc_result = calc_tool.execute(f"sqrt({search_count}) * 10") |
|
|
|
|
|
if calc_result.success: |
|
|
print("✅ Step 3: Calculation successful") |
|
|
print(f" Coordinated result: Found {search_count} web results, computed metric: {calc_result.result['calculation']['result']}") |
|
|
return True |
|
|
|
|
|
except Exception as e: |
|
|
print(f"❌ Coordination test failed: {e}") |
|
|
|
|
|
return False |
|
|
|
|
|
if __name__ == "__main__": |
|
|
success = test_all_tools() |
|
|
coordination_success = test_tool_coordination() |
|
|
|
|
|
if success and coordination_success: |
|
|
print("\n🎉 ALL TESTS PASSED! Tools are ready for agent integration!") |
|
|
sys.exit(0) |
|
|
else: |
|
|
print("\n⚠️ Some tests failed. Check output above.") |
|
|
sys.exit(1) |