0xarchit commited on
Commit
4f49659
·
1 Parent(s): 3a93362

Add model list and download progress logging

Browse files
Files changed (1) hide show
  1. download_model.py +28 -27
download_model.py CHANGED
@@ -4,7 +4,7 @@ import os
4
  import shutil
5
  from pathlib import Path
6
 
7
- from huggingface_hub import HfApi, hf_hub_download
8
 
9
 
10
  def require_env(name: str) -> str:
@@ -14,36 +14,35 @@ def require_env(name: str) -> str:
14
  return value
15
 
16
 
17
- def quant_rank(path: Path) -> tuple[int, int, str]:
18
- name = path.name.lower()
19
- size = path.stat().st_size
20
 
21
  q8_tokens = ("q8_k_l", "q8_k_m", "q8_k_s", "q8_k", "q8_0", "q8_1")
22
  if any(token in name for token in q8_tokens):
23
- return (0, -size, path.name)
24
 
25
  if "f16" in name or "bf16" in name:
26
- return (1, -size, path.name)
27
 
28
  if any(token in name for token in ("q6_k", "q6_0", "q6_1", "q6")):
29
- return (2, -size, path.name)
30
 
31
  if any(token in name for token in ("q5_k_m", "q5_k_s", "q5_k", "q5_0", "q5_1", "q5")):
32
- return (3, -size, path.name)
33
 
34
  if any(token in name for token in ("q4_k_m", "q4_k_s", "q4_k", "q4_0", "q4_1", "q4")):
35
- return (4, -size, path.name)
36
 
37
  if any(token in name for token in ("q3_k_m", "q3_k_s", "q3_k", "q3_0", "q3_1", "q3")):
38
- return (5, -size, path.name)
39
 
40
  if any(token in name for token in ("q2_k", "q2_0", "q2_1", "q2")):
41
- return (6, -size, path.name)
42
 
43
  if "f32" in name:
44
- return (7, -size, path.name)
45
 
46
- return (8, -size, path.name)
47
 
48
 
49
  def main() -> None:
@@ -67,26 +66,28 @@ def main() -> None:
67
  download_dir.mkdir(parents=True, exist_ok=True)
68
 
69
  api = HfApi(token=hf_token)
70
- print(f"listing model files: {model_name}")
71
  files = api.list_repo_files(repo_id=model_name, repo_type="model")
72
- candidates = [Path(file_name) for file_name in files if file_name.lower().endswith(".gguf")]
73
  if not candidates:
74
  raise SystemExit(f"no gguf files found in repository: {model_name}")
75
 
 
 
 
 
76
  selected = min(candidates, key=quant_rank)
77
- print(f"selected model: {selected.name}")
78
-
79
- print(f"downloading model: {model_name}/{selected.as_posix()}")
80
- downloaded_path = Path(
81
- hf_hub_download(
82
- repo_id=model_name,
83
- filename=selected.as_posix(),
84
- token=hf_token,
85
- repo_type="model",
86
- cache_dir=os.environ.get("HF_HOME", "/data/hf-cache"),
87
- local_dir=str(download_dir),
88
- )
89
  )
 
90
 
91
  if target_model.exists():
92
  target_model.unlink()
 
4
  import shutil
5
  from pathlib import Path
6
 
7
+ from huggingface_hub import HfApi, snapshot_download
8
 
9
 
10
  def require_env(name: str) -> str:
 
14
  return value
15
 
16
 
17
+ def quant_rank(file_name: str) -> tuple[int, str]:
18
+ name = file_name.lower()
 
19
 
20
  q8_tokens = ("q8_k_l", "q8_k_m", "q8_k_s", "q8_k", "q8_0", "q8_1")
21
  if any(token in name for token in q8_tokens):
22
+ return (0, file_name)
23
 
24
  if "f16" in name or "bf16" in name:
25
+ return (1, file_name)
26
 
27
  if any(token in name for token in ("q6_k", "q6_0", "q6_1", "q6")):
28
+ return (2, file_name)
29
 
30
  if any(token in name for token in ("q5_k_m", "q5_k_s", "q5_k", "q5_0", "q5_1", "q5")):
31
+ return (3, file_name)
32
 
33
  if any(token in name for token in ("q4_k_m", "q4_k_s", "q4_k", "q4_0", "q4_1", "q4")):
34
+ return (4, file_name)
35
 
36
  if any(token in name for token in ("q3_k_m", "q3_k_s", "q3_k", "q3_0", "q3_1", "q3")):
37
+ return (5, file_name)
38
 
39
  if any(token in name for token in ("q2_k", "q2_0", "q2_1", "q2")):
40
+ return (6, file_name)
41
 
42
  if "f32" in name:
43
+ return (7, file_name)
44
 
45
+ return (8, file_name)
46
 
47
 
48
  def main() -> None:
 
66
  download_dir.mkdir(parents=True, exist_ok=True)
67
 
68
  api = HfApi(token=hf_token)
69
+ print(f"listing model files: {model_name}", flush=True)
70
  files = api.list_repo_files(repo_id=model_name, repo_type="model")
71
+ candidates = [file_name for file_name in files if file_name.lower().endswith(".gguf")]
72
  if not candidates:
73
  raise SystemExit(f"no gguf files found in repository: {model_name}")
74
 
75
+ print("available gguf files:", flush=True)
76
+ for candidate in candidates:
77
+ print(f"- {candidate}", flush=True)
78
+
79
  selected = min(candidates, key=quant_rank)
80
+ print(f"selected model: {selected}", flush=True)
81
+
82
+ print(f"downloading model: {model_name}/{selected}", flush=True)
83
+ snapshot_download(
84
+ repo_id=model_name,
85
+ token=hf_token,
86
+ allow_patterns=[selected],
87
+ local_dir=str(download_dir),
88
+ cache_dir=os.environ.get("HF_HOME", "/data/hf-cache"),
 
 
 
89
  )
90
+ downloaded_path = download_dir / selected
91
 
92
  if target_model.exists():
93
  target_model.unlink()