Buckets:
| from datasets import load_dataset | |
| from collections import defaultdict | |
| # ====================== | |
| # Load dataset | |
| # ====================== | |
| dataset = load_dataset( | |
| "simonko912/chan-shitpost-3", | |
| split="train", | |
| streaming=True | |
| ) | |
| # ====================== | |
| # Group by thread | |
| # ====================== | |
| threads = defaultdict(list) | |
| for ex in dataset: | |
| if ex["text"] and len(ex["text"].strip()) > 0: | |
| threads[ex["thread_id"]].append(ex) | |
| # ====================== | |
| # Build SmolLM2 ChatML | |
| # ====================== | |
| def build_chatml(posts, max_messages=50): | |
| posts = sorted(posts, key=lambda x: x["position_in_thread"]) | |
| chat = "" | |
| for i, post in enumerate(posts[:max_messages]): | |
| role = "user" if i % 2 == 0 else "assistant" | |
| content = post["text"].strip() | |
| if len(content) < 2: | |
| continue | |
| chat += f"<|im_start|>{role}\n{content}<|im_end|>\n" | |
| # IMPORTANT: leave open assistant for training completion | |
| chat += "<|im_start|>assistant\n" | |
| return {"text": chat} | |
| # ====================== | |
| # Convert all threads | |
| # ====================== | |
| train_data = [] | |
| for thread_id, posts in threads.items(): | |
| if len(posts) < 2: | |
| continue | |
| train_data.append(build_chatml(posts)) | |
| print("Conversations built:", len(train_data)) | |
Xet Storage Details
- Size:
- 1.29 kB
- Xet hash:
- 3d60116979c171059dade81203516bd8d6ecbc4e5d0288b16a7d2215b29cfd15
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.