Spaces:
Sleeping
Sleeping
| import joblib | |
| import numpy as np | |
| import sys | |
| import os | |
| # Try to import real classes first | |
| try: | |
| from predict_mental_health import ( | |
| RewardModel, VariationalPreferenceLearning, ActiveLearner, | |
| EnhancedQuantumTransform, SuperEnsemble95 | |
| ) | |
| print("✓ Imported classes from predict_mental_health") | |
| # Hack: If models were saved from a script where these were in __main__, | |
| # we need to alias them in this script's __main__ for joblib to find them. | |
| # Check if we are running as __main__ | |
| if __name__ == "__main__": | |
| import sys | |
| current_module = sys.modules[__name__] | |
| setattr(current_module, 'SuperEnsemble95', SuperEnsemble95) | |
| setattr(current_module, 'EnhancedQuantumTransform', EnhancedQuantumTransform) | |
| setattr(current_module, 'RewardModel', RewardModel) | |
| setattr(current_module, 'VariationalPreferenceLearning', VariationalPreferenceLearning) | |
| setattr(current_module, 'ActiveLearner', ActiveLearner) | |
| print("✓ Aliased classes to __main__ for pickle compatibility") | |
| except ImportError as e: | |
| print(f"⚠ Could not import from predict_mental_health: {e}") | |
| # Define dummies if import fails (fallback) | |
| class RewardModel: | |
| def __init__(self, n_features): pass | |
| class VariationalPreferenceLearning: | |
| def __init__(self, n_features, n_latent): pass | |
| class ActiveLearner: | |
| def __init__(self, n_queries=20): pass | |
| class EnhancedQuantumTransform: | |
| def __init__(self, n_features): pass | |
| def transform(self, X): return X | |
| class SuperEnsemble95: | |
| def __init__(self, n_features, n_classes): pass | |
| def inspect_model(name, path): | |
| print(f"\n--- Inspecting {name} ---") | |
| try: | |
| model = joblib.load(path) | |
| print(f"Type: {type(model)}") | |
| if hasattr(model, 'estimators_'): | |
| print(f"Estimators: {len(model.estimators_)}") | |
| if hasattr(model, 'classes_'): | |
| print(f"Classes: {model.classes_}") | |
| return model | |
| except Exception as e: | |
| print(f"Error loading {name}: {e}") | |
| # Detailed debug | |
| import traceback | |
| traceback.print_exc() | |
| return None | |
| def test_determinism(model, scaler, input_data): | |
| print(f"Testing determinism for {model}...") | |
| try: | |
| if scaler: | |
| input_scaled = scaler.transform(input_data) | |
| else: | |
| input_scaled = input_data | |
| preds = [] | |
| probas = [] | |
| for i in range(5): | |
| p = model.predict(input_scaled)[0] | |
| prob = model.predict_proba(input_scaled)[0] | |
| preds.append(p) | |
| probas.append(prob) | |
| print(f"Predictions (5 runs): {preds}") | |
| # print(f"Probabilities: {probas}") | |
| if len(set(preds)) > 1: | |
| print("!!! WARNING: Model is non-deterministic (Random Output) !!!") | |
| else: | |
| print("Model is deterministic.") | |
| except Exception as e: | |
| print(f"Prediction failed: {e}") | |
| import traceback | |
| traceback.print_exc() | |
| if __name__ == "__main__": | |
| MODEL_DIR = "model" | |
| print("Starting Model Diagnostics...") | |
| # Check if model dir exists | |
| if not os.path.exists(MODEL_DIR): | |
| print(f"Error: {MODEL_DIR} directory not found!") | |
| sys.exit(1) | |
| # 1. Sleep Model | |
| # Input: [age, gender_enc, screen_time, night_screen, social_media, stress] | |
| sleep_model = inspect_model("Sleep Model", f"{MODEL_DIR}/students_sleep_model.joblib") | |
| sleep_scaler = inspect_model("Sleep Scaler", f"{MODEL_DIR}/students_sleep_scaler.joblib") | |
| if sleep_model and sleep_scaler: | |
| test_input = np.array([[20, 0, 6.5, 3.0, 4.5, 22]]) | |
| test_determinism(sleep_model, sleep_scaler, test_input) | |
| # 2. Depression Model | |
| # Input: [age, gender, role, social_media, platform, phq9, gad7] | |
| dep_model = inspect_model("Depression Model", f"{MODEL_DIR}/depression_model.joblib") | |
| dep_scaler = inspect_model("Depression Scaler", f"{MODEL_DIR}/depression_scaler.joblib") | |
| if dep_model and dep_scaler: | |
| test_input = np.array([[25, 1, 2, 5.0, 1, 14, 12]]) | |
| test_determinism(dep_model, dep_scaler, test_input) | |