jameszokah commited on
Commit
7e09504
·
1 Parent(s): 9b31d36

Improve Hugging Face model download process: add error handling for token login and model download, log success and failure messages, and ensure model is downloaded to the correct directory.

Browse files
Files changed (2) hide show
  1. app/main.py +27 -11
  2. scripts/download_model.py +60 -0
app/main.py CHANGED
@@ -127,19 +127,35 @@ async def lifespan(app: FastAPI):
127
  try:
128
  from huggingface_hub import hf_hub_download, login
129
  # Check for token in environment
130
- hf_token = os.environ.get("HF_TOKEN")
131
  if hf_token:
132
  logger.info("Logging in to Hugging Face using provided token")
133
- login(token=hf_token)
134
- logger.info("Downloading CSM-1B model from Hugging Face...")
135
- download_start = time.time()
136
- model_path = hf_hub_download(
137
- repo_id="sesame/csm-1b",
138
- filename="ckpt.pt",
139
- local_dir=APP_DIR
140
- )
141
- download_time = time.time() - download_start
142
- logger.info(f"Model downloaded to {model_path} in {download_time:.2f} seconds")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  except Exception as e:
144
  error_stack = traceback.format_exc()
145
  logger.error(f"Error downloading model: {str(e)}\n{error_stack}")
 
127
  try:
128
  from huggingface_hub import hf_hub_download, login
129
  # Check for token in environment
130
+ hf_token = os.environ.get("HF_TOKEN", "").strip()
131
  if hf_token:
132
  logger.info("Logging in to Hugging Face using provided token")
133
+ try:
134
+ login(token=hf_token)
135
+ logger.info("Successfully logged in to Hugging Face")
136
+ except Exception as e:
137
+ logger.error(f"Error logging in to Hugging Face: {e}")
138
+ logger.error("Will attempt to download model without authentication")
139
+ else:
140
+ logger.warning("No Hugging Face token provided. Some models may not be accessible")
141
+
142
+ # Attempt to download the model
143
+ try:
144
+ logger.info("Downloading CSM-1B model from Hugging Face...")
145
+ download_start = time.time()
146
+ model_path = hf_hub_download(
147
+ repo_id="sesame/csm-1b",
148
+ filename="ckpt.pt",
149
+ local_dir=os.path.join(APP_DIR, "models"),
150
+ token=hf_token if hf_token else None
151
+ )
152
+ download_time = time.time() - download_start
153
+ logger.info(f"Model downloaded to {model_path} in {download_time:.2f} seconds")
154
+ except Exception as e:
155
+ error_stack = traceback.format_exc()
156
+ logger.error(f"Error downloading model: {str(e)}\n{error_stack}")
157
+ logger.error("Please ensure you have a valid Hugging Face token with access to the model")
158
+ logger.error("Starting without model - API will return 503 Service Unavailable")
159
  except Exception as e:
160
  error_stack = traceback.format_exc()
161
  logger.error(f"Error downloading model: {str(e)}\n{error_stack}")
scripts/download_model.py ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ Script to download the CSM-1B model from Hugging Face.
4
+ """
5
+ import os
6
+ import sys
7
+ import logging
8
+ from huggingface_hub import hf_hub_download, login
9
+ from pathlib import Path
10
+
11
+ # Configure logging
12
+ logging.basicConfig(
13
+ level=logging.INFO,
14
+ format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
15
+ )
16
+ logger = logging.getLogger(__name__)
17
+
18
+ def download_model():
19
+ """Download the CSM-1B model."""
20
+ try:
21
+ # Set up paths
22
+ app_dir = Path("/app")
23
+ models_dir = app_dir / "models"
24
+ models_dir.mkdir(parents=True, exist_ok=True)
25
+
26
+ # Get token from environment
27
+ hf_token = os.environ.get("HF_TOKEN", "").strip()
28
+
29
+ # Try to login if token is provided
30
+ if hf_token:
31
+ logger.info("Logging in to Hugging Face...")
32
+ try:
33
+ login(token=hf_token)
34
+ logger.info("Successfully logged in to Hugging Face")
35
+ except Exception as e:
36
+ logger.error(f"Error logging in to Hugging Face: {e}")
37
+ logger.error("Will attempt to download without authentication")
38
+ else:
39
+ logger.warning("No Hugging Face token provided. Some models may not be accessible")
40
+
41
+ # Download the model
42
+ logger.info("Downloading CSM-1B model...")
43
+ model_path = hf_hub_download(
44
+ repo_id="sesame/csm-1b",
45
+ filename="ckpt.pt",
46
+ local_dir=str(models_dir),
47
+ token=hf_token if hf_token else None
48
+ )
49
+
50
+ logger.info(f"Model downloaded successfully to: {model_path}")
51
+ logger.info(f"File size: {os.path.getsize(model_path) / (1024*1024):.2f} MB")
52
+ return True
53
+
54
+ except Exception as e:
55
+ logger.error(f"Error downloading model: {e}")
56
+ return False
57
+
58
+ if __name__ == "__main__":
59
+ success = download_model()
60
+ sys.exit(0 if success else 1)