|
|
|
""" |
|
Test Script for Enhanced Research Tools |
|
Run this to verify all research tools are working correctly |
|
""" |
|
|
|
import sys |
|
import os |
|
import time |
|
from typing import Dict |
|
|
|
|
|
sys.path.append(os.path.dirname(os.path.abspath(__file__))) |
|
|
|
try: |
|
from research_tools import EnhancedResearchAgent |
|
from enhanced_search_functions import get_function_definitions, get_function_names |
|
IMPORTS_OK = True |
|
except ImportError as e: |
|
print(f"β Import Error: {e}") |
|
print("Make sure all research_tools files are in place!") |
|
IMPORTS_OK = False |
|
|
|
|
|
def test_tool_imports(): |
|
"""Test that all tools can be imported""" |
|
print("π Testing Tool Imports...") |
|
|
|
if not IMPORTS_OK: |
|
return False |
|
|
|
try: |
|
from research_tools.web_search import WebSearchTool |
|
from research_tools.wikipedia_search import WikipediaSearchTool |
|
from research_tools.arxiv_search import ArxivSearchTool |
|
from research_tools.github_search import GitHubSearchTool |
|
from research_tools.sec_search import SECSearchTool |
|
|
|
print("β
All tool imports successful") |
|
return True |
|
except ImportError as e: |
|
print(f"β Tool import failed: {e}") |
|
return False |
|
|
|
|
|
def test_enhanced_research_agent(): |
|
"""Test the main research agent""" |
|
print("\nπ€ Testing Enhanced Research Agent...") |
|
|
|
if not IMPORTS_OK: |
|
return False |
|
|
|
try: |
|
agent = EnhancedResearchAgent() |
|
print(f"β
Research agent created with {len(agent.tools)} tools") |
|
|
|
|
|
status = agent.get_tool_status() |
|
print(f"β
Tool status check: {len(status)} tools available") |
|
|
|
return True |
|
except Exception as e: |
|
print(f"β Research agent creation failed: {e}") |
|
return False |
|
|
|
|
|
def test_function_definitions(): |
|
"""Test function definitions""" |
|
print("\nπ Testing Function Definitions...") |
|
|
|
try: |
|
functions = get_function_definitions() |
|
function_names = get_function_names() |
|
|
|
print(f"β
{len(functions)} function definitions loaded") |
|
print(f"β
Function names: {', '.join(function_names)}") |
|
|
|
|
|
for func in functions: |
|
assert "type" in func |
|
assert "function" in func |
|
assert "name" in func["function"] |
|
assert "parameters" in func["function"] |
|
|
|
print("β
All function definitions have correct structure") |
|
return True |
|
except Exception as e: |
|
print(f"β Function definition test failed: {e}") |
|
return False |
|
|
|
|
|
def test_individual_tools(): |
|
"""Test each research tool individually""" |
|
print("\nπ§ Testing Individual Tools...") |
|
|
|
if not IMPORTS_OK: |
|
return False |
|
|
|
results = {} |
|
|
|
try: |
|
agent = EnhancedResearchAgent() |
|
|
|
|
|
test_queries = { |
|
'web': ('AI news 2024', {}), |
|
'wikipedia': ('artificial intelligence', {}), |
|
'arxiv': ('machine learning', {}), |
|
'github': ('python', {}), |
|
'sec': ('Apple', {}) |
|
} |
|
|
|
for tool_name, (query, kwargs) in test_queries.items(): |
|
print(f" Testing {tool_name}...") |
|
try: |
|
|
|
start_time = time.time() |
|
if tool_name == 'sec': |
|
|
|
result = agent.tools[tool_name].search(query) |
|
else: |
|
result = agent.tools[tool_name].search(query, max_results=1) |
|
duration = time.time() - start_time |
|
|
|
if result and len(result) > 50: |
|
print(f" β
{tool_name}: '{result}' Working ({duration:.1f}s)") |
|
results[tool_name] = "β
Working" |
|
else: |
|
print(f" β οΈ {tool_name}: Limited response") |
|
results[tool_name] = "β οΈ Limited" |
|
|
|
except Exception as e: |
|
print(f" β {tool_name}: Error - {str(e)[:50]}...") |
|
results[tool_name] = f"β Error" |
|
|
|
working_tools = sum(1 for status in results.values() if "β
" in status) |
|
print(f"\nπ Tool Test Results: {working_tools}/{len(test_queries)} tools working") |
|
|
|
return working_tools > 0 |
|
|
|
except Exception as e: |
|
print(f"β Individual tool testing failed: {e}") |
|
return False |
|
|
|
|
|
def test_smart_routing(): |
|
"""Test smart query routing""" |
|
print("\nπ― Testing Smart Query Routing...") |
|
|
|
if not IMPORTS_OK: |
|
return False |
|
|
|
try: |
|
agent = EnhancedResearchAgent() |
|
|
|
test_cases = [ |
|
("What is machine learning?", "wikipedia"), |
|
("Latest AI research papers", "arxiv"), |
|
("React vs Vue popularity", "github"), |
|
("Tesla stock performance", "sec"), |
|
("Current AI news", "web") |
|
] |
|
|
|
correct_routes = 0 |
|
for query, expected_tool in test_cases: |
|
routed_tool = agent._route_query_to_tool(query) |
|
if routed_tool == expected_tool: |
|
print(f" β
'{query}' β {routed_tool}") |
|
correct_routes += 1 |
|
else: |
|
print(f" β οΈ '{query}' β {routed_tool} (expected {expected_tool})") |
|
|
|
print(f"\nπ Routing accuracy: {correct_routes}/{len(test_cases)} correct") |
|
return correct_routes >= len(test_cases) // 2 |
|
|
|
except Exception as e: |
|
print(f"β Smart routing test failed: {e}") |
|
return False |
|
|
|
|
|
def test_multi_source_research(): |
|
"""Test multi-source research synthesis""" |
|
print("\nπ Testing Multi-Source Research...") |
|
|
|
if not IMPORTS_OK: |
|
return False |
|
|
|
try: |
|
agent = EnhancedResearchAgent() |
|
|
|
print(" Running deep research test (this may take 10-15 seconds)...") |
|
result = agent.search("artificial intelligence benefits", research_depth="deep") |
|
|
|
if result and len(result) > 200: |
|
|
|
source_indicators = ["Web Search", "Wikipedia", "arXiv", "Research Sources Used"] |
|
found_sources = sum(1 for indicator in source_indicators if indicator in result) |
|
|
|
if found_sources >= 2: |
|
print(f" β
Multi-source synthesis working ({found_sources} sources detected)") |
|
return True |
|
else: |
|
print(f" β οΈ Limited multi-source synthesis ({found_sources} sources)") |
|
return False |
|
else: |
|
print(" β Multi-source research returned insufficient data") |
|
return False |
|
|
|
except Exception as e: |
|
print(f"β Multi-source research test failed: {e}") |
|
return False |
|
|
|
|
|
def test_quality_scoring(): |
|
"""Test research quality scoring""" |
|
print("\nπ Testing Quality Scoring...") |
|
|
|
if not IMPORTS_OK: |
|
return False |
|
|
|
try: |
|
agent = EnhancedResearchAgent() |
|
|
|
|
|
sample_text = """ |
|
Recent research from Stanford University published in 2024 shows that |
|
artificial intelligence accuracy increased by 23% compared to 2023 data. |
|
The study, published in Nature, analyzed 1,000 AI models and found |
|
significant improvements in neural network architectures. |
|
""" |
|
|
|
quality_score = agent.tools['web'].score_research_quality(sample_text, 'web') |
|
|
|
print(f" Sample quality score: {quality_score}") |
|
|
|
|
|
required_metrics = ['recency', 'authority', 'specificity', 'relevance', 'overall'] |
|
for metric in required_metrics: |
|
if metric not in quality_score: |
|
print(f" β Missing metric: {metric}") |
|
return False |
|
if not 0 <= quality_score[metric] <= 1: |
|
print(f" β Invalid score for {metric}: {quality_score[metric]}") |
|
return False |
|
|
|
print(" β
Quality scoring structure correct") |
|
print(f" β
Overall quality: {quality_score['overall']:.2f}/1.0") |
|
return True |
|
|
|
except Exception as e: |
|
print(f"β Quality scoring test failed: {e}") |
|
return False |
|
|
|
|
|
def test_dependency_check(): |
|
"""Check for required dependencies""" |
|
print("\nπ¦ Testing Dependencies...") |
|
|
|
dependencies = { |
|
'requests': 'HTTP requests', |
|
'xml.etree.ElementTree': 'XML parsing (built-in)', |
|
'wikipedia': 'Wikipedia search', |
|
'smolagents': 'Web search agents' |
|
} |
|
|
|
missing_deps = [] |
|
|
|
for dep, description in dependencies.items(): |
|
try: |
|
if dep == 'xml.etree.ElementTree': |
|
import xml.etree.ElementTree |
|
else: |
|
__import__(dep) |
|
print(f" β
{dep}: {description}") |
|
except ImportError: |
|
print(f" β {dep}: {description} - MISSING") |
|
missing_deps.append(dep) |
|
|
|
if missing_deps: |
|
print(f"\nβ οΈ Missing dependencies: {', '.join(missing_deps)}") |
|
print("Install with: pip install " + " ".join(dep for dep in missing_deps if dep not in ['xml.etree.ElementTree'])) |
|
return False |
|
else: |
|
print(" β
All dependencies available") |
|
return True |
|
|
|
|
|
def run_full_test_suite(): |
|
"""Run the complete test suite""" |
|
print("π§ͺ Enhanced Research Tools - Test Suite") |
|
print("=" * 50) |
|
|
|
tests = [ |
|
("Dependency Check", test_dependency_check), |
|
("Tool Imports", test_tool_imports), |
|
("Research Agent", test_enhanced_research_agent), |
|
("Function Definitions", test_function_definitions), |
|
("Individual Tools", test_individual_tools), |
|
("Smart Routing", test_smart_routing), |
|
("Quality Scoring", test_quality_scoring), |
|
("Multi-Source Research", test_multi_source_research) |
|
] |
|
|
|
passed = 0 |
|
total = len(tests) |
|
|
|
for test_name, test_func in tests: |
|
print(f"\n{'='*20} {test_name} {'='*20}") |
|
try: |
|
if test_func(): |
|
passed += 1 |
|
print(f"β
{test_name} PASSED") |
|
else: |
|
print(f"β {test_name} FAILED") |
|
except Exception as e: |
|
print(f"π₯ {test_name} CRASHED: {e}") |
|
|
|
print(f"\n{'='*50}") |
|
print(f"π― TEST RESULTS: {passed}/{total} tests passed") |
|
|
|
if passed == total: |
|
print("π ALL TESTS PASSED! Research system is ready!") |
|
elif passed >= total * 0.75: |
|
print("β
Most tests passed! Research system should work well.") |
|
elif passed >= total * 0.5: |
|
print("β οΈ Some tests failed. Research system has limited functionality.") |
|
else: |
|
print("β Many tests failed. Please check setup and dependencies.") |
|
|
|
return passed, total |
|
|
|
|
|
if __name__ == "__main__": |
|
run_full_test_suite() |