Spaces:
Running
Running
cleaner showcase v1: static build, real sample report; gradio app kept for PRO upgrade
b485a88 verified | <html lang="en"><head><meta charset="utf-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <title>ModelBrew Dataset Cleaner</title> | |
| <style> | |
| :root { --bg:#fff; --fg:#1a1a1a; --muted:#6a6a6a; --line:#e3e3e3; --accent:#e17100; --code:#f4f4f4; | |
| --crit-bg:#fdecea; --crit-fg:#8c1d18; --warn-bg:#fff4e0; --warn-fg:#7a4b00; --sugg-bg:#e8f0fe; --sugg-fg:#1a4b8c; } | |
| @media (prefers-color-scheme: dark) { | |
| :root { --bg:#101010; --fg:#eaeaea; --muted:#9a9a9a; --line:#2b2b2b; --accent:#ff9e2c; --code:#1d1d1d; | |
| --crit-bg:#3a1512; --crit-fg:#ff9d94; --warn-bg:#3a2c10; --warn-fg:#ffce7a; --sugg-bg:#12233a; --sugg-fg:#9cc4ff; } } | |
| body { margin:0; background:var(--bg); color:var(--fg); font:16px/1.55 system-ui,-apple-system,Segoe UI,Roboto,sans-serif; } | |
| main { max-width:960px; margin:0 auto; padding:2.5rem 1.25rem 4rem; } | |
| h1 { font-size:1.7rem; margin:0 0 .3rem; } h2 { margin:2rem 0 .6rem; font-size:1.15rem; } | |
| .sub { color:var(--muted); margin:0 0 1.2rem; } | |
| a { color:var(--accent); text-decoration:none; } a:hover { text-decoration:underline; } | |
| pre { background:var(--code); padding:.9rem 1rem; border-radius:8px; overflow-x:auto; font-size:.85rem; } | |
| code { background:var(--code); padding:.1rem .35rem; border-radius:4px; font-size:.85em; } | |
| pre code { padding:0; background:none; } | |
| .tablewrap { overflow-x:auto; border:1px solid var(--line); border-radius:8px; } | |
| table { border-collapse:collapse; width:100%; font-size:.85rem; } | |
| th,td { text-align:left; padding:.5rem .65rem; border-bottom:1px solid var(--line); vertical-align:top; } | |
| th { color:var(--muted); font-weight:600; } tr:last-child td { border-bottom:none; } | |
| .pill { padding:.12rem .5rem; border-radius:99px; font-size:.75rem; white-space:nowrap; } | |
| .pill.critical { background:var(--crit-bg); color:var(--crit-fg); } | |
| .pill.warning { background:var(--warn-bg); color:var(--warn-fg); } | |
| .pill.suggestion { background:var(--sugg-bg); color:var(--sugg-fg); } | |
| .cta { display:inline-block; margin:.3rem .6rem .3rem 0; padding:.55rem 1rem; border-radius:8px; | |
| background:var(--accent); color:#fff ; font-weight:600; } | |
| footer { margin-top:3rem; color:var(--muted); font-size:.85rem; border-top:1px solid var(--line); padding-top:1rem; } | |
| </style></head><body><main> | |
| <h1>π§Ή ModelBrew Dataset Cleaner</h1> | |
| <p class="sub">90+ quality checks for fine-tuning datasets: PII with real checksum validation, | |
| exact/near duplicates, prompt-injection & jailbreak patterns, label errors, truncated | |
| responses, and more. Free and open source.</p> | |
| <a class="cta" href="https://app.modelbrew.ai/clean">Clean your dataset in the browser β</a> | |
| <a class="cta" href="https://github.com/ackerman404/modelbrew-cleaner" style="background:#333">GitHub</a> | |
| <h2>Or in your pipeline</h2> | |
| <pre><code>pip install modelbrew-cleaner | |
| from modelbrew_cleaner import clean_file, issue_summary, export_clean | |
| rows = clean_file("train.jsonl") # .jsonl, .json, or .csv | |
| print(issue_summary(rows)) # {'critical': 4, 'warning': 7, 'suggestion': 6} | |
| cleaned = export_clean(rows) # critical rows dropped</code></pre> | |
| <h2>Real output β the bundled dirty sample (12 rows)</h2> | |
| <p class="sub">This report is generated by actually running the cleaner on | |
| <a href="sample.jsonl">sample.jsonl</a> at build time β 4 critical / | |
| 7 warnings / 6 suggestions; | |
| 4 rows dropped from the cleaned export.</p> | |
| <div class="tablewrap"><table> | |
| <thead><tr><th>row</th><th>severity</th><th>check</th><th>message</th><th>auto-fix</th></tr></thead> | |
| <tbody><tr><td>3</td><td><span class='pill critical'>critical</span></td><td><code>pii_ssn</code></td><td>SSN detected</td><td>β</td></tr><tr><td>4</td><td><span class='pill critical'>critical</span></td><td><code>incomplete_pair</code></td><td>Output row has no instruction</td><td></td></tr><tr><td>5</td><td><span class='pill critical'>critical</span></td><td><code>incomplete_pair</code></td><td>Instruction row has no output</td><td></td></tr><tr><td>7</td><td><span class='pill critical'>critical</span></td><td><code>prompt_injection</code></td><td>Row contains prompt injection patterns β dangerous for training</td><td></td></tr><tr><td>0</td><td><span class='pill warning'>warning</span></td><td><code>duplicate_boilerplate</code></td><td>Response shares a common opening with >30% of rows</td><td></td></tr><tr><td>1</td><td><span class='pill warning'>warning</span></td><td><code>duplicate_exact</code></td><td>Exact duplicate row</td><td>β</td></tr><tr><td>1</td><td><span class='pill warning'>warning</span></td><td><code>duplicate_boilerplate</code></td><td>Response shares a common opening with >30% of rows</td><td></td></tr><tr><td>2</td><td><span class='pill warning'>warning</span></td><td><code>duplicate_near</code></td><td>Near-duplicate of row 0 (93.06930693069306% similar on both prompt and response)</td><td>β</td></tr><tr><td>3</td><td><span class='pill warning'>warning</span></td><td><code>pii_email</code></td><td>Email detected</td><td>β</td></tr><tr><td>7</td><td><span class='pill warning'>warning</span></td><td><code>jailbreak_pattern</code></td><td>Jailbreak / red-team pattern detected (instruction_override) β training on this teaches the model to comply with bypass prompts</td><td>β</td></tr><tr><td>10</td><td><span class='pill warning'>warning</span></td><td><code>unfinished_response</code></td><td>Response appears to end mid-sentence</td><td>β</td></tr><tr><td>0</td><td><span class='pill suggestion'>suggestion</span></td><td><code>modelbrew_too_few_rows</code></td><td>Only 12 rows β ModelBrew works best with 20+ training examples</td><td></td></tr><tr><td>3</td><td><span class='pill suggestion'>suggestion</span></td><td><code>pii_name_heuristic</code></td><td>Possible personal name (1) β heuristic, not NER-grade</td><td></td></tr><tr><td>4</td><td><span class='pill suggestion'>suggestion</span></td><td><code>tiny_row</code></td><td>Row has very few tokens (15) β may be low signal</td><td></td></tr><tr><td>5</td><td><span class='pill suggestion'>suggestion</span></td><td><code>tiny_row</code></td><td>Row has very few tokens (10) β may be low signal</td><td></td></tr><tr><td>7</td><td><span class='pill suggestion'>suggestion</span></td><td><code>tiny_row</code></td><td>Row has very few tokens (16) β may be low signal</td><td></td></tr><tr><td>8</td><td><span class='pill suggestion'>suggestion</span></td><td><code>pii_name_heuristic</code></td><td>Possible personal name (1) β heuristic, not NER-grade</td><td></td></tr></tbody></table></div> | |
| <h2>Why we built it</h2> | |
| <p>We work on fine-tuning without catastrophic forgetting (patent-pending CRMA adapters). | |
| Measuring forgetting honestly forced us to fix our data first β in our measurements, dataset | |
| confounds alone accounted for a 96.9-percentage-point swing in measured forgetting. | |
| Read: <a href="{{HF_ARTICLE_URL}}">Your forgetting benchmark is lying to you</a> Β· | |
| Browse the <a href="https://huggingface.co/spaces/ModelBrew/forgetting-leaderboard">forgetting leaderboard</a>.</p> | |
| <footer><a href="https://modelbrew.ai">ModelBrew</a> Β· Apache-2.0 Β· every number we publish links to a raw results file.</footer> | |
| </main></body></html> | |