Sentient-Field commited on
Commit
c852864
Β·
1 Parent(s): 734ecb6

Fix: pre-download whisperx model during Docker build to avoid 429 rate limits at runtime

Browse files
Files changed (2) hide show
  1. Dockerfile +5 -0
  2. app.py +7 -19
Dockerfile CHANGED
@@ -20,6 +20,10 @@ RUN pip install --no-cache-dir \
20
  COPY requirements.txt .
21
  RUN pip install --no-cache-dir -r requirements.txt
22
 
 
 
 
 
23
  COPY . .
24
 
25
  RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app
@@ -33,6 +37,7 @@ USER appuser
33
 
34
  ENV HF_HUB_CACHE=/tmp/hf_hub_cache
35
  ENV WHISPER_CACHE_DIR=/tmp/whisper_cache
 
36
 
37
  EXPOSE 7860
38
  CMD ["python", "app.py"]
 
20
  COPY requirements.txt .
21
  RUN pip install --no-cache-dir -r requirements.txt
22
 
23
+ # Pre-download whisperx model (public repo, no token needed)
24
+ # This avoids 429 rate limits when uvx whisperx runs at inference time
25
+ RUN python3 -c "from huggingface_hub import snapshot_download; snapshot_download('Systran/faster-whisper-large-v3', cache_dir='/tmp/hf_hub_cache')"
26
+
27
  COPY . .
28
 
29
  RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app
 
37
 
38
  ENV HF_HUB_CACHE=/tmp/hf_hub_cache
39
  ENV WHISPER_CACHE_DIR=/tmp/whisper_cache
40
+ ENV HF_HUB_DISABLE_TELEMETRY=1
41
 
42
  EXPOSE 7860
43
  CMD ["python", "app.py"]
app.py CHANGED
@@ -40,10 +40,13 @@ HF_TOKEN = os.environ.get("HF_TOKEN", "")
40
  CKPT = os.environ.get("TRIBE_CKPT", "facebook/tribev2")
41
  MAX_VIDEO_DURATION = int(os.environ.get("MAX_VIDEO_DURATION", "120")) # seconds
42
  CACHE_DIR = os.environ.get("SGP_CACHE_DIR", "/tmp/sgp_atlas")
43
- HF_HUB_CACHE = os.environ.get("HF_HUB_CACHE", "/tmp/hf_hub_cache")
44
- os.environ["HF_HUB_CACHE"] = HF_HUB_CACHE
45
- os.environ["WHISPER_CACHE_DIR"] = os.environ.get("WHISPER_CACHE_DIR", "/tmp/whisper_cache")
46
- os.makedirs(HF_HUB_CACHE, exist_ok=True)
 
 
 
47
 
48
  # ─── Result storage (in-memory for now; extend to file/DB for persistence) ───
49
  _stimulus_results = {}
@@ -66,27 +69,12 @@ def _load_model():
66
  if HF_TOKEN:
67
  os.environ["HUGGING_FACE_HUB_TOKEN"] = HF_TOKEN
68
  os.environ["HF_TOKEN"] = HF_TOKEN
69
- os.environ["HF_HUB_CACHE"] = "/tmp/hf_hub_cache"
70
- os.makedirs("/tmp/hf_hub_cache", exist_ok=True)
71
  try:
72
  from huggingface_hub import login
73
  login(token=HF_TOKEN, add_to_git_credential=False)
74
  print(f"[SGP-Tribe3] HF login OK", flush=True)
75
  except Exception as e:
76
  print(f"[SGP-Tribe3] HF login warning: {e}", flush=True)
77
-
78
- # Pre-download whisperx model to avoid rate limits in uvx subprocess
79
- try:
80
- from huggingface_hub import snapshot_download
81
- print("[SGP-Tribe3] Pre-downloading faster-whisper-large-v3...", flush=True)
82
- snapshot_download(
83
- repo_id="Systran/faster-whisper-large-v3",
84
- cache_dir="/tmp/hf_hub_cache",
85
- token=HF_TOKEN
86
- )
87
- print("[SGP-Tribe3] Whisper model cached successfully", flush=True)
88
- except Exception as e:
89
- print(f"[SGP-Tribe3] Whisper model download warning: {e}", flush=True)
90
  else:
91
  print("[SGP-Tribe3] WARNING: No HF_TOKEN set β€” LLaMA encoder may fail", flush=True)
92
 
 
40
  CKPT = os.environ.get("TRIBE_CKPT", "facebook/tribev2")
41
  MAX_VIDEO_DURATION = int(os.environ.get("MAX_VIDEO_DURATION", "120")) # seconds
42
  CACHE_DIR = os.environ.get("SGP_CACHE_DIR", "/tmp/sgp_atlas")
43
+
44
+ # Ensure HF cache env vars are set for all subprocesses (including uvx whisperx)
45
+ os.environ.setdefault("HF_HUB_CACHE", "/tmp/hf_hub_cache")
46
+ os.environ.setdefault("WHISPER_CACHE_DIR", "/tmp/whisper_cache")
47
+ os.environ.setdefault("HF_HUB_DISABLE_TELEMETRY", "1")
48
+ os.makedirs(os.environ["HF_HUB_CACHE"], exist_ok=True)
49
+ os.makedirs(os.environ["WHISPER_CACHE_DIR"], exist_ok=True)
50
 
51
  # ─── Result storage (in-memory for now; extend to file/DB for persistence) ───
52
  _stimulus_results = {}
 
69
  if HF_TOKEN:
70
  os.environ["HUGGING_FACE_HUB_TOKEN"] = HF_TOKEN
71
  os.environ["HF_TOKEN"] = HF_TOKEN
 
 
72
  try:
73
  from huggingface_hub import login
74
  login(token=HF_TOKEN, add_to_git_credential=False)
75
  print(f"[SGP-Tribe3] HF login OK", flush=True)
76
  except Exception as e:
77
  print(f"[SGP-Tribe3] HF login warning: {e}", flush=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  else:
79
  print("[SGP-Tribe3] WARNING: No HF_TOKEN set β€” LLaMA encoder may fail", flush=True)
80