from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool import datetime import requests import pytz import yaml 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 ! @tool def destiny_still_arrives(name:str, age_or_dob:str)-> 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 takes a name, age or date of birth as input. It outputs the meaning of the name, an image of that person's birthstone and a horoscope reading of the day. Args: name: A string representing a person's age age_or_dob: A string representing a person's age or date of birth """ def get_birthstone(name: str, age_or_dob: str): birthstones = { "January": "Garnet", "February": "Amethyst", "March": "Aquamarine", "April": "Diamond", "May": "Emerald", "June": "Pearl", "July": "Ruby", "August": "Peridot", "September": "Sapphire", "October": "Opal", "November": "Topaz", "December": "Turquoise" } month = datetime.strptime(age_or_dob, "%Y-%m-%d").strftime("%B") birthstone = birthstones.get(month, "Unknown") image_urls = { "Garnet": "https://upload.wikimedia.org/wikipedia/commons/1/12/Garnet_rough.jpg", "Amethyst": "https://upload.wikimedia.org/wikipedia/commons/8/8b/Amethyst.jpg", "Aquamarine": "https://upload.wikimedia.org/wikipedia/commons/d/d5/Aquamarine_Brazil.jpg", "Diamond": "https://upload.wikimedia.org/wikipedia/commons/a/a7/Loose_diamond.png", "Emerald": "https://upload.wikimedia.org/wikipedia/commons/4/4f/Emerald.jpg", "Pearl": "https://upload.wikimedia.org/wikipedia/commons/1/17/Pearl_macro.jpg", "Ruby": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Ruby.jpg", "Peridot": "https://upload.wikimedia.org/wikipedia/commons/8/8a/Peridot.jpg", "Sapphire": "https://upload.wikimedia.org/wikipedia/commons/3/35/Sapphire.jpg", "Opal": "https://upload.wikimedia.org/wikipedia/commons/2/2f/Opal_macro.jpg", "Topaz": "https://upload.wikimedia.org/wikipedia/commons/5/56/Topaz.jpg", "Turquoise": "https://upload.wikimedia.org/wikipedia/commons/d/d6/Turquoise.jpg" } if birthstone in image_urls: response = requests.get(image_urls[birthstone]) img = Image.open(BytesIO(response.content)) img.show() return f"Hello {name}, your birthstone is {birthstone}!" else: return f"Hello {name}, we could not determine your birthstone." return get_birthstone @tool 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=[final_answer, get_current_time_in_timezone,image_generation_tool,destiny_still_arrives], ## 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()