Spaces:
Sleeping
Sleeping
File size: 2,948 Bytes
ce69239 714d637 77866f8 104dc35 65744fb 714d637 7e057ea 714d637 7e057ea 714d637 7e057ea 714d637 ffff64a 714d637 7e057ea 77866f8 7e057ea 16fdaf8 77866f8 16fdaf8 2105776 77866f8 16fdaf8 77866f8 16fdaf8 104dc35 16fdaf8 77866f8 16fdaf8 0c0a3c5 77866f8 65744fb 2105776 65744fb 2105776 65744fb 2105776 e14587f 65744fb e14587f 38a896e e14587f 65744fb 2105776 |
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 |
from langchain_core.tools import tool
import datetime
import requests
import openai
import os
import tempfile
from urllib.parse import urlparse
from openai import OpenAI
from youtube_transcript_api import YouTubeTranscriptApi
from pytube import extract
@tool
def current_date(_) -> str :
""" Returns the current date in YYYY-MM-DD format """
return datetime.datetime.now().strftime("%Y-%m-%d")
@tool
def day_of_week(_) -> str :
""" Returns the current day of the week (e.g., Monday, Tuesday) """
return datetime.datetime.now().strftime("%A")
@tool
def days_until(date_str: str) -> str :
""" Returns the number of days from today until a given date (input format: YYYY-MM-DD) """
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 = [current_date, day_of_week, days_until]
@tool
def transcribe_audio(audio_file: str, file_extension: str) -> str:
""" Transcribes an audio file to text
Args:
audio_file (str): local file path to the audio file (.mp3, .m4a, etc.)
file_extension (str): file extension of the audio, e.g. mp3
Returns:
str: The transcribed text from the audio.
"""
try:
response = requests.get(audio_file) # download the audio_file
response.raise_for_status() # check if the http request was successful
# clean file extension and save to disk
file_extension = file_extension.replace('.','')
filename = f'tmp.{file_extension}'
with open(filename, 'wb') as file: # opens a new file for writing with a name like, e.g. tmp.mp3
file.write(response.content) # write(w) the binary(b) contents (audio file) to disk
# transcribe audio with OpenAI Whisper
client = OpenAI()
# read(r) the audio file from disk in binary(b) mode "rb"; the "with" block ensures the file is automatically closed afterward
with open(filename, "rb") as audio_content:
transcription = client.audio.transcriptions.create(
model="whisper-1",
file=audio_content
)
return transcription.text
except Exception as e:
return f"transcribe_audio failed: {e}"
# TESTTTTT
@tool
def transcribe_youtube(youtube_url: str) -> str:
""" Transcribes a YouTube video
Args:
youtube_url (str): youtube video's url
"""
try:
video_id = extract.video_id(youtube_url)
transcript = YouTubeTranscriptApi.get_transcript(video_id)
# keep only text
text = '\n'.join([s['text'] for s in transcript])
return text
except Exception as e:
return f"transcribe_youtube failed: {e}" |