Files
wehub-resource-sync 542cfa195c
CI / Frontend build (push) Failing after 9m6s
CI / Plugin validate (push) Failing after 9m27s
CI / Python lint (push) Failing after 16m1s
CI / Tests (push) Successful in 18m0s
Deploy / deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:33:27 +08:00

89 lines
2.9 KiB
Python

#!/usr/bin/env python3
"""Build a mixed-compression training dataset by concatenating ShareGPT JSON
files from 2x / 3x / 5x / 9x compression dirs.
Each original chunk appears 4 times, once per compression level, with the SAME
query+answer but different blur. This trains a single adapter that's robust
across compression levels.
Eval: use per-compression eval.json (separate eval datasets in dataset_info).
"""
from __future__ import annotations
import argparse
import json
import random
from pathlib import Path
COMPRESSIONS = ["2x", "3x", "5x", "9x"]
BASE = "/scratch/users/zwcolin/cxr_embeds/sft_data"
def main():
p = argparse.ArgumentParser()
p.add_argument("--output-dir", default=f"{BASE}/compressed_mixed")
p.add_argument("--seed", type=int, default=42)
args = p.parse_args()
out = Path(args.output_dir)
out.mkdir(parents=True, exist_ok=True)
# === Train: concat all 4 compressions, shuffle ===
train_all = []
for c in COMPRESSIONS:
src = Path(f"{BASE}/compressed_{c}/train.json")
data = json.loads(src.read_text())
print(f" {c}/train.json: {len(data)} examples")
# Tag with compression for provenance (optional)
for ex in data:
ex["_compression"] = c
train_all.extend(data)
rng = random.Random(args.seed)
rng.shuffle(train_all)
print(f"Total train (mixed): {len(train_all)}")
# Strip _compression tag before save (LF doesn't use it)
for ex in train_all:
ex.pop("_compression", None)
(out / "train.json").write_text(json.dumps(train_all, ensure_ascii=False))
# === Eval: keep per-compression eval sets ===
for c in COMPRESSIONS:
src = Path(f"{BASE}/compressed_{c}/eval.json")
dst = out / f"eval_{c}.json"
dst.write_text(src.read_text())
print(f" eval_{c}.json: copied {len(json.loads(dst.read_text()))} examples")
# === dataset_info.json ===
info = {
"mixed_train": {
"file_name": str(out / "train.json"),
"formatting": "sharegpt",
"columns": {"messages": "messages", "images": "images"},
"tags": {
"role_tag": "role",
"content_tag": "content",
"user_tag": "user",
"assistant_tag": "assistant",
},
}
}
for c in COMPRESSIONS:
info[f"mixed_eval_{c}"] = {
"file_name": str(out / f"eval_{c}.json"),
"formatting": "sharegpt",
"columns": {"messages": "messages", "images": "images"},
"tags": {
"role_tag": "role",
"content_tag": "content",
"user_tag": "user",
"assistant_tag": "assistant",
},
}
(out / "dataset_info.json").write_text(json.dumps(info, indent=2))
print(f"\nDataset info: {out / 'dataset_info.json'}")
if __name__ == "__main__":
main()