File size: 3,785 Bytes
2f68dd7
fb62e9e
2f68dd7
d10ae74
2f68dd7
fb62e9e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2f68dd7
fb62e9e
 
f0eb1da
 
 
 
 
 
 
fb62e9e
f0eb1da
fb62e9e
f0eb1da
fb62e9e
f0eb1da
 
 
 
 
 
 
 
fb62e9e
f0eb1da
 
 
fb62e9e
2f68dd7
fb62e9e
 
f0eb1da
 
 
 
 
 
 
 
 
 
 
 
fb62e9e
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
from smolagents import tool
from langchain_community.document_loaders import WikipediaLoader


@tool
def multiply(a: int, b: int) -> int:
    """Multiply two numbers.
    Args:
        a: first int
        b: second int
    """
    return a * b

@tool
def add(a: int, b: int) -> int:
    """Add two numbers.
    
    Args:
        a: first int
        b: second int
    """
    return a + b

@tool
def subtract(a: int, b: int) -> int:
    """Subtract two numbers.
    
    Args:
        a: first int
        b: second int
    """
    return a - b

@tool
def divide(a: int, b: int) -> int:
    """Divide two numbers.
    
    Args:
        a: first int
        b: second int
    """
    if b == 0:
        raise ValueError("Cannot divide by zero.")
    return a / b

@tool
def modulus(a: int, b: int) -> int:
    """Get the modulus of two numbers.
    
    Args:
        a: first int
        b: second int
    """
    return a % b

@tool
def wiki_search(query: str) -> str:
    """Search Wikipedia for a query and return maximum 2 results.
    
    Args:
        query: The search query.
    """
    search_docs = WikipediaLoader(query=query, load_max_docs=2).load()
    formatted_search_docs = "\n\n---\n\n".join(
        [
            f'<Document source="{doc.metadata["source"]}" page="{doc.metadata.get("page", "")}"/>\n{doc.page_content}\n</Document>'
            for doc in search_docs
        ])
    return {"wiki_results": formatted_search_docs}

@tool
def read_excel_file(file_path: str, query: str) -> str:
    """
    This function uses pandas to read an Excel file and perform some basic analysis.
    It returns the number of rows and columns, the column names, and some summary statistics.
    
    Args:
        file_path: Path to the Excel file
        query: Question about the data
    """
    try:
        import pandas as pd
        
        df = pd.read_excel(file_path)
        result = f"Excel file loaded with {len(df)} rows and {len(df.columns)} columns.\n"
        result += f"Columns: {', '.join(df.columns)}\n\n"
        result += "Summary statistics:\n"
        result += str(df.describe())
        return result
    except ImportError:
        return "Error: pandasis not installed. Please install it with 'pip install pandas'."
    except Exception as e:
        return f"Error analyzing Excel file: {str(e)}"
    
@tool
def transcribe_audio_file(mp3_file_path: str) -> str:
    """
    Transcribe text from an mp3 file.
    It returns the text extracted from the mp3 file.

    Args:
        mp3_file_path (str): Path to the mp3 file.
    """
    try:
        import speech_recognition as sr
        from pydub import AudioSegment
        import os

        file, _ = os.path.splitext(mp3_file_path)
        audio = AudioSegment.from_mp3(mp3_file_path)
        wav_file = f"{file}.wav"
        audio.export(wav_file, format="wav")
        recognizer = sr.Recognizer()

        with sr.AudioFile(wav_file) as source:
            audio_data = recognizer.record(source)
            text = recognizer.recognize_google(audio_data)
        return text
    except Exception as e:
        return f"Error transcribing mp3 file: {e}"


@tool
def transcribe_from_youtube(youtube_id: str) -> str:
    """
    Transcribe text from a youtube video.
    It returns the text extracted from the youtube video.

    Args:
        youtube_id (str): ID of the youtube video. Not the full URL. Example: "dQw4w9WgXcQ"
    """
    try:
        from youtube_transcript_api import YouTubeTranscriptApi

        ytt_api = YouTubeTranscriptApi()
        fetched_transcript = ytt_api.fetch(youtube_id)
        plaintext = " ".join(snippet.text for snippet in fetched_transcript)
        return plaintext
    except:
        return "Could not extract transcript from YouTube video."