| |
| |
| |
|
|
| from flask import Flask, request, jsonify |
| from flask_cors import CORS |
| import pandas as pd |
| import joblib |
| import os |
|
|
| |
| |
| |
| app = Flask(__name__) |
| CORS(app) |
|
|
| MODEL_PATH = "model.joblib" |
| model = None |
|
|
| |
| |
| |
| 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 |
|
|
|
|
| |
| |
| |
| @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" |
| }) |
|
|
|
|
| |
| |
| |
| @app.route("/routes", methods=["GET"]) |
| def show_routes(): |
| routes = [str(rule) for rule in app.url_map.iter_rules()] |
| return jsonify({"available_routes": routes}) |
|
|
|
|
| |
| |
| |
| @app.route("/health", methods=["GET"]) |
| def health(): |
| return jsonify({"status": "healthy", "model_loaded": model is not None}) |
|
|
|
|
| |
| |
| |
| @app.route("/predict", methods=["POST"]) |
| def predict(): |
| try: |
| |
| 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 |
|
|
|
|
| |
| |
| |
| 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) |
|
|
|
|
|
|
|
|