ksj047's picture
Upload 9 files
75d7142 verified
# tools.py
import os
import logging
from typing import List, Dict, Any
from tavily import TavilyClient # <-- Import Tavily
from dotenv import load_dotenv
# Load environment variables to get the API key
load_dotenv()
# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - [%(funcName)s] - %(message)s')
# --- Tavily Search Tool ---
TAVILY_API_KEY = os.getenv("TAVILY_API_KEY")
if not TAVILY_API_KEY:
raise ValueError("TAVILY_API_KEY not found in environment variables.")
tavily_client = TavilyClient(api_key=TAVILY_API_KEY)
def search_with_tavily(query: str, search_depth: str = "basic", max_results: int = 5, include_answer: bool = False, include_raw_content: bool = False) -> Dict[str, Any]:
"""
Performs a search using the Tavily Search API.
Args:
query: The search query.
search_depth: "basic" or "advanced". Advanced performs deeper research.
max_results: The maximum number of search results to return.
include_answer: Whether to include a synthesized answer from Tavily.
include_raw_content: Whether to include raw scraped content for results.
Returns:
A dictionary containing search results, and potentially an answer
and raw content, or an error message.
"""
logging.info(f"Performing Tavily search for: '{query}' (depth: {search_depth}, max_results: {max_results})")
try:
# Use tavily_client.search method
response = tavily_client.search(
query=query,
search_depth=search_depth,
max_results=max_results,
include_answer=include_answer,
include_raw_content=include_raw_content,
# include_images=False, # Optional parameter
)
logging.info(f"Tavily search successful for '{query}'. Found {len(response.get('results', []))} results.")
# response structure includes keys like 'query', 'response_time', 'answer', 'results'
# 'results' is a list of dicts, each with 'title', 'url', 'content', 'score', 'raw_content' (if requested)
return response
except Exception as e:
logging.error(f"Error during Tavily search for '{query}': {e}")
# Return an error structure that the agent can recognize
return {"error": f"Tavily API error: {e}", "results": []}
# --- Remove or Comment Out Old Tools ---
# def search_web(...) -> ...:
# # ... (keep commented out or remove) ...
# def scrape_website(...) -> ...:
# # ... (keep commented out or remove) ...