Skip to content

Automated scheduled benchmark runs with structured storage #31

Description

@aallan

Context

Currently benchmarks are run manually from a developer's machine. For longitudinal tracking across vera compiler versions and model releases, we need automated scheduled runs that store results in a structured, queryable format — not flat JSONL files.

What this looks like

A GitHub Actions scheduled workflow that:

  1. Triggers weekly (or on vera release tags)
  2. Installs the latest vera from main (or a pinned release)
  3. Runs the full 50-problem benchmark against a matrix of models:
    • Claude Sonnet 4, Claude Opus 4
    • GPT-4o
    • (Others as API access permits)
  4. Runs both Vera full-spec and spec-from-NL modes
  5. Stores results in a structured format (not flat files)
  6. Publishes updated results to the dashboard (Results dashboard (GitHub Pages or veralang.dev) #30)

Storage: beyond flat JSONL

Flat JSONL files in results/ don't scale for longitudinal tracking. Each run produces ~100-200 result records (50 problems × 2-4 modes × 1-2 attempts), and we'll accumulate hundreds of runs over time. Options:

Option A: SQLite database in the repo

  • Single results/verabench.db file
  • Schema: runs table (run_id, timestamp, vera_version, skill_md_hash) + results table (run_id, problem_id, model, language, mode, check_pass, verify_pass, run_correct, ...)
  • Queryable with standard SQL
  • Git-tracked (SQLite is a single file, diffs are binary but size is manageable)
  • vera-bench report reads from DB instead of globbing JSONL

Option B: Cloud database (Supabase, PlanetScale, etc.)

  • Better for public dashboards and API access
  • More infrastructure to maintain
  • Overkill for current scale

Option C: Structured JSONL with metadata headers

  • Keep JSONL but add a metadata record at the top of each file: {"_meta": {"run_id": "...", "vera_version": "0.0.105", "skill_md_hash": "abc123", "timestamp": "..."}}
  • Naming convention: results/{date}-{vera_version}-{model}.jsonl
  • Simpler than SQLite but harder to query across runs

Recommendation: Start with SQLite (Option A). It's zero-infrastructure, queryable, and the vera-bench report command can read from it directly. Migrate to a cloud DB later if the dashboard needs an API.

Cost considerations

Each full run (50 problems × 1 model × 2 modes) costs approximately:

  • ~100 API calls
  • ~500K input tokens (mostly SKILL.md context, ~65K per call)
  • ~15K output tokens
  • Estimated cost: ~$2-5 per model per run (varies by model pricing)

Weekly runs across 3 models ≈ $30-60/month. Acceptable for a research project.

Secrets management

The scheduled workflow needs API keys as GitHub Actions secrets:

  • ANTHROPIC_API_KEY — for Claude models
  • OPENAI_API_KEY — for GPT models

These are already used in the manual workflow pattern.

Relates to

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions