Prepare → run → score → diff
Canonical manifests, artifacts, results, identity, validation, and producer/scorer boundaries.
Run the benchmark with an agent, understand the supported workflows, and publish scored results.
omni-bench is a framework, not a model runner: hosts own inference, while the framework owns datasets, identity, measurement, scoring, parity, and publication. The public contract is 0.6.0.
The repository ships one maintained skill covering every benchmark family and the complete artifact pipeline. Install it into the project where your agent will implement or test a producer.
Canonical manifests, artifacts, results, identity, validation, and producer/scorer boundaries.
Run exact experimental quick Tasks with omni-bench qualify. Public runs produce PR-ready Markdown and a 1200×630 PNG card; they never mix with full leaderboard populations.
Transcriber and StreamingTranscriber adapters, paced audio chunks, WER/CER, latency, and RTFx.
Decode throughput, TTFT/ITL, shared-prefix cache scenarios, and host-reported backend timing.
Strict single-turn JSON call generation on pinned BFCL v4 simple_python prompts. This static task does not claim native tool APIs, execution, agent behavior, or official BFCL leaderboard equivalence.
FLORES+ chrF++, final-answer exact/accuracy, prompt-strict instruction following, and dataset gates.
ActivityDetector and StreamingActivityDetector adapters, AVA-Speech preparation, DCF/miss/false alarm, RTFx throughput, decision latency, and stream integrity.
JCS identity equality, implementation comparisons, signed deltas, timeline parity, fixtures, and conformance checks.
mkdir -p .agents/skills/omni-bench
curl -fsSL https://raw.githubusercontent.com/beshkenadze/omni-bench/main/.agents/skills/omni-bench/SKILL.md \
-o .agents/skills/omni-bench/SKILL.mdProject-local installation keeps the instructions versioned with your work. Agents that support the .agents/skills convention discover it automatically; otherwise point the agent at SKILL.md explicitly.
Every family is reviewed across six independent dimensions. RTFx and tokens/s are throughput, never latency; batch-only is an adapter limitation, not proof that latency is irrelevant.
Correctness against the task reference or protocol.
Work completed per unit time: RTFx, tokens/s, and cache speedup.
Delay between named events with a declared clock and aggregation.
Pacing, chunking, endpointing, cache continuity, and backpressure.
Memory and other declared resource high-water marks.
Evidence that implementations preserve comparable output.
VAD reports DCF, miss, false alarm, F1, RTFx, first-speech and pooled speech-boundary decision latency, finalization, pacing drift, consumer lag, and chunk completion. RTFx remains throughput, never latency.
App Bench pairs an iOS 17 execution agent with a local Mac/Linux/WSL controller. The phone runs only compile-time registered text-generation or ASR providers while foreground and Armed. Use the normal project skill and exact Registry quick Tasks; device_control_version: 1.0.0 is transport, while the benchmark contract remains 0.6.0.
omni-bench device serve --advertise-host 192.168.1.10 --json
omni-bench device list --json
omni-bench device qualify ios.DEVICE \
--candidate mlx.model \
--task qa.gsm8k.test.quick.v1 \
--measurement-profile text_generation.streaming_single.v1 \
--run-profile '{"delivery":"streaming","chunk_ms":20,"warmup_samples":0,"concurrency":1,"family_parameters":{…}}' \
--jsonThe platform API key stays on the controller. Inputs are downloaded and SHA-256 verified before inference; phone clocks and RSS own the measurements. Raw Evidence is scored by the trusted Python service into a private Result visible in My Runs, then publication is explicit. Controller or network time is never reported as model latency.
Score locally, then publish the resulting result.json with a personal API key. The steps below cover the request and error contract.
API keys live on your profile. Create one, copy it once (it is shown a single time), and keep it secret — it is your upload credential. The same profile includes My Runs: a searchable, filterable inventory where you can remove runs you own.
Send the bare result document (the exact shape the scorer emits, validated .strict()) to POST /api/v1/results with your key in the x-api-key header. The body must carry schema_version — only 0.6.0 is accepted today.
curl -X POST https://omni-bench.example/api/v1/results \
-H "x-api-key: $OMNI_BENCH_API_KEY" \
-H "content-type: application/json" \
--data-binary @result.jsonThe request body is validated against the versioned Result JSON Schema (the contract the scorer and the API share). Its TypeScript type and Zod validator are generated from that schema, so the API can't drift from the data.
Uploads are PUBLIC by default. To stage a result as private, add the header x-omni-visibility: private.
201 Created
On success the API returns the new result id and its identity key (the content-addressed key that groups re-scores of the same tuple).
{
"resultId": "res_01J…",
"identityKey": "sha256:8bbc0ff…"
}schema_version, or a document that fails schema validation (the response lists the Zod issues).After every source result.json has been uploaded, send the exact core-produced analysis-report.json to POST /api/v1/analysis. The API resolves the Analysis Profile and parameter schema from the pinned Registry, then binds every ordered input digest to a readable Result. It does not recompute the observations.
curl -X POST https://omni-bench.example/api/v1/analysis \
-H "x-api-key: $OMNI_BENCH_API_KEY" \
-H "content-type: application/json" \
--data-binary @analysis-report.jsonPublic reports require public input Results. Add x-omni-visibility: private to stage an analysis over private evidence, then publish the Results before calling POST /api/v1/analysis/:id/publish. The response links to its detail page; GET /api/v1/analysis/:id exports the exact immutable JSON.