This commit is contained in:
Executable
+48
@@ -0,0 +1,48 @@
|
||||
#!/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."
|
||||
Reference in New Issue
Block a user