Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
|
@@ -28,18 +28,6 @@ DEFAULT_MODEL = MODELS_DIR / "ym_rf.joblib"
|
|
| 28 |
MODEL_FALLBACKS = [MODELS_DIR / "model.joblib", MODELS_DIR / "model.pkl"]
|
| 29 |
COLORS = {"pred": "#1f77b4", "actual": "#f2b702", "ref": "#5a5a5a"}
|
| 30 |
|
| 31 |
-
# After: meta = json.loads(meta_path.read_text(...))
|
| 32 |
-
import numpy as _np, sklearn as _skl, sys as _sys
|
| 33 |
-
mv = meta.get("versions", {})
|
| 34 |
-
if mv:
|
| 35 |
-
msg = []
|
| 36 |
-
if mv.get("numpy") and mv["numpy"] != _np.__version__:
|
| 37 |
-
msg.append(f"NumPy {mv['numpy']} expected, running {_np.__version__}")
|
| 38 |
-
if mv.get("scikit_learn") and mv["scikit_learn"] != _skl.__version__:
|
| 39 |
-
msg.append(f"scikit-learn {mv['scikit_learn']} expected, running {_skl.__version__}")
|
| 40 |
-
if msg:
|
| 41 |
-
st.warning("Environment mismatch: " + " | ".join(msg))
|
| 42 |
-
|
| 43 |
# ---- Plot sizing controls ----
|
| 44 |
CROSS_W = 350
|
| 45 |
CROSS_H = 350
|
|
@@ -534,15 +522,33 @@ except Exception as e:
|
|
| 534 |
st.error(f"Failed to load model: {e}")
|
| 535 |
st.stop()
|
| 536 |
|
| 537 |
-
#
|
| 538 |
-
|
| 539 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 540 |
try:
|
| 541 |
meta = json.loads(meta_path.read_text(encoding="utf-8"))
|
| 542 |
FEATURES = meta.get("features", FEATURES)
|
| 543 |
TARGET = meta.get("target", TARGET)
|
| 544 |
-
except Exception:
|
| 545 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 546 |
|
| 547 |
# =========================
|
| 548 |
# Session state
|
|
|
|
| 28 |
MODEL_FALLBACKS = [MODELS_DIR / "model.joblib", MODELS_DIR / "model.pkl"]
|
| 29 |
COLORS = {"pred": "#1f77b4", "actual": "#f2b702", "ref": "#5a5a5a"}
|
| 30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
# ---- Plot sizing controls ----
|
| 32 |
CROSS_W = 350
|
| 33 |
CROSS_H = 350
|
|
|
|
| 522 |
st.error(f"Failed to load model: {e}")
|
| 523 |
st.stop()
|
| 524 |
|
| 525 |
+
# ---------- Load meta (optional) ----------
|
| 526 |
+
meta = {} # define first, so it's always safe to reference later
|
| 527 |
+
|
| 528 |
+
# Support either models/meta.json or models/ym_meta.json
|
| 529 |
+
meta_candidates = [MODELS_DIR / "meta.json", MODELS_DIR / "ym_meta.json"]
|
| 530 |
+
meta_path = next((p for p in meta_candidates if p.exists()), None)
|
| 531 |
+
|
| 532 |
+
if meta_path:
|
| 533 |
try:
|
| 534 |
meta = json.loads(meta_path.read_text(encoding="utf-8"))
|
| 535 |
FEATURES = meta.get("features", FEATURES)
|
| 536 |
TARGET = meta.get("target", TARGET)
|
| 537 |
+
except Exception as e:
|
| 538 |
+
st.warning(f"Could not parse meta file ({meta_path.name}): {e}")
|
| 539 |
+
|
| 540 |
+
# ---------- Optional: warn if runtime != training versions ----------
|
| 541 |
+
import numpy as _np, sklearn as _skl
|
| 542 |
+
mv = meta.get("versions", {})
|
| 543 |
+
if mv:
|
| 544 |
+
msg = []
|
| 545 |
+
if mv.get("numpy") and mv["numpy"] != _np.__version__:
|
| 546 |
+
msg.append(f"NumPy {mv['numpy']} expected, running {_np.__version__}")
|
| 547 |
+
if mv.get("scikit_learn") and mv["scikit_learn"] != _skl.__version__:
|
| 548 |
+
msg.append(f"scikit-learn {mv['scikit_learn']} expected, running {_skl.__version__}")
|
| 549 |
+
if msg:
|
| 550 |
+
st.warning("Environment mismatch: " + " | ".join(msg))
|
| 551 |
+
|
| 552 |
|
| 553 |
# =========================
|
| 554 |
# Session state
|