File size: 3,223 Bytes
9b5b26a
9882eb9
1f15940
b8a1072
9b5b26a
 
c19d193
6aae614
0ffdbb6
 
8fe992b
9b5b26a
 
5df72d6
b8a1072
9882eb9
9b5b26a
1f15940
 
0ffdbb6
9b5b26a
1f15940
 
 
9b5b26a
1f15940
 
 
 
23633e0
1f15940
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0ffdbb6
1f15940
9882eb9
9b5b26a
1f15940
8c01ffb
 
6aae614
ae7a494
 
 
 
e121372
bf6d34c
 
29ec968
fe328e0
13d500a
8c01ffb
 
9b5b26a
 
8c01ffb
861422e
 
9b5b26a
8c01ffb
8fe992b
1f15940
8c01ffb
 
 
 
 
 
861422e
8fe992b
 
9b5b26a
8c01ffb
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
88
89
90
91
92
93
94
95
96
97
98
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()