Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/pre-commit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
python-version: "3.13"
- uses: pre-commit/action@v3.0.1
2 changes: 1 addition & 1 deletion .github/workflows/refresh-model-benchmarks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
python-version: "3.13"

- name: Refresh OpenRouter metadata
run: python model-benchmarks/scripts/fetch-model.py --refresh --no-aa
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,9 @@
# Local secrets (not committed)
env.local

# Python virtualenv (uv)
.venv/
__pycache__/

# Playwright MCP artifacts
.playwright-mcp/
1 change: 1 addition & 0 deletions .python-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.13
17 changes: 12 additions & 5 deletions model-benchmarks/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,16 @@ Static HTML/CSS/JS page — no build step, no framework.

## Data Pipeline

### Python environment

Python 3.13 via uv. The repo pins it in `.python-version`; create the venv once with
`uv venv --python 3.13` from the repo root, then prefix every command with
`uv run --no-project python`. Do NOT use bare `python3` — on macOS that resolves to
Apple's 3.9 and the scripts fail on `str | None` syntax. Stdlib only, no deps to install.

### Adding a new model

1. **Fetch from OpenRouter** — `python scripts/fetch-model.py <openrouter-id>`
1. **Fetch from OpenRouter** — `uv run --no-project python scripts/fetch-model.py <openrouter-id>`
- Gets pricing, context window, capabilities, endpoint stats
- Optionally enriches with Artificial Analysis (needs AA_API_KEY in env.local)

Expand All @@ -40,7 +47,7 @@ Static HTML/CSS/JS page — no build step, no framework.
- Elo and traits show in tooltip on hover

5. **Regenerate llms.txt** —
`python -c "import sys; sys.path.insert(0, 'model-benchmarks/scripts'); fm = __import__('importlib').import_module('fetch-model'); data = fm.load_model_data(); fm.generate_llms_txt(data)"`
`uv run --no-project python -c "import sys; sys.path.insert(0, 'model-benchmarks/scripts'); fm = __import__('importlib').import_module('fetch-model'); data = fm.load_model_data(); fm.generate_llms_txt(data)"`

6. **Update Model Personalities** — the "Model Personalities" section in `index.html`
has hardcoded editorial insight cards (9 curated profiles with personality reads and
Expand All @@ -50,8 +57,8 @@ Static HTML/CSS/JS page — no build step, no framework.
### Refreshing existing models

```bash
python scripts/fetch-model.py --refresh # all models
python scripts/fetch-model.py --refresh --no-aa # skip AA (rate limited at 1000/day)
uv run --no-project python scripts/fetch-model.py --refresh # all models
uv run --no-project python scripts/fetch-model.py --refresh --no-aa # skip AA (rate limited at 1000/day)
```

`merge_model()` preserves manually-entered data: eq_bench, arena, pinchbench, scores,
Expand All @@ -70,7 +77,7 @@ models keep their last-known data and are flagged `"delisted": true` with a note
### Tests

```bash
python -m unittest discover -s model-benchmarks/tests
uv run --no-project python -m unittest discover -s model-benchmarks/tests
```

Stdlib unittest, no dependencies. Covers the merge guarantees above.
Expand Down
Loading
Loading