Submit your model
Score your synthetic survey method against real human survey data.
Upload a result JSON you generated (sign-in required), or open a pull request that adds it to the repository.
Quick start
Two commands to benchmark your model, then one step to submit the result.
-
Install the CLI
pip install "synthbench-eval[openai] @ git+https://github.com/DataViking-Tech/SynthBench.git"Installs the SynthBench CLI and evaluation framework from GitHub. Requires Python 3.10+. (The synthbench name on PyPI is an unrelated project.)
-
Run the benchmark
synthbench run --dataset opinionsqa --provider your-providerReplace
your-providerwith your adapter (e.g. openai, anthropic, openrouter). The CLI handles sampling, parsing, and metric computation, and writes a result JSON with per-question response distributions and aggregate scores. -
Submit the result JSON
Upload it (sign-in required), or fork DataViking-Tech/synthbench (opens in a new tab), copy the file into
leaderboard-results/and open a pull request. -
Validation and listing
CI validates the JSON schema and recomputes all aggregate scores from your per-question data. Reported scores that don't match the recomputed ones are rejected. Once the submission is merged, the site rebuilds automatically and your model appears on the leaderboard.
Submission requirements
What a valid submission must include, and what is optional.
Required
- Valid JSON matching the synthbench result schema
- Per-question human_distribution must match ground truth (hash-verified)
- Per-question model_distribution must sum to 1.0
- Aggregate scores must be recomputable from per-question data
- Minimum 100 questions evaluated
- benchmark field must equal "synthbench"
Optional
- Temperature and template metadata (encouraged for reproducibility)
- Demographic breakdown (only available for SubPOP dataset)
- Multiple runs for confidence intervals (recommended: 3+)
Adding a new provider
To benchmark a provider or product that SynthBench doesn't support yet, write a small adapter. The harness handles sampling, parsing, and metrics.
- 1
Subclass Provider
Create a new file in
src/synthbench/providers/and subclassProviderfromproviders/base.py. Implementasync respond()and thenameproperty. - 2
Wire distribution output (optional)
If your provider returns logprobs or native probabilities, override
get_distribution()and setsupports_distributiontoTrue. Otherwise the base class samplesrespond()to build an empirical distribution. - 3
Register in the PROVIDERS dict
Add a name -> dotted path entry in
src/synthbench/providers/__init__.pyso the CLI can load it via--provider <your-name>. - 4
Test end-to-end
Run
synthbench run --provider <your-name> --dataset opinionsqaagainst a small question slice, then submit the result JSON as usual.
from synthbench.providers.base import Provider, Response, PersonaSpec
class MyProvider(Provider):
@property
def name(self) -> str:
return "my-provider"
async def respond(
self,
question: str,
options: list[str],
*,
persona: PersonaSpec | None = None,
) -> Response:
# Call your API, pick an option from `options`
choice = await call_my_api(question, options, persona)
return Response(selected_option=choice) See ollama.py for a compact example (HTTP-backed, sampling-only), or raw_openai.py for a logprob-based adapter that overrides get_distribution().
FAQ
Common questions about running benchmarks and submitting results.
How long does a benchmark run take?
Core suite (200 questions, 30 samples each) takes about 1 hour. Full suite (684+ questions) takes about 6 hours. Cost depends on your provider.
Can I benchmark a closed-source model?
Yes. SynthBench works with any model that accepts text prompts. Use the provider adapter interface or the OpenRouter integration.
How are scores validated?
CI recomputes all aggregate scores from your per-question data. If reported scores don't match recomputed scores, the PR is rejected.
Can I submit results from my own conditioning or persona approach?
Yes. Include your prompt template and any conditioning metadata. The leaderboard shows provider and configuration.
What datasets can I benchmark against?
The SynthBench Index averages OpinionsQA (US adults), SubPOP (22 US subpopulations), GSS (US adults) and GlobalOpinionQA (138 countries); NTIA is scored too. The Datasets page lists question counts, coverage and the other registered datasets.
Submit a run
Run the benchmark locally and upload the result JSON, or open a pull request that adds the file to the repository.