bc6d43d3f2
Hygiene follow-up to the Camie retirement (#1189) — these were left inert to bound that change; nothing reads them now. Migration 0068 drops: - ml_settings: tagger_store_floor, tagger_model_version, suggestion_threshold_ character/general (already dead pre-retirement — scoring uses per-head thresholds), video_min_tag_frames (only the deleted video-prediction aggregator used it). - image_record: tagger_model_version (no writer), centroid_scores (dead JSON cache, no reader). Also: ml_admin _EDITABLE/GET/_validate pruned (dropped the store-floor invariant + video_min_tag_frames check); MLThresholdSliders trimmed to a video-embedding card (interval + max frames only); importer no longer resets the dropped cols; download_models drops the Camie fetch; stale CASCADE comments in cleanup_service no longer name the removed tables. Tests updated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ttrj5P7upUTueSfoJcxEqa
43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
"""Self-heal model weights into /models. Idempotent — only missing files
|
|
are fetched. Called by the ml-worker entrypoint before Celery starts.
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
MODEL_ROOT = Path(os.environ.get("ML_MODEL_DIR", "/models"))
|
|
SIGLIP_REPO = os.environ.get(
|
|
"SIGLIP_HF_REPO", "google/siglip-so400m-patch14-384"
|
|
)
|
|
|
|
|
|
def _snapshot(repo_id: str, dest: Path, allow_patterns: list[str] | None) -> None:
|
|
from huggingface_hub import snapshot_download
|
|
|
|
dest.mkdir(parents=True, exist_ok=True)
|
|
snapshot_download(
|
|
repo_id=repo_id,
|
|
local_dir=str(dest),
|
|
allow_patterns=allow_patterns,
|
|
)
|
|
|
|
|
|
def ensure_siglip() -> None:
|
|
dest = MODEL_ROOT / "siglip"
|
|
if (dest / "config.json").is_file() and any(dest.glob("*.safetensors")):
|
|
print(f"[download_models] SigLIP present at {dest}")
|
|
return
|
|
print(f"[download_models] Fetching {SIGLIP_REPO} -> {dest}")
|
|
_snapshot(SIGLIP_REPO, dest, None)
|
|
|
|
|
|
def main() -> int:
|
|
ensure_siglip()
|
|
print("[download_models] Done.")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|