EvaluationSettings is the grading config half on its own: build it once, then run it against any dataset by id, instead of every dataset carrying its own copy.
Since the judge-scorer unification, an evaluation-settings record IS the judge rubric + offline profile of an LLM Judge Scorer - the unified entity at client.monitor.judge_scorers, which also carries the optional online (live-traffic) profile. This surface keeps working unchanged (it now emits a default-hidden DeprecationWarning on first use); prefer judge_scorers for new code so both profiles live in one place - client.monitor.judge_scorers.builder(...) takes the same snake_case parameters as the builder below, plus tool_context, thresholds, and the live profile in the same call - and manage everything from the dashboard’s Scorers page.
Passing a grader id is entirely optional (scorer_id is the current name; evaluation_settings_id is the pre-consolidation alias for the same id). Omit it and a run grades against the dataset’s own bundled config, exactly as if this feature didn’t exist. On self-host, additional_scorer_ids=[...] adds up to 4 extra judges that each score every result too - the primary keeps the rating column, extra verdicts land in judge_scorer_results per row (see the quickstart). A third option is scorer_group_id, which grades the run with every scorer in a scorer group - mutually exclusive with scorer_id/additional_scorer_ids; the group supersedes them.
Programmatic builder
builder() parameters
publish() sends the config to AgentX and returns an EvaluationSettings object with .id, which you pass as scorer_id (or the alias evaluation_settings_id) to client.evaluations.run().
With number_of_requests above 1, runs report per-case repetition spread as caseStatistics -
see Repetition statistics.
Configuring the judge
judge_prompt/judge_model apply to every scoring path, native dashboard runs and SDK/custom-agent runs alike:
judge_prompt is a raw template: {input}, {output}, {expected}, and {context} (the retrieval context, for RAG-style prompts) are substituted in. Everything else the judge needs - the agent’s execution trajectory, the trajectory’s tool definitions, the per-question judge_guideline, and the acceptance/rejection/evaluation criteria - is appended automatically after it, so a custom prompt can restructure the grading philosophy without ever losing that context. Omit judge_prompt to keep the default rubric, or judge_model to keep the default (gpt-5.6-luna).
When a case has no expected_results, the judge goes reference-free: the default prompt swaps to a reference-free sibling, and a custom prompt gets a placeholder substituted for {expected} that defuses its ground-truth rules. A scorer marked requires_expected instead skips such a case entirely - the row is stored with rating null and an explicit reason.
Running against a dataset
evaluation_settings_id can be reused across as many dataset_ids as you want. Build it once, grade any dataset with it going forward.
Fetching an existing config
Next steps
Build Dataset
Create the test cases this config will grade
Quick Start
Run an evaluation end to end

