pricing / src /app /main.py
GitHub Actions
Deploy selected files
ffdb9be
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field
from handler import FastApiHandler
app = FastAPI(title="TrueNest Rent Prediction API")
handler = None
# ---------- Request schema with example ----------
class PredictRequest(BaseModel):
model_params: dict = Field(
...,
json_schema_extra={
"example": {
"bathrooms": 1,
"bedrooms": 2,
"propertyType": "Flat",
"deposit": False,
"letType": "Long term",
"furnishType": "Furnished",
"latitude": 51.49199,
"longitude": -0.17134
}
},
)
# ---------- Startup: load model once ----------
@app.on_event("startup")
def load_model_once():
global handler
handler = FastApiHandler()
print("✅ MLflow model loaded at startup")
# ---------- Routes ----------
@app.get("/")
def root():
return {"message": "🏡 Rent Prediction API is running", "run_id": handler.run_id}
@app.post("/predict")
def predict(req: PredictRequest):
result = handler.handle(req.dict())
if "error" in result:
raise HTTPException(status_code=400, detail=result["error"])
return result
@app.post("/explain")
def explain(req: PredictRequest):
try:
explanation = handler.explain_prediction(req.model_params)
return explanation
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))