toddmattingly's picture
Update app.py
76ac663 verified
# -----------------------------------------------------------
# SuperKart Backend API - Flask Application
# -----------------------------------------------------------
from flask import Flask, request, jsonify
from flask_cors import CORS
import pandas as pd
import joblib
import os
# -----------------------------------------------------------
# App setup
# -----------------------------------------------------------
app = Flask(__name__)
CORS(app)
MODEL_PATH = "model.joblib"
model = None
# -----------------------------------------------------------
# Load model
# -----------------------------------------------------------
def load_model():
global model
try:
model = joblib.load(MODEL_PATH)
print(f"βœ… Model loaded successfully from: {MODEL_PATH}")
except Exception as e:
print(f"❌ Failed to load model: {e}")
model = None
# -----------------------------------------------------------
# Home / Health endpoint
# -----------------------------------------------------------
@app.route("/", methods=["GET"])
def home():
return jsonify({
"status": "ok",
"model_loaded": model is not None,
"version": "v4.0.3",
"message": "SuperKart backend ready β€” use POST /predict"
})
# -----------------------------------------------------------
# Routes endpoint (debugging)
# -----------------------------------------------------------
@app.route("/routes", methods=["GET"])
def show_routes():
"""List all registered endpoints for debugging."""
routes = [str(rule) for rule in app.url_map.iter_rules()]
return jsonify({"available_routes": routes})
# -----------------------------------------------------------
# Prediction endpoint
# -----------------------------------------------------------
@app.route("/predict", methods=["POST"])
def predict():
"""Accepts JSON input and returns model predictions."""
try:
data = request.get_json(force=True)
print("Received data:", data)
# Convert JSON list of dicts -> DataFrame
df = pd.DataFrame(data)
# Run model inference
preds = model.predict(df)
return jsonify({
"status": "ok",
"predictions": preds.tolist(),
"version": "v4.0.3"
})
except Exception as e:
print("Prediction error:", e)
return jsonify({"status": "error", "message": str(e)}), 500
# -----------------------------------------------------------
# Entry point
# -----------------------------------------------------------
if __name__ == "__main__":
load_model()
port = int(os.environ.get("PORT", 7860))
print(f"πŸš€ Starting SuperKart backend on 0.0.0.0:{port}")
app.run(host="0.0.0.0", port=port, debug=False)
if __name__ == "__main__":
load_model()
port = int(os.environ.get("PORT", 7860))
print(f"πŸš€ Starting SuperKart backend on 0.0.0.0:{port}")
app.run(host="0.0.0.0", port=port, debug=False)