Spaces:
Running
Running
| """Re-serialize FrankHall models so they can be loaded without __main__ context. | |
| Run this ONCE after downloading models from GDrive: | |
| python reserialize_models.py | |
| This patches the pickle module to redirect __main__.FrankHallOrdinal | |
| to models.frank_hall.FrankHallOrdinal, then re-saves each model. | |
| """ | |
| import sys | |
| import os | |
| import types | |
| from pathlib import Path | |
| # Add parent to path so models.frank_hall is importable | |
| sys.path.insert(0, str(Path(__file__).parent)) | |
| from models.frank_hall import FrankHallOrdinal | |
| # Patch: when unpickling, redirect __main__.FrankHallOrdinal | |
| # to our local class | |
| import __main__ | |
| __main__.FrankHallOrdinal = FrankHallOrdinal | |
| import joblib | |
| SAVED_DIR = Path(__file__).parent / "saved_models" | |
| targets = [ | |
| "articulation_ordinal", "pause_freq_ordinal", "pause_dur_ordinal", | |
| "cognitive_load_ordinal", "utterance_constraints_ordinal", | |
| ] | |
| print("Re-serializing FrankHall models...") | |
| for t in targets: | |
| model_path = SAVED_DIR / f"ordinal_{t}.joblib" | |
| if not model_path.exists(): | |
| print(f" SKIP: {model_path.name} (not found)") | |
| continue | |
| try: | |
| model = joblib.load(model_path) | |
| # Re-save — now pickle will reference models.frank_hall.FrankHallOrdinal | |
| # instead of __main__.FrankHallOrdinal | |
| joblib.dump(model, model_path) | |
| print(f" OK: {model_path.name} ({type(model).__name__})") | |
| except Exception as e: | |
| print(f" ERROR: {model_path.name}: {e}") | |
| # Also patch inference.py to import FrankHallOrdinal before loading | |
| print("\nDone. Models can now be loaded without the training notebook context.") | |
| print("Test with: python -c \"from models.inference import predict; print('OK')\"") | |