Spaces:
Runtime error
Runtime error
import requests | |
import json | |
from ..tool import Tool | |
import os | |
def build_tool(config) -> Tool: | |
tool = Tool( | |
"Weather Info", | |
"Look up weather information", | |
name_for_model="Weather", | |
description_for_model="Plugin for look up weather information", | |
logo_url="https://cdn.weatherapi.com/v4/images/weatherapi_logo.png", | |
contact_email="hello@contact.com", | |
legal_info_url="hello@legal.com", | |
) | |
KEY = config["subscription_key"] | |
URL_CURRENT_WEATHER = "http://api.weatherapi.com/v1/current.json" | |
URL_FORECAST_WEATHER = "http://api.weatherapi.com/v1/forecast.json" | |
def get_weather_today(location: str): | |
"""Get today's the weather""" | |
param = {"key": KEY, "q": location} | |
res_completion = requests.get(URL_CURRENT_WEATHER, params=param) | |
data = json.loads(res_completion.text.strip()) | |
output = {} | |
output["overall"] = f"{data['current']['condition']['text']},\n" | |
output["name"] = f"{data['location']['name']},\n" | |
output["region"] = f"{data['location']['region']},\n" | |
output["country"] = f"{data['location']['country']},\n" | |
output["localtime"] = f"{data['location']['localtime']},\n" | |
output[ | |
"temperature" | |
] = f"{data['current']['temp_c']}(C), {data['current']['temp_f']}(F),\n" | |
output[ | |
"percipitation" | |
] = f"{data['current']['precip_mm']}(mm), {data['current']['precip_in']}(inch),\n" | |
output["pressure"] = f"{data['current']['pressure_mb']}(milibar),\n" | |
output["humidity"] = f"{data['current']['humidity']},\n" | |
output["cloud"] = f"{data['current']['cloud']},\n" | |
output[ | |
"body temperature" | |
] = f"{data['current']['feelslike_c']}(C), {data['current']['feelslike_f']}(F),\n" | |
output[ | |
"wind speed" | |
] = f"{data['current']['gust_kph']}(kph), {data['current']['gust_mph']}(mph),\n" | |
output[ | |
"visibility" | |
] = f"{data['current']['vis_km']}(km), {data['current']['vis_miles']}(miles),\n" | |
output["UV index"] = f"{data['current']['uv']},\n" | |
text_output = ( | |
f"Today's weather report for {data['location']['name']} is:\n" | |
+ "".join([f"{key}: {output[key]}" for key in output.keys()]) | |
) | |
return text_output | |
def forecast_weather(location: str, days: int): | |
"""Forecast weather in the upcoming days.""" | |
param = { | |
"key": KEY, | |
"q": location, | |
"days": int(days), | |
} | |
res_completion = requests.get(URL_FORECAST_WEATHER, params=param) | |
res_completion = json.loads(res_completion.text.strip()) | |
MAX_DAYS = 14 | |
res_completion = res_completion["forecast"]["forecastday"][ | |
int(days) - 1 if int(days) < MAX_DAYS else MAX_DAYS - 1 | |
] | |
output_dict = {} | |
for k, v in res_completion["day"].items(): | |
output_dict[k] = v | |
for k, v in res_completion["astro"].items(): | |
output_dict[k] = v | |
output = {} | |
output["over all weather"] = f"{output_dict['condition']['text']},\n" | |
output[ | |
"max temperature" | |
] = f"{output_dict['maxtemp_c']}(C), {output_dict['maxtemp_f']}(F),\n" | |
output[ | |
"min temperature" | |
] = f"{output_dict['mintemp_c']}(C), {output_dict['mintemp_f']}(F),\n" | |
output[ | |
"average temperature" | |
] = f"{output_dict['avgtemp_c']}(C), {output_dict['avgtemp_f']}(F),\n" | |
output[ | |
"max wind speed" | |
] = f"{output_dict['maxwind_kph']}(kph), {output_dict['maxwind_mph']}(mph),\n" | |
output[ | |
"total precipitation" | |
] = f"{output_dict['totalprecip_mm']}(mm), {output_dict['totalprecip_in']}(inch),\n" | |
output["will rain today"] = f"{output_dict['daily_will_it_rain']},\n" | |
output["chance of rain"] = f"{output_dict['daily_chance_of_rain']},\n" | |
output["total snow"] = f"{output_dict['totalsnow_cm']}(cm),\n" | |
output["will snow today"] = f"{output_dict['daily_will_it_snow']},\n" | |
output["chance of snow"] = f"{output_dict['daily_chance_of_snow']},\n" | |
output[ | |
"average visibility" | |
] = f"{output_dict['avgvis_km']}(km), {output_dict['avgvis_miles']}(miles),\n" | |
output["average humidity"] = f"{output_dict['avghumidity']},\n" | |
output["UV index"] = f"{output_dict['uv']},\n" | |
output["sunrise time"] = f"{output_dict['sunrise']},\n" | |
output["sunset time"] = f"{output_dict['sunset']},\n" | |
output["moonrise time"] = f"{output_dict['moonrise']},\n" | |
output["moonset time"] = f"{output_dict['moonset']},\n" | |
text_output = ( | |
f"The weather forecast for {param['q']} at {param['days']} days later is: \n" | |
+ "".join([f"{key}: {output[key]}" for key in output.keys()]) | |
) | |
return text_output | |
return tool | |