|
40 | 40 | file: "datasmith/runners/scrape_repos.py", |
41 | 41 | fileUrl: `${DATASMITH}/src/datasmith/runners/scrape_repos.py`, |
42 | 42 | summary: |
43 | | - "For each (owner, repo) candidate — sourced from a CommonSQL query against the GitHub Public Dataset that filters for asv.conf.json presence — fetch metadata via the GitHub REST API and upsert a row into the repositories table with stars, language, topics, and description." |
| 43 | + "Find repositories that are (1) ASV compatible (contain asv.conf.json), (2) are somewhat popular (have >100 stars), and (3) have mergable PRs. This is done using a CommonSQL BigQuery script or the GitHub Search API." |
44 | 44 | }, |
45 | 45 | { |
46 | 46 | phase: 1, |
|
50 | 50 | file: "datasmith/runners/scrape_commits.py", |
51 | 51 | fileUrl: `${DATASMITH}/src/datasmith/runners/scrape_commits.py`, |
52 | 52 | summary: |
53 | | - "For each candidate repository, paginate every merged pull request via the GitHub REST API within an optional date window. For each PR, fetch the diff and file changes, run symbolic_compliance() to mark is_performance_commit_symbolic, and upsert into the pull_requests table." |
| 53 | + "For each candidate repository, paginate every merged pull request via the GitHub REST API within an optional date window. Only keep the PRs with a valid diff, that touches core code files, and that has a non-empty title and description that will fit within a reasonably sized LLM's context window." |
54 | 54 | }, |
55 | 55 | { |
56 | 56 | phase: 1, |
|
60 | 60 | file: "datasmith/filters.py", |
61 | 61 | fileUrl: `${DATASMITH}/src/datasmith/filters.py`, |
62 | 62 | summary: |
63 | | - "A cheap pre-LLM gate: drop PRs only when the title contains a clearly negative keyword (docs, typo, lint, version) and no positive cue. Ambiguous titles are kept; the LLM classifier decides next. Recall-first by design — false positives die at the speedup gate." |
| 63 | + "A cheap pre-LLM gate: drop PRs only when the title contains a clearly negative keyword (docs, typo, lint, version) and no positive cue. Ambiguous titles are kept; the LLM classifier decides next. Our priority is on higher recall in these stages." |
64 | 64 | }, |
65 | 65 | { |
66 | 66 | phase: 2, |
|
70 | 70 | file: "datasmith/runners/classify_prs.py", |
71 | 71 | fileUrl: `${DATASMITH}/src/datasmith/runners/classify_prs.py`, |
72 | 72 | summary: |
73 | | - "Two LLM passes over the PR's title, diff, linked issues, and review comments: a classifier first decides binary YES/NO; if YES, a judge picks one of 13 optimization categories and a difficulty (Easy / Medium / Hard)." |
| 73 | + "Two LLM passes over the PR's title, diff, linked issues, and review comments: a classifier first decides binary YES/NO; if YES, a judge picks one of 13 optimization categories and a difficulty (Easy / Medium / Hard). Prompt is tuned to admit ambiguous cases as well." |
74 | 74 | }, |
75 | 75 | { |
76 | 76 | phase: 3, |
|
80 | 80 | file: "datasmith/runners/resolve_packages.py", |
81 | 81 | fileUrl: `${DATASMITH}/src/datasmith/runners/resolve_packages.py`, |
82 | 82 | summary: |
83 | | - "For each classified PR, analyze_commit() detects the package's pyproject.toml/setup.py/setup.cfg, infers the Python version, and pins a full transitive dependency closure with uv. Sets can_install=True/False on the packages table. PRs with can_install=False are skipped downstream." |
| 83 | + "For each classified PR, we detect the package's pyproject.toml/setup.py/setup.cfg, infer the Python version, and pin a full transitive dependency closure with uv. PRs which cannot be resolved are skipped downstream." |
84 | 84 | }, |
85 | 85 | { |
86 | 86 | phase: 3, |
|
90 | 90 | file: "datasmith/docker/verifiers.py", |
91 | 91 | fileUrl: `${DATASMITH}/src/datasmith/docker/verifiers.py`, |
92 | 92 | summary: |
93 | | - "Three CLI checks decide whether a container is good: `python -c 'import {package}'`, `asv profile`, and `pytest`. If any fail, the container is dropped. Every downstream attempt (try_similar, agent_loop) is judged by this same verifier." |
| 93 | + "Three CLI checks decide whether a container is good: `python -c 'import {package}'`, `asv run`, and `pytest`. If any fail, the container is dropped. Every downstream attempt (try_similar, agent_loop) is judged by this same verifier." |
94 | 94 | }, |
95 | 95 | { |
96 | 96 | phase: 3, |
|
100 | 100 | file: "datasmith/agents/synthesizer.py", |
101 | 101 | fileUrl: `${DATASMITH}/src/datasmith/agents/synthesizer.py`, |
102 | 102 | summary: |
103 | | - "Look up successful build scripts from the same repo, sorted by absolute chronological distance from this PR — closest in either direction first. Fall through one-by-one until a script passes the verifier." |
| 103 | + "Not all PRs need a unique build script. For a new PR, we look up successful build scripts from the same repo, sorted by absolute chronological distance. The build scripts fall through one-by-one until a script passes the verifier." |
104 | 104 | }, |
105 | 105 | { |
106 | 106 | phase: 3, |
|
110 | 110 | file: "datasmith/agents/synthesizer.py", |
111 | 111 | fileUrl: `${DATASMITH}/src/datasmith/agents/synthesizer.py`, |
112 | 112 | summary: |
113 | | - "When the cascade fails, LLM_GENERATE hands the build to a swappable installed agent (Claude / Codex / Gemini / Qwen) running in a sandboxed container. The agent reads the repo, edits docker_build_pkg.sh, and re-runs the verifier loop until the smoke checks pass or max_attempts (default 2) is exhausted." |
| 113 | + "If the cascade fails, LLM_GENERATE hands the build to a swappable installed agent (Claude / Codex / Gemini / QwenCode) running in a sandboxed container. The agent reads the repo, edits docker_build_pkg.sh, and re-runs the verifier loop until the verifier passes or max_attempts (default 2) is exhausted. We don't notice any verifier hacking (so far)." |
114 | 114 | }, |
115 | 115 | { |
116 | 116 | phase: 4, |
|
120 | 120 | file: "datasmith/runners/harbor_healthcheck.py", |
121 | 121 | fileUrl: `${DATASMITH}/src/datasmith/runners/harbor_healthcheck.py`, |
122 | 122 | summary: |
123 | | - "The local orchestrator ships each verified container to a clean AWS EC2 c5ad.large box, where the oracle agent applies the human expert's patch and ASV times base vs. patched code. Per-trial speedups stream back into harbor_runs." |
| 123 | + "The local orchestrator ships each verified container to a clean AWS EC2 instance (for reproducibility and hardware invariance), where the oracle agent applies the human expert's patch and ASV times base vs. patched code. Per-trial speedups stream back to us. PRs with a statistically significant improvement over the baseline are kept." |
124 | 124 | }, |
125 | 125 | { |
126 | 126 | phase: 4, |
|
158 | 158 | // plus a tail for the final slide-in animation and a hold for reading. |
159 | 159 | const BEAT_MS = 500; |
160 | 160 | const ANIM_TAIL_MS = 625; |
161 | | - const HOLD_MS = 1875; |
| 161 | + const HOLD_MS = 3875; |
162 | 162 | // stepBeat thresholds at which each step is "fully revealed". |
163 | 163 | $: revealBeats = [ |
164 | 164 | REPO_LINES.length, // ① find_repos |
165 | 165 | 8, // ② scrape_prs |
166 | 166 | SAMPLE_PRS.length, // ③ attribute_filter |
167 | | - 30, // ④ classify (3 sub-stages × ~10 beats each, ~4s per stage) |
| 167 | + 30, // ④ classify (3 sub-stages x ~10 beats each, ~4s per stage) |
168 | 168 | RESOLVE_LINES.length, // ⑤ resolve_packages |
169 | 169 | 16, // ⑥ verify_build (smoke 2 + asv 10 + pytest 4 = 1:5:2 ratio) |
170 | 170 | 9, // ⑦ try_similar (interleaved try → verdict cascade, 2 beats each) |
|
446 | 446 | ] |
447 | 447 | }, |
448 | 448 | { |
449 | | - cap: "asv profile", |
450 | | - cmd: "asv profile -b 'groupby_agg'", |
| 449 | + cap: "asv run", |
| 450 | + cmd: "asv run", |
451 | 451 | startBeat: 2, |
452 | 452 | endBeat: 12, |
453 | 453 | elapsedSec: 12.3, |
454 | 454 | showSpinner: true, |
455 | 455 | lines: [ |
456 | | - { atBeat: 3, p: "·", body: "Profiling groupby_agg…" }, |
| 456 | + { atBeat: 3, p: "·", body: "Running groupby_agg…" }, |
457 | 457 | { atBeat: 11, p: "·", body: "cumulative 12.3s / 4 rounds" }, |
458 | | - { atBeat: 12, p: "·", body: "✓ profile passed", ok: true } |
| 458 | + { atBeat: 12, p: "·", body: "✓ run passed", ok: true } |
459 | 459 | ] |
460 | 460 | }, |
461 | 461 | { |
|
1223 | 1223 | <div class="verified-row" class:on={s10Beat >= 1}> |
1224 | 1224 | <span class="verified-badge">✓ task verified</span> |
1225 | 1225 | <span class="verified-sub" |
1226 | | - >cleared the 1.05× speedup gate</span |
| 1226 | + >U test confirms improvement</span |
1227 | 1227 | > |
1228 | 1228 | </div> |
1229 | 1229 | <div class="targets"> |
|
1321 | 1321 | <button |
1322 | 1322 | class="speed" |
1323 | 1323 | class:active={speed === s} |
1324 | | - on:click={() => setSpeed(s)}>{s}×</button |
| 1324 | + on:click={() => setSpeed(s)}>{s}x</button |
1325 | 1325 | > |
1326 | 1326 | {/each} |
1327 | 1327 | </div> |
|
0 commit comments