Muhammadidrees commited on
Commit
72c9e1e
·
verified ·
1 Parent(s): 4f2a2b0

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +67 -0
app.py ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI
2
+ from fastapi.responses import JSONResponse
3
+ from pydantic import BaseModel, Field, computed_field
4
+ from typing import Literal, Annotated
5
+ import pickle
6
+ import pandas as pd
7
+ import joblib
8
+ import traceback
9
+
10
+ from fastapi.middleware.cors import CORSMiddleware
11
+
12
+ # Path to your saved pickle file
13
+ model_path = "xgb_model_reg.pkl"
14
+
15
+ # Load the model
16
+ model = joblib.load(model_path)
17
+
18
+ app=FastAPI()
19
+
20
+ app.add_middleware(
21
+ CORSMiddleware,
22
+ allow_origins=["*"], # In production, use specific domains
23
+ allow_methods=["GET", "POST"],
24
+ allow_headers=["*"],
25
+ )
26
+
27
+ #pydantic Model to validate data
28
+ class UserInput(BaseModel):
29
+ age: Annotated[int, Field(gt=0,description='Age of the Patient')]
30
+ albumin_gL: Annotated[float, Field(gt=0,description='Quantity of Albumin in gL')]
31
+ creat_umol: Annotated[float, Field(gt=0,description='Quantity of Creatnine in umol')]
32
+ glucose_mmol: Annotated[float, Field(gt=0,description='Qunatity of Glucose in mmol')]
33
+ lncrp:Annotated[float, Field(gt=0,description='Log of Crp')]
34
+ lymph: Annotated[float, Field(gt=0,description='lym ph')]
35
+ mcv: Annotated[float, Field(gt=0,description='mcv')]
36
+ rdw: Annotated[float, Field(gt=0,description='rdw')]
37
+ alp: Annotated[float, Field(gt=0,description='alp')]
38
+ wbc: Annotated[float, Field(gt=0,description='white blood cell')]
39
+
40
+ @app.post('/predict')
41
+ def predict_premium(data: UserInput):
42
+ try:
43
+ input_df = pd.DataFrame(
44
+ [
45
+ {
46
+ 'age': data.age,
47
+ 'albumin_gL': data.albumin_gL,
48
+ 'creat_umol': data.creat_umol,
49
+ 'glucose_mmol': data.glucose_mmol,
50
+ 'lncrp': data.lncrp,
51
+ 'lymph': data.lymph,
52
+ 'mcv': data.mcv,
53
+ 'rdw': data.rdw,
54
+ 'alp': data.alp,
55
+ 'wbc': data.wbc
56
+ }
57
+ ]
58
+ )
59
+
60
+ prediction_value = float(model.predict(input_df)[0]) # <-- FIXED HERE
61
+
62
+ return JSONResponse(
63
+ status_code=200,
64
+ content={"Predicted Biological Age of Patient": prediction_value}
65
+ )
66
+ except Exception as e:
67
+ return JSONResponse(status_code=500, content={"error": str(e)})