| import backoff |
| from langchain_community.document_loaders import YoutubeLoader |
| from smolagents import tool |
|
|
| @tool |
| def load_youtube(video_url: str, phrase: str) -> str: |
| """ |
| Load YouTube video content with customizable language and translation options. |
| |
| This function retrieves the transcript and metadata from a YouTube video with retry logic |
| using exponential backoff for robust handling of temporary failures. |
| |
| Args: |
| video_url (str): The YouTube video URL to load content from. |
| phrase (str): The phrase looking for in transcript. |
| |
| Returns: |
| str: The loaded video content that occour after the looking phrase. |
| |
| Raises: |
| Exception: Any exception that occurs after exhausting all retry attempts (max 3 tries). |
| |
| Examples: |
| >>> load_youtube_with_options("https://www.youtube.com/watch?v=dQw4w9WgXcQ", "Spanish transcript") |
| "Video content with transcript..." |
| |
| "Spanish transcript translated to English..." |
| """ |
| @backoff.on_exception(backoff.expo, Exception, max_tries=8, max_time=60) |
| def _loader(video_url) -> str: |
| loader = YoutubeLoader.from_youtube_url(video_url) |
| doc = loader.load() |
| if doc: |
| return doc[0].page_content.lower() |
| else: |
| raise Exception("Empty document") |
|
|
| phrase = phrase.replace(".", "").replace("?", "").lower() |
| content = _loader(video_url) |
| if phrase in content: |
| return content[content.index(phrase): len(content)] |
| return content |
|
|