toddmattingly's picture
Update app.py
bb73494 verified
# -----------------------------------------------------------
# πŸ›’ SuperKart Backend API β€” Flask App for Hugging Face Spaces
# -----------------------------------------------------------
from flask import Flask, request, jsonify
from flask_cors import CORS
import pandas as pd
import joblib
import os
# -----------------------------------------------------------
# App initialization
# -----------------------------------------------------------
app = Flask(__name__)
CORS(app)
MODEL_PATH = "model.joblib" # or your model file name
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
# -----------------------------------------------------------
# Root route (health / info)
# -----------------------------------------------------------
@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"
})
# -----------------------------------------------------------
# Debug route: show all available routes
# -----------------------------------------------------------
@app.route("/routes", methods=["GET"])
def show_routes():
routes = [str(rule) for rule in app.url_map.iter_rules()]
return jsonify({"available_routes": routes})
# -----------------------------------------------------------
# Health check route
# -----------------------------------------------------------
@app.route("/health", methods=["GET"])
def health():
return jsonify({"status": "healthy", "model_loaded": model is not None})
# -----------------------------------------------------------
# Prediction route
# -----------------------------------------------------------
@app.route("/predict", methods=["POST"])
def predict():
try:
# Expecting JSON like: [ { "feature1": ..., "feature2": ... } ]
data = request.get_json(force=True)
if not data:
return jsonify({"status": "error", "message": "No JSON data received"}), 400
print("Received data:", data)
df = pd.DataFrame(data)
if model is None:
return jsonify({"status": "error", "message": "Model not loaded"}), 500
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
# -----------------------------------------------------------
# Run app
# -----------------------------------------------------------
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)