From 2a1170b73814b23bc9389d97366046d2a66f5ecd Mon Sep 17 00:00:00 2001 From: AutoSWE Bot Date: Wed, 19 Nov 2025 13:30:45 +0000 Subject: [PATCH] AI: feat: add weather tool --- py-server/nodes/Agents/tools/tools.py | 47 ++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/py-server/nodes/Agents/tools/tools.py b/py-server/nodes/Agents/tools/tools.py index f0dabd1..6d4846a 100644 --- a/py-server/nodes/Agents/tools/tools.py +++ b/py-server/nodes/Agents/tools/tools.py @@ -1,9 +1,13 @@ import getpass import os +import requests from dotenv import load_dotenv from langchain_tavily import TavilySearch from langchain_core.tools import Tool + load_dotenv() + +# Ensure Tavily API key is set if not os.environ.get("TAVILY_API_KEY"): os.environ["TAVILY_API_KEY"] = getpass.getpass("Tavily API key:\n") @@ -13,8 +17,49 @@ def web_search_tool(query: str): print(result) return result -WEBSEARCH_TOOL=Tool( +WEBSEARCH_TOOL = Tool( name="WebSearch", func=web_search_tool, description="search the web for the latest information" +) + +# Ensure OpenWeatherMap API key is set +if not os.environ.get("OPENWEATHER_API_KEY"): + os.environ["OPENWEATHER_API_KEY"] = getpass.getpass("OpenWeatherMap API key:\n") + +def get_weather(city: str): + api_key = os.environ["OPENWEATHER_API_KEY"] + base_url = "https://api.openweathermap.org/data/2.5/weather" + params = { + "q": city, + "appid": api_key, + "units": "metric" + } + try: + response = requests.get(base_url, params=params, timeout=10) + response.raise_for_status() + except requests.RequestException as e: + return f"Error fetching weather data: {e}" + + data = response.json() + if data.get("cod") != 200: + return f"Error: {data.get('message', 'Unknown error')}" + + main = data.get("main", {}) + weather_desc = data.get("weather", [{}])[0].get("description", "No description") + temp = main.get("temp") + feels_like = main.get("feels_like") + humidity = main.get("humidity") + + return ( + f"Current weather in {city}:\n" + f"Temperature: {temp}°C (feels like {feels_like}°C)\n" + f"Weather: {weather_desc}\n" + f"Humidity: {humidity}%" + ) + +WEATHER_TOOL = Tool( + name="Weather", + func=get_weather, + description="Provides current weather information for a specified city. Input should be the city name." ) \ No newline at end of file