|
|
from fastapi import FastAPI |
|
|
from fastapi.responses import JSONResponse |
|
|
from pydantic import BaseModel, Field, computed_field |
|
|
import numpy as np |
|
|
from typing import Literal, Annotated |
|
|
import pickle |
|
|
import math |
|
|
import pandas as pd |
|
|
|
|
|
|
|
|
with open('delivery_time_model.pkl','rb') as f: |
|
|
model = pickle.load(f) |
|
|
|
|
|
app = FastAPI() |
|
|
|
|
|
@app.get('/') |
|
|
def home(): |
|
|
return {'message' : 'Delivery time estimation API '} |
|
|
|
|
|
@app.get('/health') |
|
|
def healthcheck(): |
|
|
return {'status' : 'OK'} |
|
|
|
|
|
|
|
|
|
|
|
class UserInput(BaseModel): |
|
|
age : Annotated[int,Field(...,ge = 18, lt = 120,description = 'Age of the delivery person')] |
|
|
rating : Annotated[float,Field(...,ge = 1, le = 6 ,description = 'Delivery person Ratings')] |
|
|
distance : Annotated[int,Field(...,gt = 0,description = 'Total Distance to be covered')] |
|
|
|
|
|
|
|
|
@app.post('/predict') |
|
|
def predict_time(data: UserInput): |
|
|
features = np.array([[data.age, data.rating, data.distance]]) |
|
|
prediction = model.predict(features) |
|
|
|
|
|
prediction_value = math.ceil(float(prediction[0])) |
|
|
|
|
|
return JSONResponse( |
|
|
status_code=200, |
|
|
content={"Predicted Delivery Time in Minutes": prediction_value} |
|
|
) |
|
|
|