voidKaustubh's picture
music recommendation app
1f15940 verified
from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool
from duckduckgo_search import DDGS
from typing import Optional
import time
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
import pandas as pd
from datetime import datetime, timedelta
from Gradio_UI import GradioUI
# Below is an example of a tool that does nothing. Amaze us with your creativity !
@tool
def get_similar_songs(song_title: str, artist_name: str, num_recommendations: int = 5) -> str:
"""A tool that suggests similar songs based on a given song and artist.
Args:
song_title: Name of the song
artist_name: Name of the artist
num_recommendations: Number of similar songs to return (default: 5)
"""
# LastFM API endpoint and parameters
API_KEY = "d17717e179b91347018a13452956c8a0" # Replace with your LastFM API key
BASE_URL = "http://ws.audioscrobbler.com/2.0/"
try:
# Get similar tracks
params = {
"method": "track.getsimilar",
"artist": artist_name,
"track": song_title,
"api_key": API_KEY,
"format": "json",
"limit": num_recommendations
}
response = requests.get(BASE_URL, params=params)
data = response.json()
# Check if we got valid results
if "similartracks" not in data or "track" not in data["similartracks"]:
return f"No similar songs found for '{song_title}' by {artist_name}. Please check the song and artist names."
# Format the recommendations
similar_tracks = data["similartracks"]["track"]
result = f"Similar songs to '{song_title}' by {artist_name}:\n\n"
for i, track in enumerate(similar_tracks, 1):
result += f"{i}. \"{track['name']}\" by {track['artist']['name']}\n"
result += f" Match score: {float(track['match'])*100:.1f}%\n"
if 'playcount' in track:
result += f" Playcount: {track['playcount']:,}\n"
result += "\n"
return result
except Exception as e:
return f"Error finding similar songs: {str(e)}"
final_answer = FinalAnswerTool()
# If the agent does not answer, the model is overloaded, please use another model or the following Hugging Face Endpoint that also contains qwen2.5 coder:
# model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud'
model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id='Qwen/Qwen2.5-Coder-32B-Instruct',# it is possible that this model may be overloaded
custom_role_conversions=None,
)
# Import tool from Hub
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)
with open("prompts.yaml", 'r') as stream:
prompt_templates = yaml.safe_load(stream)
agent = CodeAgent(
model=model,
tools=[final_answer, get_similar_songs], ## add your tools here (don't remove final answer)
max_steps=6,
verbosity_level=1,
grammar=None,
planning_interval=None,
name=None,
description=None,
prompt_templates=prompt_templates
)
GradioUI(agent).launch()