every model spec’d & versioned · Concordance-tested changelog →

FinPlanBench v1.0.0

Hand a language model the spec. See if it can do the math.

FinPlanBench is an open benchmark for personal-finance computation. Each task gives a model one published Worthune specification — formulas included, so knowing the rule is not the test — and one set of inputs, and asks for the exact scalar outputs. Ground truth is the Concordance-tested engine: every expected value is produced by two independent implementations that agree at one part in a billion in CI.

Published runs

No published runs yet — the harness is, though.

Every number that will ever appear here must come from a runner artifact committed to the repository with the case-set hash it ran against — we don’t publish scores we didn’t run, and we don’t hand-edit results. Run it against any model with your own API key in about ten minutes (instructions below), and submit the result.

A case passes only if every scalar output agrees — partial credit hides exactly the errors that matter. “Practical” is the loosest bar our grading accepts: within 1% relative or $1 absolute — close enough to say to a user, still graded.

The method, in full

Open-book, on purpose

The prompt contains the entire published spec. The benchmark isolates the failure mode that matters to anyone shipping a financial copilot: not whether the model knows the rule, but whether it can execute a rule it has in front of it.

Fully reproducible

Built only from the three free-sample models, whose specs and eval datasets are fully public: emergency-fund v1.0.0, relocation v1.0.0, side-business v1.0.1 50 deterministic cases each, 150 total. No key needed to regenerate the set or check any expected value.

Fixed protocol

Temperature 0, one fixed prompt template (versioned), scalar outputs only — reproducing a 30-row projection table measures transcription, not computation. Answers are parsed leniently (fenced or bare JSON, last object wins); a response with no JSON object at all scores as unparseable, against the model.

Pinned by hash

Every published run names the exact case set it ran against. Current case-set SHA-256: 54e0715af3647b3655a23e0e805ca2b8a035647a36c1ec271d1e5379150b3997. When a spec version bumps, the hash moves, and older runs are flagged rather than silently compared.

Run it yourself

git clone https://github.com/CapsteraSupport/worthune && cd worthune && pnpm install
ANTHROPIC_API_KEY=sk-… pnpm exec tsx scripts/bench/run-finplanbench.ts \
  --provider anthropic --model <model-id> --label "<display name>"
# OpenAI-compatible endpoints: --provider openai [--base-url …] [--key-env …]

The runner writes a result artifact with the case-set hash, the per-case verdicts, and the run parameters. Open a pull request adding the file to publish it here — keep your raw responses, we spot-check before merging. And if you’re building the copilot rather than the leaderboard: the graded fix is the verification endpoint — same engine, per-claim verdicts, in production.