Skip to content

Commit 61e935f

Browse files
authored
Merge pull request #1 from formula-code/redo-website
redesign www
2 parents ef5f474 + 7e24cee commit 61e935f

187 files changed

Lines changed: 87329 additions & 1036 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/deploy.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ jobs:
4747
if [ -f build/200.html ]; then
4848
cp build/200.html build/404.html
4949
fi
50+
# Ensure CNAME made it into the artifact so GitHub Pages serves
51+
# the custom domain. (SvelteKit's static adapter copies anything
52+
# in /static, so this is normally a no-op safety net.)
53+
if [ ! -f build/CNAME ] && [ -f static/CNAME ]; then
54+
cp static/CNAME build/CNAME
55+
fi
56+
echo "Deploying with CNAME:"; cat build/CNAME || echo " (none — custom domain not configured)"
5057
5158
- name: Upload artifact
5259
uses: actions/upload-pages-artifact@v3

.gitignore

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,11 @@ tasks/
1010
remote/
1111
HELP.md
1212
AGENTS.md
13-
CLAUDE.md
13+
CLAUDE.md
14+
15+
# Vendor docs: cloned working trees and the local mkdocs build venv. The
16+
# *built* output under static/docs/{eval,data}/ is checked in so that the
17+
# main www deploy can serve formulacode.org/docs/{eval,data} without a
18+
# Python toolchain in CI. Refresh with `make docs` (see Makefile).
19+
_repos/
20+
.venv-docs/

DATA_WISHLIST.md

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
# Data Wishlist
2+
3+
This document tracks data we'd like access to so the website can ship the
4+
features users (and reviewers) actually want. Each item lists what's needed,
5+
which page benefits, and what we ship without it.
6+
7+
---
8+
9+
## 1. The full benchmark dataset (957 tasks, not 3)
10+
11+
`src/data/website_data_lite.csv` currently contains workloads from **3
12+
task_ids** across 3 repositories (astropy, pandas, scikit-learn). The paper
13+
claims 957 performance bottlenecks across 70+ repos. This is the single
14+
biggest wishlist item.
15+
16+
- **Used by:** `/explorer/`, scrollytelling chart, leaderboard recompute.
17+
- **Ideal shape:** the existing CSV schema (`id, level, agent_id, agent/nop,
18+
oracle/nop, task_id, agent_recording, repo_name, benchmark_name`) with all
19+
~1.4M workloads spanning all 957 tasks.
20+
- **Acceptable interim:** a representative slice of one task per repo (≈70
21+
rows of `(repo, task_id)` pairs), enough that filter chips on the explorer
22+
feel populated.
23+
- **Without it:** the explorer reads as a "tiny preview slice." The `Browse
24+
N performance workloads` headline is honest but underwhelming.
25+
26+
## 2. `merged_at` dates per task
27+
28+
Already noted in `CLAUDE.md` — the time-travel slider on `/leaderboard/`
29+
stays dormant until each row carries a `merged_at` ISO 8601 string. The
30+
ranking engine (`src/utils/rankingEngine.js`) auto-activates once present.
31+
32+
- **Used by:** `/leaderboard/` time-travel slider.
33+
- **Ideal shape:** add a `merged_at` column to `website_data.csv` and
34+
propagate via `process_remote_data.py``LITE_COLUMNS`.
35+
- **Without it:** slider hidden, leaderboard is static.
36+
37+
## 3. Per-task gold patch and best-agent patch (diffs)
38+
39+
MathNet's explorer shows the problem statement. FormulaCode's explorer
40+
currently shows the *benchmark harness* (the `time_*` function being
41+
measured). What the audience actually wants to see is the **optimization
42+
patch** — what the human expert did, and what the agent did, side by side.
43+
44+
- **Used by:** `/explorer/` workload drawer (new "Patch" section), eventually
45+
a per-task page.
46+
- **Ideal shape:** for each `task_id`, two unified diffs:
47+
- `oracle_patch` — the merged human PR's patch
48+
- `agent_patches[<agent_id>]` — the patch the agent produced (per agent we
49+
ran)
50+
Plus optionally the full pre/post file contents for syntax-highlighted
51+
side-by-side rendering.
52+
- **Acceptable interim:** even just `oracle_patch` per task gets us 80% of
53+
the way there.
54+
- **Without it:** the drawer's value is capped at "here's the harness and
55+
here are the speedups." No insight into *why* the agent won/lost.
56+
57+
## 4. Task descriptions and PR URLs
58+
59+
Each `task_id` should link back to its origin so users can verify and dig
60+
deeper.
61+
62+
- **Used by:** `/explorer/` workload drawer, future per-task page.
63+
- **Ideal shape:** a `tasks.json` keyed by `task_id`:
64+
```json
65+
{
66+
"astropy_astropy_21": {
67+
"pr_url": "https://github.com/astropy/astropy/pull/12345",
68+
"pr_title": "Speed up Time initialization with units",
69+
"merged_at": "2024-03-15T12:34:56Z",
70+
"summary": "Caches unit conversion in Time constructor to avoid …",
71+
"optimization_strategy": "caching",
72+
"files_changed": 3,
73+
"lines_added": 42,
74+
"lines_removed": 18
75+
}
76+
}
77+
```
78+
- **Without it:** the explorer can identify a task by ID but can't say what
79+
the task *is* in plain English.
80+
81+
## 5. Repository metadata
82+
83+
To support the "browse by repo" and any "performance by repo popularity"
84+
analysis (the paper mentions a 4th-quintile finding), each repo needs basic
85+
metadata.
86+
87+
- **Used by:** `/explorer/` repo chips, future repo-detail page.
88+
- **Ideal shape:** `repos.json`:
89+
```json
90+
{
91+
"astropy_astropy": {
92+
"owner": "astropy",
93+
"repo": "astropy",
94+
"stars": 4400,
95+
"language": "Python",
96+
"description": "Astronomy and astrophysics core library",
97+
"n_tasks": 21,
98+
"topic": "scientific-computing"
99+
}
100+
}
101+
```
102+
- **Without it:** repos render as `astropy/astropy` slug-only — fine, but the
103+
page is less informative than MathNet's "Browse by competition" panel.
104+
105+
## 6. Per-agent cost & token usage per task
106+
107+
The paper's cost-efficiency finding ("frontier LLMs are overall more cost
108+
effective than open weights models") is a key result that has no home on the
109+
site yet.
110+
111+
- **Used by:** new "Cost vs. advantage" chart on `/leaderboard/`, agent
112+
cards.
113+
- **Ideal shape:** add to the per-row CSV: `agent_cost_usd`,
114+
`agent_input_tokens`, `agent_output_tokens`, `agent_wallclock_seconds`.
115+
- **Without it:** we can't surface the cost story visually.
116+
117+
## 7. Optimization strategy labels
118+
119+
The paper finds agents excel at parallelization/batching and struggle with
120+
vectorization. Surfacing these tags would let users filter the explorer by
121+
strategy.
122+
123+
- **Used by:** `/explorer/` optional "Strategy" filter chip.
124+
- **Ideal shape:** per-task labels (`["caching", "vectorization", "io"]`) on
125+
the human PR.
126+
- **Without it:** strategy taxonomy lives only in the paper, not the site.
127+
128+
---
129+
130+
## Out of scope (intentionally)
131+
132+
- **Submission flow / new agent uploads.** Following MathNet's lead — we
133+
don't need a backend for this. Users submit via the documented `fceval`
134+
CLI; we ingest results into the static dataset.
135+
- **User accounts, comments, voting.** Not relevant.
136+
- **Real-time leaderboard.** Cadence is paper/release, not minutes.

