Configuration files

project.json

Project manifest. Controls metadata and filesystem layout.

Key fields:

Field Purpose
name, author, date, location Study metadata
version.created aicr version that created the project
version.compatible Minimum aicr version required to run
version.last_run Version that last ran the project (updated automatically)
edition.read_only Set to true by aicr lock to prevent further runs
project.fs Filesystem layout — override default directory/file locations

experiment.json

Controls how the experiment executes.

Field Purpose
iterations.set Number of independent sets
iterations.rep Repetitions per (set × deployment × prompt)
timing.* Pause delays (ms) at set, prompt, rep, and deployment levels
seed.run Shuffle seed for run order
seed.content Shuffle seed for content order
parallel.max_concurrency Maximum concurrent requests
parallel.deployment / rep / prompt Per-level parallelism flags
retry.max_attempts Retry count for failed requests
retry.initial_delay_s, retry.max_delay_s Exponential backoff bounds
log_level Console verbosity: verbose, info (default), warning, error

Both log files always receive all levels regardless of log_level.

deployments.json

Array of deployment arms — the LLM endpoints to test in parallel.

Each entry specifies:

Field Purpose
label Identifier used in output files (e.g. gpt-4o-mini, claude-sonnet)
mode Executor type: AzureModeApi, AzureAgentApiExecutor, or StandardOpenAI
connection Endpoint reference and auth fields
parameters Fully parameterised request body (model, temperature, max_tokens, etc.)
unsupported_parameters Parameters that are ignored or rejected by this endpoint

endpoints.json and secrets.json

These two files are always gitignored. Copy from the committed templates and fill in real values before running.

endpoints.json — endpoint URLs, auth structure, and field contracts. Shared with anyone who needs to run the harness.

secrets.json — API key values only. Goes through a secrets manager, never shared in plain text.

Azure deployments using DefaultAzureCredential do not need secrets.json — authentication is handled by az login.

endpoints.json example:

{
  "endpoints": {
    "my_endpoint": {
      "url": "https://example.com/api",
      "auth": { "type": "api_key", "key": "my_key", "header": "Authorization", "scheme": "Bearer" },
      "fields": []
    }
  }
}

secrets.json example (the key name must match the key value in endpoints.json):

{
  "keys": {
    "my_key": "sk-..."
  }
}

Deployment modes

The mode field in each deployments.json entry controls which executor is used.

Mode Use when
StandardOpenAI Any OpenAI-compatible API — OpenAI, Anthropic, Mistral, local servers
AzureModeApi Azure OpenAI via Azure AI Foundry (ChatCompletions API)
AzureAgentApi Azure Agent API — requires an Agent deployment, not a ChatCompletions deployment

StandardOpenAI — authenticates via API key from secrets.json. The model is set through parameters["model"]. The endpoint URL comes from endpoints.json. Use this for any OpenAI-compatible provider.

AzureModeApi — authenticates via DefaultAzureCredential (run az login first). Requires a deployment field in the connection config pointing to the Azure deployment name. Internally wraps the same request format as StandardOpenAI.

AzureAgentApi — authenticates via DefaultAzureCredential. Uses the Azure Agent API request/response format rather than ChatCompletions. Response content is extracted from output[].content[].text rather than choices[].message.content.

Both Azure modes (AzureModeApi and AzureAgentApi) will fail at startup with a credential error if az login has not been run or the credential has expired (DefaultAzureCredential). See Troubleshooting for auth error resolution steps.


This site uses Just the Docs, a documentation theme for Jekyll.