Update an evaluation suite
PATCH /v1/prompt-eval-suites/{prompt_eval_suite_id}
| Property | Value |
|---|---|
| Operation | update_prompt_eval_suite |
| Group | Prompt evaluations and experiments |
| Scope | prompts:write |
| Route class | control |
| Idempotency | No Idempotency-Key |
| Audit | Audited prompts.prompt_eval_suite.update (mutation) |
| Released in | 1.55.0 |
| Phase 0 host | Served (the hosted api pins 1.65.0) |
Replaces the named fields of a suite at the revision If-Match names (1.55.0); agent_id is fixed at create. An archived suite is refused with prompt_eval_suite_archived.
Request
Set VOCAL_API to the base URL of your API and VOCAL_API_KEY to an API key with the prompts:write scope (Authentication and keys). Replace each placeholder, such as agt_... or <name>, with your own value.
curl -X PATCH "$VOCAL_API/v1/prompt-eval-suites/pes_..." \
-H "Authorization: Bearer $VOCAL_API_KEY" \
-H 'If-Match: "1"' \
-H "Content-Type: application/json" \
-d '{}'const response = await fetch(`${process.env.VOCAL_API}/v1/prompt-eval-suites/pes_...`, {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.VOCAL_API_KEY}`,
'If-Match': '"1"',
'Content-Type': 'application/json',
},
body: JSON.stringify({}),
});
console.log(response.status, await response.text());import os
import requests
response = requests.patch(
f"{os.environ['VOCAL_API']}/v1/prompt-eval-suites/pes_...",
headers={
"Authorization": f"Bearer {os.environ['VOCAL_API_KEY']}",
"If-Match": '"1"',
},
json={},
)
print(response.status_code, response.text)Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
prompt_eval_suite_id | path | PromptEvalSuiteId | yes | The id of an evaluation suite: pes_ and the row's UUIDv7 in 26 Crockford base32 characters. Opaque and safe to log. |
if-match | header | string | yes | The revision the change was made against, quoted as the ETag returns it, or * to overwrite. |
Request body
Content type application/json, required: PromptEvalSuiteUpdateRequest.
| Field | Type | Required | Description |
|---|---|---|---|
description | string | no | An empty string clears it. |
gate | PromptEvalGateInput or PromptEvalGateNone | no | The publish gate the suite defines (1.63.0): the expectation types and must items that must hold, with the floor and margin of the judged items, which an Agent applies once its owner names the suite. Replaced whole; none removes it (1.63.0). The owner's alone while an Agent's gate names the suite. |
judge | StageRefInput | no | The model of the llm stage that reads each transcript of a simulated scenario with its rubric and returns a verdict per item, through a Vocal task template with structured output (section 9.1). Its results are advisory until it is checked against human labels, which 1.55.0 does not define and 1.63.0 does (calibration). Null until set; a run of a simulated scenario then refuses with prompt_eval_judge_required. |
name | string | no | A display name. |
repetitions | integer | no | |
simulator | StageRefInput | no | The model of the llm stage that plays the simulated callers, through a Vocal task template (section 9.1). Null until set; a run of a simulated scenario then refuses with prompt_eval_judge_required. |
Responses
| Status | Content type | Shape | Error codes |
|---|---|---|---|
200 | application/json | PromptEvalSuite | |
400 | application/json | ErrorEnvelope | invalid_request |
401 | application/json | ErrorEnvelope | unauthenticated |
403 | application/json | ErrorEnvelope | forbidden, org_suspended |
404 | application/json | ErrorEnvelope | not_found |
409 | application/json | ErrorEnvelope | prompt_eval_suite_archived |
412 | application/json | ErrorEnvelope | revision_mismatch |
422 | application/json | ErrorEnvelope | validation_failed |
428 | application/json | ErrorEnvelope | precondition_required |
429 | application/json | ErrorEnvelope | rate_limited |
500 | application/json | ErrorEnvelope | internal_error |
Fields of the 200 answer
The shape is PromptEvalSuite.
| Field | Type | Required | Description |
|---|---|---|---|
agent_id | AgentId | yes | The Agent whose versions the suite evaluates. |
archived_at | Timestamp or null | yes | When DELETE archived the suite, or null. An archived suite takes no write and no run (409 prompt_eval_suite_archived); its scenarios and runs stay readable. |
calibration | PromptEvalJudgeCalibration or null | no | When the suite's judge was last calibrated (1.63.0): the latest completed calibration, null before the first. Absent from an api before 1.63.0, which a reader treats as null. |
created_at | Timestamp | yes | |
description | string or null | yes | For reviewers; never sent to a model. |
gate | PromptEvalGate or null | no | The publish gate the suite defines (1.63.0): the expectation types and must items that must hold, with the floor and margin of the judged items, which an Agent applies once its owner names the suite. Null for none; absent from an api before 1.63.0, which a reader treats as null. |
id | PromptEvalSuiteId | yes | |
judge | StageRef or null | yes | The model of the llm stage that reads each transcript of a simulated scenario with its rubric and returns a verdict per item, through a Vocal task template with structured output (section 9.1). Its results are advisory until it is checked against human labels, which 1.55.0 does not define and 1.63.0 does (calibration). Null until set; a run of a simulated scenario then refuses with prompt_eval_judge_required. |
name | string | yes | A display name. |
object | "prompt_eval_suite" | yes | |
organization_id | OrganizationId | yes | |
repetitions | integer | yes | How many times a run repeats each scenario, because model replies vary. |
revision | integer | yes | Counts writes to the suite; returned as the ETag and required in If-Match. |
scenario_count | integer | yes | |
simulator | StageRef or null | yes | The model of the llm stage that plays the simulated callers, through a Vocal task template (section 9.1). Null until set; a run of a simulated scenario then refuses with prompt_eval_judge_required. |
updated_at | Timestamp | yes |