| | from typing import Any, Optional |
| | from smolagents.tools import Tool |
| | import duckduckgo_search |
| | from googleapiclient.discovery import build |
| |
|
| | import os |
| |
|
| | YOUTUBE_API_KEY=os.environ.get('YOUTUBE_API_KEY') |
| |
|
| | def youtube_search(query): |
| | max_results=10 |
| | print(f"query -> {query}") |
| |
|
| | return_result = [] |
| | youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY) |
| |
|
| | request = youtube.search().list( |
| | q=query, |
| | part='snippet', |
| | maxResults=max_results, |
| | type='video' |
| | ) |
| | response = request.execute() |
| | print(f"Stap 5 {response}") |
| |
|
| | for item in response.get('items', []): |
| | print(f"Title: {item['snippet']['title']}") |
| | print(f"Video ID: {item['id']['videoId']}") |
| | print() |
| | return_result.append({'aquery': query, 'titlevideo': item['snippet']['title'], 'videoId': item['id']['videoId']}) |
| |
|
| |
|
| | print("Stap 6") |
| | return return_result |
| |
|
| | class YoutubeSearchTool(Tool): |
| | name = "youtube_search" |
| | |
| | description = "Performs a search on youtube to select a potentially related song of band based on your query and return top X results. Never use named parameter use on positional parameters" |
| | inputs = {'aquery': {'type': 'string', 'description': 'The search query to perform.'}} |
| | output_type = "object" |
| |
|
| | def __init__(self, max_results=10, **kwargs): |
| | super().__init__() |
| | self.max_results = max_results |
| |
|
| | def forward(self, aquery: str) -> str: |
| | results = youtube_search(aquery) |
| | if len(results) == 0: |
| | raise Exception("No results found! Try a less restrictive/shorter query.") |
| |
|
| | return results |