Makefile

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
PHONY: github pudding
1+
PHONY: github pudding docs docs-eval docs-data docs-clone docs-clean
22

33
github:
44
rm -rf docs
@@ -7,4 +7,49 @@ github:
77
git add -A
88
git commit -m "update github pages"
99
git push
10-
10+
11+
# ── Vendored docs (formulacode.org/docs/{eval,data}) ─────────────────────────
12+
# Cloned repos live in _repos/ (gitignored) and the built site is mirrored
13+
# into static/docs/{eval,data} (committed) so SvelteKit's static adapter
14+
# publishes them under formulacode.org. Run `make docs` after pulling in
15+
# upstream changes from the vendored repos.
16+
17+
REPOS_DIR := _repos
18+
VENV_DOCS := .venv-docs
19+
MKDOCS := $(VENV_DOCS)/bin/mkdocs
20+
21+
$(VENV_DOCS):
22+
uv venv $(VENV_DOCS) --python 3.12
23+
uv pip install --python $(VENV_DOCS)/bin/python \
24+
mkdocs mkdocs-material 'mkdocstrings[python]' pymdown-extensions
25+
26+
docs-clone:
27+
@mkdir -p $(REPOS_DIR)
28+
@if [ ! -d $(REPOS_DIR)/fc-eval ]; then \
29+
git clone --depth=1 https://github.com/formula-code/fc-eval.git $(REPOS_DIR)/fc-eval ; \
30+
else \
31+
git -C $(REPOS_DIR)/fc-eval pull --ff-only ; \
32+
fi
33+
@if [ ! -d $(REPOS_DIR)/datasmith ]; then \
34+
git clone --depth=1 https://github.com/formula-code/datasmith.git $(REPOS_DIR)/datasmith ; \
35+
else \
36+
git -C $(REPOS_DIR)/datasmith pull --ff-only ; \
37+
fi
38+
39+
docs-eval: $(VENV_DOCS) docs-clone
40+
cd $(REPOS_DIR)/fc-eval && $(CURDIR)/$(MKDOCS) build --site-dir _site
41+
rm -rf static/docs/eval
42+
mkdir -p static/docs/eval
43+
cp -R $(REPOS_DIR)/fc-eval/_site/. static/docs/eval/
44+
45+
docs-data: $(VENV_DOCS) docs-clone
46+
cd $(REPOS_DIR)/datasmith && $(CURDIR)/$(MKDOCS) build --site-dir _site
47+
rm -rf static/docs/data
48+
mkdir -p static/docs/data
49+
cp -R $(REPOS_DIR)/datasmith/_site/. static/docs/data/
50+
51+
docs: docs-eval docs-data
52+
@echo "Built static/docs/{eval,data}. npm run build will pick them up."
53+
54+
docs-clean:
55+
rm -rf $(REPOS_DIR) $(VENV_DOCS) static/docs

0 commit comments

Comments
 (0)