| | from langchain_community.tools.yahoo_finance_news import YahooFinanceNewsTool |
| | from langchain_community.utilities import OpenWeatherMapAPIWrapper |
| | from langchain_community.utilities import WikipediaAPIWrapper |
| | from langchain_community.tools import WikipediaQueryRun |
| | from langchain_tavily.tavily_search import TavilySearch |
| | from agents.coder.agent import coder_agent |
| | from agents.utils.smart_home import change_device_states |
| | from timezonefinder import TimezoneFinder |
| | from langchain_core.tools import tool |
| | from dotenv import load_dotenv |
| | from geopy import Nominatim |
| | import datetime |
| | import pytz |
| | import os |
| |
|
| | load_dotenv() |
| |
|
| |
|
| | tf = TimezoneFinder() |
| | web_search = TavilySearch( |
| | max_results=5, |
| | topic="general", |
| | include_answer=True |
| | ) |
| | yahoo = YahooFinanceNewsTool() |
| | geolocator = Nominatim(user_agent="my_geocoder") |
| | wikipedia = WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper()) |
| | weekday_mapping = ("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday") |
| |
|
| | @tool |
| | def current_time(location: str = None): |
| | """Get the current time for a location or current position.""" |
| | try: |
| | if location: |
| | location_data = geolocator.geocode(location) |
| | if location_data: |
| | timezone = pytz.timezone(tf.timezone_at(lat=location_data.latitude, lng=location_data.longitude)) |
| | location_name = location.capitalize() |
| | else: |
| | return f"Could not find location: {location}" |
| | else: |
| | |
| | lat = os.getenv('LATITUDE') |
| | lon = os.getenv('LONGITUDE') |
| | if lat and lon: |
| | timezone = pytz.timezone(tf.timezone_at(lat=float(lat), lng=float(lon))) |
| | location_name = os.getenv('LOCATION', 'Current Location') |
| | else: |
| | timezone = pytz.UTC |
| | location_name = 'UTC' |
| |
|
| | current_dt = datetime.datetime.now(timezone) |
| | weekday = weekday_mapping[current_dt.weekday()] |
| | return f"Location: {location_name}; Current Date and Time: {current_dt.strftime('%Y-%m-%d %H:%M')}, {weekday}." |
| | except Exception as e: |
| | return f"Error getting current time: {str(e)}" |
| |
|
| | @tool |
| | def weather(location: str = None): |
| | """Get the current weather for a location or current position.""" |
| | try: |
| | weather_wrapper = OpenWeatherMapAPIWrapper( |
| | openweathermap_api_key=os.getenv('OPENWEATHERMAP_API_KEY') |
| | ) |
| | if not location: |
| | location = os.getenv('LOCATION', 'Unknown') |
| | return weather_wrapper.run(location=location) |
| | except Exception as e: |
| | return f"Error getting weather: {str(e)}" |
| |
|
| |
|
| | tools = [yahoo, web_search, current_time, weather, change_device_states, coder_agent] |
| |
|
| |
|
| |
|