49 lines
1.5 KiB
Bash
Executable File
49 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
MODEL_DIR="${XGB_MODEL_DIR:-$ROOT_DIR/ai-engine/models/xgboost}"
|
|
|
|
mkdir -p "$MODEL_DIR"
|
|
|
|
download_model() {
|
|
local file_name="$1"
|
|
local url="${2:-}"
|
|
local expected_sha="${3:-}"
|
|
|
|
if [[ -z "$url" ]]; then
|
|
echo "⚠️ Skip ${file_name}: URL not provided"
|
|
return 0
|
|
fi
|
|
|
|
local target_path="${MODEL_DIR}/${file_name}"
|
|
local tmp_path="${target_path}.tmp"
|
|
|
|
echo "⬇️ Downloading ${file_name}..."
|
|
curl -fL --retry 3 --retry-delay 2 "$url" -o "$tmp_path"
|
|
|
|
if [[ -n "$expected_sha" ]]; then
|
|
local actual_sha
|
|
actual_sha="$(sha256sum "$tmp_path" | awk '{print $1}')"
|
|
if [[ "$actual_sha" != "$expected_sha" ]]; then
|
|
echo "❌ SHA256 mismatch for ${file_name}"
|
|
echo " expected: ${expected_sha}"
|
|
echo " actual : ${actual_sha}"
|
|
rm -f "$tmp_path"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
mv "$tmp_path" "$target_path"
|
|
echo "✅ Ready: ${file_name}"
|
|
}
|
|
|
|
download_model "xgb_ht_ft.pkl" "${MODEL_XGB_HT_FT_URL:-}" "${MODEL_XGB_HT_FT_SHA256:-}"
|
|
download_model "xgb_ms.pkl" "${MODEL_XGB_MS_URL:-}" "${MODEL_XGB_MS_SHA256:-}"
|
|
download_model "xgb_ou25.pkl" "${MODEL_XGB_OU25_URL:-}" "${MODEL_XGB_OU25_SHA256:-}"
|
|
download_model "xgb_btts.pkl" "${MODEL_XGB_BTTS_URL:-}" "${MODEL_XGB_BTTS_SHA256:-}"
|
|
download_model "xgb_ou15.pkl" "${MODEL_XGB_OU15_URL:-}" "${MODEL_XGB_OU15_SHA256:-}"
|
|
download_model "xgb_ou35.pkl" "${MODEL_XGB_OU35_URL:-}" "${MODEL_XGB_OU35_SHA256:-}"
|
|
|
|
echo "📦 XGBoost model bootstrap completed."
|