fluency-benchmark / reserialize_models.py
syt20's picture
Replace with fluency_app_v3: updated models, new pipeline modules, experiments
63fae5b verified
"""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')\"")