obx0x3 commited on
Commit
ff0d31b
·
verified ·
1 Parent(s): 5216852

Update predict_impulse.py

Browse files
Files changed (1) hide show
  1. predict_impulse.py +27 -45
predict_impulse.py CHANGED
@@ -2,18 +2,17 @@ import joblib
2
  import pandas as pd
3
  import os
4
  from huggingface_hub import hf_hub_download
5
- from opik import Opik, track
 
6
 
7
  # -------------------------------------------------
8
- # API key handling (HF Spaces / Expo compatible)
9
  # -------------------------------------------------
10
  if "OPIK_API_KEY" not in os.environ:
11
- os.environ["OPIK_API_KEY"] = os.environ.get(
12
- "EXPO_PUBLIC_OPIK_API_KEY", ""
13
- )
14
 
15
  # -------------------------------------------------
16
- # Load model from Hugging Face Hub
17
  # -------------------------------------------------
18
  MODEL_REPO = "obx0x3/sensei-model"
19
  MODEL_FILE = "impulse_model.pkl"
@@ -26,61 +25,44 @@ model_path = hf_hub_download(
26
  impulse_model = joblib.load(model_path)
27
 
28
  # -------------------------------------------------
29
- # Opik client (NO init, just client)
30
- # -------------------------------------------------
31
- opik = None
32
- try:
33
- opik = Opik(project_name="budgetbuddy-hackathon")
34
- except Exception as e:
35
- print("Opik disabled:", e)
36
-
37
-
38
- # -------------------------------------------------
39
- # Tracked prediction function
40
  # -------------------------------------------------
41
  @track
42
- def predict_impulse(category: str, amount: float, payment_method: str, day: str):
43
- """
44
- This function creates ONE Opik trace per call.
45
- All logs inside attach to that trace.
46
- """
47
-
48
  input_data = {
49
  "category": category,
50
  "amount": float(amount),
51
  "payment_method": payment_method,
52
- "day": day,
53
  }
54
 
55
  df = pd.DataFrame([input_data])
56
 
57
- prediction = impulse_model.predict(df)[0]
58
- probability = impulse_model.predict_proba(df)[0].max()
59
 
60
  result = {
61
- "impulsive": bool(prediction),
62
- "label": "Impulsive" if prediction else "Normal Spend",
63
- "confidence": round(float(probability), 3),
64
  }
65
 
66
  # -------------------------------------------------
67
- # Log structured data to the ACTIVE trace
68
  # -------------------------------------------------
69
- if opik:
70
- opik.log_event(
71
- name="impulse_prediction",
72
- input=input_data,
73
- output=result,
74
- model="sensei-impulse-model",
75
- metadata={
76
- "feature": "budget-ai",
77
- "task": "impulse-detection",
78
- "confidence_band": (
79
- "high" if probability >= 0.75
80
- else "medium" if probability >= 0.5
81
- else "low"
82
- ),
83
- },
84
  )
 
 
 
 
 
 
85
 
86
  return result
 
2
  import pandas as pd
3
  import os
4
  from huggingface_hub import hf_hub_download
5
+ import opik
6
+ from opik import track
7
 
8
  # -------------------------------------------------
9
+ # Opik API key (HF Spaces safe)
10
  # -------------------------------------------------
11
  if "OPIK_API_KEY" not in os.environ:
12
+ os.environ["OPIK_API_KEY"] = os.environ.get("EXPO_PUBLIC_OPIK_API_KEY", "")
 
 
13
 
14
  # -------------------------------------------------
15
+ # Load model from HF Model Hub
16
  # -------------------------------------------------
17
  MODEL_REPO = "obx0x3/sensei-model"
18
  MODEL_FILE = "impulse_model.pkl"
 
25
  impulse_model = joblib.load(model_path)
26
 
27
  # -------------------------------------------------
28
+ # TRACKED FUNCTION (this creates the TRACE)
 
 
 
 
 
 
 
 
 
 
29
  # -------------------------------------------------
30
  @track
31
+ def predict_impulse(category, amount, payment_method, day):
 
 
 
 
 
32
  input_data = {
33
  "category": category,
34
  "amount": float(amount),
35
  "payment_method": payment_method,
36
+ "day": day
37
  }
38
 
39
  df = pd.DataFrame([input_data])
40
 
41
+ pred = impulse_model.predict(df)[0]
42
+ prob = impulse_model.predict_proba(df)[0].max()
43
 
44
  result = {
45
+ "impulsive": bool(pred),
46
+ "label": "Impulsive" if pred else "Normal Spend",
47
+ "confidence": round(float(prob), 3)
48
  }
49
 
50
  # -------------------------------------------------
51
+ # Attach metadata to the CURRENT TRACE
52
  # -------------------------------------------------
53
+ opik.log_metadata({
54
+ "source": "hf-space",
55
+ "model": "sensei-impulse-model",
56
+ "confidence_band": (
57
+ "high" if prob >= 0.75 else
58
+ "medium" if prob >= 0.5 else
59
+ "low"
 
 
 
 
 
 
 
 
60
  )
61
+ })
62
+
63
+ opik.log({
64
+ "input": input_data,
65
+ "output": result
66
+ })
67
 
68
  return result