Skip to main content

Contract-driven evaluation of software-development orchestrator models

Project description

Orchestrator Evaluation Harness

Installable, contract-driven comparison of two software-development orchestrator models. It supports OpenRouter and other OpenAI-compatible Chat Completions endpoints, including different endpoints for the two candidates and the coding worker.

The package contains the v2 contract gateway, deterministic Oracle arm, live worker arm with replay cassettes, six validated task/scenario pairs, budget ledger, paired statistics, Markdown/JSON reporting, and neutral evidence-bundle export. It contains no historical results.

Install

Build locally:

python3 -m build
python3 -m pip install dist/orchestrator_eval_harness-0.2.0-py3-none-any.whl

Or install the source checkout:

python3 -m pip install .

Create an editable configuration:

orchestrator-eval --output experiment.json init-config

Configure endpoints and models

Credentials are never stored in JSON. api_key_env names the environment variable that contains the bearer token. Set it to null for an endpoint that does not require authentication.

{
  "experiment_id": "candidate-a-vs-candidate-b",
  "endpoints": {
    "openrouter": {
      "url": "https://openrouter.ai/api/v1/chat/completions",
      "api_key_env": "OPENROUTER_API_KEY",
      "provider_routing": true,
      "include_usage": true,
      "headers": {
        "HTTP-Referer": "https://localhost/orchestrator-eval",
        "X-Title": "Orchestrator Evaluation Harness"
      }
    },
    "local": {
      "url": "http://127.0.0.1:1234/v1/chat/completions",
      "api_key_env": null,
      "provider_routing": false,
      "include_usage": false,
      "headers": {}
    }
  },
  "orchestrators": {
    "candidate_a": {
      "endpoint": "openrouter",
      "model": "vendor/model-a",
      "input_price_per_token": 0.0000001,
      "output_price_per_token": 0.0000004,
      "reasoning": {"enabled": true}
    },
    "candidate_b": {
      "endpoint": "local",
      "model": "model-b",
      "input_price_per_token": 0,
      "output_price_per_token": 0,
      "reasoning": {}
    }
  },
  "worker": {
    "endpoint": "local",
    "model": "coding-worker",
    "input_price_per_token": 0,
    "output_price_per_token": 0,
    "reasoning": {}
  }
}

Keep the remaining limits and statistical parameters from the generated template. Exactly two orchestrators are required. Static authorization, cookie, and API-key headers are rejected; secrets must come from environment variables.

provider_routing: true enables OpenRouter provider discovery and pins each model to its discovered provider for scored calls. Generic endpoints should normally use false. include_usage: true sends OpenRouter's explicit usage request field; leave it false for generic OpenAI-compatible servers.

Run

Offline checks require no credentials:

orchestrator-eval --config experiment.json validate
orchestrator-eval --config experiment.json power
orchestrator-eval --config experiment.json --results-dir /tmp/eval-dry dry-run

Live evaluation:

export OPENROUTER_API_KEY="..."
orchestrator-eval --config experiment.json run

By default, results are written to ./results/<experiment_id>/. Use --results-dir to choose another location. Stages are resumable:

orchestrator-eval --config experiment.json smoke
orchestrator-eval --config experiment.json screen
orchestrator-eval --config experiment.json e2e
orchestrator-eval --config experiment.json report

Custom task/scenario sets can be supplied together:

orchestrator-eval \
  --config experiment.json \
  --tasks-dir ./my-tasks \
  --scenarios-dir ./my-scenarios \
  validate

Both directories must contain matching unique id and class fields.

Analyze an existing run

report recomputes the paired statistics and writes report.json plus report.md. It does not call a model:

orchestrator-eval \
  --config experiment.json \
  --results-dir ./results/candidate-a-vs-candidate-b \
  report

Export the raw run rows, screening rows, configuration, report, ledger, provider pins, cassette statistics, and integrity hashes into one neutral JSON file:

orchestrator-eval \
  --config experiment.json \
  --results-dir ./results/candidate-a-vs-candidate-b \
  bundle

What the evaluation measures

The primary orchestration arm uses a deterministic Oracle worker, isolating delegation, ownership, verification, correction, and finalization behavior. The secondary system arm uses the configured coding worker behind a cassette store. Provider failures are recorded as infra_error and excluded from model success rates.

Every manager tool call is locally schema-validated. Delegated paths must be authorized and disjoint, acceptance checks must name manifest checks, worker test claims are checked, and finalization requires fresh harness-issued verification evidence.

The decision rule requires the configured minimum number of complete pairs, a paired bootstrap interval excluding zero, the configured practical effect size, and exact McNemar significance.

Verify a distribution

python3 scripts/verify_distribution.py dist/*.whl dist/*.tar.gz

The verifier rejects archives containing result directories, workspaces, cassettes, generated reports/bundles, caches, or secret-looking API keys.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

orchestrator_eval_harness-0.2.0.tar.gz (66.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

orchestrator_eval_harness-0.2.0-py3-none-any.whl (63.3 kB view details)

Uploaded Python 3

File details

Details for the file orchestrator_eval_harness-0.2.0.tar.gz.

File metadata

File hashes

Hashes for orchestrator_eval_harness-0.2.0.tar.gz
Algorithm Hash digest
SHA256 15b6fb0ff9c82e8c556dbf6a4f77fbb0f0b350dbb229a16fe25c28f595c34bad
MD5 3fc3c6a42aaae540e66f8c564a95d417
BLAKE2b-256 70c6d65ee6392d0cdb164c5fa121321e2beda132c6211636fc08255782ff8a11

See more details on using hashes here.

File details

Details for the file orchestrator_eval_harness-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for orchestrator_eval_harness-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 618c1cf1fa12a77364da58691972f983c67a194956b2c47709dcbbd2530b26df
MD5 4b7a6ad6146c54bf56bf37916a0e97fa
BLAKE2b-256 0ae24880013df2bf2faa6505261c8eb46012b6852e5d6b2dc6d33f42d4a8c596

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page