File size: 5,416 Bytes
9f19123
a14b90d
9f19123
 
 
 
a14b90d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9f19123
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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}"