Akshay4506 commited on
Commit
661fa24
·
1 Parent(s): 03ceb83

fix: robust live prediction and playground UI cleanup

Browse files
Files changed (2) hide show
  1. webapp/main.py +9 -1
  2. webapp/static/app.js +2 -1
webapp/main.py CHANGED
@@ -191,6 +191,9 @@ async def benchmark(
191
  feature_types[col] = "categorical"
192
  result["dataset_info"]["feature_types"] = feature_types
193
 
 
 
 
194
  # Cache the Best Overall model for the Live Playground
195
  best_name = result["recommendation"]["recommendations"]["best_overall"]["model"]
196
  X = df.drop(columns=[target_col])
@@ -243,12 +246,17 @@ async def predict(data: dict):
243
  try:
244
  # Convert input dict to DataFrame
245
  input_df = pd.DataFrame([data])
246
- # Ensure column order matches training
 
 
 
247
  input_df = input_df[CHAMPION_INFO["features"]]
248
 
249
  # Use the EXACT same encoders that were used during training
250
  X_test, _ = _prep(input_df, encoders=CHAMPION_INFO.get("encoders"))
251
 
 
 
252
  if CHAMPION_INFO["task"] == "classification":
253
  raw_pred = np.array(CHAMPION_MODEL.predict(X_test))
254
  # Flatten if nested (CatBoost/Sklearn sometimes return [[val]] or [val])
 
191
  feature_types[col] = "categorical"
192
  result["dataset_info"]["feature_types"] = feature_types
193
 
194
+ # Add a sample row for the playground preview
195
+ result["dataset_info"]["preview"] = [df.head(1).fillna("").to_dict("records")[0]]
196
+
197
  # Cache the Best Overall model for the Live Playground
198
  best_name = result["recommendation"]["recommendations"]["best_overall"]["model"]
199
  X = df.drop(columns=[target_col])
 
246
  try:
247
  # Convert input dict to DataFrame
248
  input_df = pd.DataFrame([data])
249
+ # Ensure column order matches training, filling missing with 0/empty
250
+ for col in CHAMPION_INFO["features"]:
251
+ if col not in input_df.columns:
252
+ input_df[col] = 0
253
  input_df = input_df[CHAMPION_INFO["features"]]
254
 
255
  # Use the EXACT same encoders that were used during training
256
  X_test, _ = _prep(input_df, encoders=CHAMPION_INFO.get("encoders"))
257
 
258
+ logger.info(f"Predicting for {CHAMPION_INFO['name']}...")
259
+
260
  if CHAMPION_INFO["task"] == "classification":
261
  raw_pred = np.array(CHAMPION_MODEL.predict(X_test))
262
  # Flatten if nested (CatBoost/Sklearn sometimes return [[val]] or [val])
webapp/static/app.js CHANGED
@@ -502,7 +502,8 @@ function renderPlayground(datasetInfo, bestOverall, task) {
502
  if (!form || !bestOverall) return;
503
  form.innerHTML = "";
504
 
505
- const features = datasetInfo.columns || [];
 
506
  const preview = datasetInfo.preview ? datasetInfo.preview[0] : {};
507
 
508
  features.forEach(f => {
 
502
  if (!form || !bestOverall) return;
503
  form.innerHTML = "";
504
 
505
+ const targetCol = datasetInfo.target_col;
506
+ const features = (datasetInfo.columns || []).filter(c => c !== targetCol);
507
  const preview = datasetInfo.preview ? datasetInfo.preview[0] : {};
508
 
509
  features.forEach(f => {