Spaces:
Sleeping
Sleeping
Commit ·
661fa24
1
Parent(s): 03ceb83
fix: robust live prediction and playground UI cleanup
Browse files- webapp/main.py +9 -1
- 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
|
|
|
|
| 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 => {
|