#!/usr/bin/env python3 import logging import os import subprocess import sys import time from pathlib import Path try: from croniter import croniter except ImportError: print("āŒ croniter not installed. Run: uv add croniter") sys.exit(1) SCHEDULE = os.environ["CRON_SCHEDULE"] MODELS_DIR = os.environ.get("HF_HOME", "/models/huggingface") INSIGHTFACE_BASE = os.environ.get("INSIGHTFACE_HOME", "/models") RUN_ENV = {**os.environ, "PYTHONUNBUFFERED": "1"} logger = logging.getLogger(__name__) def check_models(): """Log model status before each run.""" print("šŸ“¦ Checking models...", flush=True) buffalo = Path(INSIGHTFACE_BASE) / ".insightface" / "models" / "buffalo_l" if buffalo.exists(): print(" āœ… InsightFace Buffalo_L: present", flush=True) else: print(" ā¬‡ļø InsightFace Buffalo_L: not found — will download", flush=True) hf_hub = Path(MODELS_DIR) / "hub" if hf_hub.exists() and any(hf_hub.iterdir()): print(" āœ… HuggingFace models: present", flush=True) else: print(" ā¬‡ļø HuggingFace models: not found — will download", flush=True) print("šŸš€ Starting winnow...", flush=True) NOW = time.time() cron = croniter(SCHEDULE, NOW) next_run = cron.get_next(float) while True: now = time.time() if now >= next_run: print(f"\nā–¶ [{time.strftime('%Y-%m-%d %H:%M:%S')}] Starting winnow...", flush=True) check_models() result = subprocess.run(["uv", "run", "winnow"], env=RUN_ENV) if result.returncode != 0: logger.error(f"winnow exited with code {result.returncode}") print(f"āŒ winnow failed with exit code {result.returncode}", flush=True) else: print("āœ… winnow completed successfully", flush=True) next_run = cron.get_next(float) time.sleep(60)