Spaces:
Sleeping
Sleeping
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."
|