| 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} |
| ) |
|
|