Files
OpenCodeGoEvals/README.md
T
devadmin 4e5a13f7b6
Deploy to Cloudflare Pages / deploy (push) Successful in 30s
Automate the evaluation on a weekly schedule
- scripts/sync-catalog.mjs: rebuilds the Go catalogue from models.dev and benchmark
  scores from Artificial Analysis, and records what changed in snapshot.json
- scripts/build-models-md.mjs: regenerates MODELS.md from the data layers
- scripts/notify-new-models.mjs: files an issue when a new model needs a write-up
- weekly-eval.yml: cron every Monday 05:23 UTC -> refresh -> commit -> Pages deploy
- site now renders every model in the catalogue (33) with a data-snapshot stamp;
  auto-added models are flagged 'no write-up' until described
- replaced scripts/refresh-evals.mjs with the wider sync script
2026-10-21 17:06:51 +00:00

145 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# OpenCodeGoEvals
Benchmarks and plain-language notes for every model in the **OpenCode Go** catalog:
a task-by-task performance matrix, cost/value analysis, and a description of what each
model is actually targeted for (agentic work, coding, data analysis, image understanding,
deep research, high-volume chores).
Static site, no build step — it is plain HTML/CSS/ES modules, deployed to **Cloudflare Pages**.
## What's here
| Path | What it is |
|---|---|
| `site/index.html` | The site: performance matrix, price/value charts, model guide |
| `site/assets/data.js` | Model catalogue — pricing, context, modality, target descriptions, caveats |
| `site/assets/evals.js` | Benchmark scores (0–100) per model per task family |
| `site/assets/app.js` | Rendering logic for the matrix, charts and guide |
| `site/assets/style.css` | Styling |
| `MODELS.md` | The same model descriptions in Markdown |
| `scripts/sync-catalog.mjs` | Weekly refresh: models.dev catalogue + Artificial Analysis → `catalog.js`, `evals.js`, `snapshot.json` |
| `scripts/build-models-md.mjs` | Regenerates `MODELS.md` from the three data layers |
| `scripts/notify-new-models.mjs` | Files a Gitea issue when a new model needs a write-up |
| `scripts/deploy.sh` | Manual Cloudflare Pages deploy |
| `.gitea/workflows/weekly-eval.yml` | Weekly scheduled evaluation refresh |
| `wrangler.toml` | Cloudflare Pages project configuration |
| `.gitea/workflows/pages.yml` | CI: builds and deploys to Cloudflare Pages on every push to `main` |
## Data sources
- [OpenCode Go docs](https://opencode.ai/docs/go) — pricing, monthly allowances, privacy/retention, client support
- [OpenCode Data](https://opencode.ai/data) — catalog metadata, context windows, usage and retention stats
- [Artificial Analysis](https://artificialanalysis.ai) — benchmark scores and the Intelligence Index
- Vendor announcements — Google (Gemini 4 Argon), Reflection AI (Beam), Meituan (LongCat),
MiniMax (M3.1 Flash), xAI (Grok 4.7), StepFun (Step 5), Qwen, Zhipu, Moonshot, DeepSeek, Xiaomi, Tencent
Data snapshot date: **2026-10-21**. Re-run the collection script to refresh.
## Publishing to Cloudflare Pages
### 1. Create the Pages project
```bash
npm install
npx wrangler login # or export CLOUDFLARE_API_TOKEN
npx wrangler pages project create opencodogoevals
```
### 2. Give CI the credentials
Add these as repository secrets (Gitea: *Settings → Actions → Secrets*):
| Secret | Value |
|---|---|
| `CLOUDFLARE_API_TOKEN` | Cloudflare API token with **Cloudflare Pages: Edit** (and Account Settings: Read) |
| `CLOUDFLARE_ACCOUNT_ID` | The Cloudflare account that owns the Pages project |
The workflow in `.gitea/workflows/pages.yml` then:
1. checks out the repo and installs Wrangler,
2. stages `MODELS.md` next to the site,
3. creates the Pages project if it does not exist yet (idempotent),
4. deploys `site/` on every push to `main`, on a manual *Run workflow*, and hourly.
A runner must be registered on the Gitea instance for the workflow to execute.
### 3. Deploy manually (optional)
```bash
./scripts/deploy.sh # uses env vars or your wrangler login session
npm run deploy # same thing, wrangler only
npm run dev # local preview on http://localhost:8788
```
### Custom domain
Set it in Cloudflare Pages → *Custom domains*, then add a CNAME record pointing at
`<project>.pages.dev`.
## Local development
The site is static — open `site/index.html` directly, or use `npm run dev` for a
Cloudflare-compatible local server.
## The weekly cycle
Two workflows run in Gitea Actions:
| Workflow | Trigger | What it does |
|---|---|---|
| `weekly-eval.yml` | Mondays 05:23 UTC (cron), or manual | Re-scrapes the catalogue and benchmark scores, rebuilds `MODELS.md`, opens an issue for any new model needing a write-up, and commits the result |
| `pages.yml` | every push to `main` | Deploys `site/` to Cloudflare Pages |
The chain is: **schedule → data refresh → commit → Pages deploy**, so the live site
updates itself without anyone touching it. The weekly run is idempotent — if nothing
changed, nothing is committed and nothing is redeployed.
A run leaves behind a trail you can audit:
- `site/assets/snapshot.json` — when the data was taken, which models are new or gone,
and every benchmark score that moved since the previous run
- the commit `chore: weekly evaluation refresh <date>` in the history
- the Actions run log for the week
- a Gitea issue when a new model appears in Go without a write-up
### What is automated vs. hand-written
| File | Owner | Contents |
|---|---|---|
| `site/assets/catalog.js` | auto-generated | every model in Go: pricing, context, modalities, release date |
| `site/assets/evals.js` | auto-generated | benchmark scores per model per task family |
| `site/assets/data.js` | **hand-written** | what each model is targeted for, caveats, tags |
| `site/assets/snapshot.json` | auto-generated | timestamp, added/removed models, score deltas |
When you want to change a description, edit `site/assets/data.js` and run
`node scripts/build-models-md.mjs`; the weekly refresh will never overwrite it.
### Running it by hand
```bash
node scripts/sync-catalog.mjs # refresh catalogue + scores
node scripts/build-models-md.mjs # rebuild MODELS.md
node scripts/notify-new-models.mjs # file the "needs write-up" issue
```
### If the scheduler is not firing
Gitea only runs scheduled workflows when a runner is registered and awake. If Mondays
slip past, trigger it manually from the Actions tab (*Run workflow*), or run the three
commands above on any machine with network access and push the result.
## Caveats
- Task-matrix cells use the best published evaluation per task family; when a model has
not been run on a benchmark the column falls back to another one, so the underlying
benchmark can differ between rows in a column. Hover a cell to see which one it is.
- Free-tier models (MiniMax M3.1 Flash Free, Beam Free, LongCat 2.5 Preview Free) are
limited-time offers.
- Contributor-tier models (Gemini 4 Argon, Muse Spark 1.3) may use your prompts and
completions for training — check the Go docs' privacy table.
- No Go model generates images; they are all text-output.
## License
MIT — see [LICENSE](LICENSE).