""" Build-time ML training script. Called during Docker build — if training fails (e.g. yfinance rate-limited), exits with code 1 so Dockerfile's `|| true` skips it gracefully. The entrypoint will re-train at runtime as fallback. """ import os import sys os.makedirs("data", exist_ok=True) try: from tools.tool_ml_train import train_model, train_etf_model print("==> Build-time ML training...") train_model() train_etf_model() print("==> Build-time ML training complete.") except Exception as e: print(f"==> Build-time training failed: {e} — will train at startup instead.") sys.exit(1)