UCS2014 commited on
Commit
e27f88c
·
verified ·
1 Parent(s): 03aa8e5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -19
app.py CHANGED
@@ -414,7 +414,6 @@ def preview_tracks(df: pd.DataFrame, cols: list[str]):
414
  if i == 0: ax.set_ylabel(y_label)
415
  else: ax.tick_params(labelleft=False); ax.set_ylabel("")
416
  fig.tight_layout(); return fig
417
-
418
  # =========================
419
  # Load models + metas
420
  # =========================
@@ -446,31 +445,54 @@ def _try_load_or_explain(p: Path, name: str):
446
  try:
447
  return load_model(str(p))
448
  except Exception as e:
449
- st.error(f"Failed to load {name} at {p}.\n\n{e}\n\nIf the error mentions `numpy._core` or versions, install the meta versions (numpy {meta_bo.get('versions',{}).get('numpy') or meta_bd.get('versions',{}).get('numpy')}, scikit-learn {meta_bo.get('versions',{}).get('scikit_learn') or meta_bd.get('versions',{}).get('scikit_learn')}).")
 
 
 
 
 
 
 
450
  st.stop()
451
 
452
- model_bo = _try_load_or_explain(bo_model_path, "BO model")
453
- model_bd = _try_load_or_explain(bd_model_path, "BD model")
 
 
 
 
 
 
 
454
 
455
- # Resolve features/targets strictly (no renaming)
456
- FEATURES = []
457
- if hasattr(model_bo, "feature_names_in_"):
458
- FEATURES = [str(x) for x in model_bo.feature_names_in_]
459
- elif meta_bo.get("features"):
460
- FEATURES = [str(x) for x in meta_bo["features"]]
461
- elif meta_bd.get("features"):
462
- FEATURES = [str(x) for x in meta_bd["features"]]
463
- else:
464
- FEATURES = FEATURES_DEFAULT[:]
465
 
 
 
 
 
 
 
 
 
 
 
 
 
 
466
  TARGET_BO = str(meta_bo.get("target") or TARGET_BO_DEFAULT)
467
  TARGET_BD = str(meta_bd.get("target") or TARGET_BD_DEFAULT)
 
 
 
 
 
 
 
 
 
468
 
469
- X_UNITS = str(meta_bo.get("units") or meta_bd.get("units") or "MW (pcf)")
470
- st.session_state["FEATURES"] = FEATURES
471
- st.session_state["TARGET_BO"] = TARGET_BO
472
- st.session_state["TARGET_BD"] = TARGET_BD
473
- st.session_state["X_UNITS"] = X_UNITS
474
 
475
  # =========================
476
  # Session state
 
414
  if i == 0: ax.set_ylabel(y_label)
415
  else: ax.tick_params(labelleft=False); ax.set_ylabel("")
416
  fig.tight_layout(); return fig
 
417
  # =========================
418
  # Load models + metas
419
  # =========================
 
445
  try:
446
  return load_model(str(p))
447
  except Exception as e:
448
+ # Prefer BO meta versions if available, else BD
449
+ want_np = (meta_bo.get("versions",{}) or meta_bd.get("versions",{})).get("numpy", "N/A")
450
+ want_skl = (meta_bo.get("versions",{}) or meta_bd.get("versions",{})).get("scikit_learn", "N/A")
451
+ st.error(
452
+ f"Failed to load {name} at {p}.\n\n{e}\n\n"
453
+ f"If this mentions `numpy._core` or versions, install:\n"
454
+ f" • numpy {want_np}\n • scikit-learn {want_skl}"
455
+ )
456
  st.stop()
457
 
458
+ # Unwrap payload-style joblibs: {"model": pipeline, "model_info": {...}}
459
+ def _unwrap(payload):
460
+ if isinstance(payload, dict) and "model" in payload:
461
+ return payload["model"], payload.get("model_info", {})
462
+ # Fallback: estimator saved bare or custom object
463
+ return payload, getattr(payload, "model_info", {})
464
+
465
+ payload_bo = _try_load_or_explain(bo_model_path, "BO model")
466
+ payload_bd = _try_load_or_explain(bd_model_path, "BD model")
467
 
468
+ model_bo, info_bo = _unwrap(payload_bo)
469
+ model_bd, info_bd = _unwrap(payload_bd)
 
 
 
 
 
 
 
 
470
 
471
+ # Resolve features per model (prefer model_info → meta → fallback)
472
+ features_bo = list((info_bo.get("features")
473
+ or meta_bo.get("features")
474
+ or FEATURES_DEFAULT))
475
+ features_bd = list((info_bd.get("features")
476
+ or meta_bd.get("features")
477
+ or FEATURES_DEFAULT))
478
+
479
+ # Use the UNION so BD's 'Depth (ft)' is required and both models can run from one input
480
+ # Order: keep BO order, then append BD-only columns in order
481
+ features_union = list(dict.fromkeys(features_bo + [c for c in features_bd if c not in features_bo]))
482
+
483
+ # Resolve targets / units
484
  TARGET_BO = str(meta_bo.get("target") or TARGET_BO_DEFAULT)
485
  TARGET_BD = str(meta_bd.get("target") or TARGET_BD_DEFAULT)
486
+ X_UNITS = str(meta_bo.get("units") or meta_bd.get("units") or "MW (pcf)")
487
+
488
+ # Stash in session
489
+ st.session_state["FEATURES_BO"] = features_bo
490
+ st.session_state["FEATURES_BD"] = features_bd
491
+ st.session_state["FEATURES"] = features_union # strict check uses the union
492
+ st.session_state["TARGET_BO"] = TARGET_BO
493
+ st.session_state["TARGET_BD"] = TARGET_BD
494
+ st.session_state["X_UNITS"] = X_UNITS
495
 
 
 
 
 
 
496
 
497
  # =========================
498
  # Session state