agentzero07's picture
Update gaia_tools.py
9f19123 verified
import os
import requests
import wikipedia
import pandas as pd
from smolagents import PythonInterpreterTool, tool
from youtube_transcript_api import YouTubeTranscriptApi
@tool
def ReverseTextTool(text: str) -> str:
"""
Reverses a text string character by character.
Args:
text (str): The text to reverse
Returns:
str: The reversed text
"""
return text[::-1]
@tool
def RunPythonFileTool(file_path: str) -> str:
"""
Executes a Python script loaded from the specified path using the PythonInterpreterTool.
Args:
file_path (str): The full path to the python (.py) file containing the Python code.
Returns:
str: The output produced by the code execution, or an error message if it fails.
"""
try:
with open(file_path, "r") as f:
code = f.read()
interpreter = PythonInterpreterTool()
result = interpreter.run({"code": code})
return result.get("output", "No output returned.")
except Exception as e:
return f"Execution failed: {e}"
@tool
def download_server(url: str, save_path: str) -> str:
"""
Downloads a file from a URL and saves it to the given path.
Args:
url (str): The URL from which to download the file.
save_path (str): The local file path where the downloaded file will be saved.
Returns:
str: A message indicating the result of the download operation.
"""
try:
response = requests.get(url, timeout=30)
response.raise_for_status()
with open(save_path, "wb") as f:
f.write(response.content)
return f"File downloaded to {save_path}"
except Exception as e:
return f"Failed to download: {e}"
@tool
def WikipediaSearchTool(query: str) -> str:
"""
Performs a search on Wikipedia and returns a summary of the result.
Args:
query: The search term.
Returns:
A string containing the summary of the search result or an error message.
"""
try:
summary = wikipedia.summary(query, sentences=3)
return summary
except wikipedia.exceptions.PageError:
return f"Error: No Wikipedia page found for '{query}'."
except wikipedia.exceptions.DisambiguationError as e:
return f"Error: Multiple results found for '{query}'. Try a more specific query. Options: {e.options}"
except Exception as e:
return f"An unexpected error occurred: {e}"
@tool
def YouTubeVideoAnalysisTool(video_id: str, keyword: str) -> str:
"""
Fetches the transcript of a YouTube video by its ID and performs a keyword search.
Args:
video_id: The ID of the YouTube video.
keyword: The keyword to search for in the transcript.
Returns:
A string indicating if the keyword was found and providing a snippet, or an error message.
"""
try:
transcript_list = YouTubeTranscriptApi.get_transcript(video_id)
full_transcript = " ".join([d['text'] for d in transcript_list])
if keyword.lower() in full_transcript.lower():
index = full_transcript.lower().find(keyword.lower())
start = max(0, index - 50)
end = min(len(full_transcript), index + len(keyword) + 50)
snippet = full_transcript[start:end]
return f"Keyword '{keyword}' found in the video. Snippet: '...{snippet}...'."
else:
return f"Keyword '{keyword}' not found in the video transcript."
except Exception as e:
return f"An error occurred while fetching the YouTube transcript: {e}"
@tool
def ExcelFileParserTool(file_path: str, query: str = "get_headers") -> str:
"""
Reads and queries data from an Excel file at a given path.
Args:
file_path (str): The path to the Excel file (.xlsx, .xls).
query (str): The type of query to perform. Defaults to 'get_headers'.
Other options include 'find_value:column_name:value_to_find'.
Returns:
str: A string with the result of the query or an error message.
"""
try:
df = pd.read_excel(file_path)
if query == "get_headers":
return f"Headers found: {', '.join(df.columns.tolist())}"
elif query.startswith("find_value:"):
parts = query.split(":")
if len(parts) != 3:
return "Error: Invalid query format. Use 'find_value:column_name:value_to_find'."
column_name = parts[1]
value_to_find = parts[2]
if column_name not in df.columns:
return f"Error: Column '{column_name}' not found."
found_rows = df[df[column_name].astype(str).str.contains(value_to_find, case=False, na=False)]
if not found_rows.empty:
return f"Value '{value_to_find}' found in column '{column_name}'. Found in the following rows:\n{found_rows.to_string()}"
else:
return f"Value '{value_to_find}' not found in column '{column_name}'."
else:
return "Error: Unknown query type. Supported queries: 'get_headers', 'find_value:column_name:value_to_find'."
except FileNotFoundError:
return f"Error: File not found at '{file_path}'."
except Exception as e:
return f"An unexpected error occurred: {e}"