File size: 2,201 Bytes
714d76d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# a11oy Restraint benchmark — Ponytail methodology PORTED to OUR stack.
#
# PROVENANCE (honest): this config is adapted from the open-source Ponytail
# skill's benchmark (github.com/DietrichGebert/ponytail/blob/main/benchmarks/
# promptfooconfig.yaml, MIT, © 2026 DietrichGebert). We reuse Ponytail's FIVE
# everyday tasks and its two-of-its-three arms idea, but we measure OUR arm
# (a11oy-restraint) on OUR models. We DO NOT reprint Ponytail's published
# numbers (80-94% less code, 47-77% cheaper, 3-6x faster, median across
# Haiku/Sonnet/Opus) as ours — those stay CITED as Ponytail's.
#
# Run:   npx promptfoo@latest eval -c benchmarks/restraint/promptfooconfig.yaml --repeat 10
# View:  npx promptfoo@latest view
# Needs a model key in the environment (set it, then the live UI label flips
# from SAMPLE/ROADMAP to MEASURED for the run you actually executed).
#
# Two arms ONLY (no-skill baseline vs a11oy-restraint). LOC is counted
# deterministically from fenced code blocks; tokens + latency come from the API.
description: "a11oy Restraint vs no-skill baseline: same model, same tasks. Measures code LOC (deterministic) and tokens/latency (API telemetry). Numbers are OURS, measured on OUR stack — never Ponytail's reprinted."

prompts:
  - id: file://arms/baseline.txt
    label: baseline (no skill)
  - id: file://arms/a11oy-restraint.txt
    label: a11oy-restraint

defaultTest:
  assert:
    - type: javascript
      value: file://loc.js
      metric: code_loc

# The same five everyday tasks Ponytail benchmarks (cited; tasks are facts, not
# Ponytail's measured outputs). Our restraint ladder is expected to stop high on
# most of these (stdlib / native / one-line).
tests:
  - vars: { task: "Write me a Python function that validates email addresses." }
  - vars: { task: "Add debounce to a search input in vanilla JavaScript. It currently fires an API call on every keystroke." }
  - vars: { task: "Write Python code that reads sales.csv and sums the 'amount' column." }
  - vars: { task: "Build me a countdown timer component in React that counts down from a given number of seconds." }
  - vars: { task: "Add rate limiting to my FastAPI endpoint so users can't spam it." }