SSS18 commited on
Commit
3e9afea
·
verified ·
1 Parent(s): 2824280

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +72 -15
app.py CHANGED
@@ -1,31 +1,50 @@
1
- from flask import Flask, request, jsonify
2
  import joblib
3
  import numpy as np
4
- import traceback
5
- from supabase import create_client
6
- import os
7
  from supabase import create_client
 
 
 
 
 
 
8
 
9
  SUPABASE_URL = os.getenv("SUPABASE_URL")
10
  SUPABASE_KEY = os.getenv("SUPABASE_KEY")
11
 
12
  supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
13
- app = Flask(__name__)
14
 
15
- # Load model
 
 
16
  model = joblib.load("predictive_model.pkl")
17
 
 
 
 
 
 
 
 
 
18
  @app.route("/", methods=["GET"])
19
  def home():
20
- return "Predictive Maintenance API Running 🚀"
 
 
 
21
 
22
 
 
 
 
23
  @app.route("/predict", methods=["POST"])
24
  def predict():
25
  try:
26
  data = request.get_json()
27
 
28
- # Expecting named features
29
  features = [
30
  data["Air_temperature"],
31
  data["Process_temperature"],
@@ -36,19 +55,57 @@ def predict():
36
  data["Type_M"]
37
  ]
38
 
39
- prediction = model.predict([features])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
 
41
  return jsonify({
42
  "prediction": int(prediction[0]),
43
- "status": "No Failure" if prediction[0] == 0 else "Machine Failure"
 
44
  })
45
 
46
  except Exception as e:
47
- return jsonify({
48
- "error": str(e),
49
- "trace": traceback.format_exc()
50
- })
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
 
52
 
 
 
 
53
  if __name__ == "__main__":
54
- app.run(host="0.0.0.0", port=7860)
 
1
+ import os
2
  import joblib
3
  import numpy as np
4
+ from flask import Flask, request, jsonify
 
 
5
  from supabase import create_client
6
+ from dotenv import load_dotenv
7
+
8
+ # -----------------------------
9
+ # Load Environment Variables
10
+ # -----------------------------
11
+ load_dotenv()
12
 
13
  SUPABASE_URL = os.getenv("SUPABASE_URL")
14
  SUPABASE_KEY = os.getenv("SUPABASE_KEY")
15
 
16
  supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
 
17
 
18
+ # -----------------------------
19
+ # Load Model
20
+ # -----------------------------
21
  model = joblib.load("predictive_model.pkl")
22
 
23
+ # -----------------------------
24
+ # Flask App
25
+ # -----------------------------
26
+ app = Flask(__name__)
27
+
28
+ # -----------------------------
29
+ # Health Check
30
+ # -----------------------------
31
  @app.route("/", methods=["GET"])
32
  def home():
33
+ return jsonify({
34
+ "status": "API is running",
35
+ "message": "Predictive Maintenance Backend Active"
36
+ })
37
 
38
 
39
+ # -----------------------------
40
+ # Prediction Endpoint
41
+ # -----------------------------
42
  @app.route("/predict", methods=["POST"])
43
  def predict():
44
  try:
45
  data = request.get_json()
46
 
47
+ # Extract features (must match training order)
48
  features = [
49
  data["Air_temperature"],
50
  data["Process_temperature"],
 
55
  data["Type_M"]
56
  ]
57
 
58
+ features_array = np.array([features])
59
+
60
+ prediction = model.predict(features_array)
61
+ probability = model.predict_proba(features_array)[0][1]
62
+
63
+ status_text = "Failure" if prediction[0] == 1 else "No Failure"
64
+
65
+ # -----------------------------
66
+ # Insert into Supabase
67
+ # -----------------------------
68
+ supabase.table("machine_logs").insert({
69
+ "air_temperature": data["Air_temperature"],
70
+ "process_temperature": data["Process_temperature"],
71
+ "rotational_speed": data["Rotational_speed"],
72
+ "torque": data["Torque"],
73
+ "tool_wear": data["Tool_wear"],
74
+ "type_l": data["Type_L"],
75
+ "type_m": data["Type_M"],
76
+ "prediction": int(prediction[0])
77
+ }).execute()
78
 
79
  return jsonify({
80
  "prediction": int(prediction[0]),
81
+ "status": status_text,
82
+ "failure_probability": float(round(probability, 4))
83
  })
84
 
85
  except Exception as e:
86
+ return jsonify({"error": str(e)}), 500
87
+
88
+
89
+ # -----------------------------
90
+ # Get Latest Logs (Dashboard)
91
+ # -----------------------------
92
+ @app.route("/logs", methods=["GET"])
93
+ def get_logs():
94
+ try:
95
+ response = supabase.table("machine_logs") \
96
+ .select("*") \
97
+ .order("created_at", desc=True) \
98
+ .limit(10) \
99
+ .execute()
100
+
101
+ return jsonify(response.data)
102
+
103
+ except Exception as e:
104
+ return jsonify({"error": str(e)}), 500
105
 
106
 
107
+ # -----------------------------
108
+ # Run App (for local testing)
109
+ # -----------------------------
110
  if __name__ == "__main__":
111
+ app.run(host="0.0.0.0", port=7860)