Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 36 additions & 17 deletions api/index.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,46 @@
from fastapi import FastAPI, Query
from fastapi import FastAPI, Query, HTTPException
from pydantic import ValidationError
import pickle
import os

app = FastAPI()

# loading the saved model
diabetes_model = pickle.load(open('diabetes_model.sav', 'rb'))
try:
if not os.path.exists('diabetes_model.sav'):
raise FileNotFoundError("Model file not found.")
with open('diabetes_model.sav', 'rb') as model_file:
diabetes_model = pickle.load(model_file)
except (FileNotFoundError, pickle.UnpicklingError) as e:
diabetes_model = None
print(f"Error loading model: {e}")

@app.get('/api/diabetes_prediction')
async def diabetes_predd(
pregnancies: int = Query(...),
Glucose: int = Query(...),
BloodPressure: int = Query(...),
SkinThickness: int = Query(...),
Insulin: int = Query(...),
BMI: float = Query(...),
DiabetesPedigreeFunction: float = Query(...),
Age: int = Query(...)
pregnancies: int = Query(..., ge=0, description="Number of pregnancies"),
Glucose: int = Query(..., ge=0, description="Plasma glucose concentration"),
BloodPressure: int = Query(..., ge=0, description="Diastolic blood pressure (mm Hg)"),
SkinThickness: int = Query(..., ge=0, description="Triceps skin fold thickness (mm)"),
Insulin: int = Query(..., ge=0, description="2-hour serum insulin (mu U/ml)"),
BMI: float = Query(..., ge=0, description="Body mass index (weight in kg/(height in m)^2)"),
DiabetesPedigreeFunction: float = Query(..., ge=0, description="Diabetes pedigree function"),
Age: int = Query(..., ge=0, description="Age (years)")
):
if diabetes_model is None:
raise HTTPException(status_code=500, detail="Model is not loaded or available.")

input_list = [pregnancies, Glucose, BloodPressure, SkinThickness, Insulin, BMI, DiabetesPedigreeFunction, Age]

prediction = diabetes_model.predict([input_list])

if prediction[0] == 0:
return {'result': 'The person is not diabetic'}
else:
return {'result': 'The person is diabetic'}
try:
prediction = diabetes_model.predict([input_list])
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error during prediction: {str(e)}")

if len(prediction) == 0:
raise HTTPException(status_code=500, detail="Prediction result is empty.")

result = 'The person is not diabetic' if prediction[0] == 0 else 'The person is diabetic'
return {'result': result}

@app.exception_handler(Exception)
async def global_exception_handler(request, exc):
return HTTPException(status_code=500, detail=f"An unexpected error occurred: {exc}")
3 changes: 1 addition & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
fastapi
uvicorn
pydantic
scikit-learn
requests
scikit-learn