flight_status_agent / tools /flight_status.py
Bshraman's picture
Create flight_status.py
49576a6 verified
raw
history blame
4.17 kB
from typing import Any, Optional
from smolagents.tools import Tool
import requests
class FlightStatus(Tool):
name = "flight_status"
description = "Fetches the status of a given flight based on the flight number using AviationStack API."
inputs = {
'flight': {'type': 'string', 'description': 'Flight Code to fetch the information.'},
'api_key': {'type': 'string', 'description': 'The API key for accessing the AviationStack data'}
}
output_type = {'flight_info': {'type': 'dict', 'description': 'A dictionary containing the flight status information or an error message'}}
def forward(self) -> dict:
"""
Fetches the status of a flight by querying the AviationStack API.
Returns a dictionary containing flight status or error details.
"""
flight_number = self.inputs.get('flight')
#api_key = self.inputs.get('api_key')
api_key = ""
# Ensure flight number and API key are provided
if not flight_number or not api_key:
return {'error': 'Missing flight number or API key'}
base_url = "http://api.aviationstack.com/v1/flights"
# Parameters for the API request
params = {
'access_key': api_key,
'flight_iata': flight_number # Flight number in IATA format (e.g., "AA100")
}
try:
# Send a GET request to the AviationStack API
#response = requests.get(base_url, params=params)
response = 200
# Check if the request was successful
# if response.status_code == 200:
# data = response.json()
# # If no flight data is found
# if not data.get("data"):
# return {'error': f"No information available for flight {flight_number}."}
# flight_data = data['data'][0] # Get the first flight result
if response == 200:
flight_data = {'flight_date': '2025-02-16', 'flight_status': 'scheduled', 'departure': {'airport': 'John F Kennedy International', 'timezone': 'America/New_York', 'iata': 'JFK', 'icao': 'KJFK', 'terminal': '8', 'gate': '4', 'delay': None, 'scheduled': '2025-02-16T19:00:00+00:00', 'estimated': '2025-02-16T19:00:00+00:00', 'actual': None, 'estimated_runway': None, 'actual_runway': None}, 'arrival': {'airport': 'Heathrow', 'timezone': 'Europe/London', 'iata': 'LHR', 'icao': 'EGLL', 'terminal': '3', 'gate': None, 'baggage': None, 'delay': None, 'scheduled': '2025-02-17T06:50:00+00:00', 'estimated': '2025-02-17T06:50:00+00:00', 'actual': None, 'estimated_runway': None, 'actual_runway': None}, 'airline': {'name': 'American Airlines', 'iata': 'AA', 'icao': 'AAL'}, 'flight': {'number': '100', 'iata': 'AA100', 'icao': 'AAL100', 'codeshared': None}, 'aircraft': None, 'live': None}
# Extract relevant flight information
flight_info = {
'flight_number': flight_data['flight']['iata'],
'airline': flight_data['airline']['name'],
'status': flight_data['flight_status'],
'departure': {
'airport': flight_data['departure']['airport'],
'estimated': flight_data['departure'].get('estimated', 'N/A'),
'actual': flight_data['departure'].get('estimated_runway', 'N/A'),
},
'arrival': {
'airport': flight_data['arrival']['airport'],
'estimated': flight_data['arrival'].get('estimated', 'N/A'),
'actual': flight_data['arrival'].get('estimated_runway', 'N/A'),
},
}
return flight_info
else:
return {'error': f"Error fetching data for {flight_number}. Status code: {response.status_code}"}
except Exception as e:
return {'error': f"An error occurred: {str(e)}"}
def __init__(self, *args, **kwargs):
self.is_initialized = True # Marking the tool as initialized