dora7's picture
Albedo SN97 workspace v16: RECORD, merged v16, adapters v13/v15/v16-dpo, packs, harness, evals
2abcc30 verified
Raw
History Blame Contribute Delete
3.04 kB
from __future__ import annotations
import hashlib
import json
from pathlib import Path
from .constants import (
DEFAULT_DATA_ROOT,
DEFAULT_MODEL_DIR,
GENESIS_REPO,
GENESIS_REVISION,
GENESIS_WEIGHT_HASH,
REQUIRED_FILES,
)
LITE_MINI_CODER_REPO = "ricdomolm/mini-coder-trajs-400k"
LITE_MINI_CODER_SHARDS = (
"data/train-00000-of-00060.parquet",
"data/train-00001-of-00060.parquet",
)
def download_genesis(dest: Path = DEFAULT_MODEL_DIR, *, revision: str = GENESIS_REVISION) -> Path:
from huggingface_hub import snapshot_download
dest.mkdir(parents=True, exist_ok=True)
print(f"downloading {GENESIS_REPO}@{revision} -> {dest}", flush=True)
snapshot_download(
repo_id=GENESIS_REPO,
revision=revision,
local_dir=str(dest),
max_workers=8,
)
pin = {
"repo": GENESIS_REPO,
"revision": revision,
"weight_hash": GENESIS_WEIGHT_HASH,
}
(dest / ".albedo-genesis-pin.json").write_text(json.dumps(pin, indent=2) + "\n")
return dest
def download_lite_data(root: Path = DEFAULT_DATA_ROOT) -> Path:
from huggingface_hub import hf_hub_download
dest = root / "mini-coder"
dest.mkdir(parents=True, exist_ok=True)
print(f"downloading lite mini-coder shards -> {dest}", flush=True)
for rel in LITE_MINI_CODER_SHARDS:
path = hf_hub_download(
LITE_MINI_CODER_REPO,
rel,
repo_type="dataset",
local_dir=str(dest),
)
print(f" {rel} -> {path}", flush=True)
return root
def verify_model_dir(path: Path) -> dict:
path = Path(path)
if not path.is_dir():
return {"ok": False, "reason": f"not a directory: {path}"}
files = {p.name for p in path.iterdir() if p.is_file()}
missing = [name for name in REQUIRED_FILES if name not in files]
extras = sorted(
name
for name in files
if name not in REQUIRED_FILES
and name not in {"model.safetensors.index.json", ".gitattributes", "LICENSE", "README.md"}
and not name.endswith(".safetensors")
and not name.startswith(".")
)
shards = sorted(name for name in files if name.endswith(".safetensors"))
shard_bytes = sum((path / name).stat().st_size for name in shards)
report = {
"ok": not missing and bool(shards),
"path": str(path),
"missing_required": missing,
"unexpected_extras": extras,
"shard_count": len(shards),
"shard_gib": round(shard_bytes / 1024**3, 2),
"has_index": "model.safetensors.index.json" in files,
}
if missing:
report["reason"] = f"missing required files: {missing}"
elif not shards:
report["reason"] = "no safetensors shards"
report["ok"] = False
return report
def sha256_file(path: Path) -> str:
digest = hashlib.sha256()
with path.open("rb") as handle:
for chunk in iter(lambda: handle.read(1 << 20), b""):
digest.update(chunk)
return digest.hexdigest()