|
|
|
|
|
|
|
|
""" |
|
|
Search and Request Tools Examples for EvoAgentX |
|
|
|
|
|
This module provides comprehensive examples for: |
|
|
- WikipediaSearchToolkit: Search Wikipedia for information |
|
|
- GoogleSearchToolkit: Search Google using the official API |
|
|
- GoogleFreeSearchToolkit: Search Google without requiring an API key |
|
|
- DDGSSearchToolkit: Search using DuckDuckGo |
|
|
- SerpAPIToolkit: Multi-engine search (Google, Bing, Baidu, Yahoo, DuckDuckGo) |
|
|
- SerperAPIToolkit: Google search via SerperAPI |
|
|
- RequestToolkit: Perform HTTP operations (GET, POST, PUT, DELETE) |
|
|
- ArxivToolkit: Search for research papers |
|
|
- RSSToolkit: Fetch and validate RSS feeds |
|
|
|
|
|
The examples demonstrate various search capabilities and HTTP operations. |
|
|
""" |
|
|
|
|
|
import os |
|
|
import sys |
|
|
from pathlib import Path |
|
|
|
|
|
|
|
|
sys.path.append(str(Path(__file__).parent.parent)) |
|
|
|
|
|
from evoagentx.tools import ( |
|
|
WikipediaSearchToolkit, |
|
|
GoogleSearchToolkit, |
|
|
GoogleFreeSearchToolkit, |
|
|
DDGSSearchToolkit, |
|
|
SerpAPIToolkit, |
|
|
SerperAPIToolkit, |
|
|
ArxivToolkit, |
|
|
RSSToolkit, |
|
|
RequestToolkit |
|
|
) |
|
|
|
|
|
|
|
|
def run_search_examples(): |
|
|
""" |
|
|
Run examples using the search toolkits (Wikipedia, Google, Google Free, DDGS, SerpAPI, and SerperAPI). |
|
|
""" |
|
|
print("\n===== SEARCH TOOLS EXAMPLES =====\n") |
|
|
|
|
|
|
|
|
wiki_toolkit = WikipediaSearchToolkit(max_summary_sentences=3) |
|
|
google_toolkit = GoogleSearchToolkit(num_search_pages=3, max_content_words=200) |
|
|
google_free_toolkit = GoogleFreeSearchToolkit() |
|
|
ddgs_toolkit = DDGSSearchToolkit(num_search_pages=3, max_content_words=200, backend="auto", region="us-en") |
|
|
|
|
|
|
|
|
serpapi_toolkit = SerpAPIToolkit( |
|
|
num_search_pages=3, |
|
|
max_content_words=300, |
|
|
enable_content_scraping=True |
|
|
) |
|
|
|
|
|
|
|
|
serperapi_toolkit = SerperAPIToolkit( |
|
|
num_search_pages=3, |
|
|
max_content_words=300, |
|
|
enable_content_scraping=True |
|
|
) |
|
|
|
|
|
|
|
|
wiki_tool = wiki_toolkit.get_tool("wikipedia_search") |
|
|
google_tool = google_toolkit.get_tool("google_search") |
|
|
google_free_tool = google_free_toolkit.get_tool("google_free_search") |
|
|
ddgs_tool = ddgs_toolkit.get_tool("ddgs_search") |
|
|
serpapi_tool = serpapi_toolkit.get_tool("serpapi_search") |
|
|
serperapi_tool = serperapi_toolkit.get_tool("serperapi_search") |
|
|
|
|
|
|
|
|
query = "artificial intelligence agent architecture" |
|
|
|
|
|
|
|
|
try: |
|
|
print("\nWikipedia Search Example:") |
|
|
print("-" * 50) |
|
|
wiki_results = wiki_tool(query=query, num_search_pages=2) |
|
|
|
|
|
if wiki_results.get("error"): |
|
|
print(f"Error: {wiki_results['error']}") |
|
|
else: |
|
|
for i, result in enumerate(wiki_results.get("results", [])): |
|
|
print(f"Result {i+1}: {result['title']}") |
|
|
print(f"Summary: {result['summary'][:150]}...") |
|
|
print(f"URL: {result['url']}") |
|
|
print("-" * 30) |
|
|
except Exception as e: |
|
|
print(f"Error running Wikipedia search: {str(e)}") |
|
|
|
|
|
|
|
|
try: |
|
|
print("\nGoogle Search Example (requires API key):") |
|
|
print("-" * 50) |
|
|
google_results = google_tool(query=query) |
|
|
|
|
|
if google_results.get("error"): |
|
|
print(f"Error: {google_results['error']}") |
|
|
else: |
|
|
for i, result in enumerate(google_results.get("results", [])): |
|
|
print(f"Result {i+1}: {result['title']}") |
|
|
print(f"URL: {result['url']}") |
|
|
print("-" * 30) |
|
|
except Exception as e: |
|
|
print(f"Error running Google search: {str(e)}") |
|
|
|
|
|
|
|
|
try: |
|
|
print("\nGoogle Free Search Example:") |
|
|
print("-" * 50) |
|
|
free_results = google_free_tool(query=query, num_search_pages=2) |
|
|
|
|
|
if free_results.get("error"): |
|
|
print(f"Error: {free_results['error']}") |
|
|
else: |
|
|
for i, result in enumerate(free_results.get("results", [])): |
|
|
print(f"Result {i+1}: {result['title']}") |
|
|
print(f"URL: {result['url']}") |
|
|
print("-" * 30) |
|
|
except Exception as e: |
|
|
print(f"Error running free Google search: {str(e)}") |
|
|
|
|
|
|
|
|
try: |
|
|
print("\nDDGS Search Example:") |
|
|
print("-" * 50) |
|
|
ddgs_results = ddgs_tool(query=query, num_search_pages=2, backend="duckduckgo") |
|
|
|
|
|
if ddgs_results.get("error"): |
|
|
print(f"Error: {ddgs_results['error']}") |
|
|
else: |
|
|
for i, result in enumerate(ddgs_results.get("results", [])): |
|
|
print(f"Result {i+1}: {result['title']}") |
|
|
print(f"Result full: \n{result}") |
|
|
print(f"URL: {result['url']}") |
|
|
print("-" * 30) |
|
|
except Exception as e: |
|
|
print(f"Error running DDGS search: {str(e)}") |
|
|
|
|
|
|
|
|
serpapi_api_key = os.getenv("SERPAPI_KEY") |
|
|
if serpapi_api_key: |
|
|
try: |
|
|
print("\nSerpAPI Search Example (with content scraping):") |
|
|
print("-" * 50) |
|
|
print(f"β Using SerpAPI key: {serpapi_api_key[:8]}...") |
|
|
|
|
|
serpapi_results = serpapi_tool( |
|
|
query=query, |
|
|
num_search_pages=3, |
|
|
max_content_words=300, |
|
|
engine="google", |
|
|
location="United States", |
|
|
language="en" |
|
|
) |
|
|
|
|
|
if serpapi_results.get("error"): |
|
|
print(f"Error: {serpapi_results['error']}") |
|
|
else: |
|
|
|
|
|
print(f"SerpAPI results: {serpapi_results}") |
|
|
|
|
|
except Exception as e: |
|
|
print(f"Error running SerpAPI search: {str(e)}") |
|
|
else: |
|
|
print("\nSerpAPI Search Example:") |
|
|
print("-" * 50) |
|
|
print("β SERPAPI_KEY not found in environment variables") |
|
|
print("To test SerpAPI search, set your API key:") |
|
|
print("export SERPAPI_KEY='your-serpapi-key-here'") |
|
|
print("Get your key from: https://serpapi.com/") |
|
|
print("β SerpAPI toolkit initialized successfully (API key required for search)") |
|
|
|
|
|
|
|
|
serperapi_api_key = os.getenv("SERPERAPI_KEY") |
|
|
if serperapi_api_key: |
|
|
try: |
|
|
print("\nSerperAPI Search Example (with content scraping):") |
|
|
print("-" * 50) |
|
|
print(f"β Using SerperAPI key: {serperapi_api_key[:8]}...") |
|
|
|
|
|
serperapi_results = serperapi_tool( |
|
|
query=query, |
|
|
num_search_pages=3, |
|
|
max_content_words=300, |
|
|
location="United States", |
|
|
language="en" |
|
|
) |
|
|
|
|
|
if serperapi_results.get("error"): |
|
|
print(f"Error: {serperapi_results['error']}") |
|
|
else: |
|
|
print(f"SerperAPI results: {serperapi_results}") |
|
|
|
|
|
except Exception as e: |
|
|
print(f"Error running SerperAPI search: {str(e)}") |
|
|
else: |
|
|
print("\nSerperAPI Search Example:") |
|
|
print("-" * 50) |
|
|
print("β SERPERAPI_KEY not found in environment variables") |
|
|
print("To test SerperAPI search, set your API key:") |
|
|
print("export SERPERAPI_KEY='your-serperapi-key-here'") |
|
|
print("Get your key from: https://serper.dev/") |
|
|
print("β SerperAPI toolkit initialized successfully (API key required for search)") |
|
|
|
|
|
|
|
|
def run_arxiv_tool_example(): |
|
|
"""Simple example using ArxivToolkit to search for papers.""" |
|
|
print("\n===== ARXIV TOOL EXAMPLE =====\n") |
|
|
|
|
|
try: |
|
|
|
|
|
arxiv_toolkit = ArxivToolkit() |
|
|
search_tool = arxiv_toolkit.get_tool("arxiv_search") |
|
|
|
|
|
print("β ArxivToolkit initialized") |
|
|
|
|
|
|
|
|
print("Searching for 'machine learning' papers...") |
|
|
result = search_tool( |
|
|
search_query="all:machine learning", |
|
|
max_results=3 |
|
|
) |
|
|
|
|
|
if result.get('success'): |
|
|
papers = result.get('papers', []) |
|
|
print(f"β Found {len(papers)} papers") |
|
|
|
|
|
for i, paper in enumerate(papers): |
|
|
print(f"\nPaper {i+1}: {paper.get('title', 'No title')}") |
|
|
print(f" Authors: {', '.join(paper.get('authors', ['Unknown']))}") |
|
|
print(f" arXiv ID: {paper.get('arxiv_id', 'Unknown')}") |
|
|
print(f" URL: {paper.get('url', 'No URL')}") |
|
|
else: |
|
|
print(f"β Search failed: {result.get('error', 'Unknown error')}") |
|
|
|
|
|
print("\nβ ArxivToolkit test completed") |
|
|
|
|
|
except Exception as e: |
|
|
print(f"Error: {str(e)}") |
|
|
|
|
|
|
|
|
def run_rss_tool_example(): |
|
|
"""Powerful example using RSSToolkit for RSS feed operations.""" |
|
|
print("\n===== RSS TOOL EXAMPLE =====\n") |
|
|
|
|
|
try: |
|
|
|
|
|
toolkit = RSSToolkit(name="DemoRSSToolkit") |
|
|
|
|
|
print("β RSSToolkit initialized") |
|
|
|
|
|
|
|
|
fetch_tool = toolkit.get_tool("rss_fetch") |
|
|
validate_tool = toolkit.get_tool("rss_validate") |
|
|
|
|
|
|
|
|
test_feeds = [ |
|
|
"https://feeds.bbci.co.uk/news/rss.xml", |
|
|
"https://rss.cnn.com/rss/edition.rss", |
|
|
"https://feeds.feedburner.com/TechCrunch" |
|
|
] |
|
|
|
|
|
for feed_url in test_feeds: |
|
|
print(f"\n--- Testing RSS Feed: {feed_url} ---") |
|
|
|
|
|
|
|
|
print("1. Validating RSS feed...") |
|
|
validate_result = validate_tool(url=feed_url) |
|
|
|
|
|
if validate_result.get("success") and validate_result.get("is_valid"): |
|
|
print(f"β Valid {validate_result.get('feed_type')} feed: {validate_result.get('title', 'Unknown')}") |
|
|
|
|
|
|
|
|
print("2. Fetching RSS feed...") |
|
|
fetch_result = fetch_tool(feed_url=feed_url, max_entries=3) |
|
|
|
|
|
if fetch_result.get("success"): |
|
|
entries = fetch_result.get("entries", []) |
|
|
print(f"β Fetched {len(entries)} entries from '{fetch_result.get('title')}'") |
|
|
|
|
|
|
|
|
for i, entry in enumerate(entries[:2], 1): |
|
|
print(f" Entry {i}: {entry.get('title', 'No title')}") |
|
|
print(f" Published: {entry.get('published', 'Unknown')}") |
|
|
print(f" Link: {entry.get('link', 'No link')}") |
|
|
print(f" Author: {entry.get('author', 'Unknown')}") |
|
|
print() |
|
|
|
|
|
|
|
|
print("3. Testing feed monitoring...") |
|
|
|
|
|
else: |
|
|
print(f"β Invalid or inaccessible feed: {validate_result.get('error', 'Unknown error')}") |
|
|
|
|
|
print("\nβ RSSToolkit test completed") |
|
|
|
|
|
except Exception as e: |
|
|
print(f"Error: {str(e)}") |
|
|
print("Note: RSS feed availability may vary. Some feeds may be temporarily unavailable.") |
|
|
|
|
|
|
|
|
def run_request_tool_example(): |
|
|
"""Simple example using RequestToolkit for HTTP operations.""" |
|
|
print("\n===== REQUEST TOOL EXAMPLE =====\n") |
|
|
|
|
|
try: |
|
|
|
|
|
request_toolkit = RequestToolkit(name="DemoRequestToolkit") |
|
|
http_tool = request_toolkit.get_tool("http_request") |
|
|
|
|
|
print("β RequestToolkit initialized") |
|
|
|
|
|
|
|
|
print("1. Testing GET request...") |
|
|
get_result = http_tool( |
|
|
url="https://httpbin.org/get", |
|
|
method="GET", |
|
|
params={"test": "param", "example": "value"} |
|
|
) |
|
|
|
|
|
if get_result.get("success"): |
|
|
print("β GET request successful") |
|
|
print(f"Status: {get_result.get('status_code')}") |
|
|
print(f"Response size: {len(str(get_result.get('content', '')))} characters") |
|
|
else: |
|
|
print(f"β GET request failed: {get_result.get('error', 'Unknown error')}") |
|
|
|
|
|
|
|
|
print("\n2. Testing POST request with JSON...") |
|
|
post_result = http_tool( |
|
|
url="https://httpbin.org/post", |
|
|
method="POST", |
|
|
json_data={"name": "Test User", "email": "test@example.com"}, |
|
|
headers={"Content-Type": "application/json"} |
|
|
) |
|
|
|
|
|
if post_result.get("success"): |
|
|
print("β POST request successful") |
|
|
print(f"Status: {post_result.get('status_code')}") |
|
|
content = post_result.get('content', '') |
|
|
if isinstance(content, dict) and 'json' in content: |
|
|
print(f"β JSON data received: {content['json']}") |
|
|
else: |
|
|
print(f"β POST request failed: {post_result.get('error', 'Unknown error')}") |
|
|
|
|
|
|
|
|
print("\n3. Testing PUT request...") |
|
|
put_result = http_tool( |
|
|
url="https://httpbin.org/put", |
|
|
method="PUT", |
|
|
data={"update": "new value", "timestamp": "2024-01-01"} |
|
|
) |
|
|
|
|
|
if put_result.get("success"): |
|
|
print("β PUT request successful") |
|
|
print(f"Status: {put_result.get('status_code')}") |
|
|
else: |
|
|
print(f"β PUT request failed: {put_result.get('error', 'Unknown error')}") |
|
|
|
|
|
|
|
|
print("\n4. Testing DELETE request...") |
|
|
delete_result = http_tool( |
|
|
url="https://httpbin.org/delete", |
|
|
method="DELETE" |
|
|
) |
|
|
|
|
|
if delete_result.get("success"): |
|
|
print("β DELETE request successful") |
|
|
print(f"Status: {delete_result.get('status_code')}") |
|
|
else: |
|
|
print(f"β DELETE request failed: {delete_result.get('error', 'Unknown error')}") |
|
|
|
|
|
|
|
|
print("\n5. Testing error handling...") |
|
|
error_result = http_tool( |
|
|
url="https://invalid-domain-that-does-not-exist-12345.com", |
|
|
method="GET" |
|
|
) |
|
|
|
|
|
if not error_result.get("success"): |
|
|
print("β Error handling working correctly") |
|
|
print(f"Error: {error_result.get('error', 'Unknown error')}") |
|
|
else: |
|
|
print("β Error handling may not be working as expected") |
|
|
|
|
|
print("\nβ RequestToolkit test completed") |
|
|
|
|
|
except Exception as e: |
|
|
print(f"Error: {str(e)}") |
|
|
|
|
|
|
|
|
def main(): |
|
|
"""Main function to run all search and request examples""" |
|
|
print("===== SEARCH AND REQUEST TOOLS EXAMPLES =====") |
|
|
|
|
|
|
|
|
run_search_examples() |
|
|
|
|
|
|
|
|
run_arxiv_tool_example() |
|
|
|
|
|
|
|
|
run_rss_tool_example() |
|
|
|
|
|
|
|
|
run_request_tool_example() |
|
|
|
|
|
print("\n===== ALL SEARCH AND REQUEST EXAMPLES COMPLETED =====") |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |
|
|
|