AutoRAG_llama3_groq / phi /tools /serpapi_toolkit.py
AmmarFahmy
adding all files
105b369
import json
from os import getenv
from typing import Optional
from phi.tools import Toolkit
from phi.utils.log import logger
try:
import serpapi
except ImportError:
raise ImportError("`google-search-results` not installed.")
class SerpApiToolkit(Toolkit):
def __init__(
self,
api_key: Optional[str] = getenv("SERPAPI_KEY"),
search_youtube: bool = False,
):
super().__init__(name="serpapi_tools")
self.api_key = api_key
if not self.api_key:
logger.warning("No Serpapi API key provided")
self.register(self.search_google)
if search_youtube:
self.register(self.search_youtube)
def search_google(self, query: str) -> str:
"""
Search Google using the Serpapi API. Returns the search results.
Args:
query(str): The query to search for.
Returns:
str: The search results from Google.
Keys:
- 'search_results': List of organic search results.
- 'recipes_results': List of recipes search results.
- 'shopping_results': List of shopping search results.
- 'knowledge_graph': The knowledge graph.
- 'related_questions': List of related questions.
"""
try:
if not self.api_key:
return "Please provide an API key"
if not query:
return "Please provide a query to search for"
logger.info(f"Searching Google for: {query}")
params = {"q": query, "api_key": self.api_key}
search = serpapi.GoogleSearch(params)
results = search.get_dict()
filtered_results = {
"search_results": results.get("organic_results", ""),
"recipes_results": results.get("recipes_results", ""),
"shopping_results": results.get("shopping_results", ""),
"knowledge_graph": results.get("knowledge_graph", ""),
"related_questions": results.get("related_questions", ""),
}
return json.dumps(filtered_results)
except Exception as e:
return f"Error searching for the query {query}: {e}"
def search_youtube(self, query: str) -> str:
"""
Search Youtube using the Serpapi API. Returns the search results.
Args:
query(str): The query to search for.
Returns:
str: The video search results from Youtube.
Keys:
- 'video_results': List of video results.
- 'movie_results': List of movie results.
- 'channel_results': List of channel results.
"""
try:
if not self.api_key:
return "Please provide an API key"
if not query:
return "Please provide a query to search for"
logger.info(f"Searching Youtube for: {query}")
params = {"search_query": query, "api_key": self.api_key}
search = serpapi.YoutubeSearch(params)
results = search.get_dict()
filtered_results = {
"video_results": results.get("video_results", ""),
"movie_results": results.get("movie_results", ""),
"channel_results": results.get("channel_results", ""),
}
return json.dumps(filtered_results)
except Exception as e:
return f"Error searching for the query {query}: {e}"