List compare

The ONLY valid arm-vs-arm test: it pairs the two models on the items BOTH completed, and answers rescue and damage counts with an exact-McNemar p.

GET /v1/benchmark/compare

Addresshttps://api.hanzo.ai/v1/benchmark/compare
MethodGET
Operationget_benchmark_compare
AuthAuthorization: Bearer $HANZO_API_KEY

The ONLY valid arm-vs-arm test: it pairs the two models on the items BOTH completed, and answers rescue and damage counts with an exact-McNemar p.

Pairing is what prevents the subset artifact — comparing one model's easy subset against another's full run — so n_common, not either arm's own coverage, is the number to read this by.

Both a and b are required. The benchmark defaults to gpqa_diamond.

Request

3 fields.

FieldInTypeRequiredDescription
benchmarkquerystring—Benchmark is the catalog id to compare on, defaulting to gpqa_diamond.
aquerystringyesA is the first model id.
bquerystringyesB is the second model id.

Response

StatusBodyMeaning
200benchmark.pairingok
defaultproblem-detailsrefused

200 body — 10 fields.

FieldInTypeAlwaysDescription
abodystring—A is the first model id.
a_correctbodyinteger (int64)—ACorrect is how many of those common items A got right.
bbodystring—B is the second model id.
b_correctbodyinteger (int64)—BCorrect is how many of those common items B got right.
benchmarkbodystring—Benchmark is the catalog id the two arms were compared on.
mcnemar_pbodynumber (double)—McnemarP is the two-sided exact binomial p on the discordant pairs.
n_commonbodyinteger (int64)—NCommon is how many items BOTH arms completed.
net_a_minus_bbodyinteger (int64)—NetAMinusB is the two rescue counts subtracted — A's advantage in items.
rescue_a_over_bbodyinteger (int64)—RescueAOverB is how many items A got right and B got wrong.
rescue_b_over_abodyinteger (int64)—RescueBOverA is how many items B got right and A got wrong.

Failure carries the platform error shape — see Errors.

Examples

hanzo benchmark compare \
  --a <a> \
  --b <b>
import { Configuration, BenchmarkApi } from 'hanzoai';

const api = new BenchmarkApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getBenchmarkCompare({ a: 'a', b: 'b' });
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import BenchmarkApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = BenchmarkApi(client).get_benchmark_compare(a='a', b='b')
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.BenchmarkAPI.GetBenchmarkCompare(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::apis::{configuration::Configuration, benchmark_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = benchmark_api::get_benchmark_compare(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.BenchmarkApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new BenchmarkApi(client).getBenchmarkCompare();
curl https://api.hanzo.ai/v1/benchmark/compare?a=%3Ca%3E&b=%3Cb%3E \
  -H "Authorization: Bearer $HANZO_API_KEY"

Tool benchmark, op get_benchmark_compare — POST the JSON-RPC envelope to https://api.hanzo.ai/v1/mcp.

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "benchmark",
         "arguments": {
           "op": "get_benchmark_compare",
           "input": {
             "a": "<a>",
             "b": "<b>"
           }
         }
       }
     }'

Benchmark API · All Hanzo APIs · Interactive reference

Was this page useful?