Spaces:
Sleeping
Sleeping
| 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__) | |
| def home(): | |
| return jsonify({"message": "SuperKart Sales Forecasting API is running."}) | |
| 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) | |