mdsalmon159 commited on
Commit
deb1255
·
verified ·
1 Parent(s): 0148d6b

Upload folder using huggingface_hub

Browse files
Files changed (1) hide show
  1. app.py +28 -16
app.py CHANGED
@@ -1,17 +1,20 @@
1
 
2
- %%bash
3
  cat > app.py <<'PY'
4
- import os, logging, joblib, numpy as np, pandas as pd
 
 
 
 
5
  from flask import Flask, request, jsonify
6
 
7
- # Attempt optional CORS
8
  try:
9
  from flask_cors import CORS
10
  _CORS = True
11
  except Exception:
12
  _CORS = False
13
 
14
- # WSGI callable expected by gunicorn must be named `app`
15
  app = Flask(__name__)
16
  if _CORS:
17
  CORS(app)
@@ -33,14 +36,16 @@ else:
33
  load_error = f"Model file not found at {MODEL_PATH}"
34
  logger.warning(load_error)
35
 
 
36
  @app.route("/", methods=["GET"])
37
  def home():
38
- return jsonify({"message":"API up"}), 200
 
39
 
40
  @app.route("/v1/sales", methods=["POST"])
41
  def predict_single():
42
  if model is None:
43
- return jsonify({"error":"Model not loaded","details": load_error}), 500
44
  try:
45
  data = request.get_json(force=True)
46
  expected_cols = [
@@ -53,15 +58,16 @@ def predict_single():
53
  pred = model.predict(df)
54
  log_out = bool(data.get("log_output", False))
55
  val = float(np.exp(pred[0])) if log_out else float(pred[0])
56
- return jsonify({"predicted_sales": round(val,2)}), 200
57
  except Exception as e:
58
  logger.exception("predict_single failed")
59
- return jsonify({"error":"prediction failed","details": str(e)}), 500
 
60
 
61
  @app.route("/v1/sales/batch", methods=["POST"])
62
  def predict_batch():
63
  if model is None:
64
- return jsonify({"error":"Model not loaded","details": load_error}), 500
65
  try:
66
  if "file" in request.files:
67
  df = pd.read_csv(request.files["file"])
@@ -72,27 +78,33 @@ def predict_batch():
72
  elif isinstance(jb, list):
73
  df = pd.DataFrame(jb)
74
  else:
75
- return jsonify({"error":"No file or JSON data provided"}), 400
 
76
  if df.empty:
77
- return jsonify({"error":"Input empty"}), 400
 
78
  preds = model.predict(df).tolist()
79
- log_flag = request.args.get("log_output","false").lower() == "true"
80
  if log_flag:
81
- preds = [round(float(np.exp(p)),2) for p in preds]
82
  else:
83
- preds = [round(float(p),2) for p in preds]
84
- id_col = next((c for c in ("id","ID","Product_Id") if c in df.columns), None)
 
85
  if id_col:
86
  keys = df[id_col].astype(str).tolist()
87
  out = dict(zip(keys, preds))
88
  else:
89
  out = {str(i): preds[i] for i in range(len(preds))}
 
90
  return jsonify({"predictions": out}), 200
91
  except Exception as e:
92
  logger.exception("predict_batch failed")
93
- return jsonify({"error":"batch prediction failed","details": str(e)}), 500
 
94
 
95
  if __name__ == "__main__":
96
  port = int(os.environ.get("PORT", 7860))
 
97
  app.run(host="0.0.0.0", port=port, debug=True)
98
  PY
 
1
 
 
2
  cat > app.py <<'PY'
3
+ import os
4
+ import logging
5
+ import joblib
6
+ import numpy as np
7
+ import pandas as pd
8
  from flask import Flask, request, jsonify
9
 
10
+ # optional CORS
11
  try:
12
  from flask_cors import CORS
13
  _CORS = True
14
  except Exception:
15
  _CORS = False
16
 
17
+ # WSGI callable must be named `app`
18
  app = Flask(__name__)
19
  if _CORS:
20
  CORS(app)
 
36
  load_error = f"Model file not found at {MODEL_PATH}"
37
  logger.warning(load_error)
38
 
39
+
40
  @app.route("/", methods=["GET"])
41
  def home():
42
+ return jsonify({"message": "API up"}), 200
43
+
44
 
45
  @app.route("/v1/sales", methods=["POST"])
46
  def predict_single():
47
  if model is None:
48
+ return jsonify({"error": "Model not loaded", "details": load_error}), 500
49
  try:
50
  data = request.get_json(force=True)
51
  expected_cols = [
 
58
  pred = model.predict(df)
59
  log_out = bool(data.get("log_output", False))
60
  val = float(np.exp(pred[0])) if log_out else float(pred[0])
61
+ return jsonify({"predicted_sales": round(val, 2)}), 200
62
  except Exception as e:
63
  logger.exception("predict_single failed")
64
+ return jsonify({"error": "prediction failed", "details": str(e)}), 500
65
+
66
 
67
  @app.route("/v1/sales/batch", methods=["POST"])
68
  def predict_batch():
69
  if model is None:
70
+ return jsonify({"error": "Model not loaded", "details": load_error}), 500
71
  try:
72
  if "file" in request.files:
73
  df = pd.read_csv(request.files["file"])
 
78
  elif isinstance(jb, list):
79
  df = pd.DataFrame(jb)
80
  else:
81
+ return jsonify({"error": "No file or JSON data provided"}), 400
82
+
83
  if df.empty:
84
+ return jsonify({"error": "Input empty"}), 400
85
+
86
  preds = model.predict(df).tolist()
87
+ log_flag = request.args.get("log_output", "false").lower() == "true"
88
  if log_flag:
89
+ preds = [round(float(np.exp(p)), 2) for p in preds]
90
  else:
91
+ preds = [round(float(p), 2) for p in preds]
92
+
93
+ id_col = next((c for c in ("id", "ID", "Product_Id") if c in df.columns), None)
94
  if id_col:
95
  keys = df[id_col].astype(str).tolist()
96
  out = dict(zip(keys, preds))
97
  else:
98
  out = {str(i): preds[i] for i in range(len(preds))}
99
+
100
  return jsonify({"predictions": out}), 200
101
  except Exception as e:
102
  logger.exception("predict_batch failed")
103
+ return jsonify({"error": "batch prediction failed", "details": str(e)}), 500
104
+
105
 
106
  if __name__ == "__main__":
107
  port = int(os.environ.get("PORT", 7860))
108
+ logger.info("Starting local Flask server on port %s", port)
109
  app.run(host="0.0.0.0", port=port, debug=True)
110
  PY