Spaces:
Running
Running
Download app.py from Eileeen/First_agent_template: direct link, hf CLI and curl.
- Browser
- Download file 5.51 kB
-
https://huggingface.co/spaces/Eileeen/First_agent_template/resolve/main/app.py
- Command line
-
hf download hf://spaces/Eileeen/First_agent_template/app.py
-
curl -L -o app.py https://huggingface.co/spaces/Eileeen/First_agent_template/resolve/main/app.py
5.51 kB
| from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool | |
| import datetime | |
| import requests | |
| import pytz | |
| import yaml | |
| import random | |
| from tools.final_answer import FinalAnswerTool | |
| from Gradio_UI import GradioUI | |
| # Below is an example of a tool that does nothing. Amaze us with your creativity ! | |
| def my_custom_tool(arg1:str, arg2:int)-> str: #it's import to specify the return type | |
| #Keep this format for the description / args / args description but feel free to modify the tool | |
| """A tool that does nothing yet | |
| Args: | |
| arg1: the first argument | |
| arg2: the second argument | |
| """ | |
| return "What magic will you build ?" | |
| def define_mood(mood: str) -> str: | |
| """A tool that matches user's mood to a predefined mood category. If it is non-english, it should be translated into English first. | |
| Args: | |
| mood: mood expressed by the user. | |
| """ | |
| pre_mood = { | |
| "happy":["happy", "joyful", "cheerful", "delighted", "pleased", "merry"], | |
| "excited": ["excited", "enthusiastic", "energetic", "hyped"], | |
| "sad": ["sad", "unhappy", "sorrowful", "gloomy", "down", "blue", "melancholic", "heartbroken", "low", "upset", "annoyed"], | |
| "depressed": ["depressed", "miserable", "hopeless", "lonely", "broken", "devastated"], | |
| "exhausted": ["tired", "exhausted", "sleepy", "drowsy", "fatigued", "drained", "weary", "worn out"] | |
| } | |
| for category, feelings in pre_mood.items(): | |
| for feeling in feelings: | |
| if feeling in mood.lower(): | |
| return category | |
| return "just_okay" | |
| def recommend_songs(defined_mood: str) -> str: | |
| """A tool that recommends songs based on the user's mapped mood category. | |
| Args: | |
| defined_mood: The categorized mood returned from define_mood() function (e.g., 'happy', 'excited', 'sad', 'depressed', 'exhausted') | |
| """ | |
| songs = { | |
| "happy": [ | |
| "Floating (feat. Khalid) [filous Remix] (by Alina Baraz) " | |
| "Waves (by Glen Check)", | |
| "Hype Boy (by NewJeans)", | |
| "Bubble Gum (by NewJeans)", | |
| "Is It Ever Gonna Make Sense (by Budjerah)", | |
| ], | |
| "excited": [ | |
| "Island Island (by Bye Bye Badman)", | |
| "Hello Future (by NCT DREAM)", | |
| "APT. (by ROSÉ)" | |
| "Attention (by NewJeans)", | |
| "Paint It Gold (by Glen Check)", | |
| "365247 (by DAY6)" | |
| ], | |
| "sad": [ | |
| "Number one girl (by ROSÉ)", | |
| "Call it the end (by ROSÉ)", | |
| "Toxic till the end (by ROSÉ)", | |
| "ex i never had (by LANY)", | |
| "The Rainy Night (by NCT 127)" | |
| ], | |
| "depressed": [ | |
| "Let's! (by Hoppipolla)", | |
| "Juice (by Lizzo)", | |
| "Bye bye my blue (by Yerin Baek)", | |
| "너와의 모든 지금 (by JAESSBEE)", | |
| "Rose Blossom (by H1-KEY)" | |
| "Better Days (by NEIKED, Mae Muller, Polo G)" | |
| ], | |
| "exhausted": [ | |
| "Shoot me (by DAY6)", | |
| "Melt down (by DAY6)", | |
| "Welcome to the Show (by DAY6)", | |
| "Love me or leave me (by DAY6)", | |
| "HandClap (by Fitz and The Tantrums)", | |
| "Runaway baby (by Bruno Mars)", | |
| "The nights (by avicii)", | |
| "Hello! emart (by emart)" | |
| ], | |
| "just_okay": [ | |
| "Love Lee (by AKMU)", | |
| "Love Parade (by DAY6)", | |
| "Dynamite (by BTS)", | |
| "permission to dance (by BTS)" | |
| ] | |
| } | |
| try: | |
| if defined_mood in songs: | |
| return f"Why don't you listen to '{random.choice(songs[defined_mood])}' today?" | |
| else: | |
| return "Here's the most highly ranked song in spotify. 'APT. (w/ Bruno Mars) (by ROSÉ)'" | |
| except Exception as e: | |
| return f"Error finding right songs for '{defined_mood}' mood." | |
| def get_current_time_in_timezone(timezone: str) -> str: | |
| """A tool that fetches the current local time in a specified timezone. | |
| Args: | |
| timezone: A string representing a valid timezone (e.g., 'America/New_York'). | |
| """ | |
| try: | |
| # Create timezone object | |
| tz = pytz.timezone(timezone) | |
| # Get current time in that timezone | |
| local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S") | |
| return f"The current local time in {timezone} is: {local_time}" | |
| except Exception as e: | |
| return f"Error fetching time for timezone '{timezone}': {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=[define_mood, recommend_songs, image_generation_tool, final_answer], ## 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() |