Trip-Planner / tools /search_tools.py
msaifee's picture
Trip Planner Agent using CrewAI
2d39dcc
import json
import requests
import streamlit as st
from crewai.tools import BaseTool
from pydantic import BaseModel, Field
class SearchQuery(BaseModel):
query: str = Field(..., description="The search query to look up")
class SearchTools(BaseTool):
name: str = "Search the internet"
description: str = "Useful to search the internet about a given topic and return relevant results"
args_schema: type[BaseModel] = SearchQuery
serper_api_key: str = Field(..., description="Serper API Key")
def _run(self, query: str) -> str:
try:
top_result_to_return = 4
url = "https://google.serper.dev/search"
payload = json.dumps({"q": query})
headers = {
'X-API-KEY': self.serper_api_key,
'content-type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
if response.status_code != 200:
return f"Error: Search API request failed. Status code: {response.status_code}"
data = response.json()
if 'organic' not in data:
return "No results found or API error occurred."
results = data['organic']
string = []
for result in results[:top_result_to_return]:
try:
string.append('\n'.join([
f"Title: {result['title']}",
f"Link: {result['link']}",
f"Snippet: {result['snippet']}",
"\n-----------------"
]))
except KeyError:
continue
return '\n'.join(string) if string else "No valid results found"
except Exception as e:
return f"Error during search: {str(e)}"
async def _arun(self, query: str) -> str:
raise NotImplementedError("Async not implemented")