Skip to main content

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.

  1. 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.)

  2. Run the benchmark

    synthbench run --dataset opinionsqa --provider your-provider

    Replace your-provider with 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.

  3. 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.

  4. 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. 1

    Subclass Provider

    Create a new file in src/synthbench/providers/ and subclass Provider from providers/base.py. Implement async respond() and the name property.

  2. 2

    Wire distribution output (optional)

    If your provider returns logprobs or native probabilities, override get_distribution() and set supports_distribution to True. Otherwise the base class samples respond() to build an empirical distribution.

  3. 3

    Register in the PROVIDERS dict

    Add a name -> dotted path entry in src/synthbench/providers/__init__.py so the CLI can load it via --provider <your-name>.

  4. 4

    Test end-to-end

    Run synthbench run --provider <your-name> --dataset opinionsqa against a small question slice, then submit the result JSON as usual.

src/synthbench/providers/my_provider.py
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.