premswan's picture
Upload app.py with huggingface_hub
955517e verified
from flask import Flask, request, jsonify
import pandas as pd
import joblib
import numpy as np
# Path to the serialized model (same as in the notebook)
MODEL_PATH = "superkart_best_model.joblib"
# Load model at startup
model = joblib.load(MODEL_PATH)
# Feature names used during training
try:
FEATURE_NAMES = list(model.feature_names_in_)
except AttributeError:
# Fallback: user must ensure the incoming data has correct columns
FEATURE_NAMES = None
app = Flask(__name__)
@app.route("/", methods=["GET"])
def home():
return jsonify({"message": "SuperKart Sales Forecasting API is running."})
@app.route("/predict", methods=["POST"])
def predict():
"""
Expected JSON format:
{
"data": {
"Product_Weight": 10.5,
"Product_Sugar_Content": "Low",
...
}
}
or
{
"data": [
{...},
{...}
]
}
"""
payload = request.get_json()
if payload is None or "data" not in payload:
return jsonify({"error": "Request JSON must contain a 'data' field."}), 400
data = payload["data"]
if isinstance(data, dict):
data = [data]
df_input = pd.DataFrame(data)
# Ensure column order matches training
if FEATURE_NAMES is not None:
df_input = df_input.reindex(columns=FEATURE_NAMES)
preds = model.predict(df_input)
preds = preds.tolist()
return jsonify({"predictions": preds})
if __name__ == "__main__":
# Run on port 7860 for Docker/HF
app.run(host="0.0.0.0", port=7860)