from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool # from smolagents.models import TransformersModel import datetime import requests import pytz import yaml from tools.final_answer import FinalAnswerTool from Gradio_UI import GradioUI @tool def get_weather_tool(location: str) -> dict: """Tool that fetches the current weather for a given location using DuckDuckGo search. Args: location: The name of the city (e.g., 'New York'). Returns: A dictionary containing temperature (°C) and weather condition. """ search = DuckDuckGoSearchTool() query = f"current weather in {location}" search_results = search.run(query) # Try to extract temperature and condition from search results match = re.search(r"(-?\d+°C).*?\b(?:clear|cloudy|rain|snow|storm|sunny|drizzle|mist)\b", search_results, re.IGNORECASE) if match: temp = match.group(1) # Extract temperature condition = match.group(0).split()[-1] # Extract last weather-related word return {"temperature": temp, "condition": condition, "location": location} return {"error": f"Could not extract weather data for {location}. Try again later."} @tool def suggest_outfit_tool(weather_data: dict) -> str: """Tool that suggests an outfit based on weather fetched from get_weather_from_duckduckgo tool. Args: weather_data: A dictionary containing temperature (°C) and weather condition. Returns: A clothing suggestion based on the weather. """ if "error" in weather_data: return weather_data["error"] temp = int(re.search(r"-?\d+", weather_data["temperature"]).group()) # Extract numeric value condition = weather_data["condition"] location = weather_data["location"] # Outfit recommendations based on temperature if temp > 25: outfit = "It's hot outside! Wear light clothing, sunglasses, and a hat." elif 15 <= temp <= 25: outfit = "Mild weather. A t-shirt and jeans should be fine, but carry a light jacket." elif 5 <= temp < 15: outfit = "Chilly weather. Wear a sweater and a jacket." else: outfit = "It's cold! Wear a heavy coat, scarf, gloves, and boots." # Adjust for specific weather conditions if "rain" in condition: outfit += " Also, carry an umbrella or wear a raincoat." elif "snow" in condition: outfit += " Make sure to wear waterproof boots and layer up!" return f"Weather in {location}: {condition}, {temp}°C. {outfit}" # @tool # def my_custom_tooltom_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 ?" @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() model = HfApiModel( max_tokens=2096, temperature=0.5, #model_id='https://wxknx1kg971u7k1n.us-east-1.aws.endpoints.huggingface.cloud', model_id="https://jc26mwg228mkj8dw.us-east-1.aws.endpoints.huggingface.cloud/", 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, get_weather_tool, suggest_outfit_tool, DuckDuckGoSearchTool(), ], max_steps=6, verbosity_level=1, grammar=None, planning_interval=None, name=None, description=None, prompt_templates=prompt_templates ) GradioUI(agent).launch()