Sahithi27 commited on
Commit
4e6858c
·
verified ·
1 Parent(s): 0785d86

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +65 -46
app.py CHANGED
@@ -2,9 +2,22 @@ import pandas as pd
2
  import joblib
3
  import gradio as gr
4
 
5
- # Load model artifact once
6
- artifact = joblib.load("pue_artifact.joblib")
 
 
 
7
 
 
 
 
 
 
 
 
 
 
 
8
  def predict_pue(
9
  zone_id, hour, day_of_week, is_weekend,
10
  weather_factor, event_factor, traffic_index,
@@ -14,65 +27,71 @@ def predict_pue(
14
  ):
15
 
16
  input_data = {
17
- "zone_id": int(zone_id),
18
- "hour": int(hour),
19
- "day_of_week": int(day_of_week),
20
- "is_weekend": int(is_weekend),
21
- "weather_factor": float(weather_factor),
22
- "event_factor": float(event_factor),
23
- "traffic_index": float(traffic_index),
24
- "distance_km": float(distance_km),
25
- "duration_min": float(duration_min),
26
- "base_fare": float(base_fare),
27
- "avg_distance": float(avg_distance),
28
- "avg_duration": float(avg_duration),
29
- "avg_fare": float(avg_fare),
30
- "discount_usage_rate": float(discount_usage_rate),
31
- "total_rides": int(total_rides)
32
  }
33
 
34
- X = pd.DataFrame([input_data])
35
- X = X.reindex(columns=artifact["features"], fill_value=0)
 
36
 
37
- ride = artifact["ride_encoder"].inverse_transform(
38
- artifact["ride_model"].predict(X)
39
- )[0]
40
 
41
- discount_prob = artifact["discount_model"].predict_proba(X)[0][1]
42
 
43
- route = artifact["route_encoder"].inverse_transform(
44
- artifact["route_model"].predict(X)
45
- )[0]
46
 
47
  return {
48
  "Recommended Ride Type": ride,
49
- "Discount Probability": round(float(discount_prob), 2),
50
  "Preferred Route": route
51
  }
52
 
53
- # Gradio UI
 
 
54
  app = gr.Interface(
55
  fn=predict_pue,
56
  inputs=[
57
- gr.Number(label="Zone ID"),
58
- gr.Slider(0,23,step=1,label="Hour"),
59
- gr.Slider(0,6,step=1,label="Day of Week"),
60
- gr.Radio([0,1],label="Weekend"),
61
- gr.Slider(1,1.5,label="Weather Factor"),
62
- gr.Slider(1,1.6,label="Event Factor"),
63
- gr.Slider(0.5,2,label="Traffic Index"),
64
- gr.Number(label="Distance (km)"),
65
- gr.Number(label="Duration (min)"),
66
- gr.Number(label="Base Fare"),
67
- gr.Number(label="Avg Distance"),
68
- gr.Number(label="Avg Duration"),
69
- gr.Number(label="Avg Fare"),
70
- gr.Slider(0,1,label="Discount Usage Rate"),
71
- gr.Number(label="Total Rides")
72
  ],
73
- outputs="json",
74
- title="Personalized User Experience – Real-Time ML",
75
- description="Real-time personalization for ride-hailing apps"
 
 
 
 
76
  )
77
 
78
  app.launch()
 
2
  import joblib
3
  import gradio as gr
4
 
5
+ # -------------------------------------------------
6
+ # Load model artifact ONCE (must exist in Space repo)
7
+ # -------------------------------------------------
8
+ ARTIFACT_PATH = "pue_artifact.joblib"
9
+ artifact = joblib.load(ARTIFACT_PATH)
10
 
11
+ FEATURES = artifact["features"]
12
+ ride_model = artifact["ride_model"]
13
+ discount_model = artifact["discount_model"]
14
+ route_model = artifact["route_model"]
15
+ ride_encoder = artifact["ride_encoder"]
16
+ route_encoder = artifact["route_encoder"]
17
+
18
+ # -------------------------------------------------
19
+ # Prediction Logic
20
+ # -------------------------------------------------
21
  def predict_pue(
22
  zone_id, hour, day_of_week, is_weekend,
23
  weather_factor, event_factor, traffic_index,
 
27
  ):
28
 
29
  input_data = {
30
+ "zone_id": zone_id,
31
+ "hour": hour,
32
+ "day_of_week": day_of_week,
33
+ "is_weekend": is_weekend,
34
+ "weather_factor": weather_factor,
35
+ "event_factor": event_factor,
36
+ "traffic_index": traffic_index,
37
+ "distance_km": distance_km,
38
+ "duration_min": duration_min,
39
+ "base_fare": base_fare,
40
+ "avg_distance": avg_distance,
41
+ "avg_duration": avg_duration,
42
+ "avg_fare": avg_fare,
43
+ "discount_usage_rate": discount_usage_rate,
44
+ "total_rides": total_rides
45
  }
46
 
47
+ # Enforce feature order (CRITICAL for ONNX & Java)
48
+ row = {f: float(input_data.get(f, 0.0)) for f in FEATURES}
49
+ X = pd.DataFrame([[row[f] for f in FEATURES]], columns=FEATURES)
50
 
51
+ # Predictions
52
+ ride_pred = ride_model.predict(X)
53
+ ride = ride_encoder.inverse_transform(ride_pred)[0]
54
 
55
+ discount_prob = float(discount_model.predict_proba(X)[0][1])
56
 
57
+ route_pred = route_model.predict(X)
58
+ route = route_encoder.inverse_transform(route_pred)[0]
 
59
 
60
  return {
61
  "Recommended Ride Type": ride,
62
+ "Discount Probability": round(discount_prob, 2),
63
  "Preferred Route": route
64
  }
65
 
66
+ # -------------------------------------------------
67
+ # Gradio UI (Hugging Face Space)
68
+ # -------------------------------------------------
69
  app = gr.Interface(
70
  fn=predict_pue,
71
  inputs=[
72
+ gr.Number(label="Zone ID", value=50),
73
+ gr.Slider(0, 23, step=1, label="Hour", value=15),
74
+ gr.Slider(0, 6, step=1, label="Day of Week", value=5),
75
+ gr.Radio([0, 1], label="Weekend", value=0),
76
+ gr.Slider(1.0, 1.5, label="Weather Factor", value=1.1),
77
+ gr.Slider(1.0, 1.6, label="Event Factor", value=1.2),
78
+ gr.Slider(0.5, 2.0, label="Traffic Index", value=1.3),
79
+ gr.Number(label="Distance (km)", value=5),
80
+ gr.Number(label="Duration (min)", value=10),
81
+ gr.Number(label="Base Fare", value=50),
82
+ gr.Number(label="Avg Distance", value=5),
83
+ gr.Number(label="Avg Duration", value=10),
84
+ gr.Number(label="Avg Fare", value=120),
85
+ gr.Slider(0, 1, label="Discount Usage Rate", value=0.3),
86
+ gr.Number(label="Total Rides", value=15),
87
  ],
88
+ outputs=gr.JSON(label="Prediction"),
89
+ title="Personalized User Experience – Real-Time ML (CPU)",
90
+ description=(
91
+ "Inference-only Personalized User Experience model. "
92
+ "Model trained on Hugging Face, artifact-based, "
93
+ "and ready for ONNX + Java CPU deployment."
94
+ )
95
  )
96
 
97
  app.launch()