trAIn.me_v3 / src /gradio /model_loader.py
AIppyDev's picture
Commit 1
308b9ce
import json
import joblib
from pathlib import Path
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler
def load_model_and_schema(model_path: Path, schema_path: Path):
"""
Charge le modèle .joblib et le schéma JSON associé.
Retourne (model, schema, target_name, features, expected_order).
"""
# --- Chargement du modèle ---
model = joblib.load(model_path)
# --- Chargement du schéma ---
with open(schema_path, "r", encoding="utf-8") as f:
schema = json.load(f)
# --- Extraction des infos principales ---
target_name = schema.get("target", "Experience_level")
features = schema.get("features", [])
# --- Ordre des colonnes attendu par le modèle ---
if hasattr(model, "feature_names_in_"):
expected_order = list(model.feature_names_in_)
else:
expected_order = [f["name"] for f in features]
return model, schema, target_name, features, expected_order
def load_optional_joblib(path: Path):
try:
if path and Path(path).exists():
return joblib.load(path)
except Exception:
pass
return None
def pipeline_has_scaler(p) -> bool:
"""
True si 'p' est un Pipeline sklearn qui contient un scaler connu.
"""
if not isinstance(p, Pipeline):
return False
scaler_types = (StandardScaler, MinMaxScaler, RobustScaler)
return any(isinstance(step, scaler_types) for _, step in p.named_steps.items())