|
|
from youtube_transcript_api import YouTubeTranscriptApi |
|
|
from smolagents import tool |
|
|
|
|
|
@tool |
|
|
def analyze_image(question: str, image_url: str) -> str: |
|
|
""" |
|
|
Analyze an image using OpenAI's API. |
|
|
Args: |
|
|
question (str): The question to ask about the image. eg. "What is in this image?" |
|
|
image_url (str): The URL of the image to analyze. |
|
|
""" |
|
|
client = OpenAI() |
|
|
response = client.responses.create( |
|
|
model="gpt-4o-mini", |
|
|
input=[ |
|
|
{ |
|
|
"role": "user", |
|
|
"content": [ |
|
|
{ "type": "input_text", "text": f"{question}" }, |
|
|
{ |
|
|
"type": "input_image", |
|
|
"image_url": f"{image_url}", |
|
|
} |
|
|
] |
|
|
} |
|
|
] |
|
|
) |
|
|
|
|
|
return response |
|
|
|
|
|
@tool |
|
|
|
|
|
def get_youtube_transcript(video_id: str) -> str: |
|
|
""" |
|
|
Fetches the transcript of a YouTube video given its video ID. |
|
|
Args: |
|
|
video_id (str): The ID of the YouTube video. Pass in the video ID, NOT the video URL. For a video with the URL https://www.youtube.com/watch?v=12345 the ID is 12345. |
|
|
Returns: |
|
|
str: The transcript of the YouTube video. as a single string with each line separated by a newline character. |
|
|
""" |
|
|
|
|
|
ytt_api = YouTubeTranscriptApi() |
|
|
fetched_transcript = ytt_api.fetch(video_id) |
|
|
raw_data = fetched_transcript.to_raw_data() |
|
|
|
|
|
transcript = "\n".join([item['text'] for item in raw_data]) |
|
|
return transcript |
|
|
|
|
|
@tool |
|
|
def reverse_text(question: str) -> str: |
|
|
""" |
|
|
Reverse a string if it appears to be written backward. |
|
|
Args: |
|
|
question (str): The question that seemed to be written backward" |
|
|
""" |
|
|
if question.strip()[0] in "?.!": |
|
|
reversed_candidate = question[::-1] |
|
|
return reversed_candidate |
|
|
return "Text seems normal." |
|
|
|
|
|
|