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 # Ensure this exists in your project # ✅ A creative motivational message tool @tool def my_custom_tool(name: str, mood_level: int) -> str: """ A tool that generates a motivational message based on the user's name and mood level. Args: name: The name of the person. mood_level: An integer between 1 and 10 indicating the mood (1=low, 10=high). """ if not 1 <= mood_level <= 10: return "Please enter a mood level between 1 and 10." messages = { "low": f"Hey {name}, every step you take matters. Keep going—you’ve got this. 🌱", "medium": f"{name}, you’re doing great! Trust the process and stay consistent. 💪", "high": f"🔥 {name}, you’re on fire today! Keep shining and inspiring others. 🚀" } if mood_level <= 3: return messages["low"] elif mood_level <= 7: return messages["medium"] else: return messages["high"] # ✅ A tool that returns the current time in any valid timezone @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., 'Africa/Addis_Ababa'). """ try: tz = pytz.timezone(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)}" # ✅ Required final answer tool final_answer = FinalAnswerTool() # ✅ Define the model (Qwen may be overloaded, switch if needed) model = HfApiModel( max_tokens=2096, temperature=0.5, model_id='Qwen/Qwen2.5-Coder-32B-Instruct', custom_role_conversions=None, ) # ✅ Load tool from smol-agents tool hub image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True) # ✅ Load system prompts from YAML with open("prompts.yaml", 'r') as stream: prompt_templates = yaml.safe_load(stream) # ✅ Create the code agent with tools agent = CodeAgent( model=model, tools=[ final_answer, # Required final output handler my_custom_tool, # Motivational tool get_current_time_in_timezone, # Timezone-aware clock image_generation_tool, # Optional image generation tool DuckDuckGoSearchTool(), # Optional web search tool ], max_steps=6, verbosity_level=1, grammar=None, planning_interval=None, name="MotivatorAgent", description="An agent that motivates, informs, and creates visuals.", prompt_templates=prompt_templates, ) # ✅ Launch the UI GradioUI(agent).launch()