Spaces:
Runtime error
Runtime error
| from fastapi import FastAPI | |
| from pydantic import BaseModel | |
| import pickle | |
| import pandas as pd | |
| import numpy as np | |
| import uvicorn | |
| # call the app | |
| app = FastAPI(title="API") | |
| # Load the model and scaler | |
| def load_model_and_scaler(): | |
| with open("model.pkl", "rb") as f1, open("scaler.pkl", "rb") as f2: | |
| return pickle.load(f1), pickle.load(f2) | |
| model, scaler = load_model_and_scaler() | |
| # define your predict function | |
| def predict(df, endpoint="simple"): | |
| # Scaling | |
| scaled_df = scaler.transform(df) # Scale the input data using a pre-defined scaler | |
| # Prediction | |
| prediction = model.predict(scaled_df) # Make predictions using a pre-trained XGBoost regressor model | |
| response = [] | |
| for eta in prediction: | |
| # Convert NumPy float to Python native float | |
| eta = float(eta) | |
| # Create a response for each prediction with the predicted ETA | |
| output = { | |
| "predicted_eta": eta | |
| } | |
| response.append(output) # Add the response to the list of responses | |
| return response # Return the list of responses | |
| class Trip(BaseModel): | |
| Origin_lat: float | |
| Origin_lon: float | |
| Destination_lat: float | |
| Destination_lon: float | |
| Trip_distance: int # Assuming this column represents an integer value | |
| total_secs: int # Assuming this column represents an integer value | |
| dewpoint_2m_temperature: float | |
| maximum_2m_air_temperature: float | |
| mean_2m_air_temperature: float | |
| mean_sea_level_pressure: float | |
| minimum_2m_air_temperature: float | |
| surface_pressure: float | |
| total_precipitation: float | |
| u_component_of_wind_10m: float | |
| v_component_of_wind_10m: float | |
| class Trips(BaseModel): | |
| all_trips: list[Trip] | |
| def return_list_of_dict(cls, trips: "Trips"): | |
| trip_list = [] | |
| for trip in trips.all_trips: # for each item in all_trips | |
| trip_dict = trip.dict() # convert to a dictionary | |
| trip_list.append(trip_dict) # add it to the empty list called trip_list | |
| return trip_list | |
| # Endpoints | |
| # Root Endpoint | |
| def root(): | |
| return {"Welcome to the ETA Prediction API! This API provides endpoints for predicting ETA based on trip data."} | |
| # Prediction endpoint | |
| def predict_eta(trip: Trip): | |
| # Make prediction | |
| data = pd.DataFrame(trip.dict(), index=[0]) | |
| predicted_eta = predict(df=data) | |
| return predicted_eta | |
| # Multiple Prediction Endpoint | |
| def predict_eta_for_multiple_trips(trips: Trips): | |
| """Make prediction with the passed data""" | |
| data = pd.DataFrame(Trips.return_list_of_dict(trips)) | |
| predicted_eta = predict(df=data, endpoint="multi") | |
| return {"predicted_eta": predicted_eta} | |
| if __name__ == "__main__": | |
| uvicorn.run("main:app", reload=True) |