data/get_weather_tool.py (43 lines of code) (raw):
"""Sample Tool for Agent Builder."""
import logging
import requests
from firebase_admin import initialize_app
from firebase_functions import https_fn
from flask import Flask, request
from google.auth import default as google_default_auth
from google.auth.transport.requests import Request as GoogleRequest
initialize_app()
app = Flask(__name__)
# Set up logging
logging.basicConfig(level=logging.INFO)
# Google Auth
creds, project = google_default_auth()
auth_req = GoogleRequest()
def get_request_params(param, default=None):
request_json = request.get_json(silent=True)
request_args = request.args
return (request_json or {}).get(param, default) or request_args.get(
param, default)
@app.route("/get_weather_grid", methods=["GET", "POST"])
def get_weather_grid():
lat = get_request_params("latitude")
long = get_request_params("longitude")
url = f"https://api.weather.gov/points/{lat},{long}"
response = requests.get(url)
logging.info(f"FIRST RESPONSE: {response}")
if response.status_code == 200:
data = response.json()
logging.info(f"FIRST RESPONSE DATA: {data}")
response = requests.get(data["properties"]["forecast"])
logging.info(f"SECOND RESPONSE: {response}")
if response.status_code == 200:
data = response.json()
logging.info(f"SECOND RESPONSE DATA: {data}")
# just take the weather from the current period
period = data["properties"]["periods"][0]
return {
"temperature": period["temperature"],
"temperatureUnit": period["temperatureUnit"]
}
return {}
@https_fn.on_request()
def main(req: https_fn.Request) -> https_fn.Response:
creds.refresh(auth_req)
with app.request_context(req.environ):
return app.full_dispatch_request()