Spaces:
No application file
No application file
| from fastapi import FastAPI | |
| from fastapi.responses import JSONResponse | |
| from pydantic import BaseModel, Field, computed_field | |
| from typing import Literal, Annotated | |
| import pickle | |
| import pandas as pd | |
| import joblib | |
| import traceback | |
| from fastapi.middleware.cors import CORSMiddleware | |
| # Path to your saved pickle file | |
| model_path = "xgb_model_reg.pkl" | |
| # Load the model | |
| model = joblib.load(model_path) | |
| app=FastAPI() | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], # In production, use specific domains | |
| allow_methods=["GET", "POST"], | |
| allow_headers=["*"], | |
| ) | |
| #pydantic Model to validate data | |
| class UserInput(BaseModel): | |
| age: Annotated[int, Field(gt=0,description='Age of the Patient')] | |
| albumin_gL: Annotated[float, Field(gt=0,description='Quantity of Albumin in gL')] | |
| creat_umol: Annotated[float, Field(gt=0,description='Quantity of Creatnine in umol')] | |
| glucose_mmol: Annotated[float, Field(gt=0,description='Qunatity of Glucose in mmol')] | |
| lncrp:Annotated[float, Field(gt=0,description='Log of Crp')] | |
| lymph: Annotated[float, Field(gt=0,description='lym ph')] | |
| mcv: Annotated[float, Field(gt=0,description='mcv')] | |
| rdw: Annotated[float, Field(gt=0,description='rdw')] | |
| alp: Annotated[float, Field(gt=0,description='alp')] | |
| wbc: Annotated[float, Field(gt=0,description='white blood cell')] | |
| def predict_premium(data: UserInput): | |
| try: | |
| input_df = pd.DataFrame( | |
| [ | |
| { | |
| 'age': data.age, | |
| 'albumin_gL': data.albumin_gL, | |
| 'creat_umol': data.creat_umol, | |
| 'glucose_mmol': data.glucose_mmol, | |
| 'lncrp': data.lncrp, | |
| 'lymph': data.lymph, | |
| 'mcv': data.mcv, | |
| 'rdw': data.rdw, | |
| 'alp': data.alp, | |
| 'wbc': data.wbc | |
| } | |
| ] | |
| ) | |
| prediction_value = float(model.predict(input_df)[0]) # <-- FIXED HERE | |
| return JSONResponse( | |
| status_code=200, | |
| content={"Predicted Biological Age of Patient": prediction_value} | |
| ) | |
| except Exception as e: | |
| return JSONResponse(status_code=500, content={"error": str(e)}) | |