Spaces:
Sleeping
Sleeping
from langchain.tools import Tool | |
import datetime | |
import requests | |
import openai | |
import os | |
import tempfile | |
from urllib.parse import urlparse | |
from openai import OpenAI | |
def current_date(_): | |
return datetime.datetime.now().strftime("%Y-%m-%d") | |
def day_of_week(_): | |
return datetime.datetime.now().strftime("%A") | |
def days_until(date_str): | |
try: | |
future_date = datetime.datetime.strptime(date_str, "%Y-%m-%d").date() | |
today = datetime.date.today() | |
delta_days = (future_date - today).days | |
return f"{delta_days} days until {date_str}" | |
except Exception as e: | |
return f"Error parsing date: {str(e)}" | |
datetime_tools = [ | |
Tool( | |
name="current_date", | |
func=current_date, | |
description="Returns the current date in YYYY-MM-DD format." | |
), | |
Tool( | |
name="current_day_of_week", | |
func=day_of_week, | |
description="Returns the current day of the week (e.g., Monday, Tuesday)." | |
), | |
Tool( | |
name="days_until", | |
func=days_until, | |
description="Returns the number of days from today until a given date (input format: YYYY-MM-DD)." | |
) | |
] | |
def transcribe_audio(audio_input: str) -> str: | |
""" | |
Transcribes an audio file from a local file or a URL | |
Args: | |
audio_input (str): A local file path or a direct URL to the audio file (.mp3, .m4a, etc.) | |
Returns: | |
str: The transcribed text from the audio. | |
""" | |
try: | |
# Detects if audio_input is a URL | |
is_url = audio_input.startswith("http://") or audio_input.startswith("https://") | |
if is_url: | |
parsed = urlparse(audio_input) # breaks down the URL into components (scheme, netloc, path, params, etc.) | |
extension = os.path.splitext(parsed.path)[1] or ".mp3" # get the actual file extension from the URL path or define it to .mp3 if no extension is found | |
# Download to temporary file | |
with tempfile.NamedTemporaryFile(suffix=extension, delete=False) as tmp_file: # creates a temporary file | |
response = requests.get(audio_input) # downloads the content | |
response.raise_for_status() # checks if the http request was successful | |
tmp_file.write(response.content) # saves the file to disk | |
file_path = tmp_file.name | |
else: | |
file_path = audio_input | |
# Transcribing audio using OpenAI Whisper | |
client = OpenAI() | |
with open(file_path, "rb") as audio_file: # opens the audio file from disk in binary mode (rb); the "with" block ensures the file is automatically closed afterward | |
transcription = client.audio.transcriptions.create( | |
model="whisper-1", | |
file=audio_file | |
) | |
return transcription.text | |
except Exception as e: | |
return f"Transcription failed: {e}" | |
transcribe_audio_tool = Tool( | |
name="transcribe_audio", | |
func=transcribe_audio, | |
description="Transcribes an audio file from a local file or a URL" | |
) |