Skip to content

community submissions

Submit a run

Run the frozen suite against your own local model, then submit the signed result bundle with one command. No account, no email, no signup — your submission is identified by an Ed25519 key generated on your machine. Complete reports publish after automated contract checks.

Your key is your identity

There is no signup. The first time you submit, the CLI generates an Ed25519 keypair at ~/.localbench/submitter_ed25519.pem and prints the public key. That key is your leaderboard identity: every bundle you submit is signed with it. Back the file up — there is no password reset, and a new key is a new identity.

You can optionally attach a display name (2–40 characters, ASCII letters and digits only — no accents or parentheses — starting and ending with a letter or digit; spaces, ., _, ', and - allowed in between — no URLs). Accepted rows show it only in details as “submitted as X — unverified”. Display names are plain-text credit, not unique handles or the primary board identity.

The loop

1. Install the CLI

Tested with local-bench-ai 0.4.11. Prerequisites:

  • Python 3.11+
  • llama.cpp server binary
  • Docker for the coding sandbox
  • Linux, or Windows with WSL2, for Agentic
  • Tokenizer access for --hf-model-id (online auto-cache, or pre-cache before --offline)

With --hf-model-id, an online ranked run automatically pre-caches it before offline introspection. Run localbench cache-tokenizer <hf-model-id> first when using --offline.

Windows client with a Docker engine inside WSL2? Follow the Windows + WSL-engine coding sandbox guide; use the WSL adapter IP, never localhost. The Agentic axis on Windows runs inside a managed WSL appliance — a pinned distribution the CLI provisions and verifies itself. localbench setup-agentic prewarms it; localbench setup-agentic --reprovision rebuilds an appliance a previous run has already used.

For the one-command path, put llama-server on PATH from llama.cpp releases or pass --llama-server-path.

pip install "local-bench-ai[hf]"

The package name is local-bench-ai — plain pip install localbench installs an unrelated third-party package. Use the exact command above.

Installs the localbench command. Working from source instead? Clone github.com/local-bench/local-bench and pip install -e cli.

2. Quick local check

localbench bench qwen3-8b --quant Q4_K_M --allow-untrusted-code

--allow-untrusted-code runs the benchmark's coding tasks in the pinned sandbox — see Methodology.

bench resolves the catalog slug and quant, verifies pinned GGUF hashes, starts llama-server with the deterministic config, and prints a scorecard. This one-shot form is a local preview without ranked identity guarantees; it is not the command used for a ranked submission.

For a non-interactive quick check, add --yes, --accept-suite-terms, and --no-submit.

In a hurry? Add --max-items 1 to exercise the full pipeline — server launch, sandbox, scoring, evidence — on one item per benchmark in minutes. The run is marked partial and cannot enter the ranking.

3. Ranked submission

Fetch the ranked suite once, run the advanced identity-pinned benchmark, then submit the finished run:

localbench fetch-suite --site https://local-bench.ai --suite suite-v1-full-exec-6axis-v1 --accept-suite-terms
localbench bench --runtime llama.cpp --server-bin <path-to-llama-server> --model-file <path-to-qwen3-8b-q4-k-m.gguf> --model-id qwen3-8b --hf-model-id Qwen/Qwen3-8B --lane bounded-final-v2 --profile auto --tier standard --ctx 32768 --seed 1234 --allow-untrusted-code --out runs/bench/qwen3-8b

bench runs the coding verifier automatically; on older CLIs run: localbench code --pending-run <run-dir> --suite-dir <suite-dir> --allow-untrusted-code

localbench submit run --run runs/bench/qwen3-8b --base-model Qwen/Qwen3-8B
Advanced route: bring your own server

Use this manual route for vLLM, LM Studio, custom llama.cpp rigs, or any server you already launched yourself. It is the publishable fallback when the catalog quant lacks artifact pins or a pasted repo run is local-only.

A. Fetch the frozen suite

localbench fetch-suite \
  --site https://local-bench.ai \
  --suite suite-v1-full-exec-6axis-v1 \
  --accept-suite-terms

suite-v1-full-exec-6axis-v1 is the current ranked suite: it measures six axes; five are weighted in the Index, and tool-calling is reported as an unweighted diagnostic.

This downloads the sha256-pinned item sets, verifies them against the release manifest, and caches them locally. --accept-suite-terms acknowledges the upstream benchmark licenses listed under benchmark sources & licenses.

B. Prepare your model's tokenizer

Ranked runs pass --hf-model-idso the harness can introspect your model's chat template. That introspection is deliberately offline (the run never phones home mid-benchmark). When online, the CLI checks the local cache first and automatically downloads only the required tokenizer/template files when they are missing, records the resolved revision, then retries introspection from the local cache. To pre-warm the cache, or before using --offline, run:

localbench cache-tokenizer <the-model's-HF-repo>

This downloads exactly what introspection needs, verifies the tokenizer loads offline, and prints the resolved revision and chat-template hash. Use the tokenizer and tokenizer_config files from that Hugging Face snapshot in step 4. Use the original model's repo (the transformers-format one), not the GGUF repo. Gated repos (for example google/gemma-*) additionally need a one-time hf auth login after accepting the license on huggingface.co — or use an ungated mirror such as the unsloth/ upload of the same model. No exact non-GGUF repo exists for your model? Skip this step and pass --gguf-repo-only instead of --hf-model-id in step 4 — the run is then labeled basic identity (tokenizer/template digests null).

C. Run against your server

Already serving the model yourself (LM Studio, ollama, vLLM, anything OpenAI-compatible)? Use run instead:

localbench run \
  --endpoint http://localhost:8080/v1 \
  --model MaziyarPanahi/Qwen3-8B-GGUF:Q4_K_M \
  --hf-model-id Qwen/Qwen3-8B \
  --lane bounded-final-v2 \
  --profile auto \
  --tier standard \
  --publishable \
  --sampler-temperature 0 \
  --sampler-top-k 1 \
  --sampler-seed 1234 \
  --determinism-policy gpu-greedy-single-slot-v1 \
  --model-file <path-to-qwen3-8b-q4-k-m.gguf> \
  --model-family Qwen3 \
  --quant-label Q4_K_M \
  --model-format gguf \
  --tokenizer-file ~/.cache/huggingface/hub/models--Qwen--Qwen3-8B/snapshots/<revision>/tokenizer.json \
  --chat-template-file ~/.cache/huggingface/hub/models--Qwen--Qwen3-8B/snapshots/<revision>/tokenizer_config.json \
  --runtime-name llama.cpp \
  --runtime-version <llama.cpp-build> \
  --kv-cache-quant f16 \
  --ctx-len-configured 32768 \
  --parallel-slots 1 \
  --out runs/qwen3-8b-q4-k-m.json

The ranked board uses the bounded-final protocol: every model gets the same generated-token budget per item, and --profile auto reads your model's own chat template to decide whether it thinks (bounded) or answers directly. A run must pin its sampler settings to be publishable (--publishable requires temperature 0, top-k 1, and a seed); the CLI warns up front — before any GPU time is spent — if your flags make the run unpublishable. Keep the .json extension on --out — the campaign directory is derived from it. Want these pre-filled for your VRAM and model? The recipe builder on the home page generates this exact sequence.

suite-v1-full-exec-6axis-v1 is the current ranked suite. suite-v1-static-exec-5axis-v1 and suite-v1-static-core-diag-v1 are static or diagnostic suites; they preserve evidence but do not produce rankable rows.

D. Submit manually

localbench submit run --run runs/qwen3-8b-q4-k-m.json

One command takes a finished run all the way in: it packs the signed bundle, requests a submission ticket (signing a proof-of-possession challenge with your key), uploads the bundle, completes the submission, and prints your submission id and status. The suite is auto-resolved from your fetch-suite cache; --suite-dir overrides it. --run accepts the run JSON or its campaign directory; add --display-name once to set your credit line (remembered in ~/.localbench/submit.json).

Bundles are content-addressed by sha256, so duplicates are detected: re-running submit run with a bundle that is already in tells you its existing submission id instead of creating a new row, and a bundle whose payload matches an earlier submission is flagged for the reviewer. If a ticket expires mid-flight, a fresh one is minted automatically. The public status page is local-bench.ai/submission?id=<submission_id>. You can also check from the CLI:

localbench submit status <submission_id> --site https://local-bench.ai

What happens after you submit

A complete bundle publishes after automated schema, protocol, suite-pin, size, and duplicate-retry checks. The service preserves the submitted identity, scores, protocol, and evidence and computes the common composite. Publication does not mean the project independently reproduced the run. Demonstrated problems can cause a row to be suppressed after publication.

What you can submit

Runs with the complete headline profile enter the common ranking. Incomplete legacy profiles remain diagnostic.

  • The complete headline profile — every required headline axis, suite pin, artifact identity, and evidence record is present.
  • Legacy complete protocols — preserved on their original protocol scale for history and never mixed into the active ranking.
  • Static-Core diagnostic suite-v1-static-core-diag-v1, no Agentic and no sandboxed Coding. It is displayed as diagnostic and never ranked.

What uploads

A signed bundle (64 MiB cap) containing the manifest, item records, the original run JSON, prompt/response transcripts, suite hashes, and runtime metadata. The upload goes directly to object storage via a short-lived URL; the database stores metadata and status only.

What stays local

Model weights, API keys, server credentials, and your private signing key — the server only ever sees your public key and signatures. Submissions publish immediately, so do not submit a run if the transcript contains anything you are unwilling to make public.

Public evidence does not prove model identity, hardware identity, or runtime honesty. The board publishes complete reports, makes their evidence inspectable, and suppresses demonstrated problems — see the methodology page for what each label does and does not claim.