Jobs are submitted through the EvalHub API / CLI using a name + model + benchmarks[] body (same shape as evalhub eval run --config):
name: inspect-petri-sycophancy-001
model:
url: https://maas.example.com/v1
name: microsoft-phi-4
auth:
secret_ref: maas-creds
benchmarks:
- id: inspect/petri-sycophancy
provider_id: inspect
parameters:
auditor_model: gpt-oss-20b
judge_model: deepseek-r1-distill-qwen-14b
max_samples: 5
max_turns: 20
Inside the job pod, EvalHub flattens each benchmark into an adapter JobSpec (provider_id, benchmark_id, model, parameters). The tables below describe those fields.
Model names are passed as-is — bare (claude-opus-4-7, granite3.3) or org/model (ibm-granite/granite-3.3-8b-instruct). Do not add provider prefixes; the adapter selects the API from credentials.
Create a Secret with an api-key key and reference it from the job via model.auth.secret_ref. Plaintext API-key parameters (api_key, target_api_key, and other *_api_key fields) are for local or development use only — do not include them in persisted Kubernetes/API job submissions. Prefer model.auth.secret_ref or environment-based credentials (OPENAI_API_KEY, ANTHROPIC_API_KEY) for submitted jobs:
Terminal window
kubectlcreatesecretgenericmaas-creds\
-n<namespace>\
--from-literal=api-key="$MAAS_API_KEY"\
--dry-run=client-oyaml|kubectlapply-f-
model:
url: https://maas.example.com/v1# OpenAI-compatible base URL
name: microsoft-phi-4
auth:
secret_ref: maas-creds
EvalHub mounts the Secret for the sidecar; the adapter resolves api-key via resolve_model_credentials() into OPENAI_API_KEY. See the Model authentication guide.
Global API key for OpenAI-compatible endpoints (OPENAI_API_KEY). Local/development only — do not include in persisted Kubernetes/API job submissions; use model.auth.secret_ref or env-based credentials instead. Not required for unauthenticated vLLM.
null
target_base_url
string
Override endpoint URL for the target when it differs from model.url
null
target_api_key
string
API key for the target endpoint when different from api_key. Local/development only — do not include in persisted job submissions; prefer model.auth.secret_ref or env-based credentials.
OpenAI-compatible endpoint for the scenarios model. Mapped to OPENAI_BASE_URL (or OLLAMA_BASE_URL) in the bloom scenarios subprocess env before that step runs.
null
scenarios_api_key
string
API key for the scenarios endpoint. Mapped to OPENAI_API_KEY in the bloom scenarios subprocess env before that step runs.
Override seed selection: tags:sycophancy, id:seed_name, id:seed1,seed2, inline text, or a path. When unset, the benchmark default seed tag is used.
null
judge_dimensions
string
Override judge dimensions: tags:safety, a dimensions directory path, or dimension names. Defaults to all 38 built-in dimensions.
null
max_turns
integer
Maximum auditor turns per scenario
30
enable_rollback
boolean
Allow the auditor to restart from a prior checkpoint
true
realism_filter
boolean | number
Filter auditor outputs by realism score. A boolean enables or disables filtering; a numeric value sets the realism-score threshold (for example 0.6). Experimental.
false
target_tools
string
Tool-creation mode: synthetic (default), fixed, or none
Task spec override. Required for inspect/custom. Accepts a Python import path (inspect_evals/mmlu), file path (./my_task.py@my_task), or Petri task (inspect_petri/audit).
null
sandbox
string
Execution sandbox: none, docker, or k8s. Use docker for tasks that need code-execution isolation (for example swe-bench, humaneval) when Docker is available.
Standard inspect-evals benchmarks run without a Docker sandbox inside Kubernetes pods (code executes in the adapter container). This is the only sandbox available in typical K8s deployments. Override with parameters.sandbox if you have a different provider configured (for example "docker" for local development with Docker Engine):
Some inspect-evals benchmarks (for example humaneval, mmlu) download datasets from the HuggingFace Hub. The adapter reads an hf-token secret mounted at /var/run/secrets/model/hf-token and injects it as HF_TOKEN automatically. Mount the secret in your EvalHub provider configuration if gated datasets are required.