errorbar
@omnia-voice/mcp
errorbar プラットフォームを MCP ツールとして公開します。公開されているすべての API 操作(evals、judges/criteria、gates、ログ、データセット、エイリアス、ラベルセット、監査/証明、専用エンドポイント、トレーニング)を、Claude Code、Claude Desktop、Cursor、または任意の MCP クライアントから呼び出せます。
API 操作ごとに 1 つのツール、合計 76 ツールが、プラットフォームのルート契約から生成されています。入力は REST API が受け付けるものと同じフィールド名と大文字小文字で検証されます。レスポンスは API が返したそのまま(JSON はプリティプリント、エクスポートはテキスト)で返り、API 自身のエラーステータスとメッセージも含まれます。
インストール
npx -y @omnia-voice/mcp # or: npm i -g @omnia-voice/mcp && omnia-mcpOMNIA_API_KEY(設定 → API キー から取得するワークスペース API キー、sk_…)が必要です。キーには、エージェントに持たせたいスコープだけを付与してください。監視エージェントには read、evals を実行するエージェントには read + evals:write です。プラットフォームがこれらのスコープを強制し、各ツールの説明には必要なスコープが記載されています。
Claude Code
claude mcp add errorbar -e OMNIA_API_KEY=sk_… -- npx -y @omnia-voice/mcpClaude Desktop / Cursor / 任意の mcpServers 設定
{
"mcpServers": {
"errorbar": {
"command": "npx",
"args": ["-y", "@omnia-voice/mcp"],
"env": { "OMNIA_API_KEY": "sk_…" }
}
}
}Related MCP server: aman-mcp
フラグ
フラグ | 効果 |
|
|
| 課金対象の作業(eval の実行、トレーニング、専用キャパシティ、ジャッジ支援)を開始するツールを非表示にする |
| これらのツールのみ公開 |
| API ルート。デフォルトは |
ウォレットのクレジットを消費するツールは、説明に SPENDS MONEY と記載されており、readOnlyHint ではありません。読み取り専用以外の呼び出しの前に確認を求める MCP クライアントは、これらのツールについて確認を求めます。
ツール
ツール | 操作 | スコープ |
|
| read |
|
| read |
|
| aliases:write |
|
| aliases:write |
|
| read |
|
| read |
|
| platform:write |
|
| read |
|
| read |
|
| platform:write · 課金対象 |
|
| read |
|
| platform:write |
|
| read |
|
| evals:write |
|
| evals:write · 課金対象 |
|
| read |
|
| read |
|
| evals:write |
|
| evals:write |
|
| evals:write · 課金対象 |
|
| read |
|
| evals:write · 課金対象 |
|
| read |
|
| evals:write · 課金対象 |
|
| evals:write |
|
| evals:write |
|
| read |
|
| platform:write · 課金対象 |
|
| read |
|
| read |
|
| platform:write · 課金対象 |
|
| platform:write |
|
| read |
|
| read |
|
| platform:write |
|
| platform:write |
|
| read |
|
| evals:write · 課金対象 |
|
| read |
|
| read |
|
| read |
|
| evals:write |
|
| evals:write |
|
| read |
|
| read |
|
| read |
|
| read |
|
| platform:write |
|
| read |
|
| platform:write · 課金対象 |
|
| read |
|
| platform:write |
|
| read |
|
| platform:write · 課金対象 |
|
| read |
|
| platform:write · 課金対象 |
|
| read |
|
| platform:write |
|
| read |
|
| read |
|
| evals:write |
|
| evals:write |
|
| evals:write |
|
| read |
|
| evals:write |
|
| read |
|
| read |
|
| read |
|
| read |
|
| platform:write |
|
| read |
|
| read |
|
| platform:write |
|
| read |
|
| read |
|
| read |
各ツールの説明には、完全な契約が記載されています。すなわち、すべてのクエリとボディのフィールド、レスポンスの内容、そして注意点(フィーチャーフラグ、400 条件、カーソルのセマンティクス)です。
プログラムからの利用
import { createServer, OmniaClient } from "@omnia-voice/mcp";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = createServer({ client: new OmniaClient({ apiKey: process.env.OMNIA_API_KEY! }), readOnly: true });
await server.connect(new StdioServerTransport());開発
npm ci && npm run typecheck && npm test && npm run buildsrc/manifest.ts は、プラットフォームの app/api/v1 ルートから生成されます。test/manifest.test.ts はカバーすべき正確なルート一覧を固定しているため、新しいプラットフォームルートを追加すると、マニフェストを再生成するまでこのスイートは失敗します。
リリース
タグ vX.Y.Z をプッシュしてください。パブリッシュワークフローがビルド、テストを行い、provenance 付きで npm に公開します。
ライセンス: Apache-2.0
Available Tools
81 toolsadopt_model_versionadopt model versionA
Point a model alias at a deployed model version — adoption and rollback are the same audited repoint on different rows of the chain — use it to promote a trained round into production or roll back to an earlier one. POST /v1/model_versions/{id}/adopt (API-key scope: platform:write). Returns: 200 { served_model: string } — the model name the alias now resolves to. Notes: MOVES PRODUCTION TRAFFIC: the alias's target is replaced and any live canary split on it is cleared (canary_model null, canary_percent 0). 400 'This version is not deployed yet — deploy its weights before routing traffic to it.' when served_model is null. 404 for a foreign version id or unknown alias. Feature-flag gated (fineTuning flag off → 404) unlike the GET routes. OWNER/ADMIN key required (403). Zod failure returns 400 { error: 'Invalid body: aliasName — ...' } (flat shape). Adoption stamps adopted_at on first adoption only; it is audit-logged.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The model version id to route traffic to. Must be in the workspace and have a served_model (deployed). | |
| aliasName | Yes | camelCase only. Name of an existing alias in the workspace (404 'Alias "<name>" not found.' otherwise). Non-empty string required (400). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations are mostly negative (readOnlyHint false, idempotentHint false, destructiveHint false), so the description carries the full burden and succeeds. It discloses that the tool MOVES PRODUCTION TRAFFIC, replaces the alias target, clears any live canary split, stamps adopted_at only on first adoption, and is audit-logged. Error semantics, feature-flag behavior, auth requirements, and response shape are also covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but densely informative, with the core purpose front-loaded in the first sentence and high-impact side effects flagged explicitly. Some details like the Zod failure shape are somewhat niche, but they are still useful for error handling. The structure could be tightened, but every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-risk mutation with no output schema and sparse annotations, the description is unusually complete: it covers purpose, HTTP method, API-key scope, required key level, response format, side effects on canary, error codes, feature-flag behavior, and audit implications. An agent has enough information to decide whether and how to call this tool without needing external docs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful operational context: id must correspond to a deployed version with weights, and aliasName must reference an existing workspace alias. It also maps failure modes to each parameter (400 for undeployed version, 404 for foreign id or unknown alias), which helps the agent validate inputs before calling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — 'Point a model alias at a deployed model version' — and clearly identifies the two use cases: promoting a trained round into production or rolling back. It also distinguishes itself from related alias/GET tooling by noting this is the audited repoint operation and that it is feature-flag gated unlike the GET routes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use it: 'use it to promote a trained round into production or roll back to an earlier one.' It also gives a practical exclusion signal by noting the fineTuning flag off yields a 404 'unlike the GET routes,' helping an agent avoid attempting the call when feature-gated. It does not name exact sibling tools as alternatives, but the guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_label_setattach label setA
Attach a frozen golden set to a judge criterion so its calibration runs on that set and its certificate carries the set's kappa — or detach it. POST /v1/label_sets/{id}/attach (API-key scope: evals:write). Returns: 200 { criterion_id: string, label_set_id: string|null } — the criterion's new golden-set binding. Notes: 400 'Freeze the golden set first — an unfrozen set can change under the calibration.' when the set has no frozen_at. 404 'Golden set not found' for foreign/unknown set ids (when attaching). A criterion holds at most one golden set; attaching replaces the previous one.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The golden set id. Must be frozen to attach; ignored when detach=true. | |
| detach | No | When exactly true, clears the criterion's golden set (sets label_set_id to null) instead of attaching {id}. | |
| criterion_id | Yes | The judge criterion to attach the set to. Non-empty string required (400 'criterion_id is required'); 404 'Criterion not found' if not in the workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses side effects well beyond the sparse annotations: attaching replaces prior bindings, detaching sets label_set_id to null, and unfrozen sets trigger a 400. It also provides the exact return shape and error messages for foreign ids. This adds rich behavioral context that the annotations (readOnly=false, openWorld=true) do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficiently structured: it front-loads the action and purpose, then gives the endpoint, return shape, error notes, and key constraint in a logical order. Every sentence conveys necessary information, and the 'attaching replaces the previous one' caveat is clearly stated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description specifies the exact response shape, error codes, prerequisite freeze condition, and side effects. It also includes the required API-key scope, making it self-contained for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter coverage, including that id must be frozen and is ignored when detach=true, and that criterion_id is non-empty. The description reaffirms these constraints but does not add significant new parameter-level meaning. Therefore the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Attach a frozen golden set to a judge criterion' and explains the downstream consequences for calibration and certificate kappa. It also covers the detach variant, making the dual purpose explicit. This clearly differentiates it from sibling tools like freeze_label_set, which operate on the set's freeze state rather than the criterion binding.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear situational context: use this to bind a frozen set to a criterion for calibration, or to clear that binding via detach. It specifies the prerequisite that the set must be frozen, and warns that a criterion holds at most one set, so attaching replaces the previous one. It does not name alternative tools, but no direct alternative exists in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auto_improve_criterionauto improve criterionA
Runs one auto-improvement round on a judge criterion: mines the tune-half disagreements from its last alignment, rewrites the judge prompt coherently, and creates a successor DRAFT criterion with its alignment queued — use it when a calibrated judge still disagrees with your grades and you want a better candidate without hand-editing the prompt. POST /v1/criteria/{id}/auto_improve (API-key scope: evals:write). SPENDS MONEY: this starts billable work on the workspace wallet. Returns: 201 with { criterion: <full criterion object, snake_case: id, name, description, judge_prompt, judge_model, status, source, unit, population, population_family, online_enabled, online_percent, online_cap_usd, online_spent_usd, tier, trust, fail_grades_needed, pass_grades_needed, tpr_ci, tnr_ci, drift_status, drift_signal, drift_reason, drift_checked_at, tpr, tnr, kappa, alignment_n, aligned_at, created_at>, tune_disagreements: <int, tune-half rows where judge and human disagreed>, alignment_queued: }. The returned criterion is the NEW successor (draft, metrics void), named ' (auto r2)' (round suffix increments), inheriting the parent's unit, judge model, tag, segment, deterministic pre-stage, coverage, contract rules and golden set — a round varies the PROMPT only. Notes: No request body is read. Requires an OWNER/ADMIN minting user (403 otherwise). 404 if the criterion is not in the workspace. 400 when: an alignment run is in progress; the last alignment has fewer than 80 judged rows (needs a holdout-scale run so the report half stays untouched); there are zero tune-half disagreements; or the rewriter returned an unusable prompt (nothing created, only the single rewriter call was spent). SPENDS THE WALLET: one metered rewriter call (billed under assist:iterate) plus the queued alignment run, which bills like any alignment. Deliberately single-round: loop it yourself once the successor's alignment lands; adoption (repoint monitoring, retire the parent) stays a human act. Function maxDuration is 300s.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Criterion id (must belong to the key's workspace). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=false, so the description's real contribution is cost and side-effect disclosure: 'SPENDS MONEY' and 'one metered rewriter call (billed under assist:iterate) plus the queued alignment run'. It also exposes partial-failure behavior (nothing created, only the rewriter call spent) and the deliberate single-round design, which no annotation conveys. Nothing contradicts the annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is long but front-loaded: the first sentence carries purpose, mechanism, and when-to-use. The exhaustive return-field list earns its place only because no output schema exists, but the billing warning is stated twice ('SPENDS MONEY' and 'SPENDS THE WALLET'), which is redundant and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a money-spending, non-idempotent, queueing operation with one required parameter and no output schema, everything an agent needs is present: return shape (201 with full criterion object), error conditions (404/400 with their triggers), cost, auth scope (evals:write), post-call expectations (loop yourself; adoption stays human), and maxDuration. No material gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter already has a descriptive schema entry ('Criterion id (must belong to the key's workspace)'), so the baseline is 3. The description only restates the parameter's role via the endpoint path criteria/{id} and adds no new semantic meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Runs one auto-improvement round on a judge criterion' and decomposes it into three concrete steps (mines tune-half disagreements, rewrites the judge prompt,creates a successor DRAFT criterion with alignment queued). This clearly differentiates it from siblings like run_criterion_alignment and create_criterion by spelling out what auto-improve means as a distinct post-alignment operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance is given: 'use it when a calibrated judge still disagrees with your grades and you want a better candidate without hand-editing the prompt.' When-not conditions are enumerated as 400 triggers (alignment in progress, fewer than 80 judged rows, zero disagreements, unusable rewriter), and the 'Deliberately single-round: loop it yourself' note plus 'adoption stays a human act' tells the agent how to orchestrate multi-round use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_batchcancel batchA
Request cancellation of an in-flight batch job. POST /v1/batches/{id}/cancel (API-key scope: platform:write). Returns: 200 with the updated batch object (status typically CANCELLING or CANCELLED) Notes: OWNER/ADMIN only (403). 404 "Batch not found". Audited. 404 while the batch feature flag is off. Work already completed before cancellation may still be billed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The platform batch id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses the HTTP endpoint, required API-key scope, expected status values, common error codes, ownership restrictions, audit logging, feature-flag behavior, and billing consequences. This is substantial behavioral context that helps an agent anticipate side effects and failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and information-dense, with the core action and endpoint front-loaded, followed by high-value notes on permissions, errors, auditability, and billing. Every sentence adds necessary context without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one simple parameter, no output schema, and minimal annotations, the description covers everything needed to invoke the tool correctly: endpoint, auth scope, permission constraints, response behavior, error conditions, and side effects. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the single parameter 'id' as 'The platform batch id' with 100% coverage. The description does not add new parameter-level detail, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Request cancellation'), a specific resource ('in-flight batch job'), and the exact endpoint. It clearly identifies the tool's scope and distinguishes it from sibling cancellation tools like cancel_fine_tuning_job or cancel_eval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for use ('in-flight batch job') and important operational constraints such as OWNER/ADMIN only, 403 for unauthorized callers, feature-flag-related 404s, and billing implications. It stops short of explicitly naming alternatives or stating when not to use this tool, but the guidance is otherwise strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_evalcancel evalA
Stop a PENDING or RUNNING eval run so no further generations or judge calls are billed — use it when a run was misconfigured or is no longer needed. POST /v1/evals/{id}/cancel (API-key scope: evals:write). Returns: 200 with the run object (same shape as GET /v1/evals/{id}) with status "CANCELLED" and error set to "Cancelled by <email of the key's minting user>"; progress_ratio reflects work completed so far. Notes: Requires OWNER/ADMIN minting user (403) — same gate as create, because it controls wallet spend. A run already DONE|ERROR|CANCELLED is refused 400 ("This run is already done — only a pending or running eval can be cancelled."); a terminal result is never overwritten. 404 if not in this workspace. Cancelled runs are inert: no future tick claims them, so nothing more is billed; a slice already in flight finishes its bounded batch (already-paid work), and in the rare race where that was the last slice the run may still land DONE with real results. No request body is read.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The eval run id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations, disclosing auth requirements (OWNER/ADMIN minting user, 403), terminal-state refusal (400), workspace scoping (404), billing implications, race behavior for in-flight slices, and the exact response shape and error message. This is exceptionally transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Though lengthy, every sentence conveys a distinct operational fact: conditions, auth, refusal behavior, error codes, race semantics, and response contents. The most important purpose is front-loaded, and the detail is justified by the tool's subtle billing and terminal-state behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a mutation tool with no output schema and one parameter. It covers prerequisites, failure modes, response shape, side effects on billing, and edge cases. An agent has everything needed to call this tool correctly and predict the outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single required id parameter, so the schema already documents it fully. The description references the id in the endpoint path but adds no meaningful parameter semantics beyond what the schema provides, matching the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Stop a PENDING or RUNNING eval run.' It also states the motivating purpose (misconfigured or no longer needed) and clarifies the billing rationale, making the tool's role clear and distinct from siblings like delete_eval or cancel_batch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use the tool ('when a run was misconfigured or is no longer needed') and clearly lists when not to use it: a run already DONE, ERROR, or CANCELLED is refused. It does not name alternative sibling tools, but the when/when-not guidance is strong enough to route an agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_fine_tuning_jobcancel fine tuning jobADestructiveIdempotent
Cancel a queued or running fine-tuning job so no more training is metered — the customer's cancel is authoritative even if the backend lags. DELETE /v1/fine_tuning/jobs/{id} (API-key scope: platform:write). Returns: 200 {ok:true}. The job's status becomes CANCELLED (idempotent: cancelling an already-CANCELLED job also returns 200 {ok:true}). Notes: This is a CANCEL, not a delete — the job record remains listed. Requires OWNER/ADMIN minting user (403). 404 when not in this workspace. 400 "This run already finished — there is nothing to cancel." for SUCCEEDED or FAILED jobs. The backend cancel is attempted but a backend error does not block the local cancel; metering treats local CANCELLED as final and finalizes at $0 further spend. Feature-flag gated (404 when fineTuning is off). Scopes not enforced on this route today.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The job id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent and destructive, and the description adds substantial context: metering stops, status becomes CANCELLED, cancel is authoritative despite backend lag, backend errors do not block local cancel, permissions require OWNER/ADMIN minting user, 404/400 cases, feature-flag gating, and scopes not enforced. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and consequence, then organized caveats (return, status, errors, permissions, backend behavior). The length is justified because every sentence adds an operationally relevant detail for a cancellation endpoint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one parameter and no output schema, the description supplies everything needed to call it correctly: full HTTP semantics, success response, failure modes, auth context, idempotency, backend behavior, and feature-flag behavior. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single id parameter is already documented as 'The job id.' The description references {id} in the DELETE path but does not add much semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Cancel a queued or running fine-tuning job'), includes the HTTP path, and explicitly distinguishes this from deletion ('This is a CANCEL, not a delete — the job record remains listed'). It is clearly differentiated from sibling tools like cancel_batch or delete_alias.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditions for use: queued or running jobs, and when-not: SUCCEEDED or FAILED jobs return 400, while already-CANCELLED jobs are idempotent. It also clarifies it is not a delete operation, which is the main alternative behavior an agent might confuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
can_i_shipcan I shipARead-onlyIdempotent
Does the evidence let this change through? Reads the gate on a finished eval run (the latest DONE run when eval_id is omitted) with your thresholds — or sensible defaults: the certified-switch test (noninferiority_margin 0.05) for a criterion run against stored answers, min_win_rate 0.5 for a comparison — and returns ship/hold with every check's required vs actual, where 'actual' is the interval's LOWER bound. Read-only; the same call is the CI step.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Restrict the checks to one candidate key. | |
| eval_id | No | The run to gate. Default: the newest DONE run. | |
| min_win_rate | No | Comparison runs: every candidate's win-rate CI floor must be ≥ this. | |
| min_pass_rate | No | Criterion runs: corrected pass-rate CI floor must be ≥ this. | |
| noninferiority_margin | No | Certified switch: candidate's corrected pass-rate floor ≥ incumbent's rate − margin (needs a stored baseline and a calibrated judge). | |
| min_assertion_pass_rate | No | Exact all-assertions pass rate must be ≥ this. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, and the description adds meaningful behavioral details beyond that: the 'actual' value uses the interval's LOWER bound, omitted eval_id targets the newest DONE run, and sensible defaults apply. This is valuable behavioral context that the annotations alone do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence with no filler, front-loaded with the core question and decision outcome before diving into defaults and lower-bound semantics. Every clause contributes either selection criteria, behavior, or output shape.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the full schema coverage, rich annotations, and no output schema, the description supplies the essential missing context: what the return is (ship/hold plus required vs actual), which runs it applies to, and how defaults work. It is complete enough for an agent to invoke correctly, though a bit more detail about all possible check types would fully round it out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all six parameters; the baseline is 3. The description adds extra semantic value by explaining the certified-switch default (noninferiority_margin 0.05), min_win_rate 0.5 default, and how actual values map to interval lower bounds, which enriches parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the gate on a finished eval run and returns a ship/hold decision with required vs actual values, which goes well beyond the name. It does not explicitly differentiate itself from the sibling get_eval_gate, so it falls just short of full sibling-distinguishing clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this when deciding whether evidence lets a change ship, including the CI-step role and the default to the latest DONE run. It does not name alternatives or state when not to use it, but the context is specific enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_evalscompare evalsARead-onlyIdempotent
Compare two finished eval runs arm-by-arm (before vs after a prompt, tool or index change) and get each arm's delta with a 95% interval and a significance flag, instead of eyeballing two reports. GET /v1/evals/compare (API-key scope: read). Returns: {a:{id, name, created_at, judge_model, eval_kind}, b:{…same}, rows:[{arm (candidate key), metric ("win_rate" for comparison runs; "observed_pass_rate" and, when both runs carry one, "corrected_pass_rate" for criterion runs), a:{rate, n, ci:[lo,hi]}, b:{rate, n, ci}, delta (b.rate − a.rate), delta_ci:[lo,hi] (Newcombe 95%), significant (interval excludes zero)}], unmatched:{a:[arm keys only in a], b:[arm keys only in b]}}. Cache-Control: no-store. Notes: 400 when a or b is missing. 404 when either run is not in this workspace. 412 {code:"precondition_failed"} when both runs are not DONE, when they are different eval kinds, or when they used different judge models (a delta between judges measures the judges, not your change — re-run one with the other's judge). Best used with identical sample_filters on both runs. Read-only, no spend.
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | Eval run id of the BEFORE run (baseline of the comparison). | |
| b | Yes | Eval run id of the AFTER run. Delta is reported as b − a. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnly/idempotent/non-destructive, and the description adds substantial behavioral detail: exact response shape, Cache-Control: no-store, sign convention (delta = b − a), Newcombe 95% interval, significance rule, no spend, and precondition failure semantics. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but densely informative and well structured: purpose, endpoint, response shape, error conditions, best-use guidance, and safety note. Every clause earns its place, and the core purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description fully specifies the return object including nested fields, arm keys, metrics, confidence intervals, unmatched sets, and error cases. It also covers operational context (workspace scoping, judge-model precondition, sample_filters), making it complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds the crucial directional meaning: a is the BEFORE/baseline run and b is the AFTER run, with delta explicitly defined as b.rate − a.rate. This goes beyond the schema's short descriptions and prevents a common misuse.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Compare two finished eval runs') and distinguishes the tool from single-run eval tools by explaining the arm-by-arm delta output. The phrase 'instead of eyeballing two reports' makes the intent unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states when the tool applies (finished runs, same eval kind, same judge model, ideally identical sample_filters) and documents rejection conditions (400/404/412), including the important 'delta between judges measures the judges' caveat. It does not explicitly name sibling tools like get_eval for single-run needs, but the comparison context is otherwise well specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_audit_tombstonecreate audit tombstoneA
Acknowledge a verified audit-chain gap with a written reason so the integrity check stops reporting it as unexplained; a platform-admin repair action, never a way to hide a gap. POST /v1/audit/tombstones (API-key scope: platform:write). Returns: 201 { seq, reason, created_at } Notes: 403 unless the key's minting user has the platform-level admin role (workspace OWNER/ADMIN is not enough). 400 for invalid JSON, wrong types, seq <= 0, reason under 10 chars, or a seq that is not a gap in the latest verification (message names when that verification ran, or that none has run yet).
| Name | Required | Description | Default |
|---|---|---|---|
| seq | Yes | Positive integer chain sequence number. Must appear as a problem of kind "gap" in the latest stored verification (see GET /v1/audit/verify) or the call is refused. | |
| reason | Yes | Why the slot was lost. Trimmed; at least 10 characters; stored up to 500 characters. Upserting an existing seq replaces the reason. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses the upsert side effect ('Upserting an existing seq replaces the reason'), the exact API-key scope (platform:write), the 403 role restriction, the 201 return shape, and specific 400 failure modes. This is far richer than the annotation set alone and gives the agent a precise behavioral model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence contributes: purpose, endpoint/scope, return shape, auth requirement, and error conditions. The purpose is front-loaded and the technical details are packed into efficient clauses without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides the 201 response fields and error cases. It covers authentication, side effects, and preconditions. Nothing needed to call the tool correctly is missing, and the reference to GET /v1/audit/verify in the schema complements the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for both seq and reason, so the schema carries the parameter meaning. The description reinforces the same constraints (seq must be a gap, reason >= 10 chars) but does not add material new semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Acknowledge a verified audit-chain gap with a written reason' and explains the effect ('stops reporting it as unexplained'). It also characterizes itself as 'a platform-admin repair action', clearly separating it from read-only siblings like list_audit_tombstones and get_audit_verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it is for verified gaps, requires platform-level admin, and 'never a way to hide a gap'. It enumerates 400 refusal conditions, so the agent knows when it will be rejected. It stops short of explicitly naming an alternative tool to use instead, but the conditions are strong enough to infer appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_batchcreate batchA
Submit an asynchronous, discounted batch of inference requests from a previously uploaded JSONL file, for workloads that can wait up to the completion window. POST /v1/batches (API-key scope: platform:write). SPENDS MONEY: this starts billable work on the workspace wallet. Returns: 201 with the batch object: { id, nebius_batch_id, endpoint, status, request_total, request_completed, request_failed, completion_window, billed_cost_usd, created_at, output_file_id, error_file_id, error } Notes: MONEY: the wallet must hold at least $0.10 of available runway to submit (402 otherwise); the batch discount and markup are frozen at submit time and the job is billed on completion. OWNER/ADMIN only (403). 400 when input_file_id/endpoint/model is missing or the body is not JSON. 503 when batch creation is temporarily unavailable upstream (the input file stays uploaded; retry later). 404 while the batch feature flag is off.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | A representative model id from the file; it is the billing-rate basis. Must have configured pricing or the call is refused with 400. | |
| endpoint | Yes | The API route every line in the file targets. | |
| input_file_id | Yes | Id of a file uploaded via /v1/files with purpose "batch" containing the request JSONL. Must belong to this workspace (or be the input of one of its past batches); otherwise 404 "Input file not found". | |
| completion_window | No | How long the batch may take, e.g. "24h". Default: "24h". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say not read-only and not idempotent, but the description adds substantial side-effect information: 'SPENDS MONEY: this starts billable work', wallet runway requirements, pricing freeze at submit, and who can execute. It also discloses return status and several error paths, giving the agent a full behavioral picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads the core purpose and then packs in auth, cost, return shape, and error codes. It is dense and somewhat run-on, but every clause carries information an agent needs to call the tool safely, so the length is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description compensates by listing the returned batch object fields and 201 success status. It covers main error variants, permission requirements, and financial consequences, making it complete for a side-effectful paid API call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains every parameter. The tool description adds no extra meaning beyond what the schema provides (e.g., it references input_file_id but the schema already describes the purpose and ownership requirement). Baseline 3 is appropriate when the schema handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb ('Submit'), resource ('batch of inference requests'), and key properties ('asynchronous, discounted', 'from a previously uploaded JSONL file'). It clearly distinguishes this creation action from sibling tools like list_batches, get_batch, and cancel_batch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the workload context ('for workloads that can wait up to the completion window') and gives preconditions (previously uploaded JSONL file, wallet runway, owner/admin). It does not name alternative tools or provide explicit when-not-to-use statements, but the context and error conditions make selection clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_criterioncreate criterionA
Create a judge criterion (a rubric prompt run by a judge model) that can score traffic online and be calibrated against human labels. POST /v1/criteria (API-key scope: evals:write). Returns: 201 with the criterion object (same shape as list items): id, name, description, judge_prompt, judge_model, status, source, unit, population, population_family, online_* fields, tier, trust, ci, drift, tpr, tnr, kappa, alignment_n, aligned_at, created_at Notes: OWNER/ADMIN only (403). Creating does not spend; judging (align, online monitoring) does. Body keys are snake_case exactly as listed; other criterion knobs (coverage, pre-checks, contract rules) are not settable through this endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Unique within the workspace, trimmed, 1..80 chars. Duplicate name is a 400. | |
| unit | No | What one verdict covers: "request" judges one exchange, "trace" judges a whole agent run. CREATE-ONLY; cannot be changed later. Default: "request". | |
| population | No | Request tag this criterion judges online AND calibrates against (one binding). Max 64 chars; "" = all traffic. | |
| description | No | Optional note, max 500 chars (nullable). | |
| judge_model | Yes | Model id that runs the judgment. Must be an available model (400 "Judge model '<id>' is not available."). | |
| judge_prompt | Yes | The rubric the judge model applies, trimmed, 10..4000 chars. | |
| population_family | No | Auto-detected traffic segment (a `family` value from GET /v1/logs facets, 16 hex chars or "none") scoping the same binding. Max 32 chars; "" = no segment scope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses the HTTP method, required permission (OWNER/ADMIN, 403), side-effect distinction (create does not spend vs judging spends), and the 201 response shape. It also states endpoint limitations on settable fields. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose followed by endpoint, response, and notes in a compact structure; the response field enumeration is long but compensates for the missing output schema. Every clause adds information, though the single paragraph is dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully specifies the return payload, auth requirements, spend implications, and keyword casing. Combined with the 100%-covered input schema, an agent has everything needed to invoke the endpoint correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 7 parameters with individual descriptions (100% coverage), so the description need not redefine them. It adds only a snake_case serialization note and an exclusion of other knobs (coverage, pre-checks, contract rules), which is helpful but marginal semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a precise verb+resource: 'Create a judge criterion' and defines it as 'a rubric prompt run by a judge model' that scores traffic online and calibrates against human labels. It includes the HTTP endpoint and API-key scope, making the operation unmistakable and distinct from sibling criteria/eval tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Notes give concrete usage context: OWNER/ADMIN only, POST /v1/criteria with evals:write scope, and 'Creating does not spend; judging (align, online monitoring) does.' It also warns that 'other criterion knobs ... are not settable through this endpoint,' but does not explicitly name an alternative tool like update_criterion or suggest_criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_dataset_from_logscreate dataset from logsA
Curates logged gateway traffic into a managed training dataset (optionally with a disjoint eval holdout split), auto-dropping errored/truncated/empty/duplicate/human-failed/benchmark-contaminated exchanges and applying a chosen quality gate — use it to turn production logs into fine-tuning or eval data. POST /v1/datasets/from_logs (API-key scope: evals:write). Returns: 201 with snake_case: { summary: { total: , kept, dropped: { unparseable, errored, truncated, empty, duplicate, human_failed, contaminated }, folded: { folded_turns, conversations } }, quality: { mode, criterion_id?, criterion_name?, kappa?, human_pass_kept?, ungraded_excluded?, judged?, judge_passed?, judge_failed?, judge_unparsed?, judge_spend_usd? }, training_name, training_count, eval_name?: '-eval', eval_count? }. Notes: Requires an OWNER/ADMIN minting user for dataset creation (403, enforced in the dataset service). 400 (invalid_json) on unparseable JSON. Other 400s: name missing/over 80 chars; unknown quality mode; judge mode without criterion_id; judge criterion not found / trace-unit / misaligned / borderline / unmeasured / drift-flagged / segment-bound but build not scoped to that segment (each eligibility refusal is also written to the refusal ledger, kind dataset_judge_trust); no usable exchanges after curation (nothing created). Fetch is capped at 50,000 most recent matching rows. MONEY: judge mode is gated up front at ~$0.02 per conversation to judge (402 'Insufficient balance for judge gating' before any spend) and every judge call is then metered as usage; a scoring failure mid-run FAILS THE WHOLE BUILD (no dataset created) but rows already judged were billed (idempotent ids — retry does not re-bill). Human FAIL grades (or rows sharing an agent run with a trace-scoped FAIL) never enter a dataset in any mode. Multi-turn chats are folded into one weighted line per conversation. If the training set is created but the eval split fails, the response is a 400 that says the training dataset already exists. The eval split shares no example with the training set, so it is valid as an eval source (POST /v1/evals with sample_filters.dataset_id).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Dataset name, 1-80 chars after trimming. Also used as the file name ('<name>.jsonl') and, with holdout_pct, the eval split is named '<name>-eval'. | |
| filters | No | Which logged traffic feeds the build. Nested keys: model (string, exact model name), tag (string, the task label sent as X-Omnia-Tag), segment (string, an auto-detected traffic segment / prompt family as shown on GET /v1/logs rows), finish_reason (string), cache_hit (boolean), start (integer unix seconds, inclusive lower bound), end (integer unix seconds). Falsy values (empty string, 0) are ignored. Success-only is always enforced regardless of filters. | |
| quality | No | The quality ladder: { mode: 'cleaned'|'graded'|'judge', criterion_id?: string }. 'cleaned' (default) = mechanical curation only. 'graded' = keep only exchanges a human graded pass (free). 'judge' = a CALIBRATED judge (criterion_id REQUIRED; request-unit; trust 'trustworthy' or 'under-measured'; not drift-flagged; if segment-bound, filters.segment must equal its segment) keeps only passing conversations, judged at each conversation's terminal turn; human grades override the judge for free. mode must be a string, criterion_id a string when present. | |
| sources | No | Include-list of source models: { models: string[] }. Only exchanges served by these models feed the build; an empty array means no restriction. Each item must be a non-empty string, else 400 'sources.models must be an array of model names'. | |
| holdout_pct | No | Percentage (0-50) of curated lines carved into a second, DISJOINT '<name>-eval' dataset linked back to the training set. 0/omitted = no eval split. Values above 50 are capped at 50. | |
| decontaminate | No | Drop rows whose prompt shares a 13-word shingle with a public benchmark test split. Default true. Only an explicit boolean is honored. The provenance records what was checked; an unavailable index is recorded as 'not checked', never as clean. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
This is an exceptionally transparent description. It discloses auto-drop categories, the 50,000 row fetch cap, judge-mode billing and gating, failure-of-whole-build semantics, idempotent retry billing, eval-split failure behavior, disjointness guarantees, and human-FAIL exclusion. These details go far beyond what the sparse annotations (readOnlyHint/idempotentHint/destructiveHint) convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence carries real content and the length is arguably justified by the tool's complexity, but the description is one dense wall of text with critical constraints buried in the middle. It would benefit from structured sections or bullets for billing, error cases, and prerequisites, and the most important usage guidance could be front-loaded more clearly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though there is no output schema, the description supplies a detailed response shape, error statuses, auth requirements, failure modes, billing caveats, and edge cases like contamination and refusal ledgers. An agent has nearly everything needed to call this tool correctly and predict what will happen on success or failure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema descriptions are already rich, so the baseline is 3. The description adds meaningful non-obvious consequences: the fetch cap, judge spending and billing behavior, no re-billing on retry, eval split naming, and the fact that a failed eval split still leaves the training set created. These details help an agent reason about parameter impact beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Curates logged gateway traffic into a managed training dataset') and immediately distinguishes this from related tools like create_eval or upload_training_file by describing the source, the curation action, and the optional eval split. It also gives the concrete endpoint and auth scope, so an agent knows exactly what this operation is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use the tool ('use it to turn production logs into fine-tuning or eval data') and states critical prerequisites such as OWNER/ADMIN minting and evals:write scope. It does not explicitly name alternative tools or say 'use X instead', but the context is strong enough for an agent to determine appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_dedicated_endpointcreate dedicated endpointA
Provisions a new dedicated inference endpoint (a model served on reserved GPUs at a frozen per-GPU-hour price) — use it for guaranteed capacity, custom fine-tuned weights, or predictable latency; billing starts as soon as it is running. POST /v1/dedicated (API-key scope: platform:write). SPENDS MONEY: this starts billable work on the workspace wallet. Returns: 201 with { id: }. Poll GET /v1/dedicated/{id} for status and routing_key. Notes: 400 'Invalid JSON body' or 'Missing required field(s): ...' when any of name, model_name, flavor_name, gpu_type, gpu_count, region, min_replicas, max_replicas is absent/null (checked after alias lifting). Requires an OWNER/ADMIN minting user (403). 400 when the model/flavor/GPU/region/count combo is not in the catalog, replica range invalid, or no price is configured for the GPU/region. MONEY: 402 'Insufficient balance' unless the wallet covers at least DEDICATED_PREPAY_HOURS (default 1 hour) of runway at min_replicas x gpu_count x sell rate; the per-GPU-hour price is FROZEN on the endpoint at create time; GPU-hours are metered continuously while the endpoint is enabled and RUNNING — stop (PATCH enabled=false) or DELETE to stop billing. Scope note: the dedicated routes' local apiKeyActor does not enforce key scopes on this branch.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name (trimmed, non-empty). | |
| region | Yes | Must be in the GPU configuration's allowed_regions. | |
| gpu_type | Yes | A key of the flavor's available_configurations.gpu_configurations. Alias: gpuType. | |
| gpu_count | Yes | Must be > 0 and in the GPU configuration's allowed_gpu_counts. Alias: gpuCount. | |
| model_name | Yes | A template `name` from GET /v1/dedicated/templates. camelCase alias modelName also accepted (camelCase wins if both present). | |
| description | No | Optional description (trimmed). | |
| flavor_name | Yes | A key of that template's `flavors` map. Alias: flavorName. | |
| max_replicas | Yes | >= min_replicas and <= the configuration's max_replicas_allowed. Alias: maxReplicas. | |
| min_replicas | Yes | >= 1. Alias: minReplicas. Sizes the prepay/wallet gate (min_replicas x gpu_count x hourly price x prepay hours). | |
| custom_weights_id | No | Serve a fine-tuned model's merged weights: must start with 'model-artifact_' (the artifact id from a completed fine-tune), else 400. Alias: customWeightsId. Omit for stock base models. | |
| fine_tuning_job_id | No | The source fine-tuning job to record on the endpoint, when deployed from one. Alias: fineTuningJobId. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is exceptionally transparent about behavior beyond annotations: it warns that money is spent, explains that billing starts once running, states the prepay requirement, notes that the price is frozen at create time, and explains how to stop billing via PATCH or DELETE. This goes far beyond the annotations and gives the agent critical operational knowledge.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but densely informative, front-loading the core purpose and billing warning. There is slight redundancy between 'billing starts as soon as it is running' and the later 'SPENDS MONEY' and 'MONEY' sections, but every substantive detail earns its place given the financial and operational stakes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity tool with 11 parameters, no output schema, and significant cost implications, the description is remarkably complete. It covers the success response, polling flow, auth requirements, validation failures, catalog constraints, prepay wallet gate, and billing-stop mechanisms. An agent has enough information to call this tool correctly and anticipate consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter coverage, so the baseline is 3. The description adds meaningful cross-parameter context, such as the prepay calculation involving min_replicas x gpu_count x hourly price, the required-field validation after alias lifting, and catalog/replica-range failure modes. This adds value beyond the schema without duplicating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb and resource: 'Provisions a new dedicated inference endpoint', and expands on what that means (reserved GPUs, frozen per-GPU-hour price, guaranteed capacity, custom weights, predictable latency). It is clearly distinct from sibling tools like get, update, delete, and list_dedicated_endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'use it for guaranteed capacity, custom fine-tuned weights, or predictable latency'. It also gives important usage context around billing, auth scope, and polling for status, but it does not explicitly name alternative tools or say when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_evalcreate evalA
Queue an eval run — a pairwise model comparison, an absolute criterion (calibrated judge) run, or a one-click screening of cheaper models against your own logged traffic — so a customer can measure a model, prompt, tool or index change before shipping it. POST /v1/evals (API-key scope: evals:write). SPENDS MONEY: this starts billable work on the workspace wallet. Returns: 201 with the queued run in the same shape as GET /v1/evals/{id} (status PENDING, results null, progress_ratio 0, arms[] describing each candidate key). Poll GET /v1/evals/{id} until status is DONE|ERROR|CANCELLED, or gate a pipeline directly with GET /v1/evals/{id}/gate. Notes: MONEY: a run spends wallet credit (every generation for baseline + each arm, plus judge calls; best-of-N arms pay N×). Plain runs disclose cost and are gated lazily per tick by the runner; screening runs enforce a creation-time funds gate → 402 {error:{type:"insufficient_quota", code:"insufficient_balance"}}. The key's minting user must be workspace OWNER/ADMIN → otherwise 403. 400 on: invalid JSON, schema violations (name length, rubric length, sample_count range, >6 candidates, duplicates, candidate == baseline, bad assertion, bad arm label/override), unknown model, missing criterion_id, population-binding refusal, trace_replay without stored baseline, or too little population ("Not enough logged traffic for this filter (need at least 5 distinct prompts…)"). 404 for a dataset/criterion not in this workspace. Screening-specific: 422 {code:"unprocessable"} when there is nothing to screen (no/too little logged traffic, or nothing cheaper than the incumbent — the message carries the import hint), 400 for an unusable candidate_models list, 402 for funds. All errors are {error:{message, type, code}}. Input keys are snake_case; internally converted to camelCase (candidate_models→candidateModels, candidates[]→candidateModels keys + armOverrides map keyed by label, sample_filters.dataset_id→datasetId, trace_replay→traceReplay, max_output_tokens→genMaxOutputTokens).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Run name, 1..80 chars after trimming (required unless screening=true, where it is auto-generated). | |
| rubric | No | Judge rubric, 10..2000 chars. Required for eval_kind="comparison" (400 if shorter than 10 chars); ignored for criterion runs (the criterion's frozen judge prompt is the rubric). | |
| eval_kind | No | "comparison" (default): each candidate arm is judged pairwise against the baseline in both orderings → win rate with Wilson CI. "criterion": every model (baseline and candidates) is graded absolutely by a saved, calibrated criterion → observed and calibration-corrected pass rates; requires criterion_id. Default: "comparison". | |
| screening | No | Screening mode. When true every other field becomes an optional override and the server auto-fills like the dashboard's one-click: incumbent = your dominant logged model, baseline = its stored answers ("__stored__"), candidates = the cheapest model of each distinct family, judge family-checked, fixed quality rubric, sample_count = clamp(min(40, population), 5..500). Only name, sample_count, candidate_models (1..6 explicit picks, validated against the catalog: unknown id / the incumbent itself / duplicate / >6 / empty list = 400 naming the offender), judge_model, and sample_filters.dataset_id (screen an imported dataset's stored answers instead of logged traffic) are honoured in this mode; rubric, rubric_type, eval_kind, criterion_id, baseline_model, candidates[], assertions, other sample_filters and max_output_tokens are ignored. Screening additionally enforces a creation-time funds gate (402). | |
| assertions | No | Up to 10 deterministic output checks run against every generated answer at finalize (free, exact — these are what CI should gate on via min_assertion_pass_rate). Each: {type, value?}. Types: "json_valid" (no value), "json_schema" (value = JSON Schema string ≤4000 chars, must parse), "regex_match" (value = pattern ≤200 chars, must compile), "contains" / "not_contains" (value = substring, required), "max_length" / "min_length" (value = non-negative integer as string), "completed" (finish reason was not a length cut-off), "tool_called" (value = tool name ≤200 chars; matches the canonical "[tool call] name(args)" notation), "no_tool_call". Invalid configs are rejected 400 with the specific reason. | |
| candidates | No | Versioned arms — an alternative to candidate_models (when present, candidate_models is ignored and this list defines the arms; max 6 total). Each item: {model: string (required, catalog id that runs the arm), label?: string (arm key shown in the report; must match /^[A-Za-z0-9][A-Za-z0-9 _.:+\-]{0,63}$/ and must NOT contain "/"), system?: string (replace the logged system prompt on every sampled prompt; "" strips it; max 20000 chars; omit to keep the logged one), tools?: array of tool-definition objects (OpenAI format; replaces the logged tool definitions; [] offers none; max 64; omit to keep), n?: integer 2..8 (best-of-N: sample N times and keep the judge-preferred answer via N−1 pairwise knockout verdicts on the run's own rubric/judge; the arm pays for all N generations plus the selection verdicts)}. A bare {model} is identical to listing the id in candidate_models. Any arm that sets system, tools or n MUST carry a label (400 "candidates[]: an arm that overrides system or tools needs a label"); the label becomes the arm key in candidate_models/arms/results, and the override is stored as armOverrides[label] = {model, system?, tools?, n?}. Two arms may share one model (e.g. old prompt vs new prompt); metering follows the model that actually ran. | |
| judge_model | No | Catalog chat model used as the judge (validated; 400 if not offered). Precedence when omitted: the workspace's default judge, then the house default judge. Ignored for criterion runs (the criterion's judge is frozen). In screening mode an explicit judge is honoured even if it shares a family with a contestant (the report discloses judge_shares_family) instead of being swapped. | |
| rubric_type | No | How the judge reads the rubric: "direct" (default) judges answers on the rubric alone; "adherence" also requires each sample to carry a reference answer (the logged reply), so the population must have text replies. Default: "direct". | |
| criterion_id | No | Id of a workspace criterion (calibrated judge). Required when eval_kind="criterion" (400 otherwise). The criterion's judge model and prompt override judge_model/rubric and are frozen into the run (criterion_snapshot). A trace-unit criterion requires baseline_model="__stored__" and no candidates (it grades completed agent runs), and refuses if it was aligned on an older transcript instrument version. Population binding is enforced: sampling a tag/segment different from the criterion's calibrated population is refused (400); sampling with no population filter while the judge is scoped is allowed with a stored warning. | |
| sample_count | No | Number of prompts to sample from the population, integer 5..500. Defaults to 20 when omitted (non-screening). The run is refused at creation (400) if the filtered population cannot supply at least 5 distinct prompts (with references when rubric_type="adherence" or baseline is "__stored__"). Screening: clamped to 5..500, default min(40, population). Default: 20. | |
| baseline_model | Yes | The incumbent arm: a catalog model id this workspace is offered (validated, 400 "Model '…' is not available."), or the sentinel "__stored__" to judge candidates against the incumbent's STORED logged answers (nothing is regenerated for the baseline; no savings figure is computed). "__stored__" is required for trace_replay and for the certified-switch (noninferiority) gate shape. Required unless screening=true (then forced to "__stored__"). | |
| sample_filters | No | Which population prompts are sampled from (success-only logged requests by default). Keys: tag?: string (only requests logged with this tag); model?: string (only requests served by this model); segment?: string (an auto-detected traffic segment = the prompt FAMILY shown as `segment` on GET /v1/logs rows — one application surface's traffic, stable under interpolated dates/ids); dataset_id?: string (sample from a managed dataset — e.g. a holdout split — instead of live logs; must belong to this workspace, 404 otherwise; the run needs ≥5 usable rows); trace_replay?: boolean (replay bake-off: sample WHOLE completed agent runs from the last 7 days, one teacher-forced sample per step, max 12 steps per run; REQUIRES baseline_model="__stored__" (400 otherwise) and ≥5 replayable steps). Empty-string values are treated as absent. Screening mode reads only dataset_id here. | |
| candidate_models | No | Array of catalog model ids (max 6, no duplicates, none equal to baseline_model). Each candidate answers every sample and is judged, so cost is linear in this count. A comparison needs at least 1 (400 otherwise); a criterion run may have 0 (grade the baseline alone). Ignored when candidates[] is present (candidates[] replaces it). | |
| max_output_tokens | No | Per-answer generation output cap, integer 256..16384 (default 4096) — sized so thinking models can finish reasoning and answer; the runaway-spend guard. Silently ignored in screening mode. Default: 4096. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations are sparse (readOnlyHint false, openWorldHint true, idempotentHint false, destructiveHint false), and the description carries the behavioral burden thoroughly: it discloses that the call 'SPENDS MONEY', requires the key's minting user to be workspace OWNER/ADMIN, returns 201 with status PENDING, requires polling until DONE|ERROR|CANCELLED, and enumerates 400/403/404/402/422 error paths. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but it is front-loaded with the core purpose and then organized into labeled operational sections ('Returns', 'Notes', 'Screening-specific'). The density is justified by the tool's complexity, though some redundancy in the money warnings and error enumerations prevents a perfect conciseness score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, the description supplies the return shape (status PENDING, results null, progress_ratio 0, arms[]), the polling/gating pattern, authentication requirements, cost model, error schema, and screening-specific failure modes. This is unusually complete for a tool with 14 parameters and no structured output definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful operational semantics beyond the schema: snake_case-to-camelCase conversion, best-of-N cost multiplication, screening-mode parameter precedence, and creation-time funds gating. It does not replace the per-parameter schema descriptions, but it augments them with cross-cutting details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Queue an eval run', and immediately enumerates the three run modes (pairwise comparison, absolute criterion, screening). This clearly differentiates create_eval from siblings such as list_evals, get_eval, compare_evals, and create_criterion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when to use the tool ('so a customer can measure a model, prompt, tool or index change before shipping it') and explains the mode alternatives. It does not explicitly name sibling tools or state when not to use create_eval, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_fine_tuning_jobcreate fine tuning jobA
Start a supervised (SFT/LoRA) or spec-draft fine-tune of a catalog base model on an uploaded file or a workspace dataset, with bounds-checked hyperparameters — the way a customer trains a custom model from their own data. POST /v1/fine_tuning/jobs (API-key scope: platform:write). SPENDS MONEY: this starts billable work on the workspace wallet. Returns: 201 {id (job id for all other /v1/fine_tuning/jobs/{id} calls), provider_job_id}. Poll GET /v1/fine_tuning/jobs/{id} for status and fine_tuned_model. Notes: MONEY: the wallet must hold a prepay runway of (1,000,000 estimated trained tokens × the model's per-token rate incl. markup) or the call fails 402 "Insufficient balance: starting a fine-tune requires at least $X of runway. Top up and try again."; the final charge is metered from real trained tokens on completion (billed_cost_usd). Requires OWNER/ADMIN minting user (403). Rate limited per workspace: 20 creates per 60s → 429 with Retry-After. 400 "Invalid JSON body" or "Invalid body: — " (e.g. missing training data: pass training or training_file_id). 400 when no price is configured for the model ("No fine-tuning price is set for this model yet."). Top-level keys accept both snake_case and camelCase; nested hyperparameter/integration/mapping keys are snake_case only. Feature-flag gated (404 when fineTuning is off). Scopes not enforced on this route today.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Display name for the job (≤300 chars). | |
| seed | No | Training seed, integer 0..2147483647. | |
| method | No | "supervised" (SFT / LoRA; default) or "spec-draft" (train a draft speculator for speculative decoding). Default: "supervised". | |
| suffix | No | Suffix appended to the fine-tuned model name (≤120 chars). | |
| training | No | Training data source (required unless training_file_id is given). Either {kind:"file", file_id: string (a provider_file_id from /v1/fine_tuning/files; alias fileId)} or {kind:"dataset", provider_dataset_id: string (alias providerDatasetId; a workspace dataset's provider id), version?: string (≤200), mapping: <column mapping>}. mapping is one of: {type:"text", text:{type:"column", name}} | {type:"prompts", prompt:{type:"column", name}, completion:{type:"column", name}} | {type:"messages", messages:{type:"column", name}} | {type:"pretokenized", input_ids:{type:"column", name}, labels?:{type:"column", name}, attention_mask?:{type:"column", name}}. Datasets are converted to a training file after the wallet gate. The file/dataset MUST belong to this workspace (404 "Training file not found" / "Dataset not found" otherwise). | |
| base_model | Yes | Base model id from the fine-tunable catalog (1..300 chars). Supervised jobs accept only the curated fine-tunable list (400 "This model isn't available for fine-tuning. Pick one from the list."); spec-draft jobs need a model in the spec-draft catalog. camelCase alias baseModel also accepted (camelCase wins if both present). | |
| validation | No | Optional held-out/validation data source, same shape as training ({kind:"file", file_id} or {kind:"dataset", provider_dataset_id, version?, mapping}). Providing one is what makes a later bake-off (POST /v1/fine_tuning/jobs/{id}/bakeoff) possible. | |
| integrations | No | Up to 10 export integrations; ONLY these two types are accepted (anything else is 400): {type:"wandb", wandb:{project (1..200), api_key (1..500), name? (≤200), entity? (≤200), tags? (≤50 strings ≤100)}} or {type:"hf", hf:{output_repo_name (1..200), api_token (1..500)}}. | |
| hyperparameters | No | Supervised hyperparameters, all optional and bounds-checked (400 naming the field otherwise): n_epochs (int 1..100), learning_rate (number >0 and ≤1), batch_size (int 1..1024), context_length (int 128..262144), warmup_ratio (0..1), weight_decay (0..1), packing (boolean), max_grad_norm (>0 and ≤1000), lora (boolean; some bases are full-parameter only → 400 "… supports full-parameter fine-tuning only"), lora_r (int 1..512), lora_alpha (int 1..1024), lora_dropout (0..1). Keys are snake_case only. | |
| training_file_id | No | Legacy shortcut: a provider_file_id to train on (1..500 chars); equivalent to training:{kind:"file", file_id}. Ignored when training is present. Alias trainingFileId. | |
| validation_file_id | No | Legacy shortcut for validation:{kind:"file", file_id}. Alias validationFileId. | |
| spec_draft_hyperparameters | No | Spec-draft hyperparameters (used when method="spec-draft"): the common fields n_epochs, learning_rate, batch_size, context_length, warmup_ratio, weight_decay, packing, max_grad_norm (same bounds as above) plus architecture (string ≤200), num_decoding_heads (int 1..16), loss (string ≤100). Alias specDraftHyperparameters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the annotations by disclosing that the call 'SPENDS MONEY' from the workspace wallet, that a prepay runway is required or the call fails 402, and that the final charge is metered from real trained tokens. It also discloses role requirements, rate limits, the 'scopes not enforced today' caveat, snake_case/camelCase conventions, and exact 400/404 trigger conditions. No contradiction with annotations — readOnlyHint=false, idempotentHint=false, and openWorldHint=true are all consistent with billable, externally-visible side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the two most decision-relevant facts — what the tool does and 'SPENDS MONEY' — before any schema-level detail, and every section carries operational value. It is not a 5 because it is a single dense wall of text that repeats information already present in the schema (e.g., hyperparameter bounds are summarized again), so it could be tightened or lightly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a money-spending mutation with 12 parameters, nested objects, and no output schema, the description covers the response shape (201 {id, provider_job_id}), the mandatory follow-up (poll GET for status and fine_tuned_model), all major error codes with their triggers, the workspace-membership constraint, and the feature-flag gate. Nothing an agent needs to invoke it correctly is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a baseline of 3 applies, but the description adds genuine cross-parameter semantics absent from the schema: training_file_id is 'Ignored when training is present,' top-level keys accept camelCase while nested keys are snake_case only, camelCase wins on base_model if both are present, validation is what enables a later bake-off, and spec_draft_hyperparameters apply only when method='spec-draft'. These precedence and conditional-usage rules meaningfully help an agent construct a valid request.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Start a supervised (SFT/LoRA) or spec-draft fine-tune of a catalog base model on an uploaded file or a workspace dataset.' It names both training modes and both data-source flavors, and makes clear this is the creation entry point versus sibling list/get/cancel tools without needing to inspect them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit preconditions and failure gates: wallet runway (402), OWNER/ADMIN requirement (403), feature-flag gating (404), per-workspace rate limit (429 with Retry-After), and the follow-up flow ('Poll GET /v1/fine_tuning/jobs/{id} for status'). It stops short of a full 5 because it never explicitly contrasts alternative training-related creation tools (e.g., start_grpo_run or create_batch), so the when-not-to-use guidance is implied through failure conditions rather than named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_labelcreate labelA
Record a human or downstream-system pass/fail verdict on a logged request (or on the whole agent run it belongs to) — this is the ground truth judge calibration, corrected pass rates, and training rewards are measured against. POST /v1/labels (API-key scope: evals:write). Returns: 201 with the stored label: { id, request_id, verdict, critique, source ('human'), scope, fail_causes: string[], created_at }. Notes: Upsert by request_id: re-labeling the same request replaces the verdict/critique/scope (newest judgment wins); a 'pass' clears any prior failure attributions. Requires the key's minting user to be workspace OWNER/ADMIN (403) — labels define quality. Side effects: settles pending judge suspicions on the trace, fulfils pending recalibration-slice requests, and flags affected judges' calibrations for revision. Validation errors (e.g. bad scope, over-long critique) return 400 with the schema message.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | "request" (default) grades this one exchange; "trace" grades the whole agent run the request belongs to. Trace-unit judges calibrate only against trace-scoped labels. Unknown values are rejected with 400, never silently dropped. | |
| verdict | Yes | The grade. WARNING: if omitted the route defaults to "pass" — always send it explicitly. | |
| critique | No | Why (max 2000 chars). Strongly encouraged on fails — becomes judge few-shot material and failure-taxonomy text. null allowed. | |
| request_id | Yes | The gateway request id being graded (1..128 chars after trim). For scope=trace, send the run's FINAL-step request id. Missing/empty → 400. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations, disclosing upsert semantics, overwrite behavior, pass-clears-failures, OWNER/ADMIN authorization requirements, and downstream side effects on judge calibration and recalibration slices. It also specifies 201, 400, and 403 outcomes, giving an unusually complete behavioral picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is substantial but every sentence earns its place: purpose, endpoint, auth, return shape, upsert behavior, side effects, and validation errors. It is front-loaded with the core purpose and organized with clear notes, avoiding redundancy with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description provides the return payload, auth requirements, side effects, and validation behavior. Combined with a fully documented input schema, an agent has everything needed to invoke the tool correctly and anticipate consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents every parameter. The description adds meaningful behavioral semantics beyond the schema: re-labeling replaces the prior judgment, the newest wins, and a 'pass' clears prior failure attributions — all of which clarify how verdict, critique, and request_id interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: recording a pass/fail verdict on a logged request or agent run, and explicitly links it to ground-truth judge calibration and training rewards. It is clearly differentiated from read-only siblings like list_labels and from pairwise eval labelling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear context for when to use this tool: when a human or downstream system needs to record the authoritative verdict on a logged request. It explains scope choices and side effects, though it does not explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_label_setcreate label setA
Create a golden set from human-graded requests — either explicit request ids or the newest N grades — as the first step toward a frozen, kappa-measured calibration set for a judge. POST /v1/label_sets (API-key scope: evals:write). Returns: 201 with the set object: { id, name, description, size, membership_hash: null, frozen_at: null, kappa: null, agreement: null, kappa_n: null, rater_count: null, attached_to: [], created_at }. The set is NOT frozen yet. Notes: A set needs at least 20 distinct graded requests (400 'A golden set needs at least 20 graded requests (have N)') and at most 5000. Verifier-sourced labels never count as members. Freeze the set (POST /v1/label_sets/{id}/freeze) before attaching it to a criterion.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Set name, trimmed, 1..80 chars (400 otherwise). | |
| latest | No | When request_ids is absent/empty: take the newest N human grades. Default 200; clamped to 20..5000. | |
| description | No | Optional description; trimmed and truncated to 500 chars. | |
| request_ids | No | Explicit members. Every id must carry a human (non-verifier) grade in this workspace, otherwise 400 naming how many are missing. Deduplicated. Takes precedence over `latest` when non-empty. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a non-read-only, non-idempotent write operation, and the description adds substantial behavioral context beyond that: the HTTP endpoint, API-key scope, exact 201 response shape, the 'NOT frozen yet' state, minimum/maximum size limits, verifier-source exclusion, and the subsequent freeze step. This gives the agent a thorough understanding of side effects and constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured, with the core action front-loaded followed by endpoint, return shape, constraints, and next steps. Every sentence carries actionable information; the explicit response object and error-message snippets earn their place, and the 'Notes:' section keeps constraints scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the full 201 return object; with only sparse annotations, it also provides endpoint, auth scope, size limits, verifier exclusion, and the follow-up freeze workflow. Combined with 100% schema coverage for parameters, an agent has everything needed to invoke this tool correctly and interpret its result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful behavioral semantics: it explains the conceptual distinction between 'explicit request ids or the newest N grades', reinforces that verifier-sourced labels never count, and highlights the minimum distinct graded requests requirement. These details clarify how to choose and validate parameter values beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Create a golden set from human-graded requests') and clearly distinguishes this tool from siblings like freeze_label_set and attach_label_set by emphasizing the set is 'NOT frozen yet' and must be frozen before attaching. It is immediately clear what the tool produces and where it fits in the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear sequencing context — this is the 'first step' toward a frozen calibration set, and 'freeze the set before attaching it to a criterion' — so an agent understands when to use it relative to freeze_label_set and attach_label_set. It does not explicitly name alternative tools or give direct when-not-to-use conditions, but the workflow guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decontaminate_textsdecontaminate textsA
Checks a batch of texts against the public-benchmark contamination index (13-word shingles of well-known test splits) and reports which inputs share material with which benchmark — use it before training so later benchmark scores measure capability, not memorised answer keys. POST /v1/datasets/decontaminate (API-key scope: evals:write). Returns: { checked: <int, texts actually checked; 0 when the index was unavailable>, index: { version, generatedAt (camelCase — passed through verbatim), benchmarks: [{id, name, rows}] } | null, hits: [{ index: , benchmark: , benchmark_id, matches: }], contaminated: <sorted unique int[] of input positions with any hit> }. Notes: 400 on invalid JSON, when texts is not an array of strings, or when it exceeds 5,000 items. index: null means the benchmark index was unavailable and NOTHING was checked — never treat that as clean. 'Clean' is a claim about THOSE benchmarks on THAT index date only. Free (no judging, no wallet spend). Response is Cache-Control: no-store. One text can produce multiple hits (one per benchmark it overlaps).
| Name | Required | Description | Default |
|---|---|---|---|
| texts | Yes | Array of strings to check (each item must be a string). At most 5,000 per call. Positions in this array are the `index` values in the response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the annotations, which only carry readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false. The description discloses the critical trap that 'index: null means... NOTHING was checked — never treat that as clean,' scopes 'clean' to those benchmarks on that index date, notes one text can produce multiple hits, documents the 400 error conditions, and states it is free with Cache-Control: no-store. No contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every section earns its place: purpose, usage timing, endpoint/scope, full return shape, error conditions, and caveats. With no output schema present, the detailed return documentation is necessary rather than padding. Slightly dense, but the tricky null-index semantics justify the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a tool of this complexity. Since there is no output schema, the description fully documents the return object, error paths, and the most dangerous behavior (null index ≠ clean) that could silently corrupt downstream training decisions. The annotations cover the mutation/idempotency profile and the schema covers the single parameter, so nothing needed for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the schema already documents that `texts` must be an array of strings, capped at 5,000 items, and that array positions map to response `index` values. The description adds the 400-on-invalid-input behavior and repeats the 5,000 cap, but the parameter's meaning itself is fully carried by the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: 'Checks a batch of texts against the public-benchmark contamination index... and reports which inputs share material with which benchmark.' The mention of 13-word shingles and well-known test splits makes the mechanism concrete, and nothing in the ~130-tool sibling list covers benchmark contamination checking, so the tool is unmistakably distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'use it before training so later benchmark scores measure capability, not memorised answer keys' — a clear when-to-use directive with the rationale behind it. It doesn't name alternatives or when-not-to-use cases, but there is no competing contamination-check tool among the siblings, so that omission is not a practical gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_aliasdelete aliasADestructiveIdempotent
Remove a model alias; requests still using that name will fail afterwards, so this is a cutover step, not cleanup. DELETE /v1/aliases/{id} (API-key scope: aliases:write). Returns: 200 { ok: true } Notes: OWNER/ADMIN only (403). 404 "Alias not found" when the id is not in this workspace. Audited with the model it pointed at.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The alias id (from GET /v1/aliases), not its name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish that this tool is destructive and not read-only; the description adds substantial beyond-annotation context: API-key scope (aliases:write), role restrictions (OWNER/ADMIN only, 403), not-found behavior (404 when the id is not in the workspace), the fact that users of the alias will break, and that the action is audited with the model it pointed at. No contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, consequence, endpoint, scope, return value, permission error, not-found error, and audit trail. The most decision-relevant behavior is front-loaded in the first clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive operation with no output schema, the description fully compensates: it states the success response, error cases, required permissions, workspace behavior, and audit side effect. Nothing an agent needs to safely invoke or reason about this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, id, and the schema already fully describes it including the important caveat that it is the alias id from GET /v1/aliases, not its name. The description adds no additional parameter-level meaning beyond restating the endpoint, so the high-coverage baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Remove a model alias') and immediately adds the key semantic distinction ('cutover step, not cleanup'), so an agent can tell it apart from alias creation, listing, and general cleanup operations. The HTTP method and endpoint reinforce the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says this is a cutover step rather than cleanup and warns that requests still using the alias will fail afterward. It gives clear context for when to call it, though it does not name a specific sibling alternative for non-cutover cleanup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_criteriondelete criterionADestructiveIdempotent
Permanently delete a criterion and its calibration history. DELETE /v1/criteria/{id} (API-key scope: evals:write). Returns: 200 { id, deleted: true } Notes: OWNER/ADMIN only (403). 404 "Criterion not found" when not in this workspace. Aliases gated on this criterion lose their gate.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Criterion id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It goes well beyond the destructiveHint annotation by disclosing that calibration history is permanently lost and that aliases gated on this criterion lose their gate. It also specifies the permission requirement and error cases, providing a clear behavioral contract. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence serves a purpose: core action, endpoint/API scope, return shape, permission, error behavior, and side effects. It is dense but not bloated, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter delete with no output schema, the description is complete: it documents the response, permissions, not-found behavior, and cascading side effect on aliases. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers the only parameter (id) with 100% coverage, so the description does not need to add param-level detail. The baseline of 3 applies; the description does not contribute extra parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action on a specific resource: 'Permanently delete a criterion and its calibration history.' This clearly identifies the tool's purpose and distinguishes it from siblings like delete_alias and delete_eval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context (OWNER/ADMIN only, workspace-scoped 404, alias side effects) but does not explicitly state when to use this tool versus alternatives such as update_criterion or delete_alias. The usage is implied by the delete verb rather than explicitly routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_dedicated_endpointdelete dedicated endpointADestructiveIdempotent
Tears down a dedicated endpoint: meters and bills the GPU-hours accrued since the last meter, frees the reserved GPUs, and marks it DELETED — the way to permanently stop paying for an endpoint. DELETE /v1/dedicated/{id} (API-key scope: platform:write). Returns: { ok: true } on success. Notes: Requires an OWNER/ADMIN minting user (403). 404 'Endpoint not found' (already-deleted endpoints also 404). MONEY: runs a final meter first (bills accrued GPU-hours), then releases the endpoint; soft-deleted (status DELETED, enabled=false) and excluded from later lists. Not reversible. Scope note: local dedicated apiKeyActor does not enforce key scopes.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Dedicated endpoint id (must belong to the key's workspace). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it destructive and non-readonly, but the description adds crucial behavioral context: a final meter/billing step, soft-delete semantics, exclusion from lists, non-reversibility, authorization scope, and the 404 behavior for already-deleted endpoints. This goes well beyond the annotations and fully discloses consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place, covering action, billing effect, API details, permissions, error cases, and irreversibility. It is front-loaded with the core purpose and then layers supporting details efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, billing-affecting operation with no output schema, the description is complete: it states the response shape, required permissions, error behavior, side effects, and irreversibility. An agent has everything needed to invoke it correctly and understand consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for the single 'id' parameter, including a clear description. The tool description adds no additional parameter-level meaning beyond what the schema states, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Tears down') and resource ('dedicated endpoint'), and explains the result: billing accrued GPU-hours, freeing GPUs, marking DELETED, and stopping payments. It clearly distinguishes this from related endpoint operations like update or create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains exactly when to use this tool ('the way to permanently stop paying for an endpoint') and gives prerequisites (OWNER/ADMIN, workspace ownership). It doesn't explicitly name alternatives or say when not to use it, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_env_tooldelete env toolADestructiveIdempotent
Revokes a declared agent tool registration (consent withdrawal) so training environments can no longer call that endpoint. DELETE /v1/env/tools/{id} (API-key scope: platform:write). Returns: { ok: true } on success. Notes: Gated behind the fineTuning feature flag (404 'Fine-tuning is not enabled' when off). Requires an OWNER/ADMIN minting user (403). 404 'Tool not found' when the id is not in the workspace. Hard delete; writes an audit event.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Tool registration id (from GET /v1/env/tools; must belong to the key's workspace). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true, and the description substantially enriches this with the hard-delete nature ('Hard delete'), the audit event side effect, the fineTuning feature-flag gate producing 404, the OWNER/ADMIN 403 condition, and the workspace-scoped 404 for unknown ids. The described 404-on-missing behavior is consistent with the idempotentHint annotation. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, endpoint and API-key scope, return shape, feature-flag gate, permission requirement, not-found case, and side effect. It is front-loaded with the purpose statement and uses compact parentheticals and labeled fields to preserve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive single-parameter tool with no output schema, nothing critical is missing: the return value is stated ({ ok: true }), all expected error states (404 feature off, 403 permissions, 404 not found) are enumerated, auth scope and side effects are described, and the schema covers the only parameter. An agent has everything needed to invoke it correctly and anticipate failures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema's id field already documents its source (GET /v1/env/tools) and workspace constraint, so the baseline of 3 applies. The description adds modest value by tying an out-of-workspace id to the 404 behavior, but it does not introduce new parameter-level details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Revokes a declared agent tool registration (consent withdrawal) so training environments can no longer call that endpoint.' This precisely distinguishes the tool from its siblings, particularly register_env_tool and list_env_tools, by stating the action, the resource affected, and the consequence. Including the DELETE endpoint reinforces the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose statement implies when to use it (consent withdrawal for a previously registered agent tool), and the prerequisites are spelled out: fineTuning feature flag must be on, and an OWNER/ADMIN minting user is required. However, it never explicitly names alternatives or when-not-to-use conditions; given siblings like register_env_tool, explicit routing would have been valuable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_evaldelete evalADestructiveIdempotent
Permanently delete a finished (DONE|ERROR|CANCELLED) eval run together with its samples, generated answers and judge verdicts — for cleaning up runs a customer no longer needs as evidence. DELETE /v1/evals/{id} (API-key scope: evals:write). Returns: 200 {id} of the deleted run. Notes: Requires an OWNER/ADMIN minting user (403 otherwise). A PENDING|RUNNING run is refused with 400 "Cancel it first — a live run can't be deleted." — call POST /v1/evals/{id}/cancel first. 404 if not found in this workspace. Deletion is irreversible and cascades to samples/outputs/verdicts; the models, judges and criteria the run referenced are untouched. After deletion GET /v1/evals/{id}/gate and /evidence return 404. No spend.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The eval run id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description adds extensive behavioral context: irreversibility, cascading deletion of samples/outputs/verdicts, preservation of models/judges/criteria, OWNER/ADMIN requirement, 400/403/404 error conditions, return payload, post-deletion GET behavior, and 'No spend'. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries operational value: action, endpoint, auth scope, response, preconditions, alternative action, errors, and side effects. Although long, it is front-loaded with the core purpose and then systematically adds necessary caveats for a destructive operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description is exceptionally complete. It covers prerequisites, authentication, error codes, cascading effects, unaffected resources, return value, and post-deletion observable behavior. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter 'id' is already documented as 'The eval run id'. The description reinforces that the id identifies the eval run and explains 404 behavior for a missing id, but adds no meaningfully new parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb ('Permanently delete'), a specific resource ('finished eval run'), and the exact state scope (DONE|ERROR|CANCELLED). It clearly distinguishes this from sibling delete tools like delete_criterion or delete_dedicated_endpoint by naming the eval-run resource and its completion states.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use it ('cleaning up runs a customer no longer needs as evidence'), when not to use it (PENDING|RUNNING refused), and what to do instead (call POST /v1/evals/{id}/cancel first). This gives the agent complete routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_audit_logexport audit logARead-onlyIdempotent
Export this workspace's audit rows with their hash-chain fields (seq, prev_hash, row_hash) as CSV or JSON, so a recipient can verify a later export reproduces the same hashes. GET /v1/audit/export (API-key scope: read). Returns: format=json: { rows: [{ id, timestamp, event_type, category, status, actor_id, actor_email, actor_role, target_type, target_id, description, seq, prev_hash, row_hash }], truncated: boolean }. format=csv: text/csv attachment (Content-Disposition audit-.csv) with header row seq,timestamp,event_type,category,status,actor_id,actor_email,actor_role,target_type,target_id,description,prev_hash,row_hash,id; header X-Truncated: true when the limit cut the result. Notes: Rows ordered by timestamp then seq ascending. Returns an empty set (not an error) if the log store is unavailable. Cache-Control: no-store.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows, positive integer; silently capped at 50000. Default: 50000. | |
| since | No | ISO-8601 datetime lower bound (inclusive) on the row timestamp. 400 if unparseable. | |
| until | No | ISO-8601 datetime upper bound (inclusive). 400 if unparseable. | |
| format | No | Output format. Default: "csv". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the annotations: row ordering, silent cap at 50000, truncated indicator semantics, empty-not-error behavior, Cache-Control no-store, and exact CSV/JSON shapes. Annotations already declare readOnlyHint=true and idempotentHint=true; the description fully aligns with these, noting the API key scope and read-oriented export behavior. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is complete and front-loaded with the core export purpose, then format and endpoint details, then notes. It is long but each sentence carries functional value (ordering, truncation, empty set, cache), and the structure keeps the most decision-relevant information near the top. It could be tightened slightly, but for a tool with four parameters and two output formats this is appropriately dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four optional parameters, full schema coverage, no output schema, and annotations covering safety, the description covers the necessary invocation details: endpoint, auth scope, exact JSON return fields, CSV header and Content-Disposition, truncation indicator, ordering, cap, empty-set behavior, and caching. An agent has enough to select, call, and interpret results without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the baseline is 3; the description adds useful behavioral context around parameters: limit is silently capped at 50000 (schema says the same, but description reinforces the default and cap effect), since/until constrain row timestamp, and format's default is csv, matching the schema. It slightly clarifies that the date bounds are inclusive and HTTP 400 on unparseable values, which is already in the schema, but also explains how the format changes the response (JSON vs CSV attachment).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a precise verb (export) and resource (this workspace's audit rows), and details the hash-chain fields (seq, prev_hash, row_hash) that distinguish it from other audit-related tools. It clearly differentiates export_audit_log from siblings such as list_logs/export_logs and the audit tombstone/verification tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the tool returns audit rows for verification of hash consistency, says it exports as CSV or JSON, and notes the empty-set behavior when the log store is unavailable. It explains the accepted formats and response details, though it does not explicitly enumerate when to prefer this over sibling tools or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_logsexport logsARead-onlyIdempotent
Export the filtered logged exchanges as JSONL in chat format — one {"messages":[...]} line per exchange with the assistant reply appended — ready to pipe into your own training or eval tooling. GET /v1/logs/export (API-key scope: read). Returns: 200 with Content-Type application/jsonl; charset=utf-8. Body: newline-terminated lines, each {"messages": [ ...request messages, assistantReplyMessage ]}, newest first. Response headers: X-Omnia-Export-Count (lines written) and X-Omnia-Export-Capped ('true' when the 10,000-row cap was hit — narrow the filter, e.g. a time range, to get the rest). Notes: No limit/offset — the export is capped at 10,000 rows; use X-Omnia-Export-Capped to detect truncation. Rows whose stored JSON doesn't parse are skipped, never fail the export. 409 { error: string } (flat shape) when request logging is disabled for the workspace. Only successful (non-aborted) exchanges are exported.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Upper bound, Unix seconds. | |
| tag | No | Exact request tag filter. | |
| model | No | Exact model name filter. | |
| start | No | Inclusive lower bound, Unix seconds. | |
| segment | No | Auto-detected traffic segment (prompt family) — exact match, same values as GET /v1/logs rows' `segment`. | |
| cache_hit | No | "true" or "false". | |
| finish_reason | No | Exact finish-reason filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses numerous non-obvious behaviors: the 10,000-row cap with no limit/offset, the X-Omnia-Export-Capped truncation header, skipped malformed rows rather than failures, a 409 when request logging is disabled, and exclusion of aborted exchanges. These add real context beyond what annotations provide, and there is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every clause earns its place: endpoint, auth scope, response content type, line format, ordering, headers, cap behavior, malformed-row handling, and error shape. It is front-loaded with the core purpose and then layers operational specifics without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description fully compensates by detailing the JSONL body format, headers, error cases, truncation detection, and filter advice. An agent has everything needed to invoke and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: all 7 parameters (start, end, model, tag, segment, cache_hit, finish_reason) have individual descriptions in the schema. The tool description adds general filtering context (e.g., 'narrow the filter') but does not elaborate on individual parameters, so the schema carries the burden; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Export the filtered logged exchanges as JSONL in chat format', naming the verb, resource, and output format in one precise sentence. It further specifies the assistant reply appended and the training/eval use case, which cleanly distinguishes it from siblings like list_logs or export_audit_log without needing to inspect their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the intended use case ('ready to pipe into your own training or eval tooling') and gives actionable advice when the cap is hit ('narrow the filter, e.g. a time range'). However, it does not explicitly name sibling alternatives or state when not to use this tool, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
freeze_label_setfreeze label setA
Freeze a golden set: seal its membership with a hash and measure inter-rater agreement (kappa) on its members — required before a judge can calibrate on it. POST /v1/label_sets/{id}/freeze (API-key scope: evals:write). Returns: 200 with the updated set object: { id, name, description, size, membership_hash (sha256 of sorted member ids), frozen_at (ISO), kappa: number|null, agreement: number|null, kappa_n: integer|null, rater_count: integer, attached_to: [ { id, name } ], created_at }. Notes: No body. Re-freezing an already-frozen set re-measures kappa/agreement/rater_count but keeps the original frozen_at and membership. kappa is null (and reported as null, never as good) when fewer than two raters' blind re-grades exist inside the set. 400 if inter-rater stats are unavailable.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The golden set id (workspace-scoped; 404 'Golden set not found' otherwise). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses important behaviors beyond annotations: re-freezing re-measures kappa but preserves original frozen_at and membership, kappa is null rather than 'good' when insufficient raters exist, 400 is returned when inter-rater stats are unavailable, and the endpoint requires evals:write scope. This is rich, honest behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then organized into endpoint, response shape, and edge-case notes. Every sentence carries useful information; there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully compensates by enumerating the complete returned object and its field types. It also covers idempotency nuances, null semantics, and error conditions, making the tool's behavior fully understandable for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the id parameter is already documented as workspace-scoped with a 404 case. The description adds the endpoint path and no-body requirement, but does not substantially expand parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: freeze a golden set, seal membership with a hash, and measure inter-rater agreement (kappa). The unique behavior clearly distinguishes it from sibling label-set tools like create_label_set or attach_label_set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context by saying freezing is required before a judge can calibrate on the set, and explains re-freezing behavior. It does not explicitly name alternatives or state when-not-to-use, but the usage context is unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audit_verificationget audit verificationARead-onlyIdempotent
Read the latest nightly whole-chain integrity verification of the audit log (ok flag, rows checked, head seq, problems found, acknowledged gaps) plus the tombstone list, as the platform's integrity statement. GET /v1/audit/verify (API-key scope: read). Returns: { verification: { ran_at, ok, checked_rows, head_seq, problems: [{ seq, kind, detail }], acknowledged (count) } | null, tombstones: [{ seq, reason, created_at }], statement: string describing the hashing scheme } Notes: verification is null until the first nightly run has stored a result. The chain is platform-global; your own rows' hashes come from GET /v1/audit/export. Cache-Control: no-store.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the strong readOnly/idempotent/non-destructive annotations, the description discloses material behavior: verification is null until the first nightly run, the response schema and fields, Cache-Control: no-store, API-key scope, and the platform-global chain scope. These add real operational context an agent cannot infer from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries necessary information: the operation, endpoint, auth, full return shape, null behavior, and the key distinction from export_audit_log. The key purpose is front-loaded and the structured return example is easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description fully compensates by specifying the complete response object, the null-before-first-run behavior, the tombstone list, and the relationship to audit export. Nothing needed to invoke and interpret this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty schema, so there is no parameter ambiguity to resolve. The description still supplements the schema by documenting the endpoint and authentication scope, meeting the baseline for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Read the latest nightly whole-chain integrity verification of the audit log... plus the tombstone list.' It clearly identifies this as the platform's integrity statement and distinguishes it from export_audit_log by noting that own-row hashes come from GET /v1/audit/export.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this reports the platform-global integrity verification, not your own rows' hashes, which are handled by GET /v1/audit/export. It doesn't explicitly contrast with sibling list_audit_tombstones or verify_document, so alternative guidance is partial rather than exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_batchget batchARead-onlyIdempotent
Fetch one batch job with its status, request counts and output/error file ids refreshed live from the processing backend, to poll for completion. GET /v1/batches/{id} (API-key scope: read). Returns: { id, nebius_batch_id, endpoint, status, request_total, request_completed, request_failed, completion_window, billed_cost_usd, created_at, output_file_id, error_file_id, error } Notes: Best-effort live reconciliation: if the upstream status lookup fails the stored row is returned unchanged. Billing still happens in the background reconciler, not on this read. 404 "Batch not found" outside the workspace; 404 while the batch flag is off.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The batch id from POST /v1/batches or GET /v1/batches (the platform id, not the upstream batch id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/destructive annotations, the description discloses important live-behavior details: best-effort reconciliation may return the stored row unchanged, billing is deferred to a background reconciler, and 404 behavior depends on workspace and feature flag. This gives the agent accurate expectations of side effects and failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but well organized: core purpose first, then endpoint/scope, return shape, and edge-case notes. Every sentence contributes useful operational context, though the return-field list makes it slightly longer than minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the return fields. It also covers API-key scope, live reconciliation semantics, billing side effects, and 404 edge cases. For a simple one-parameter read tool, this is fully sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes the one required parameter with 100% coverage, including the distinction between platform id and upstream batch id. The description adds no new parameter-level semantics beyond restating the endpoint path, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource—'Fetch one batch job'—and clearly states the live status/count/file-id retrieval purpose. It is immediately distinguishable from sibling tools like list_batches (bulk listing) and cancel_batch (mutation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'to poll for completion' gives a clear, actionable use case, and the 404 notes explain when the tool will fail. It does not explicitly name alternatives or state when not to use it, but the single-resource framing sufficiently guides selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_criterionget criterionARead-onlyIdempotent
Fetch one criterion with its current calibration metrics, trust verdict and the intervals it was derived from. GET /v1/criteria/{id} (API-key scope: read). Returns: The criterion object: id, name, description, judge_prompt, judge_model, status, source, unit, population, population_family, online_enabled, online_percent, online_cap_usd, online_spent_usd, tier, trust, fail_grades_needed, pass_grades_needed, tpr_ci, tnr_ci, drift_status, drift_signal, drift_reason, drift_checked_at, tpr, tnr, kappa, alignment_n, aligned_at, created_at Notes: 404 "Criterion not found" when the id is not in this workspace. Derivations (trust, drift) match GET /v1/criteria exactly.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Criterion id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and non-destructive; the description adds valuable behavior beyond that: the exact returned field list, the 404 'Criterion not found' condition for ids outside the workspace, and the note that trust/drift derivations are identical to GET /v1/criteria.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and API endpoint before the detailed field list. The field enumeration is long but justified because there is no output schema; still, it could have been slightly more compact without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully compensates by enumerating the return fields, documenting the 404 error case, and noting the read scope. For a single-resource read operation, nothing essential is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with 'Criterion id.', so the baseline is 3. The description enriches this by showing the id is used as a path parameter in GET /v1/criteria/{id} and clarifying that a missing or out-of-workspace id results in a 404 rather than an empty result.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Fetch one criterion' with its calibration metrics, trust verdict, and derived intervals. This distinguishes it from sibling tools like list_criteria or get_criterion_certificate by specifying exactly what payload this single-criterion fetch returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates this is the tool to retrieve one specific criterion by id, including metrics and trust verdicts. It does not explicitly name alternative tools or exclusion conditions, but the 'one criterion' phrasing and the note that derivations match GET /v1/criteria provide usable context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_criterion_alignmentget criterion alignmentARead-onlyIdempotent
Read the persistent report from the criterion's last calibration run: metrics with intervals, population breakdown, threshold sweep, and every judge/human disagreement with the human's critique and a response excerpt. Free; it never re-judges. GET /v1/criteria/{id}/alignment (API-key scope: read). Returns: { aligned_at, scope_tag, tag_breakdown: [{ tag, n }], mixed_population, tier, thin_alignment_set, metrics: { n, tpr, tpr_ci, tnr, tnr_ci, kappa }, threshold_analysis: { half ("tune"|"all"), sweep: { n, ungraded, argmax: metrics, best: { threshold, metrics, youden_j }|null, curve: [{ threshold, metrics, youden_j }], note }, report_check: { threshold, n, metrics, youden_j, argmax }|null }|null, agreements (count), disagreements: [{ request_id, judge_verdict, human_verdict, critique, tag, response_excerpt }] } Notes: 404 "Criterion not found". 400 "This criterion has no alignment run yet" when never calibrated or after a voiding edit; 400 "Alignment run in progress — N labels judged so far" while a background run is in flight (use it to poll). threshold_analysis is null for runs recorded before logprob grades were stored. All nested keys are snake_case.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Criterion id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial context: it is free, never re-judges, returns a persistent report, supports polling via a specific 400 error, and explains when threshold_analysis is null. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed but well-structured, front-loading purpose and scope before the return shape and error notes. Every sentence adds relevant information, especially since there is no output schema to document the response.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderately complex return object, lack of an output schema, and single simple parameter, the description is complete: it documents the full return structure, error cases, polling behavior, historical null caveat, and key naming convention. An agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter, id, described as 'Criterion id,' and schema description coverage is 100%. The description adds the endpoint pattern using {id}, but does not need to elaborate further because the parameter is simple and already documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Read') and a precise resource: the persistent report from the criterion's last calibration run. It enumerates the report contents and explicitly distinguishes itself by saying it never re-judges, making it easy to separate from run_criterion_alignment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly communicates when to use this tool: to read an existing alignment report, poll an in-progress run, or check why no report exists. It says it is free and never re-judges, which implies a safe alternative to running alignment, but it does not explicitly name run_criterion_alignment as the counterpart tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_criterion_certificateget criterion certificateARead-onlyIdempotent
Returns the signed judge certificate for a criterion — what was proven (confusion matrix, TPR/TNR/kappa with intervals, trust verdict), on which population, what voids it, and what enforcement refused involving it — for audits, evidence bundles, or proving a judge's calibration to a third party. GET /v1/criteria/{id}/certificate (API-key scope: read). Returns: A JSON document whose keys are camelCase (NOT snake_case — it is emitted verbatim so its signature can be re-derived): signature: {alg:'HS256', key_id, value} | null (with unsigned: true when no signing secret is configured), criterionId, name, question (the judge prompt), unit ('request'|'trace'), judgeModel, issuedAt, calibration: {measured, matrix: {tp,fp,tn,fn}|null, metrics: {n, tpr, tprCi, tnr, tnrCi, kappa}|null, labels, holdoutActive (labels >= 80), alignedAt, goldenSet: {id, name, size, membershipHash, frozenAt, humanKappa, humanAgreement, humanKappaN, raterCount}|null}, trust: {trust: 'trustworthy'|'misaligned'|'under-measured'|'borderline'|'unmeasured', failGradesNeeded, passGradesNeeded, tprCi, tnrCi} (or just {trust:'unmeasured'}), population: {tag, segment, unit, statement}, validity: {driftStatus: 'ok'|'flagged', driftSignal: 'stale'|'quality_drop'|'suspicious_rise'|'evidence_revised'|null, driftReason, driftCheckedAt, voidedBy: string[]}, enforcement: {windowDays: 90, refusalsInvolvingJudge, lastReason}. Notes: Free (no judging). 404 if the criterion is not in the workspace. Response is Cache-Control: no-store. Hand the WHOLE JSON object to POST /v1/verify to check the signature later. An uncalibrated judge still returns a certificate that honestly says nothing is measured (calibration.measured=false, trust.trust='unmeasured'). enforcement counts refusal-ledger rows from the last 90 days whose subject is this criterion or whose reason names it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Criterion id (must belong to the key's workspace). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnly/idempotent annotations: it discloses that the call is free and does no judging, returns 404 for out-of-workspace criteria, uses Cache-Control: no-store, returns unsigned certificates when no signing secret is configured, and honestly reports unmeasured calibration. It also explains the camelCase/verbatim emission so the signature can be re-derived, which is critical behavioral context. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but tightly structured: a one-sentence summary, endpoint and auth scope, response shape, then operational notes. Every block earns its place, especially because there is no output schema, so the detailed inline JSON shape is necessary rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complete description for a one-parameter GET: endpoint, auth scope, full response shape, signature verification flow, error condition, caching behavior, and degenerate uncalibrated case are all specified. An agent has everything needed to decide when to call it and what to do with the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single `id` parameter, so the schema already carries the semantic weight. The description adds the 404-out-of-workspace behavior and repeats the path/workspace membership, but it does not materially change or extend parameter semantics beyond what the input schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb/resource: 'Returns the signed judge certificate for a criterion' and names the exact contents and use cases (audits, evidence bundles, proving a judge's calibration to a third party). This distinguishes it from siblings like get_criterion or is_my_judge_trustworthy by focusing on a signed, verifiable certificate rather than the criterion definition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use contexts: 'for audits, evidence bundles, or proving a judge's calibration to a third party.' It does not explicitly say when not to use it or name a sibling alternative, but the context is clear enough for an agent to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dedicated_endpointget dedicated endpointARead-onlyIdempotent
Returns one dedicated endpoint's current view (live status, frozen hourly price, unbilled accrued cost, routing key) — use it to poll a deploy until RUNNING or to check spend. GET /v1/dedicated/{id} (API-key scope: read). Returns: A single endpoint object, snake_case: { id, name, description, model_name, flavor_name, gpu_type, gpu_count, region, min_replicas, max_replicas, status, enabled, hourly_rate_usd, pending_cost_usd, routing_key, base_url, last_metered_at, created_at }. Notes: Scope via requiredScopeFor is 'read'; the local dedicated apiKeyActor does not enforce scopes. Implemented by listing the workspace's endpoints (live-reconciled) and picking the id, so it costs a full list call. 404 'Endpoint not found'.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Dedicated endpoint id (must belong to the key's workspace; deleted endpoints 404). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive; the description adds meaningful behavior beyond that: the exact GET route, API-key scope, note that the local apiKeyActor does not enforce scopes, the fact that it is implemented via a full live-reconciled list call, and the 404 behavior. This is rich, non-obvious operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and use cases, then provides the route, return shape, and critical caveats. Every sentence carries useful information, and despite its length, no part is redundant or wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description enumerates the full snake_case object shape, explains auth scope behavior, ownership requirements, implementation cost, and error semantics. For a one-parameter read tool, this is complete enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the single parameter's description already covers the workspace ownership constraint and deleted-endpoint 404 behavior. The description repeats the 404 and scoping context but adds little beyond the schema for the parameter itself, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Returns one dedicated endpoint's current view' with concrete fields (live status, frozen hourly price, unbilled accrued cost, routing key). It clearly distinguishes itself from list_dedicated_endpoints by returning a single object, and even names its use cases, so an agent can tell it apart from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to call it: 'use it to poll a deploy until RUNNING or to check spend.' This gives clear context and intent. It does not explicitly name alternatives or when-not-to-use it, but the primary use cases are well conveyed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_evalget evalARead-onlyIdempotent
Fetch one eval run's status, progress and — once DONE — its full results (per-arm win rate with CI, W/T/L, latency, eval cost, savings, or corrected pass rates for criterion runs); poll this after creating a run. GET /v1/evals/{id} (API-key scope: read). Returns: The run object: {id, name, rubric, rubric_type, eval_kind, criterion_snapshot, baseline_model, candidate_models, arms:[{key, model, label, system, tools, n}], judge_model, sample_count, sample_filters:{model?, tag?, segment?, dataset_id?, trace_replay?, screening?}, status (PENDING|RUNNING|DONE|ERROR|CANCELLED), error (null, a failure reason, or "Cancelled by "), results (see list_evals for the comparison / criterion / screening shapes), assertions, created_at, progress_ratio (0..1; completed inference units over total — feed a progress bar)}. Notes: 404 {code:"not_found"} when the run is not in this key's workspace. results is null until DONE. A DONE screening's results.screening carries the similarity lens (match rate — never part of win/loss), quality-vs-cost placement per candidate and a recommendation (a "keep" is a first-class good outcome). Read-only, no spend.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The eval run id returned by POST /v1/evals. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description goes well beyond annotations by disclosing that results is null until DONE, that a 404 indicates the run is not in the key's workspace, how progress_ratio is computed, and the screening result semantics. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but the complexity of the return object justifies the length. It is front-loaded with the core purpose, followed by endpoint, response shape, and edge-case notes. Every sentence carries useful information, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the full burden of explaining the return value. It does this thoroughly: listing the run object's fields, status enum, error semantics, results behavior, and progress_ratio. For a complex polling tool, this is complete enough for an agent to call and interpret the response correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, id, and the schema already fully documents it as 'The eval run id returned by POST /v1/evals.' Since schema description coverage is 100%, the baseline is 3. The description adds endpoint context and key-scope information, but not substantial new parameter meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Fetch one eval run's status, progress and — once DONE — its full results.' This clearly identifies the tool as a single-run polling/retrieval operation, distinguishing it from siblings like list_evals and compare_evals without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool: 'poll this after creating a run.' It also clarifies that results are null until DONE, which guides polling behavior. It does not explicitly enumerate when not to use alternatives, but the usage context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eval_evidenceget eval evidenceARead-onlyIdempotent
Download the forwardable proof bundle for a DONE eval run — verdict, frozen judge calibration and certificate, per-sample verdict lineage, refusal ledger events and an audit hash-chain attestation, optionally with the embedded CI-gate decision — so a customer can hand a reviewer or auditor one signed JSON that links claim to instrument to data. GET /v1/evals/{id}/evidence (API-key scope: read). Returns: 200 bundle (snake_cased): {signature|null, unsigned?:true (when no signing secret is configured), bundle_v:1, generated_at, run:{id, workspace_id, name, eval_kind, status:"DONE", created_at, sample_count, baseline_model, candidate_models, judge_model, rubric_type, sample_filters, assertions}, results (verdict verbatim), gate:{params, verdict}|null (only when at least one gate param was given), instrument:{judge_model, judge_prompt, criterion_snapshot, certificate|null, note|null}, samples:{count, note, lineage:[{sample id, every verdict with the ordering that measured it ("ab"/"ba" pairwise halves, "abs" absolute, "sim" screening similarity), prompt/answers only with with_content}]}, content:{included, reason}, refusals:{window_days, scope, count, complete, events:[{kind, subject, reason, created_at}]}, attestation:{ok, checked_rows, head_seq, problems:[{seq, kind, detail}], acknowledged, window:{since, until, from_seq}|null, chain_head:{seq, last_hash}|null, statement}}. Notes: 404 for a run outside this key's workspace. 412 {code:"precondition_failed"} for any run that is not DONE (PENDING/RUNNING/ERROR/CANCELLED) — fail closed like the gate; poll until DONE. with_content silently degrades (never errors) when request logging is off. Read-only, no spend.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The eval run id (must be DONE). | |
| model | No | Restrict the embedded gate checks to one arm/model key. | |
| min_win_rate | No | 0..1. Embed the same gate evaluation as GET /v1/evals/{id}/gate: every candidate's win-rate CI lower bound must clear this. Values outside 0..1 or non-numeric are ignored. | |
| with_content | No | Pass the literal string "true" to include sampled prompts and generated answers in samples.lineage. Honoured only when the workspace has request logging (content storage) enabled; otherwise lineage stays ids/verdicts only and content.reason explains why. Default: false. | |
| min_pass_rate | No | 0..1. Criterion runs: corrected pass-rate CI lower bound (observed CI when the judge is unvalidated) must clear this. | |
| noninferiority_margin | No | 0..1. The certified switch test (see get_eval_gate). | |
| min_assertion_pass_rate | No | 0..1. Exact all-assertions pass rate must clear this. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and not destructive, and the description adds substantial behavioral context: 'Read-only, no spend,' 404/412 error specifics, silent degradation of with_content when logging is off, unsigned bundles when no signing secret exists, and 'fail closed like the gate.' No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but the length is largely justified by the absence of an output schema: the detailed return payload must live somewhere. It front-loads purpose and uses compact, structured formatting for the response fields. Some redundancy exists (e.g., 'Read-only, no spend' overlaps with annotations), but the density is mostly earned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, seven parameters, and no output schema, the description is remarkably complete: it specifies the exact response shape, conditional fields, error codes, silent degradation behavior, and authentication scope. An agent has enough information to invoke the tool correctly and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description mentions with_content degrading and gate parameters being embedded, but it does not add much beyond the schema's own parameter descriptions. It is adequate but not additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Download the forwardable proof bundle') and a specific resource ('a DONE eval run'), then enumerates the bundle's contents in detail. It clearly differentiates this from sibling tools like get_eval_samples or get_eval_gate by emphasizing the audit/attestation purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when the tool applies ('for a DONE eval run', 'hand a reviewer or auditor') and gives operational guidance: poll until DONE, fail closed, 404 outside workspace. It does not explicitly name alternatives or say when not to use this versus get_eval_gate or get_eval_samples, but the purpose and conditions are clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eval_gateget eval gateARead-onlyIdempotent
Turn a finished eval run into a CI deploy decision with one call — 200 when every requested threshold passes, 412 otherwise — so a pipeline can curl -f it and block a bad model/prompt change. GET /v1/evals/{id}/gate (API-key scope: read). Returns: {pass: boolean, status: run status, checks:[{check: "win_rate"|"pass_rate"|"assertion_pass_rate"|"noninferiority", model, required, actual (CI lower bound or exact rate, null when unavailable), pass, note?}], reason? (set when the gate could not evaluate: run not DONE, run ERROR, or no thresholds given)}. HTTP 200 only when pass is true; 412 whenever anything failed. Notes: 412 (not 4xx-error shape — the verdict body itself) when: the run is not DONE ("Run not complete yet — poll until status is DONE." — fail closed), the run is ERROR, no threshold param was passed, or any check fails. Query values must parse as numbers in 0..1; anything else is treated as absent. 404 {error:{…}} when the run is not in this workspace. Keys in this response are NOT re-cased (they are already snake/single-word). Read-only, no spend. Pair it with a read-only scoped key for CI.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The eval run id. | |
| model | No | Restrict the checks to one arm/model key (candidate key as listed in candidate_models). | |
| min_win_rate | No | 0..1. Comparison runs: every candidate arm's win-rate 95% CI LOWER bound must be ≥ this (never the point estimate). Each check names its basis: "corrected" when the run carries ≥30 human pair labels and a usable calibration (the number to gate on — the PRINTED win rate is compressed toward 50% by judge error), else "printed" with a note saying how to attach labels (label_eval_pair). When the corrected point clears the bar but the calibration floor cannot, the note prices the missing labels instead of asking for more samples. Fails closed when the judge returned no verdict on too many pairs (unreportable). | |
| min_pass_rate | No | 0..1. Criterion runs: every model's calibration-corrected pass-rate CI lower bound must be ≥ this; falls back to the observed CI when the judge is unvalidated (the check's note says so). | |
| win_rate_ties | No | Tie lever for the win-rate check. "half" (default): tie = half a win, parity 50%, comparable to the printed rate. "decided": ties dropped on both sides — wins/(wins+losses), the share among pairs someone decided; compresses less and needs fewer labels, answers a narrower question. Anything else is a 400. | |
| noninferiority_margin | No | 0..1. THE CERTIFIED SWITCH TEST: on a criterion run whose baseline is "__stored__" (the incumbent's logged answers) scored by a calibrated judge, each candidate's pass-rate CI floor must reach the incumbent's rate minus this margin (0.05 = provably within 5 points at worst). Requires the stored-baseline arm AND a calibrated judge (corrected rates) — no observed-rate fallback; fails otherwise with an explanatory note. | |
| min_assertion_pass_rate | No | 0..1. Every model's exact all-assertions pass rate must be ≥ this (deterministic count). Fails if the run has no assertions configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations, the description discloses critical behaviors: 412 is not an error shape but the verdict body, fail-closed on non-DONE runs, 404 semantics, invalid query values treated as absent, key casing, and 'Read-only, no spend.' This adds substantial context the annotations alone do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries useful operational information: verdict semantics, response shape, 412 cases, parsing rules, and authentication. It is front-loaded with the core one-call CI decision concept, and the details are organized logically from response shape to edge cases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully compensates by specifying the return object shape, check types, the conditions for 200/412/404, the meaning of 'reason', and polling guidance. For a tool with 7 parameters and complex threshold semantics, nothing essential for an agent to invoke it correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even with 100% schema coverage, the description adds deep semantics beyond the schema: thresholds are compared against CI lower bounds, not point estimates; it explains corrected vs. printed rates, fail-closed behavior, calibration prerequisites, and the noninferiority switch test. This is a strong value-add over the raw parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource+outcome: 'Turn a finished eval run into a CI deploy decision with one call' and gives the exact endpoint GET /v1/evals/{id}/gate. It clearly distinguishes the tool's role as a deploy gate from the broader eval-related sibling tools by emphasizing the 200/412 binary verdict for pipeline blocking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly establishes the CI context: 'so a pipeline can `curl -f` it and block a bad model/prompt change' and advises pairing with a read-only scoped key. It doesn't explicitly name alternatives or specify when not to use this tool, but the intended workflow and fail-closed polling behavior are clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eval_pairwiseget eval pairwiseARead-onlyIdempotent
The pairwise judge's spec sheet and calibration for a comparison run — position bias measured on THIS run's pairs (it ranges from +0 to +45 points for the same judge on different traffic), tie behaviour, swap consistency, and the corrected win rate once pairs are labelled. GET /v1/evals/{id}/pairwise (API-key scope: read). Returns: {v, computed_at, labelled_pairs, calibration: null until pairs are labelled, else {n, agreement, kappa, usable, reason (why not, when unusable), wins/losses/decided: per-side Se/Sp with CIs}, candidates: {: {spec_sheet: {pairs, failed_pairs, swap_consistency (+CI), picks_first/second/tie, first_minus_second (+CI — the position bias in points; humans measure ~0), tie_rate, disagreement_ties (ties that are the two orderings disagreeing = the judge preferring whichever answer it saw first)}, labelled_pairs, corrected: null until usable, else {win_rate (½ + (W−L)/2, tie = half a win, parity 50%), win_rate_ci (Lang–Reiczigel — includes calibration uncertainty), floor_half_width (the width no amount of judged pairs can beat at this label count), calibration_variance_share, decided: the ties-dropped variant}}}}. Notes: Recomputed on read from the run's persisted verdicts and labels — never stale. The same block is stored on the run's results as results.pairwise at finalize and on every label write, so gate/evidence read identical numbers. Report the corrected rate WITH its interval and the printed rate alongside; the floor says when to ask for more labels instead of more samples. 404 when the run is not in this workspace; 400 for criterion runs. Read-only, no spend.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The eval run id (comparison runs only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive. The description adds substantial behavioral context beyond those: recomputed on read so never stale, calibration null until pairs are labelled, corrected null until usable, and the same block stored on results.pairwise so gate/evidence read identical numbers. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, and every clause carries information, but it is a single dense paragraph with deeply nested parentheticals describing the full return shape. It is thorough rather than concise, and would benefit from bulleted structure or clearer separation between response fields, error cases, and usage notes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the full burden of explaining return values; it does so in exhaustive detail including null states, confidence intervals, floor half-width, and the corrected-rate formula. It also covers recomputation behavior, 400/404 conditions, and usage guidance about when to request more labels instead of samples. Nothing important is missing for a one-parameter read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one required id parameter with 100% description coverage: 'The eval run id (comparison runs only).' The tool description restates the endpoint path and comparison-run context but adds little parameter-specific meaning beyond the schema. Baseline 3 is appropriate because the schema already documents the only parameter fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-plus-resource statement: 'The pairwise judge's spec sheet and calibration for a comparison run,' and includes the exact GET endpoint. This clearly differentiates it from sibling tools like get_eval_evidence or get_eval_samples by tying it to pairwise comparison-run calibration and labelled-pair statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states read-only, no-spend behavior, and gives concrete error boundaries: 404 when the run is not in the workspace and 400 for criterion runs. It does not name a sibling alternative for criterion runs, but the exclusion is clear enough that an agent knows this tool is only for comparison runs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eval_samplesget eval samplesARead-onlyIdempotent
Inspect the test cases behind a run's score — each sampled prompt, the answer every arm produced (reasoning traces stripped, as the judge saw them) and the per-sample verdict — the audit trail that makes a win rate trustworthy. GET /v1/evals/{id}/samples (API-key scope: read). Returns: A bare JSON array (no list envelope), one item per sample in order: {prompt (messages rendered as "ROLE: content" lines, clipped to 2000 chars), baseline_answer (the baseline's fresh answer, or the stored logged reply when baseline is "stored"; empty string on criterion runs), candidates:[{model (arm key), answer (clipped to 2000 chars), outcome}]}. outcome is "win"|"loss"|"tie"|"failed" (judge gave no reading) on comparison runs and "pass"|"fail"|"unparsed" on criterion runs; criterion runs list the baseline among candidates. Notes: 404 when the run is not in this workspace. Works on any status (partial data while RUNNING; empty array before sampling). Texts are clipped server-side at 2000 chars with a "…[clipped]" marker — use GET /v1/evals/{id}/evidence?with_content=true for full transcripts. Comparison items also carry human_verdict ("candidate"|"baseline"|"tie"|null) per candidate once pairs are labelled (label_eval_pair). Read-only, no spend.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The eval run id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnly, idempotent, non-destructive), so the description focuses on behaviors annotations cannot express: server-side 2000-char clipping with a '[clipped]' marker, outcome enum differences between comparison ('win'|'loss'|'tie'|'failed') and criterion ('pass'|'fail'|'unparsed') runs, the '__stored__' baseline fallback semantics, empty-array-before-sampling behavior, and late-appearing human_verdict fields. This is dense, valuable behavioral disclosure beyond the structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in sentence one, and the subsequent length is earned: with no output schema, the description must document a nested return payload, and it does so in a logical progression (endpoint/auth → array shape → field semantics → enums → caveats → alternative endpoint). Each sentence carries distinct information; nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a nested return structure, run-state-dependent edge cases, and no output schema, the description covers everything an agent needs: the full item shape (prompt, baseline_answer variants, candidates array), per-run-type outcome enums, clipping limits with the escape hatch, human_verdict timing, empty/partial states, and the workspace 404. No critical gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% — the lone 'id' parameter is already documented as 'The eval run id' — so the baseline is 3. The description adds meaning on top: the id appears in the endpoint path, is workspace-scoped (404 for runs outside the workspace), and is valid across any run status. This modestly exceeds what the schema alone provides, warranting a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource: 'Inspect the test cases behind a run's score', then enumerates exactly what is included (sampled prompt, each arm's answer with reasoning traces stripped, per-sample verdict). It differentiates from the sibling get_eval (run metadata) and get_eval_evidence (full transcripts) by naming the evidence endpoint explicitly as the alternative for full content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit routing: use GET /v1/evals/{id}/evidence?with_content=true when clipped 2000-char texts are insufficient. Also gives clear availability conditions — works on any status, partial data while RUNNING, empty array before sampling, 404 when the run is not in the workspace — so an agent knows when the call is valid vs. when results will be incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_failure_clustersget failure clustersARead-onlyIdempotent
See live production failures grouped into systemic causes per criterion (judge FAIL rationales plus pending scan suspects, clustered by a model) so a customer can find what to fix first rather than reading failures one by one. GET /v1/evals/failure_clusters (API-key scope: read). Returns: {window_days, generated_at, cached (true when served from the hourly cache), criteria:[{criterion_id, criterion_name, failures (online FAILs + pending suspects, deduped), without_reason (failures with no stored rationale — counted, never clustered), clusters:[{name, count, share (of this criterion's clustered failures), request_ids, example (one representative rationale verbatim)}]}]}. Cache-Control: no-store. Notes: 400 "window_days must be an integer 1..90" for an out-of-range value. MONEY: a fresh clustering (cache miss or force=true) makes one small metered model call per criterion that has ≥4 failure reasons (at most 40 reasons per criterion) — billed to the wallet like other assists; cached responses cost nothing. Criteria with fewer than 4 reasons are listed with no clusters.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Pass the literal "true" to bypass the per-workspace one-hour cache and re-cluster now. Default: false. | |
| window_days | No | Look-back window in days, integer 1..90. Default: 7. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses the hourly cache and how 'force' bypasses it, the metered model-call billing on fresh clustering, deduplication of online FAILs and pending suspects, the 'without_reason' exclusions from clustering, and the 400 error for invalid window_days. These are meaningful behavioral details that annotations alone cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense and well ordered: purpose, endpoint/scoping, full return shape, and then cache/error/billing notes. Every section earns its place because there is no output schema to rely on. Minor redundancy like 'Cache-Control: no-store' could be dropped, but it does not detract much.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully specifies the response structure, including the cache flag, criteria array, cluster fields, and the representative rationale example. It also covers error behavior, billing, and edge cases such as criteria with fewer than four reasons. An agent has everything needed to call the tool and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters fully (defaults, ranges, and force's cache-bypass effect), so the baseline is 3. The description adds further value by specifying the cost implications of force=true, the 40-reason cap per criterion, and the exact 400 error message when window_days is out of range.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a precise resource ('live production failures grouped into systemic causes per criterion') with a clear action ('See') and the user purpose ('find what to fix first rather than reading failures one by one'). It is not a tautology of the title and is easily distinguishable from sibling tools that scan or list individual failures.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this to get an aggregated, prioritized view of production failures instead of inspecting them individually. It does not explicitly name an alternative tool or a when-not-to-use condition, but the intended scenario is unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fine_tuning_bakeoffget fine tuning bakeoffARead-onlyIdempotent
Read a fine-tune's bake-off state, verdict (improved / regressed / inconclusive with NLL, perplexity and optional judged pass rates) and ledger-true spend — to decide whether the tuned model is worth deploying. GET /v1/fine_tuning/jobs/{id}/bakeoff (API-key scope: read). Returns: {status ("none"|"queued"|"running"|"done"|"failed"), error|null (customer-safe reason when failed), holdout_present (false = no validation split, so a comparison cannot be offered), available (platform compute configured), estimated_max_usd|null (the consent ceiling a start would hold; null when no GPU rate is configured), verdict|null: {verdict ("improved"|"regressed"|"inconclusive", sign-test backed), nll_base, nll_tuned, win_count, total, ppl_base, ppl_tuned, judged?: {criterion_id, criterion_name, base_pass_rate, tuned_pass_rate, scored}|null}, spent_usd}. Notes: Unlike other GETs this one requires an OWNER/ADMIN minting user (403 otherwise) because it reads spend. 404 "Run not found" when the job is not in this workspace. status "none" with holdout_present=false means the run can never be compared (no held-out split). Feature-flag gated (404 when fineTuning is off). Read-only, no spend.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The fine-tuning job id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and non-destructive, and the description adds valuable behavioral detail beyond them: the special 403 owner/admin requirement, 404 conditions, status semantics, the holdout_present meaning, and a closing 'Read-only, no spend' confirmation. No contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Despite being long, every clause earns its place because there is no output schema to carry return semantics. The opening sentence front-loads the core purpose, then the return contract and edge cases are organized in a readable sequence. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one simple parameter, no output schema, and meaningful conditional behavior, the description is unusually complete: it covers the response shape, failure modes, permission requirements, feature-flag behavior, and the no-holdout case. An agent has enough information to invoke it correctly and interpret its results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the only parameter, id, with 100% coverage, so baseline 3 applies. The description confirms the id appears in the endpoint path but adds no additional parameter-level format, constraints, or examples beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description starts with a precise verb and resource: 'Read a fine-tune's bake-off state, verdict ... and ledger-true spend'. It also states the decision context ('to decide whether the tuned model is worth deploying'), making the purpose unmistakable and distinguishing it from sibling mutation tools like start_fine_tuning_bakeoff.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context on when to use the tool and important exclusions: requires an OWNER/ADMIN minting user, returns 404 when the job is not in the workspace or when the feature flag is off, and explains when a comparison cannot be offered. It does not explicitly name sibling alternatives, but the read/bakeoff naming plus the 'Unlike other GETs' note gives sufficient routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fine_tuning_jobget fine tuning jobARead-onlyIdempotent
Get one fine-tuning job's live status, step progress, trained tokens, output model name, deployment state and billed cost — poll this after creating a job. GET /v1/fine_tuning/jobs/{id} (API-key scope: read). Returns: {id, provider_job_id, name, base_model, method, status (VALIDATING_FILES|QUEUED|RUNNING|SUCCEEDED|FAILED|CANCELLED), fine_tuned_model|null, deployed_model_name|null, deploy_status|null, deploy_error|null, trained_tokens (string)|null, trained_steps|null, total_steps|null, rate_per_m_token_usd, billed_cost_usd|null, error|null, created_at}. Notes: 404 "Job not found" when the job is not in this workspace. Live progress (trained_steps/total_steps) is fetched from the training backend best-effort; DB state is served if that fails. A SUCCEEDED job is trainable-not-servable until deployed (deployed_model_name stays null). Feature-flag gated (404 when fineTuning is off). Read-only, no spend. Scopes not enforced on this route today.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The job id returned by POST /v1/fine_tuning/jobs (not the provider_job_id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this read-only, idempotent, and non-destructive. The description adds meaningful behavioral detail that annotations cannot convey: live progress is fetched best-effort from the training backend and falls back to DB state, a SUCCEEDED job remains not-servable until deployed, and scopes are not enforced on this route. Nothing contradicts the annotations; instead it reinforces the read-only nature with 'Read-only, no spend'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place: purpose, endpoint, auth scope, full return contract, error conditions, backend fallback, deployment nuance, feature flag, and safety notes are all essential for correct invocation. The front-loaded sentence states the core purpose immediately, followed by structured details. No redundant filler exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must disclose return fields, which it does exhaustively, including null states and enums. It also covers auth, errors, feature flags, live-data behavior, and deployment semantics, making it complete for an agent to call the tool and interpret the result correctly. Given the tool's complexity, nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter `id` is already well described in the schema ('The job id returned by POST /v1/fine_tuning/jobs, not the provider_job_id'). The description does not need to add parameter semantics, so it sits at baseline 3. It does indirectly clarify id usage by returning `provider_job_id` in the response, but that is not directly about the input parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get one fine-tuning job's live status, step progress, trained tokens, output model name, deployment state and billed cost'. It enumerates exactly what is returned and distinguishes itself from list/cance/other fine-tuning tools by targeting a single job. It also provides the exact endpoint, leaving no ambiguity about the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: 'poll this after creating a job', which tells an agent when this tool is appropriate. It also communicates contextual constraints like 404 when the job is not in the workspace and feature-flag gating. It does not explicitly contrast with alternatives such as list_fine_tuning_jobs or cancel_fine_tuning_job, though the one-job scope implies the distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_grpo_runget grpo runARead-onlyIdempotent
Fetch one online-RL (GRPO) run's status, ledger-true spend, and training outcome (reward trend, bake-off verdict) — use it to poll a run you started. GET /v1/grpo/runs/{id} (API-key scope: read). Returns: JSON object: { id, status, model, budget_usd, spent_usd, gpu_spent_usd, env_spent_usd, gpu_hour_budget, gpu_rate_usd_per_hour, created_at, outcome: null | { steps, first_half_mean_reward, second_half_mean_reward, stopped_by_tripwire, bakeoff?: { verdict, delta, delta_ci95, prompts, k, mean_sim_fraction, mean_tool_steps } } }. Outcome is always attempted for this single run (null while ACTIVE or when no artifact exists). Notes: Feature-flag gated (fineTuning flag off → 404). OWNER/ADMIN key required (403). 404 'Run not found' for foreign ids.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The GRPO run id (from the runs list). Scoped to the workspace: a foreign or unknown id is 404. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, openWorld, idempotent, non-destructive), the description discloses key behaviors: the exact response shape, outcome being null while ACTIVE or without artifact, feature-flag gating causing 404, OWNER/ADMIN key requirement causing 403, and foreign-id behavior. This is substantial context that helps the agent anticipate failures and interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every section earns its place: purpose and usage first, followed by the HTTP endpoint and auth note, then a full return payload since no output schema exists, then edge-case notes. It is dense but well-structured and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter, no output schema, and rich annotations, the description is complete: it specifies the endpoint, auth/scope requirements, response object, null semantics for outcome, and error cases. An agent has all necessary information to call and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the single 'id' parameter, including its source ('from the runs list') and scoping behavior. The description adds no additional parameter-level meaning beyond what the schema provides, so the high schema coverage baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and resource ('one online-RL (GRPO) run') and enumerates exactly what is returned: status, spend, and training outcome. This clearly distinguishes it from sibling tools like list_grpo_runs and get_grpo_run_weights.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use it to poll a run you started, which establishes the primary usage context. It does not explicitly name alternatives or say when not to use it, but the single-run scope and purpose make the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_grpo_run_weightsget grpo run weightsARead-onlyIdempotent
Get short-lived presigned download links for a finished online-RL (GRPO) run's trained adapter files so you can self-host the weights — use it after a run completes (or stops with a partial checkpoint). GET /v1/grpo/runs/{id}/weights (API-key scope: read). Returns: JSON object: { run_id, status, partial: boolean (true for STOPPED/FAILED — files are a partial checkpoint, not the finished adapter), files: [ { name (e.g. adapter_model.safetensors), size_bytes: integer|null, url (presigned GET, valid 15 minutes), expires_at (ISO) } ], empty_reason?: string (present when files is empty), storage_unavailable?: true (weight storage not configured — try later) }. Files sorted safetensors first, then adapter files, then config/tokenizer. Notes: 400 while the run is ACTIVE ('Weights are available once the run finishes.') and for OVERBUDGET runs ('This run has no trained adapter to download.'). 404 for foreign/unknown runs. Links expire after 15 minutes — re-call to refresh. Every call is audit-logged as a weight export. Feature-flag gated (fineTuning flag off → 404). OWNER/ADMIN key required (403).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The GRPO run id. Must be in a terminal status (COMPLETED, STOPPED, or FAILED). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and non-destructive, and the description adds substantial behavioral context beyond that: presigned URLs expire in 15 minutes, calls are audit-logged as weight exports, OWNER/ADMIN permission is required, feature-flag gating returns 404, and partial checkpoints are handled differently. This is rich and useful transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries operational value: purpose, timing, endpoint, auth scope, response shape, error semantics, expiry, audit logging, and feature-flag behavior. It is front-loaded with the core purpose and usage condition before diving into return details and edge cases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description fully specifies the return JSON structure, field meanings, sort order, partial-checkpoint semantics, error cases, permission requirements, expiry behavior, and storage-unavailable handling. An agent has everything needed to call this tool correctly and interpret its response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the single `id` parameter, including the requirement that the run be in a terminal status (COMPLETED, STOPPED, or FAILED). The description mostly repeats that status constraint; it adds error-case context (400/404/403) but does not add significant meaning about the parameter itself beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Get... presigned download links'), a specific resource ('a finished online-RL (GRPO) run's trained adapter files'), and a clear goal ('so you can self-host the weights'). It is easily distinguished from sibling tools like get_grpo_run, which is about run metadata, not weight export.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use it: after a run completes or stops with a partial checkpoint, and explicitly excludes ACTIVE and OVERBUDGET runs. It does not name an alternative tool to use instead, but the timing and error conditions provide strong contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_judge_settingsget judge settingsARead-onlyIdempotent
Read the workspace's default judge model (used for eval runs that don't name their own judge) and the platform's house default. GET /v1/settings/judge (API-key scope: read). Returns: JSON { default_judge_model: string|null (null = house default / auto), house_default: string }. Sent with Cache-Control: no-store. Notes: Precedence at run time: a run's own judge_model > this workspace default > house_default. Screening still swaps a default that would judge its own sibling model.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, but the description adds meaningful behavioral context beyond that: null means house default/auto, Cache-Control is no-store, runtime precedence order, and the screening edge case where a default that would judge its own sibling model is swapped. This is exactly the kind of disclosure agents need.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but tightly organized: purpose first, then endpoint and scope, then return shape, then Cache-Control, then precedence and edge-case notes. Every sentence adds information and there is no filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only GET with no output schema, this description is remarkably complete. It documents the exact JSON shape, the semantics of null, the API-key scope, HTTP caching behavior, runtime precedence, and even the screening exception. An agent can understand the tool's behavior without needing additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the input schema is an empty object, so there is no parameter ambiguity to resolve. The description goes further by explaining the meaning of the two return values, which compensates for the absence of an output schema, though this is more output semantics than parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb 'Read' and names the exact resources: the workspace's default judge model and the platform's house default. It clearly distinguishes itself from the sibling set_judge_settings by being read-only, and it never merely restates the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the read-only usage context clear and the contrast with set_judge_settings is implicit through the GET method and 'read' API-key scope. However, it does not explicitly state when to prefer this tool over alternatives or list exclusions, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_model_versionget model versionARead-onlyIdempotent
Fetch one model version's record (lineage, artifact, served model name, verdict, pinned hashes, adoption time) — use it to inspect a specific training round before adopting it. GET /v1/model_versions/{id} (API-key scope: read). Returns: JSON object { id, parent_id, base_model, artifact_ref, served_model, source_run_id, source_kind, verdict, judge_criterion_id, curriculum_hash, holdout_hash, comparable_to_parent, adopted_at, created_at } — same shape as the list rows. Notes: Not feature-flag gated. OWNER/ADMIN key required (403).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The model version id. Workspace-scoped: a foreign or unknown id is 404 'Version not found in this workspace.' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool readOnly, idempotent, and non-destructive. The description enriches this with concrete behavioral details: the GET endpoint, API-key scope `read`, the note that it is 'Not feature-flag gated', the OWNER/ADMIN key requirement with a 403 error, and the exact return shape. This significantly exceeds the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and only includes high-signal details: use case, endpoint, auth, return shape, and relevant caveats. Every sentence earns its place, and the structured layout makes it scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description explicitly lists all return fields and states the response shape equals list rows. It covers the endpoint, required permissions, error condition, feature-flag status, and intended workflow, making the context complete for a single-fetch tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; the sole `id` parameter is already described as workspace-scoped with error behavior. The description only mentions `{id}` in the URL path and does not add new meaning to the parameter, so it correctly stays at the baseline for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Fetch one model version's record', and it enumerates the contents (lineage, artifact, served model name, verdict, pinned hashes, adoption time). It also differentiates the tool from siblings by framing it as inspecting a specific training round before adopting, making its identity clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage context: 'use it to inspect a specific training round before adopting it', which implies this is a detail view for one version. It does not explicitly name alternatives like list_model_versions or state when not to use the tool, so it falls just short of full explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_setup_statusget setup statusARead-onlyIdempotent
Answer 'where am I and what should I do next?' in one call — workspace identity, logging state, traffic and grade counts, judge calibration progress, and the single dependency-ordered next step; also the cheapest way to check that an API key is live and which workspace it belongs to. GET /v1/setup/status (API-key scope: read). Returns: JSON (camelCase keys — this route does NOT snake-case): { workspace: { slug, name }, logging: { enabled: boolean, retentionDays: integer }, traffic: { loggedConversations: integer|null (null = log store unreachable, NOT zero traffic) }, grades: { total, neededToCalibrate (grades still short of the 30 required) }, judges: { total, calibrated, trustworthy, failGradesNeeded: integer|null }, next: { action: 'enable_logging'|'send_traffic'|'grade'|'create_judge'|'calibrate'|'grade_failures'|'recalibrate'|'compare', detail: string, href: string (dashboard path) } }. With request header Accept: text/plain the same data is returned as flat snake_case key=value lines (e.g. grades_total=12, next_action=grade), one per line. Notes: Never cached (Cache-Control: no-store). A 200 proves the key is valid; 401 otherwise. Field casing differs from every other /v1 route (camelCase in JSON, snake_case only in the text/plain form).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description significantly expands beyond annotations by disclosing Cache-Control: no-store, 200/401 semantics, the camelCase vs snake_case discrepancy with every other /v1 route, the meaning of null in loggedConversations, and the Accept: text/plain behavior. None of this contradicts the readOnly/idempotent/openWorld annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense and front-loaded with a clear purpose statement before diving into the endpoint and response details. Every sentence carries substantive information (null semantics, casing, cache behavior, auth meaning, header variant). Only minor redundancy: the casing difference is highlighted twice, but the second mention adds cross-route context, so it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description bears the full burden of explaining return values and behavior. It fully specifies the JSON shape with field types, nested objects, enum values for next.action, null semantics, the text/plain alternative, and success/error meaning — nothing an agent needs to invoke or interpret this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty (0 parameters), so the baseline is 4. The description adds value by documenting the optional Accept: text/plain header that switches the output format to flat snake_case key=value lines, and example like grades_total=12, next_action=grade.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific and memorable purpose: 'Answer where am I and what should I do next?' and enumerates the exact resources covered (workspace identity, logging state, traffic counts, grade counts, judge calibration, next step). It distinguishes itself from sibling action-tools by presenting a one-call status/setup overview rather than a mutation or query of a specific resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: it is the 'cheapest way to check that an API key is live and which workspace it belongs to', and is the one-call for setup status. It does no explicit name alternatives or exclusions, but the usage intent is unambiguous and sufficient for an agent to select it over the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_traceget traceARead-onlyIdempotent
Fetch every logged step of one agent run or conversation (grouped by the X-Omnia-Trace-Id you sent), oldest-first in execution order and including aborted partials — use it for error analysis of a multi-step run. GET /v1/traces/{traceId} (API-key scope: read). Returns: JSON { object: 'list', trace_id, data: [ { request_id, created_at (Unix seconds), model, alias: string|null, tag, status ('SUCCESS'|'ABORTED'), finish_reason, streamed, cache_hit, fallback_from, prompt_tokens, completion_tokens, messages: parsed request messages (null if unparseable), response: parsed assistant message (null if unparseable) } ] } ordered oldest first. Notes: Requires request logging to be enabled — 409 { error: string } (flat shape) otherwise. Unlike /v1/logs this includes ABORTED partial rows (a run that died at step 4 is the finding). No pagination or filters.
| Name | Required | Description | Default |
|---|---|---|---|
| traceId | Yes | The trace id sent as X-Omnia-Trace-Id on the gateway requests. 404 'Trace not found' when no logged step carries it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description goes further by disclosing ordering, inclusion of aborted partial runs, the 409 flat-shape error, the need for request logging, and the absence of pagination/filters — all genuinely useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary purpose and use case, then efficiently covers endpoint, auth scope, return shape, ordering, errors, and exclusions. Every sentence carries information; none is filler, and the structure guides the agent from purpose to behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the detailed return JSON is essential and provided. The description covers prerequisites, error responses, ordering, trace grouping, differences from alternatives, and limitations, making the tool fully usable without further inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes traceId fully, including its X-Omnia-Trace-Id origin and the 404 behavior, so the parameter meaning is completely covered. The description adds no new parameter-level semantics beyond what the schema provides, justifying the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb and resource: 'Fetch every logged step of one agent run or conversation' grouped by trace ID. It distinguishes this from related log tooling by emphasizing the ABORTED partial rows and the trace-scoped granularity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use this for error analysis of a multi-step run, contrasts itself with /v1/logs, and notes that ABORTED partial rows are the finding. It also mentions prerequisites and error conditions, leaving little ambiguity about when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
is_my_judge_trustworthyis my judge trustworthyARead-onlyIdempotent
Can this workspace's judges be believed? For one criterion (pass criterion_id) or all of them: the trust verdict read from the TPR/TNR intervals (trustworthy / under-measured / borderline / misaligned / unmeasured), how often it catches real failures and passes clean ones with 95% intervals, κ, how many grades it was measured on and when, drift status, and the one action that changes its state. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| criterion_id | No | One criterion's id for its full numbers; omit for every judge in the workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior, and the description reinforces this with 'Read-only.' It adds meaningful behavioral context by enumerating the output dimensions: trust verdict categories, TPR/TNR intervals, catch/pass rates with 95% intervals, κ, measurement count, recency, drift status, and the one state-changing action. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense and front-loads the main question, then lists the returned metrics in a compact, readable sequence. It is slightly longer than necessary due to the rhetorical opening and the long parenthetical list, but every element adds useful detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does a good job listing what the caller will receive: verdict categories, confidence intervals, rates, κ, sample size, timing, drift status, and the one action that changes state. It does not fully clarify the return structure for the 'all judges' case or the exact meaning of 'the one action,' so it stops just short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description covers the only parameter, criterion_id, 100%: 'One criterion's id for its full numbers; omit for every judge in the workspace.' The tool description repeats the same idea ('pass criterion_id') without adding new format, value, or interpretation details, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (workspace judges) and the core purpose (assessing trustworthiness with verdict categories and metrics). It distinguishes itself from siblings by focusing on trust measurement rather than settings or criteria management, though it opens with a rhetorical question instead of a direct action verb and the 'one criterion or all of them' phrasing is slightly ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides scoping guidance: pass criterion_id for one criterion or omit it for all judges. However, it does not explicitly say when to use this tool versus alternatives like get_judge_settings or get_criterion, nor does it mention exclusions or when not to use it, so usage context is implied rather than fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
label_eval_pairlabel eval pairA
Record a HUMAN's verdict on one candidate-vs-baseline pair of a comparison run — the calibration evidence behind the corrected win rate. A pairwise judge's printed win rate is compressed toward 50/50 (a true 80/20 prints ~70/30 even for a judge at the human ceiling); from 30 labels the run reports a corrected rate with an interval that carries the calibration uncertainty. POST /v1/evals/{id}/pair_labels (API-key scope: evals:write). Returns: {sample_index, candidate, verdict, critique, pairwise} — pairwise is the run's refreshed calibration block (same shape as get_eval_pairwise), so one call shows what the label bought. One label per (sample, candidate); posting again overwrites. DELETE /v1/evals/{id}/pair_labels?sample_index=…&candidate=… removes one; GET lists them. Notes: Labelling is a human's job: only relay verdicts the user actually gave — never invent preferences to reach 30. 400 with the offender named on a bad sample_index/candidate/verdict; 404 when the run is not in this workspace. No spend.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The eval run id (a comparison run; criterion runs are refused — they are graded pass/fail per exchange with trace labels). | |
| verdict | Yes | Which answer the human preferred: "candidate", "baseline", or "tie" (a tie is a real answer, not a skip). | |
| critique | No | Optional free-text WHY (≤2000 chars). | |
| candidate | Yes | The candidate arm key the verdict is about (as listed in candidate_models / get_eval_samples). | |
| sample_index | Yes | 0-based sample index within the run (the order get_eval_samples returns). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already providing readOnly/idempotent/destructive hints, the description adds substantial behavioral context: one-label-per-pair overwrite semantics, companion DELETE/GET endpoints, the returned pairwise calibration block, 400/404 error cases, API-key scope, 'No spend', and the integrity rule about not fabricating preferences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized, front-loading the core purpose before covering endpoint details, return shape, mutation semantics, error handling, and constraints. Every sentence earns its place by communicating a distinct fact an agent needs to call this tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex, yet the description covers selection criteria, request semantics, response contents, side effects, error handling, authentication scope, and cost. Since there is no output schema, the description compensates by explicitly describing the returned pairwise calibration block and linking it to get_eval_pairwise.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has a descriptive explanation, including the meaning of verdict values and sample_index ordering. The description adds contextual framing like candidate-vs-baseline and overwrite behavior, but it does not need to restate parameter formats, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Record a HUMAN's verdict on one candidate-vs-baseline pair of a comparison run.' It clearly frames this as calibration evidence and differentiates it from read-side siblings like get_eval_pairwise by emphasizing the write action and human-labeling role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly scopes usage to comparison runs, states that criterion runs are refused, and warns that labels must come from actual user verdicts, never invented. It also cites the 30-label corrected-rate threshold, giving the agent concrete conditions for when this tool should be invoked.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_alertslist alertsARead-onlyIdempotent
List every alert this workspace has fired, newest first, with the payload the notification carried, so a pipeline can react to quality, cost, or drift events without reading a mailbox. GET /v1/alerts (API-key scope: read). Returns: { alerts: [{ id, kind, fired_at (ISO), payload (JSON object: criterion, model, rates, reason as applicable) }], next_cursor: string|null } Notes: Keyset pagination: pass next_cursor back as cursor until it is null. 400 when since is not an ISO date or limit is outside 1..200. Cache-Control: no-store.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Filter to one alert kind. | |
| limit | No | Page size, integer 1..200. Default: 50. | |
| since | No | ISO-8601 datetime; only alerts fired at or after this instant. 400 if unparseable. | |
| cursor | No | Opaque cursor from a previous response's next_cursor (the id of the last alert on that page). Resumes after that alert. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint/idempotentHint annotations by detailing newest-first ordering, the exact response envelope, keyset pagination semantics, 400 error conditions, and Cache-Control: no-store. It also clarifies that alerts carry notification payloads, which is non-obvious behavioral context. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but structured effectively: core purpose first, then endpoint/auth scope, then return shape, then pagination/error notes. Every sentence earns its place, and the most important behavioral facts are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description fully defines the return structure including alert fields, payload subfields, and next_cursor. It also covers pagination, validation failures, and caching, making the tool safely callable end-to-end without needing external documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful extra semantics by explaining how next_cursor is passed back as cursor until null, and by specifying when since and limit cause 400 errors; these constraints enrich the schema's otherwise adequate parameter descriptions without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a precise verb-resource pair: 'List every alert this workspace has fired, newest first, with the payload the notification carried.' It clearly distinguishes alerts as their own resource type from sibling log/tombstone/refusal tools, gives the HTTP endpoint, and explains the practical purpose (reacting to quality, cost, or drift events).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: to retrieve fired alerts with their payloads for pipeline reactions, and it documents pagination and error behavior. It does not explicitly name sibling alternatives or exclusion conditions, but the resource distinction from list_logs, list_criteria, and list_refusals is strong enough for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_aliaseslist aliasesARead-onlyIdempotent
List this workspace's model aliases (stable names your code calls) with their current target, canary split, quality-gate config, evidence policy and the eval run that authorized the current routing. GET /v1/aliases (API-key scope: read). Returns: { object: "list", data: [{ id, name, target_model, canary_model, canary_percent, description, gate_criterion_id, gate_mode ("recommend"|"auto"), gate_min_samples, gate_rollback_threshold, gate_window_hours, gate_verdict ({decision, reason, canary, incumbent, acted}|null), gate_verdict_at, model_version_id, require_evidence, last_evidence_run_id, created_at, updated_at }] } Notes: Sorted by name ascending. last_evidence_run_id is null when the routing predates the evidence policy or went through as an audited override.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only/idempotent, and the description adds the endpoint, API-key scope, sorting behavior (name ascending), and nuanced null semantics for last_evidence_run_id. It also exposes the full response envelope so the agent knows exactly what to expect beyond the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a concise purpose sentence, endpoint/auth note, explicit return shape, and a focused note about null behavior. Each part provides actionable information without duplication, so it is appropriately sized for a rich read-only list operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema provided, the description compensates with a full field list, enum values, null semantics, sort order, and authentication scope. This is complete enough for an agent to invoke the tool and interpret the result correctly in a workspace context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (empty schema). The baseline of 4 applies because there are no parameter semantics to clarify; the description does not need to compensate for undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List'), resource ('this workspace's model aliases'), and enumerates exactly what is included (target, canary split, quality-gate config, evidence policy, authoring eval run). This clearly distinguishes the read-only listing from mutation siblings like upsert_alias and delete_alias.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when the tool is relevant: inspecting the stable names your code calls and their current routing details. It does not explicitly name alternatives or state when not to use it, but the read-only 'GET /v1/aliases' phrasing plus sibling names make the usage context unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_audit_tombstoneslist audit tombstonesARead-onlyIdempotent
List acknowledged audit-chain gaps (tombstones) with the recorded reason for each lost slot, so a known loss can be distinguished from tampering. GET /v1/audit/tombstones (API-key scope: read). Returns: { tombstones: [{ seq (integer), reason, created_at (ISO) }] } sorted by seq ascending Notes: The audit chain is platform-global, so this list is the same for every workspace. Cache-Control: no-store.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, the description adds substantial behavioral detail: the API-key scope ('read'), the response format sorted by seq ascending, the platform-global nature, and Cache-Control: no-store. This enriches the agent's understanding beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, then gives endpoint, scope, return format, and a critical scoping note. No sentence is redundant or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only tool with no output schema, the description covers everything needed: what it returns, the field types, sort order, authentication scope, and the cross-workspace consistency caveat. An agent can invoke it correctly without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is empty, so there are no parameter semantics to clarify. The description correctly documents the endpoint and return fields, satisfying the baseline for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a precise resource ('acknowledged audit-chain gaps (tombstones)'), and the reason for using it ('so a known loss can be distinguished from tampering'). It also includes the HTTP endpoint and return shape, making it unmistakably distinct from siblings like create_audit_tombstone or get_audit_verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use case: distinguish a known audit loss from tampering. It also notes the audit chain is platform-global and identical across workspaces, which is relevant context for when to call it. It does not explicitly name alternatives or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_batcheslist batchesARead-onlyIdempotent
List this workspace's batch inference jobs, newest first, with status, request counts and billed cost. GET /v1/batches (API-key scope: read). Returns: A bare JSON array (no envelope) of up to 100 batch objects: { id, nebius_batch_id (upstream batch id), endpoint, status (VALIDATING|IN_PROGRESS|FINALIZING|COMPLETED|FAILED|EXPIRED|CANCELLING|CANCELLED), request_total, request_completed, request_failed, completion_window, billed_cost_usd (number|null), created_at, output_file_id, error_file_id, error } Notes: Feature-flagged: every /v1/batches route returns 404 { error: "Batch inference is not enabled" } while the batch flag is off (code default is off). Statuses here are the stored values; GET /v1/batches/{id} refreshes them live.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly: it discloses the bare JSON array response, the 100-object cap, the stored-vs-live status caveat, and the feature-flag failure mode. This goes well beyond a minimal definition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and route, and the Returns/Notes structure makes the dense information scannable. The field enumeration and status list are long but necessary given the absence of an output schema, so it earns a high score rather than a perfect one.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the full response shape, field semantics, status enum, nullable fields, pagination cap, failure mode, and the live-refresh caveat. Nothing essential is missing for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4; the description confirms no parameters are needed beyond the implicit workspace scope. There is no parameter ambiguity to resolve.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: listing the workspace's batch inference jobs, newest first, with status, request counts, and billed cost. This clearly distinguishes it from sibling tools like create_batch, get_batch, and cancel_batch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly identifies the scope (this workspace), the HTTP route, and the read-only API-key scope, and notes the feature-flag 404 that signals when the capability is unavailable. It also implicitly routes the agent to GET /v1/batches/{id} for live status refreshes, but it does not explicitly enumerate when to prefer get_batch versus list_batches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_criterialist criteriaARead-onlyIdempotent
List this workspace's judge criteria with their calibration metrics (TPR/TNR/kappa with intervals), trust verdict, drift status and online-monitoring config, to see which judges are proven enough to gate on. GET /v1/criteria (API-key scope: read). Returns: { object: "list", data: [{ id, name, description, judge_prompt, judge_model, status, source, unit ("request"|"trace"), population (tag), population_family, online_enabled, online_percent, online_cap_usd, online_spent_usd, tier (aligned|weak|misaligned|unmeasured), trust (trustworthy|misaligned|under-measured|borderline|unmeasured), fail_grades_needed, pass_grades_needed, tpr_ci ([lo,hi]|null), tnr_ci, drift_status (ok|flagged), drift_signal (stale|quality_drop|suspicious_rise|evidence_revised|null), drift_reason, drift_checked_at, tpr, tnr, kappa, alignment_n, aligned_at, created_at }] } Notes: trust is what every gate reads; tier is the legacy point-estimate badge. drift_status is derived (a fresh calibration supersedes a cached flag). drift_signal names the check that raised it: stale (calibration older than 30 days), quality_drop (live corrected rate fell well below what the judge validated at), suspicious_rise (traffic from a model TRAINED AGAINST this judge scores above what it validated at — an unvalidated gain), evidence_revised (grades the calibration was measured on were edited or deleted; clears on re-calibration or on reverting the edits).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description goes well beyond that by explaining the endpoint, API-key scope, the list response shape, the difference between trust and tier, and the derived nature of drift_status/drift_signal with detailed meanings for each enum value. This is substantial added behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although long, the description is dense and every section earns its place: purpose is front-loaded, the return shape is included because there is no output schema, and the notes clarify ambiguous computed fields. The structure is logical and avoids repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters, rich annotations, and no output schema, the description carries the full burden of explaining the response and key semantics. It enumerates every returned field and explains trust, tier, drift_status, and drift_signal sufficiently for an agent to interpret results correctly. Nothing essential appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so the baseline is 4. There are no parameter semantics to explain, and the description does not need to compensate for any schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List this workspace's judge criteria' and enumerates what is included (calibration metrics, trust verdict, drift status, online-monitoring config). It also states the intended decision ('to see which judges are proven enough to gate on'), which clearly distinguishes this list-all tool from siblings like get_criterion or list_criterion_templates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context and intended use case: reviewing judges to determine which ones are safe to gate on. It does not explicitly name alternatives or state when not to use it, so it stops short of full exclusion guidance, but the purpose is concrete enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_criterion_templateslist criterion templatesARead-onlyIdempotent
Lists the shipped judge-criterion templates (starting-point judge prompts grouped by use case) so a caller can instantiate one via POST /v1/criteria with an edited judge_prompt. GET /v1/criteria/templates (API-key scope: read). Returns: { object: 'list', data: [{ id: <slug e.g. 'no-fabrication', 'grounded-in-context', 'right-next-action', 'tool-use-sound', 'finishes-what-it-starts'>, use_case: <'Support & assistants'|'RAG & knowledge'|'Extraction & structured output'|'Data processing'|'Agents & tools'|'Any traffic'>, name, description, judge_prompt, unit: 'request'|'trace', universal: <bool, true = meaningful on any traffic, safe to leave unscoped> }] }. 11 templates as of this build. Notes: Static and free; only authentication is required. A template is a starting point, not a truth — it still has to be aligned against the workspace's own labels. Task-specific (non-universal) templates should be scoped to the tag of the traffic they judge; unit 'trace' templates judge whole agent runs and need trace-scoped labels.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/idempotentHint annotations, the description discloses that the endpoint is static and free, requires only authentication, and returns a fixed set of 11 templates. It also explains important semantic behaviors: universal templates are safe unscoped, non-universal ones should be scoped, and trace-unit templates need trace-scoped labels. This is rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place: purpose, endpoint, auth scope, full return shape, template count, and behavioral notes. The most decision-relevant information is front-loaded, and the detailed notes are justified because no output schema exists to carry that burden.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only list tool, the description covers everything an agent needs: the exact endpoint, auth requirement, response object shape with field semantics, example slugs, and usage caveats about universal/trace templates. There is no output schema, so the inline return specification is essential and is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty with 100% coverage, so no parameter documentation is needed. The description adds value by specifying the output record shape and field meanings, which matters more here since there is no output schema. The score reflects the baseline for a zero-parameter tool with complete schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: listing shipped judge-criterion templates, and explicitly gives the HTTP route GET /v1/criteria/templates. It clearly distinguishes these read-only template entities from sibling tools like list_criteria or list_dedicated_templates by framing them as starting-point judge prompts for later instantiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when this tool is useful: to obtain a starting-point judge prompt and instantiate it via POST /v1/criteria with an edited judge_prompt. It also adds practical usage warnings, such as templates needing alignment against workspace labels and task-specific templates needing traffic scoping. It does not explicitly name alternatives, but the instantiation workflow makes the intended context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dedicated_endpointslist dedicated endpointsARead-onlyIdempotent
Lists the workspace's dedicated (reserved-GPU) inference endpoints with live-reconciled status, frozen hourly price and unbilled cost accrued since the last meter — use it to monitor what is running and what it is costing. GET /v1/dedicated (API-key scope: read). Returns: A bare JSON array (no {object:'list'} envelope) of endpoint objects, snake_case: { id, name, description, model_name, flavor_name, gpu_type, gpu_count, region, min_replicas, max_replicas, status (e.g. PENDING/STARTING/RUNNING/UPDATING/STOPPING/STOPPED/FAILED), enabled, hourly_rate_usd (customer sell price per GPU-hour, frozen at deploy), pending_cost_usd (GPU-hours accrued since last_metered_at while RUNNING, not yet billed), routing_key (the model name to send to the inference API to hit this endpoint), base_url, last_metered_at, created_at }. Internal margin fields are never returned. Notes: Scope via requiredScopeFor is 'read' for GET; NOTE the dedicated routes use their own local apiKeyActor (app/api/v1/dedicated/_helpers.ts) which authenticates the key but does NOT enforce key scopes — any valid, unrevoked key passes. Deleted endpoints are excluded. Status/enabled/region are reconciled live from the control plane on every call (DB state served if reconcile fails). 400 on catalog/provider failure. Money: a RUNNING endpoint bills per GPU-hour (gpu_count x replicas x hourly_rate_usd) continuously; pending_cost_usd is what the next meter will charge.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses several non-obvious behaviors: the dedicated routes do not enforce key scopes, deleted endpoints are excluded, status is live-reconciled with DB fallback, catalog/provider failures return a 400, and billing accrues per GPU-hour. This is exactly the kind of behavioral context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense and well-organized: the core purpose is front-loaded, followed by a structured field list and then essential caveats. Every sentence adds operational value, and there is no tautology or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully compensates by covering return shape, field meanings, auth caveats, reconciliation behavior, deletion filtering, error cases, and the billing model. An agent has enough information to call the tool correctly and interpret its results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema description coverage is 100%, so there is no parameter ambiguity to resolve. The description still adds meaning by explaining response-field semantics such as hourly_rate_usd being frozen at deploy and pending_cost_usd being unbilled accrued GPU-hours.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: lists the workspace's dedicated (reserved-GPU) inference endpoints, with live-reconciled status, frozen hourly price, and unbilled cost. It clearly distinguishes this from the create/update/delete/get dedicated endpoint siblings and from list_dedicated_templates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly frames the use case: 'use it to monitor what is running and what it is costing,' and provides the HTTP method and read scope. It does not explicitly mention when to prefer get_dedicated_endpoint for a single endpoint, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dedicated_templateslist dedicated templatesARead-onlyIdempotent
Returns the deployable model catalog for dedicated endpoints (model -> flavor -> GPU type -> allowed regions/counts/replica limits) plus this workspace's sell price per GPU-hour for every GPU/region combo — read it to build a valid POST /v1/dedicated request and estimate cost. GET /v1/dedicated/templates (API-key scope: read). Returns: { templates: [{ name (use as model_name), type ('text2text'|'embedding'|'image2text'|...), metadata?: { huggingface_url?, vendor?, context_window_k?, size_b?, license?: {url?, name?} }, flavors?: { : { quantization?, use_cases?, tags?, base_model_slug?, available_configurations?: { gpu_configurations?: { : { allowed_regions: string[], allowed_gpu_counts: int[], max_replicas_allowed: int } } } } } }], prices: [{ gpu_type, region, price_per_gpu_hour_usd: number|null }] }. Template contents are the upstream catalog shape, already snake_case. Notes: Scope via requiredScopeFor is 'read'; the local dedicated apiKeyActor does not enforce scopes. price_per_gpu_hour_usd is the customer price (base cost and margin are never returned); null means no price is configured for that combo yet and a deploy on it will be refused. 400 'Dedicated endpoints are not configured' or 'Failed to load dedicated endpoint catalog' on provider/config failure. Prices are quoted at request time; the price frozen on an endpoint is the one in effect when it is created. Free to call.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses auth behavior (the local dedicated apiKeyActor does not enforce scopes), pricing semantics (null means deployment will be refused; prices are quoted at request time and frozen at creation), and specific 400 error cases. This is substantial behavioral context that structured annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every section carries distinct value: purpose, route/scope, exact return shape, pricing/error caveats. It is front-loaded with the most decision-relevant information and stays organized despite the dense catalog schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema or parameters, the description carries the full burden of explaining the response and the call's safety profile, and it does so exhaustively: templates schema, prices schema, error conditions, auth notes, and pricing freeze behavior. Nothing needed to invoke or interpret the call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema coverage is complete for that, so there are no parameter semantics for the description to add. The description instead documents the returned data structure, which is the relevant semantic information for this stateless read-only call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific resource ('deployable model catalog for dedicated endpoints') and explains its purpose: reading it lets you build a valid POST /v1/dedicated request and estimate cost. This clearly distinguishes it from siblings like list_dedicated_endpoints and create_dedicated_endpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger context: use it before creating a dedicated endpoint to get valid model/flavor/GPU values and to estimate costs. It does not explicitly spell out when not to use it or name an alternative, but the intended usage is unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_env_toolslist env toolsARead-onlyIdempotent
Lists the agent tools this workspace has declared for training environments (the egress allowlist) together with the per-workspace secret used to verify signed environment calls — use it to audit which endpoints and credentials environments may call. GET /v1/env/tools (API-key scope: read). Returns: snake_case: { tools: [{ id, name, endpoint_url, auth_prefix (first 10 chars of the stored header + ellipsis, '(configured)' if undecryptable, or null), read_only, max_calls_per_episode, enabled, created_at }], egress_verification_secret: <hex HMAC secret; environment calls carry X-Omnia-Environment / X-Omnia-Timestamp / X-Omnia-Signature = HMAC_SHA256(secret, ${timestamp}.${rawBody})> }. Notes: Gated behind the fineTuning feature flag: 404 'Fine-tuning is not enabled' when off (prod runs with it ON). Requires an OWNER/ADMIN minting user even for GET (403). Credentials (auth headers) are encrypted at rest and never returned — only the prefix. Tools are sorted by name.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/idempotentHint annotations, the description discloses the feature-flag gating (404 when off), the OWNER/ADMIN requirement even for GET (403), the fact that credentials are encrypted at rest and never returned (only a prefix), the auth_prefix display semantics, name sorting, and the exact HMAC_SHA256 signing scheme. This is rich behavioral context that neither annotations nor the empty schema provide, and it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded: purpose first, then endpoint/scope, a structured Returns block, and Notes on gating, auth, and security. Every sentence carries load-bearing information, though minor overhead like the 'snake_case:' label and dense parentheticals keep it just short of a perfect 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and zero parameters, the description carries the full burden and succeeds: it specifies the HTTP endpoint, API-key scope, every return field with its semantics, the two primary failure modes (404/403), and the security guarantees. Nothing an agent needs to call or interpret the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the baseline is 4; there is no parameter meaning for the description to add. The description productively uses the space instead to document the return structure in detail, which is the semantically relevant information for this tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb (Lists) with a precise scope: agent tools declared for training environments (the egress allowlist) plus the per-workspace verification secret. It is immediately distinguishable from sibling register_env_tool and delete_env_tool, and the audit purpose is stated outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly frames the intended use ('use it to audit which endpoints and credentials environments may call'), which gives an agent a clear trigger condition for selecting it. It does not name alternatives or state when-not-to-use conditions, but the audit framing makes the distinction from the register/delete siblings evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_evalslist evalsARead-onlyIdempotent
List this workspace's eval runs (newest first, most recent 50) with status, progress and stored results, so a customer can see every comparison, criterion run and screening they have queued or finished. GET /v1/evals (API-key scope: read). Returns: {object:"list", data:[run]} where run = {id, name, rubric, rubric_type, eval_kind ("comparison"|"criterion"), criterion_snapshot (frozen judge instrument on criterion runs, else null), baseline_model (a catalog id or "stored"), candidate_models (arm keys), arms:[{key, model, label|null, system:bool, tools:bool, n}], judge_model, sample_count, sample_filters:{model?, tag?, segment?, dataset_id?, trace_replay?, screening?}, status (PENDING|RUNNING|DONE|ERROR|CANCELLED), error|null, results (null until DONE; comparison: {sample_count, clipped_samples, baseline:{model, stored_answers, truncated, avg_latency_ms, eval_cost_micros}, per_candidate:[{model, arm, wins, losses, ties, failed, attempted, judged_share, unreportable, win_rate, ci95, inconclusive, truncated, avg_latency_ms, eval_cost_micros, savings_pct, replay?}], judge_cost_micros, screening?:{incumbent, token_shape, per_candidate:[{model, similarity:{matched, differed, unparsed, judged, match_rate, ci95}, est_usd_per_request, est_savings_pct, projected_monthly_usd, projected_monthly_savings_usd, ...placement}], recommendation}}; criterion: {eval_kind:"criterion", sample_count, clipped_samples, criterion, per_model:[{model, judged_pass, judged_fail, unparsed, truncated, observed_pass_rate, observed_ci, corrected_pass_rate|null, corrected_ci|null, avg_latency_ms, eval_cost_micros}], judge_youden, judge_cost_micros}), assertions|null, created_at (ISO), progress_ratio (0..1)}. Notes: No pagination or filtering: always the 50 newest runs. All keys are snake_cased at the door (camelCase internally); model ids used as map keys pass through untouched. Read-only, no wallet spend.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnly/openWorld/idempotent/non-destructive hints, and the description adds substantial behavioral detail beyond them: no wallet spend, API-key scope, no pagination/filtering, snake_case conversion, model-id key pass-through, status lifecycle, and frozen criterion snapshots. This is rich disclosure beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, ordering, limit, and audience, then moves through the full response shape and ends with critical notes. Despite its length, every sentence carries operational value, especially because there is no output schema to encode the return structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters and no output schema, the description carries the full burden of documenting behavior and return values, and it does so comprehensively: response shape, nested run details, statuses, key casing, scope, and read-only/no-spend behavior. Nothing needed to invoke and interpret this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to document. The description reinforces this by stating there is no filtering or pagination, and the baseline for a no-parameter tool is 4, which is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List'), resource ('this workspace's eval runs'), ordering and limit ('newest first, most recent 50'), and the kinds of runs included ('comparison, criterion run and screening'). This clearly distinguishes it from siblings like create_eval, delete_eval, and compare_evals by enumerating its exact scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: a customer can see every queued or finished comparison, criterion run, and screening. It also states constraints ('No pagination or filtering: always the 50 newest runs'), but it does not explicitly name alternative tools such as get_eval or compare_evals or state when to prefer them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_fine_tuning_jobslist fine tuning jobsARead-onlyIdempotent
List this workspace's fine-tuning jobs (newest first) with live status, progress, output model and price — for monitoring training from CI or a script. GET /v1/fine_tuning/jobs (API-key scope: read). Returns: A bare JSON array: [{id, provider_job_id, name|null, base_model, method ("supervised"|"spec-draft"), status (VALIDATING_FILES|QUEUED|RUNNING|SUCCEEDED|FAILED|CANCELLED), fine_tuned_model|null, deployed_model_name|null (servable name after deployment), deploy_status|null ("queued"|"staging"|"relaying"|"converting"|"provisioning"|"serving"|"failed"), deploy_error|null, trained_tokens (string)|null, trained_steps|null, total_steps|null, rate_per_m_token_usd (customer price per 1M trained tokens), billed_cost_usd|null (set on completion), error|null, created_at}]. Notes: Statuses are reconciled live against the training backend on each call (best effort; DB state served on backend error); a locally terminal status is never resurrected. Internal margin (markup) is stripped from the wire shape. Feature-flag gated (404 when fineTuning is off). Read-only, no spend. Scopes not enforced on this route today.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false; the description goes well beyond these by disclosing live reconciliation against the training backend, best-effort status on backend error, that locally terminal statuses are never resurrected, markup stripping, feature-flag gating (404), read-only/no-spend guarantees, and the fact that scopes are not enforced. This is rich, non-redundant behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although the description is long, it is tightly structured: purpose, endpoint/auth scope, return shape, and behavioral notes. Every sentence adds necessary information, especially because there is no output schema to carry return-value documentation. The key purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and zero parameters, the description carries the full burden of explaining what the agent will receive and how the backend behaves. It documents the exact array shape, all notable fields, status enums, deployment statuses, pricing fields, error cases, and live-vs-terminal semantics. The only minor omission is explicit pagination behavior, but for a monitoring list endpoint this is not a significant gap given the complete field-level return specification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100%, so there is nothing for the description to add about parameter semantics. The baseline for 0-parameter tools is 4, and the description correctly omits irrelevant parameter details while focusing on output and behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List this workspace's fine-tuning jobs'), adds meaningful qualifiers (newest first, live status, progress, output model, price), and is clearly distinct from sibling tools like get_fine_tuning_job, create_fine_tuning_job, and cancel_fine_tuning_job. It also names the exact HTTP endpoint, leaving no ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly frames the intended use case ('for monitoring training from CI or a script') and states the read-only, no-spend nature. It does not explicitly name alternatives or give when-not-to-use conditions, but the context is clear enough that an agent can select it correctly among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_grpo_runslist grpo runsARead-onlyIdempotent
List the workspace's online-RL (GRPO) training runs with ledger-true spend and outcomes, plus how many self-improvement candidates are waiting in the queue — use it to monitor training and decide whether to start another run. GET /v1/grpo/runs (API-key scope: read). Returns: JSON object: { candidates_waiting: integer, auto_provision_available: boolean, runs: [ { id, status (ACTIVE|STOPPED|COMPLETED|FAILED|OVERBUDGET), model, budget_usd, spent_usd (reward/judge spend), gpu_spent_usd, env_spent_usd, gpu_hour_budget: number|null, gpu_rate_usd_per_hour: number|null, created_at (ISO), outcome: null | { steps?, first_half_mean_reward?, second_half_mean_reward?, stopped_by_tripwire?, bakeoff?: { verdict, delta, delta_ci95: [lo, hi], prompts, k, mean_sim_fraction, mean_tool_steps } } } ] }. Newest first, at most 50 runs; outcome is only fetched for the 10 newest non-ACTIVE runs (older ones return outcome null). Notes: Feature-flag gated: the entire training API (fineTuning flag) returns 404 'Fine-tuning is not enabled' when the flag is off. The key's minting user must be workspace OWNER/ADMIN or the call is 403. Spend figures come from the billing ledger, never self-reported. No pagination parameters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only/idempotent/non-destructive, but the description adds substantial behavioral context: ledger-true spend figures, newest-first ordering, 50-run cap, outcome only fetched for the 10 newest non-ACTIVE runs, feature-flag 404 behavior, and OWNER/ADMIN permission requirement. This goes well beyond annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense, and every section earns its place: purpose, endpoint, response shape, ordering, limits, permissions, and error behavior. It is front-loaded with the primary use case. Slightly verbose, but justified by the absence of an output schema to document the response.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully documents the JSON response shape, field semantics, ordering, limits, and caveats. It also covers auth, feature-flag failure, and ledger accuracy. An agent has everything needed to invoke the endpoint and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description correctly avoids inventing parameter guidance and instead documents the fixed request scope and response behavior, which is appropriate for a parameterless endpoint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb and resource: it lists the workspace's online-RL (GRPO) training runs. It also clearly distinguishes from sibling tools like get_grpo_run, start_grpo_run, and stop_grpo_run by framing this as the monitoring/list operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when to use the tool: to monitor training and decide whether to start another run. It doesn't explicitly name alternatives or exclusions, but the list-vs-single-run distinction is clear enough given the sibling names and the stated purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_labelslist labelsARead-onlyIdempotent
List the workspace's human pass/fail grades (ground-truth labels) on logged requests, newest first — use it to audit or export the verdicts every judge is measured against. GET /v1/labels (API-key scope: read). Returns: JSON { object: 'list', total: integer (matching rows across all pages), data: [ { id, request_id, verdict ('pass'|'fail'), critique: string|null, source ('human'|'assist_accepted'|'verifier'), scope ('request'|'trace'), created_at (ISO) } ] }. Notes: Offset pagination: page through with offset += limit until offset >= total. Rows include labels of every source (human, assist_accepted, verifier).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. Default 50, clamped 1..200. Non-numeric or 0 falls back to the default. Default: 50. | |
| offset | No | Rows to skip (offset pagination). Default 0. Default: 0. | |
| verdict | No | Filter to one verdict. Any other value is ignored (no filter). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds substantial context: newest-first ordering, offset pagination mechanics, the fact that all sources are included, and the exact response shape. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core verb, resource, ordering, and use case, then supplies endpoint, response shape, and pagination notes. Every sentence adds value, and the structure makes the pagination and source-inclusion caveats easy to find.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully specifies the return JSON, including field types and enums. It also covers pagination and source semantics, leaving little ambiguity for an agent deciding whether and how to call this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents limit, offset, and verdict thoroughly. The description adds no parameter-specific meaning beyond the schema, but it does clarify that rows include all sources regardless of verdict filter, which slightly reinforces optional-filter behavior. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List the workspace's human pass/fail grades... on logged requests, newest first.' It clearly differentiates from siblings like list_label_sets and create_label by focusing on ground-truth verdicts rather than label sets or label creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit use context: 'use it to audit or export the verdicts every judge is measured against.' It doesn't name alternative tools or exclusions, but the purpose is specific enough to guide tool selection against the large sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_label_setslist label setsARead-onlyIdempotent
List the workspace's golden sets — named collections of human-graded requests with their measured label quality (inter-rater kappa) — use it to see which sets exist, which are frozen, and which judges calibrate on them. GET /v1/label_sets (API-key scope: read). Returns: JSON array (bare array, newest first) of { id, name, description, size: integer, membership_hash: string|null, frozen_at: ISO|null, kappa: number|null, agreement: number|null, kappa_n: integer|null, rater_count: integer|null, attached_to: [ { id, name } ] (criteria calibrating on this set), created_at }. Notes: Returns a bare JSON array, not a { object: 'list' } envelope. kappa is null until the set is frozen, and stays null after freezing when no blind re-grades by a second rater exist inside the set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds valuable behavioral detail beyond annotations: the exact endpoint, API-key scope, bare-array response format instead of an envelope, newest-first ordering, and precise null semantics for kappa. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat long but every sentence earns its place: purpose, endpoint/scope, complete return shape, and caveats are all separated clearly. The critical 'bare array' warning is isolated in a Notes section rather than buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully compensates by enumerating every returned field and its type/null behavior. It also covers ordering, endpoint, scope, and the kappa edge case, making the tool callable without any external documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is an empty object with 100% coverage, so there is no parameter semantics to add. The rubric's baseline of 4 applies, and the description instead enriches the response semantics extensively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a specific resource ('the workspace's golden sets') while defining what golden sets are. It also clarifies the distinguishing scope ('named collections of human-graded requests...') so it will not be confused with list_labels or the label-set management siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly frames when to use the tool: 'use it to see which sets exist, which are frozen, and which judges calibrate on them.' It gives clear practical context though it does not name alternatives or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_logslist logsARead-onlyIdempotent
Browse the workspace's logged chat exchanges (request messages + assistant reply, secret-scrubbed) with filters for model, tag, auto-detected traffic segment, finish reason, cache hit and time range — use it to inspect real traffic before grading, building datasets, or running evals. GET /v1/logs (API-key scope: read). Returns: JSON { object: 'list', total: integer, limit, offset, data: [ { request_id, created_at (Unix seconds), model, tag, segment (prompt family id), segment_exact (exact system-prompt hash), trace_id, finish_reason, streamed: boolean, cache_hit: boolean, fallback_from: string|null, prompt_tokens, completion_tokens, messages: parsed JSON array of request messages (null if unparseable), response: parsed assistant message object (null if unparseable) } ] }. Newest first, successful (non-aborted) exchanges only. Notes: Request logging is opt-in per workspace: returns 409 { error: { message, type: 'invalid_request_error', code: 'logging_disabled' } } when it is off — an empty list would otherwise read as 'no traffic'. Offset pagination: repeat with offset += limit until offset >= total. Pass a row's segment back as ?segment= or into an eval's sample_filters.segment to slice by that application surface.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Upper bound, Unix seconds (positive integer; other values ignored). | |
| tag | No | Exact request tag filter. | |
| limit | No | Page size, clamped 1..100. Default 25. Default: 25. | |
| model | No | Exact model name filter. | |
| start | No | Inclusive lower bound, Unix seconds (positive integer; other values ignored). | |
| offset | No | Rows to skip (offset pagination). Default 0. Default: 0. | |
| segment | No | Auto-detected traffic segment: the FAMILY of system prompts sharing one template (value of a row's `segment` field; the reserved value "none" is the no-system-prompt segment). Exact match. | |
| cache_hit | No | "true" or "false" — filter to cached / uncached responses. Any other value = no filter. | |
| finish_reason | No | Exact finish-reason filter (e.g. stop, length, tool_calls). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the description correctly focuses on behavior annotations cannot express: newest-first ordering, successful (non-aborted) exchanges only, secret-scrubbing, the 409 logging_disabled error that prevents misreading an empty list as 'no traffic', and the exact offset-pagination loop. The 409 disclosure alone is high-value operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but every sentence earns its place: purpose front-loaded, then endpoint+auth scope, then a complete return shape (critical since there is no output schema), then ordering, error mode, pagination pattern, and a cross-tool tip. No fluff, no repetition of annotation content, and the structure follows a natural read→call→interpret flow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, 0-required, no-output-schema read tool, the description covers everything needed to call it correctly: full return payload shape, ordering and filtering semantics, the one critical error case (409 when logging disabled), the pagination contract, and how results feed into evals. Nothing an agent needs to invoke this safely and correctly is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds genuine value beyond the schema by mapping the filter surface in prose, clarifying time-range semantics for start/end, and especially the segment round-trip workflow (row's segment → ?segment= or eval sample_filters.segment), which is operational guidance no schema field conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+scope: 'Browse the workspace's logged chat exchanges (request messages + assistant reply, secret-scrubbed)' with named filters. The 'inspect real traffic before grading, building datasets, or running evals' phrase distinguishes it from siblings like export_logs (bulk export) and get_trace (single trace lookup) without needing their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use context ('inspect real traffic before grading, building datasets, or running evals') and even shows downstream reuse ('Pass a row's segment back as ?segment= or into an eval's sample_filters.segment'). However, it never names alternatives or states when NOT to use it versus export_logs or screen_my_traffic, stopping short of the explicit routing the top band requires.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_model_versionslist model versionsARead-onlyIdempotent
List the workspace's model-version chain — one immutable record per completed training round, pinning the judge, curriculum and holdout its verdict depended on — use it to review improvement history and pick a version to adopt or roll back to. GET /v1/model_versions (API-key scope: read). Returns: JSON { object: 'list', data: [ { id, parent_id: string|null, base_model, artifact_ref, served_model: string|null (null = not deployed/servable yet), source_run_id, source_kind ('grpo'|'finetune'), verdict: any (bake-off verdict JSON), judge_criterion_id, curriculum_hash, holdout_hash, comparable_to_parent: boolean (true only when parent's holdout hash matches — otherwise treat the delta as a discontinuity), adopted_at: ISO|null, created_at: ISO } ] }. Newest first, at most 200. Notes: NOT feature-flag gated (deliberately readable even when training is paused, so the audit trail stays visible). The key's minting user must be workspace OWNER/ADMIN (403). No pagination beyond the 200 cap.
| Name | Required | Description | Default |
|---|---|---|---|
| base_model | No | Filter to one base model's lineage (exact match). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint, idempotentHint, non-destructive). The description adds substantial behavioral context beyond that: the owner/admin authorization requirement with 403, the 200-record cap with no pagination, newest-first ordering, that the endpoint is deliberately NOT feature-flag gated, and the comparable_to_parent discontinuity warning for interpreting deltas. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but every sentence earns its place: purpose, use case, HTTP verb and API-key scope, complete return shape with field types and null semantics, ordering, cap, and three edge-case notes (feature-flag gating, auth, pagination). The field-by-field return listing is justified because no output schema exists. Core purpose is front-loaded before any detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a 1-parameter list tool. With no output schema, the description documents every return field including served_model null meaning, verdict type, the comparable_to_parent discontinuity flag, and the 200-cap. Auth requirements, gating behavior, and ordering are all disclosed. Nothing an agent needs to correctly call and interpret the results is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — base_model's 'Filter to one base model's lineage (exact match)' is fully documented in the schema. The description's return-shape listing of base_model adds minor context about what 'lineage' refers to, but it contributes no parameter syntax, format, or filtering semantics beyond the schema. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List the workspace's model-version chain — one immutable record per completed training round, pinning the judge, curriculum and holdout its verdict depended on'. The downstream use ('pick a version to adopt or roll back to') distinguishes it from siblings like adopt_model_version (which performs adoption) and get_model_version (single-version fetch). Purpose is precise and not confusable with any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit use context: 'use it to review improvement history and pick a version to adopt or roll back to'. This is clear enough to route an agent toward listing rather than adopting or single-getting. However, it never names sibling alternatives explicitly (e.g., 'for a single version use get_model_version') or states when not to use it, so it falls short of explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_raft_roundslist raft roundsARead-onlyIdempotent
List the workspace's self-improvement (rejection-sampling fine-tuning) rounds, newest first, with winners/give-ups, budget and ledger-true spend — read-only observability for rounds started from the dashboard. GET /v1/raft/rounds (API-key scope: read). Returns: JSON { rounds: [ { id, status, criterion_name, policy_model, prompt_count, candidates_per_prompt, winners_count, giveups_count, produced_job_id: string|null (the fine-tuning job a COMPLETED round produced), skip_reason: string|null (SKIPPED rounds), budget_usd: number|null, spent_usd: number, created_at: ISO, completed_at: ISO|null } ] }. At most 200 rounds. Notes: List-only: there is no public start endpoint for rounds. Feature-flag gated (fineTuning flag off → 404). OWNER/ADMIN key required (403). Returns { rounds: [] } (not an error) when the round history table hasn't been provisioned yet. spent_usd is 0 for rounds created before per-round budgets existed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with strong annotations (readOnly, idempotent, non-destructive), the description adds substantial behavioral context: feature-flag gating (404), required OWNER/ADMIN key (403), empty array as a valid non-error response, 200-round cap, and the meaning of null fields. This goes well beyond what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized: purpose, endpoint, response schema, limits, and error conditions are all present without wasted words. Information is front-loaded with the core purpose before the API details, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the empty input schema and lack of an output schema, the description fully equips an agent to invoke and interpret the tool correctly. It covers the endpoint, auth scope, response fields with null semantics, max result count, flag gating, and non-error empty behavior. No meaningful gap remains for a zero-parameter read-only list call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. There are no parameter semantics to document, and the description does not need to compensate for any schema gaps. It instead documents the output shape in detail, which is appropriate for this parameterless call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('self-improvement rejection-sampling fine-tuning rounds') with meaningful scope ('workspace's', 'newest first', 'started from the dashboard'). It also enumerates the data returned, clearly distinguishing it from sibling tools like list_fine_tuning_jobs or list_grpo_runs through the explicit 'raft/rounds' resource and endpoint path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when to use the tool: read-only observability of dashboard-started raft rounds, and explicitly notes there is no public start endpoint. However, it does not name alternative sibling tools or state when one should use them instead, stopping short of the full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_refusalslist refusalsARead-onlyIdempotent
Pages through the workspace's refusal ledger — every time enforcement stopped something (an alias repoint without evidence, an auto-gate or dataset build refusing an untrusted judge, a reward refusing a drift-flagged criterion, a round gate holding, an eval refused off its calibrated population) — newest first, for audit and compliance reporting. GET /v1/enforcement/refusals (API-key scope: read). Returns: { refusals: [{ id, kind, subject, reason (verbatim refusal message, truncated to 500 chars), created_at (ISO) }], next_cursor: <string|null — null on the last page> }. Notes: Ordered by created_at desc, id desc. The ledger is append-only: a refusal later overridden is still listed. Cache-Control: no-store. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Exact-match filter on refusal kind. | |
| limit | No | Page size, integer 1..200 (400 otherwise). Default: 50. | |
| since | No | ISO-8601 date/time; only refusals created at or after it. 400 'since must be an ISO date' if unparseable. | |
| cursor | No | Opaque cursor = the `next_cursor` (a refusal id) from the previous page; returns rows strictly after it in newest-first order. | |
| subject | No | Exact-match filter on subject identity, e.g. 'alias:prod-chat', 'criterion:<id>', 'run:<prefix>'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations, the description discloses append-only semantics ('a refusal later overridden is still listed'), ordering tie-break ('created_at desc, id desc'), Cache-Control: no-store, and pagination behavior. It also documents truncation ('reason ... truncated to 500 chars') and the null last-page cursor, giving the agent a full behavioral picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but every sentence earns its place: purpose first, then endpoint/scope, return shape, ordering, append-only caveat, cache behavior, and cost. No filler or repetition is present; it is long because the tool has meaningful behavioral specifics to disclose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully substitutes by specifying the exact response shape, cursor semantics, ordering, truncation, and pagination. It also covers auth scope, cache behavior, cost, filter semantics implied by examples, and append-only visibility — nothing necessary for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the input schema. The tool description adds some operational context such as the pagination flow and the meaning of next_cursor, but it mostly restates schema-level semantics, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Pages through the workspace's refusal ledger') and enumerates exactly what counts as a refusal with concrete examples, making it unmistakably distinct from sibling list tools like list_alerts or list_audit_tombstones. Saying 'newest first, for audit and compliance reporting' further pins the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this is appropriate ('for audit and compliance reporting') and notes the required API-key scope and cost ('Free'). It does not explicitly contrast it with alternative list/audit tools such as list_audit_tombstones or export_audit_log, so exclusion guidance is missing, but the intended use is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_training_fileslist training filesARead-onlyIdempotent
List the training files this workspace has uploaded for fine-tuning, newest first, so a customer can find the file id to start a job with. GET /v1/fine_tuning/files (API-key scope: read). Returns: A bare JSON array (no list envelope): [{id (local record id), provider_file_id (the opaque upstream file id — THIS is the value to pass as training.file_id / training_file_id when creating a job), filename, bytes, purpose ("fine-tune"), created_at}]. Notes: Feature-flag gated: when the fineTuning flag is off every /v1/fine_tuning route returns 404 {error:"Fine-tuning is not enabled"} (plain string error, not the nested shape). Note: the fine-tuning routes authenticate the key directly and do NOT currently enforce management scopes (any valid key of the workspace works); requiredScopeFor would classify writes here as platform:write. Read-only, no spend.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing the exact response shape (bare JSON array, no envelope), the field semantics (especially provider_file_id being the opaque upstream id to use), error shape for feature-flag gating (plain string error not nested), and the lack of spend. This is useful operational detail that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but packed with useful information: endpoint, scope, return format, field meanings, error behavior, auth nuance, and cost. It is front-loaded with the core purpose and ordering, then layers supporting details. Slightly dense, but every clause earns its place given the absence of an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and rich annotations, the description covers everything an agent needs: what is returned, which field to use downstream, what errors to expect, auth behavior, and side-effect/cost implications. No material gap remains for correct invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and the schema coverage is 100%, so the description has no parameter burden. It instead clarifies what the returned fields mean, especially provider_file_id, which is the kind of semantic detail that would otherwise be missing. A 4 reflects the baseline for a no-parameter tool plus the added value of explaining result semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb and resource: 'List the training files this workspace has uploaded for fine-tuning, newest first'. It also clarifies the purpose—finding the file id to start a job—and distinguishes itself from related operations by naming the exact endpoint (GET /v1/fine_tuning/files) and emphasizing the provider_file_id as the value to pass to job creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool: when a customer needs to find a file id to start a fine-tuning job. It also provides critical context about feature-flag gating (404 when fineTuning is off) and authentication behavior (any valid workspace key works; management scopes not enforced), which helps the agent decide whether this tool is accessible in the current context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_env_toolregister env toolA
Registers (or updates, by name) an agent tool that training environments for this workspace are allowed to call — the explicit consent grant naming the https endpoint, its credential, whether it is read-only, and a per-episode call cap. POST /v1/env/tools (API-key scope: platform:write). Returns: 201 with the tool view, snake_case: { id, name, endpoint_url, auth_prefix, read_only, max_calls_per_episode, enabled, created_at }. Notes: Request body keys are camelCase (endpointUrl, authHeader, readOnly, maxCallsPerEpisode) while the response is snake_case — the route lifts no aliases. 400 'Invalid JSON body' or 'Missing required field(s): name, endpointUrl' when either is missing/empty. Gated behind the fineTuning feature flag (404 when off). Requires an OWNER/ADMIN minting user (403). Registration-time host validation only; DNS rebinding is not defended here. Writes an audit event. No money implication by itself.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Tool name, 1-64 chars of letters, digits, '_', '.', '-' (trimmed). Upsert key: re-posting the same name updates the registration and re-enables it. | |
| readOnly | No | Whether the tool is side-effect free. Defaults to true whenever omitted (including on update). camelCase only. | |
| authHeader | No | Full Authorization header value to send to the tool (e.g. 'Bearer sk-...'). Stored encrypted, never returned. On update, omit to keep the existing header; send '' to clear it. 400 if encrypted storage is not configured. camelCase only. | |
| endpointUrl | Yes | Absolute https URL the environment may call. Rejected (400) if not https, if it embeds username/password, or targets localhost, a private/loopback/link-local/CGNAT IPv4, IPv6 loopback/link-local/unique-local, IPv4-mapped private addresses, or a cloud metadata host. NOTE: camelCase key — no snake_case alias is accepted on this route. | |
| maxCallsPerEpisode | No | Per-episode call cap, clamped to 1..500. Defaults to 20 whenever omitted (including on update). camelCase only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a remarkable amount beyond annotations: update-by-name re-enabling, camelCase request vs snake_case response with no aliasing, exact error conditions (400/403/404), encrypted credential storage, omit-vs-clear authHeader behavior, registration-time-only host validation, DNS rebinding caveat, audit event writing, and the feature-flag gate. It does not contradict the annotations; the operation is a write, non-idempotent, non-destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and long, but every clause carries useful information: purpose, HTTP route, auth scope, response shape, error modes, prerequisites, and security caveats. It front-loads the core purpose before diving into details; a bulleted layout would improve scanability, but the current structure is well-ordered and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description supplies the 201 response object with field names, covers success and error paths, documents authorization and feature-flag requirements, explains updating vs creating, and flags the security limitation around DNS rebinding. For a registration tool with this many edge cases, nothing crucial is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema coverage is 100%, the baseline is 3, but the description adds meaningful cross-cutting semantics: the request/response casing mismatch, update defaults and re-enable behavior, authHeader clearing semantics, encrypted-storage failure mode, and host-validation limitations. These details go beyond the individual parameter descriptions and help an agent avoid common mistakes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Registers (or updates, by name) an agent tool that training environments for this workspace are allowed to call.' It also captures the upsert nature ('or updates, by name') and the essential consent-granting purpose, making it clearly distinct from sibling operations like list_env_tools and delete_env_tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the operational context explicit: it is the consent grant naming the HTTPS endpoint, credential, read-only flag, and call cap, with prerequisites such as OWNER/ADMIN minting user and the fineTuning feature flag. It does not explicitly name alternative tools or say when not to use it, but the sibling names and the 'Registers (or updates)' framing give an agent sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_criterion_alignmentrun criterion alignmentA
Calibrate a criterion by re-judging every in-scope human-labeled trace and measuring agreement (TPR/TNR with Wilson intervals, Cohen's kappa), which is what earns a judge the trust needed to gate on it. POST /v1/criteria/{id}/align (API-key scope: evals:write). SPENDS MONEY: this starts billable work on the workspace wallet. Returns: Small sets (<= 50 labels) run synchronously and return the report: { scope_tag, scope_family, tag_breakdown: [{ tag, n }], mixed_population, excluded_other_cause, unattributed_fails, metrics: { n, tpr, tpr_ci, tnr, tnr_ci, kappa }, tier, thin_alignment_set, skipped, holdout: { tune_n, report_n }|null, one_class_note, disagreements: [{ request_id, judge_verdict, human_verdict }] }. Larger sets return { queued: true, total_labels } and the report is built in the background over the following minutes (poll GET /v1/criteria/{id}/alignment). Notes: MONEY: spends the wallet like any judging (one judge call per label; a new run is new spend). OWNER/ADMIN only (403). 400 when fewer than 30 in-scope labels exist (message says how many you have and how to label more), when a run is already in progress ("An alignment run is already in progress for this criterion."), or when fewer than 30 labels could actually be judged. 404 "Criterion not found". Route maxDuration is 300s.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Criterion id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations carry only bare hints (readOnlyHint:false, idempotentHint:false, openWorldHint:true), and the description goes far beyond them: billable spend with per-label economics ('one judge call per label; a new run is new spend'), auth restrictions, dual sync/async execution with a threshold (<=50 labels), every major error mode with its status code and message, the polling endpoint, and a 300s maxDuration. It also clarifies the openWorldHint by disclosing that background work continues after the response. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: purpose first, then endpoint/auth, then the capitalized money warning, then behavioral branches and errors. Nearly every sentence earns its place, and the verbose return schemas are justified by the absence of an output schema. Minor inefficiency: the money warning is stated twice ('SPENDS MONEY' and again in 'Notes: MONEY...').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a genuinely complex tool — dual sync/async execution, billing, permissions, timeout, and no output schema — and the description covers every branch: both return payloads with field details, polling instructions, the 30-label minimum, all key error codes with example messages, and the 403 auth constraint. Nothing an agent needs to invoke and interpret this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% — the single 'id' parameter is documented as 'Criterion id.' — so the baseline of 3 applies. The description only incidentally confirms the parameter via the URL template POST /v1/criteria/{id}/align and adds no format, validation, or usage nuance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with rich detail: 'Calibrate a criterion by re-judging every in-scope human-labeled trace and measuring agreement (TPR/TNR with Wilson intervals, Cohen's kappa)'. The 'earns a judge the trust needed to gate on it' clause gives operational purpose, and the detail distinguishes this from siblings like get_criterion_alignment (fetch results) and auto_improve_criterion (improve the criterion).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for invocation: it is the step that earns gating trust, it explicitly warns OWNER/ADMIN only (403) and that it spends wallet money, and it instructs how to follow up for large sets (poll GET /v1/criteria/{id}/alignment). However, no sibling alternatives are named (e.g., get_criterion_alignment for checking existing results without spending) and there is no explicit 'when not to use' statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_criterion_suspectsscan criterion suspectsA
Judges a bounded batch of recent, not-yet-labeled traffic with this criterion and queues every FAIL as a pending suspect for human review in the dashboard's Review queue — the fastest way to grow a judge's failure-label set from live traffic. POST /v1/criteria/{id}/scan (API-key scope: evals:write). SPENDS MONEY: this starts billable work on the workspace wallet. Returns: { scanned: <int, items actually judged>, flagged: <int, FAIL verdicts queued as pending suspects> }. Both are 0 when no unlabeled, unscanned candidates exist in scope. Notes: No request body is read. Requires an OWNER/ADMIN minting user (403). 404 if the criterion is not in the workspace. Request-unit criteria: takes the 100 most recent logged exchanges (scoped to the criterion's population segment when it has one), drops already-labeled and already-scanned rows (dismissed suspects never resurface), and judges at most 30. Trace-unit criteria: scans at most 10 COMPLETED agent runs from the last 7 days (quiet for 10 minutes), scoped to the criterion's tag and segment; requires a completed calibration (400 'Calibrate this judge first' otherwise) and has a pre-flight wallet gate of ~$0.10 per run (402 'Insufficient balance' before any spend). SPENDS THE WALLET: every judge call is metered as usage (billing prefix scan:). Suspects are adjudicated in the dashboard (accept = a real FAIL label; dismiss = never resurfaces). Function maxDuration is 300s.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Criterion id (must belong to the key's workspace). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing billable spend, the exact endpoint and API-key scope, per-type scan limits, quiet periods, pre-flight wallet gates, billing prefixes, adjudication semantics, and maxDuration. Annotations only indicate non-read-only, non-idempotent, open-world behavior; the description supplies the operational details an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries operational value: purpose, endpoint, billing, return shape, auth, errors, scan limits, and review lifecycle. The most important scoping and cost warnings are front-loaded, and no filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so the description correctly explains the return object shape and zero-case behavior. It also covers auth, workspace constraints, billing, limits, quiet periods, calibration requirements, and error codes, making the tool safely callable by an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the only parameter, id, is already documented as a criterion id belonging to the key's workspace. The description reinforces this with the path and 404 condition, but it does not add substantial parameter-level meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it judges a bounded batch of unlabeled traffic with a criterion and queues FAIL verdicts as pending suspects for human review. It also frames its purpose as the fastest way to grow a judge's failure-label set from live traffic, which clearly distinguishes it from generic scan or review tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides strong contextual guidance: when to use it (live, unlabeled, unscanned traffic), prerequisites (OWNER/ADMIN, completed calibration for trace-unit criteria), and failure conditions (403, 404, 400, 402). It does not explicitly name alternative sibling tools or state when not to use it, but the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_my_trafficscreen my trafficA
Would a cheaper (or newer) model hold on this workspace's own traffic? Starts a zero-config screening — the dominant logged model is the incumbent, its STORED answers the baseline, the cheaper model of each family (or the candidates you pass) the challengers — waits for it, and returns each candidate's verdict from the win-rate interval plus a switch/keep recommendation. SPENDS MONEY: judging and candidate generations bill the workspace wallet (402 when the wallet cannot cover the funds gate). Needs request logging on and logged traffic. Prefer this over create_eval for the 'is X better/cheaper' question.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Only traffic logged with this tag (one tag = one population). | |
| sample_count | No | Prompts to sample (5..500). Default: the server's screening default. | |
| wait_seconds | No | How long to wait for the run before returning its id to poll. Default 600; 0 returns immediately. | |
| candidate_models | No | Catalog model ids to test instead of the auto-picked cheaper set (max 6). An upgrade counts — anything in the catalog. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description prominently warns that the tool spends money, bills the workspace wallet, and can return 402 when the funds gate is not met. It also discloses that it waits for the run and returns verdicts, adding behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the screening question, then mechanics, then cost, then routing. It is longer than strictly necessary and uses a long dash-laden sentence, but every sentence carries distinct value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers prerequisites, cost, high-level output, and candidate selection, which is strong for a tool with no required parameters and no output schema. It stops short of fully describing the polling path when wait_seconds expires and the exact return shape, though wait_seconds is already documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters are already fully described in the schema, so the baseline is 3. The description adds meaning by explaining that candidate_models are the challengers that override the auto-picked cheaper set and that the tool is zero-config with all parameters optional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete question and defines the tool as a zero-config screening of the workspace's own traffic, naming the incumbent, challengers, and the verdict/recommendation output. It also explicitly contrasts with create_eval, so an agent can distinguish this tool from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states prerequisites ('Needs request logging on and logged traffic') and gives an explicit routing rule: 'Prefer this over create_eval for the is X better/cheaper question.' The cost gate and zero-config nature further clarify when the tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_judge_settingsset judge settingsAIdempotent
Set (or clear) the workspace's default judge model for eval runs that don't specify one — must be a chat model from the platform catalog offered to this workspace. PUT /v1/settings/judge (API-key scope: platform:write). Returns: 200 { default_judge_model: string|null, house_default: string } — the settings after the update. Notes: Judges run on the platform's key and are metered to the wallet, so only platform-catalog models qualify (a workspace's own provider keys are for inference, not judging). Needs platform:write (it is a workspace setting).
| Name | Required | Description | Default |
|---|---|---|---|
| default_judge_model | No | Model id (e.g. "openai/gpt-4.1") to use as the default judge, or null / omitted / empty string to revert to the house default. Any non-string, non-null value → 400 'default_judge_model must be a string or null'. Must be a chat (non-embedding) model this workspace is offered, otherwise 400 '"<model>" isn't a chat model this workspace is offered.' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the PUT endpoint, required API-key scope (platform:write), return payload shape, and the metering/wallet behavior. It also explains the 'clear' semantics via null, which complements the idempotentHint annotation without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, followed tightly by endpoint, return shape, and rationale. Every sentence contributes essential information with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one optional parameter and no output schema, the description covers all necessary call context: auth scope, model constraints, return shape, and clearing behavior. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single parameter is thoroughly documented in the schema including null/omitted/empty-string behavior and error cases. The description adds context about what the judge model is for, but no new parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Set (or clear)') and resource ('workspace's default judge model for eval runs that don't specify one'), making the tool's function immediately clear. It is easily distinguishable from the sibling get_judge_settings and other model-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool (for eval runs that don't specify a judge) and what models qualify (chat models from the platform catalog offered to the workspace). It also clarifies why provider keys cannot be used, though it does not name alternative tools or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_fine_tuning_bakeoffstart fine tuning bakeoffA
Start a held-out bake-off that proves a succeeded supervised fine-tune against its base model (teacher-forced NLL/perplexity wins, optionally a judged win-rate) on an ephemeral GPU box — quality proof without deploying the model. POST /v1/fine_tuning/jobs/{id}/bakeoff (API-key scope: platform:write). SPENDS MONEY: this starts billable work on the workspace wallet. Returns: 202 {trigger_run_id} — the comparison is queued; poll GET /v1/fine_tuning/jobs/{id}/bakeoff for status and verdict. Notes: MONEY: metered GPU-box minutes (plus judge calls) bill to the wallet under the bakeoff:: ledger prefix; a wallet HOLD for the whole cost ceiling (max 3 hours × up to 2 GPUs at the reference GPU rate, with markup) is placed before starting — 402 ("…Top up and try again.") if the wallet cannot hold it; only metered minutes are actually billed and the hold is released at the end. Requires OWNER/ADMIN minting user (403). Rate limited per workspace: 20 starts per 60s → 429. 404 "Run not found". 400 for: a spec-draft job, a job not SUCCEEDED, no held-out split ("A comparison needs a held-out split the model didn't train on — this run has none."), a comparison already queued/running, comparison compute or orchestration not configured on the platform, a base model whose parameter count can't be parsed from its name, or a base model over 75B parameters. Invalid JSON body → 400. Feature-flag gated (404 when fineTuning is off). Scopes not enforced on this route today.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The fine-tuning job id (must be method "supervised", status SUCCEEDED, and have a validation/held-out split). | |
| judge_criterion_id | No | Optional id of a calibrated (aligned, request-unit) workspace criterion; adds a judged pass-rate comparison (base vs tuned, up to 100 generated answers per side) next to the objective NLL signal. Must be a string if present (400 otherwise). The body may be empty. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Extensive disclosure far beyond annotations: billable wallet spend with a pre-placed cost-ceiling hold, 402 if the hold fails, OWNER/ADMIN requirement (403), rate limiting (429), a thorough 400 taxonomy, feature-flag gating, scopes-not-enforced, and the 202 queued-run lifecycle with polling follow-up. Annotations (readOnlyHint=false, idempotentHint=false) are consistent with this mutating, non-idempotent, non-destructive action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but well-ordered: purpose front-loaded, then HTTP shape, then the money warning, then auth/rate/error conditions. The length is justified for a spend-incurring operation with complex failure modes, though the cost warning appears twice ('SPENDS MONEY' and the Notes ledger/hold detail), creating minor redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and delivers: 202 {trigger_run_id}, queued status, and polling guidance. Combined with the full error taxonomy, auth requirement, rate limit, and cost-ceiling hold behavior, an agent has everything needed to decide, call, and follow up correctly. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id and judge_criterion_id, including the judged pass-rate comparison details. The description adds only summary-level phrasing ('optionally a judged win-rate') and does not meaningfully extend what the schema provides, matching the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (start), resource (held-out bake-off), and scope (proves a succeeded supervised fine-tune against its base model via NLL/perplexity and optionally a judged win-rate on an ephemeral GPU box). This distinguishes it from siblings like get_fine_tuning_bakeoff (which polls status) and create_fine_tuning_job (which creates the job being baked off).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context for when to use it: proving a SUCCEEDED supervised fine-tune on a held-out split without deploying the model, with explicit preconditions and a detailed 400-condition list. It routes the agent to the GET bakeoff endpoint for status/verdict, but never explicitly names get_fine_tuning_bakeoff as the sibling alternative, so differentiation is implicit rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_grpo_runstart grpo runA
Start an online-RL (GRPO) training run that improves a fine-tunable base model against a calibrated judge as the reward, with hard reward and GPU-hour budgets — use it to turn logged traffic or the candidate queue into a trained adapter. POST /v1/grpo/runs (API-key scope: platform:write). SPENDS MONEY: this starts billable work on the workspace wallet. Returns: 201 with { trigger_run_id: string } — the orchestration handle for the run (the GrpoRun id shows up in GET /v1/grpo/runs once registered). Notes: SPENDS MONEY: the whole commitment (rewardBudgetUsd + GPU hours at the frozen marked-up rate, or a conservative ceiling for autoProvision) is atomically HELD on the wallet at start; 402 when the wallet can't hold it; 400 'No wallet for this workspace' when there is no payment method. Body keys are camelCase only (except environment.proxy_base_url / max_steps and verifier[].timeout_sec, which are snake_case); unknown keys pass through. Zod validation failure returns 400 { error: 'Invalid body: — ' } (flat error shape). Rate limited to 20 starts/min per workspace (429). Feature-flag gated (fineTuning flag off → 404). Requires OWNER/ADMIN (403). Other 400 refusals: unaligned/wrong-unit/drift-flagged judge, iterated-RL round gate (fresh grades needed on a self-trained policy), model not fine-tunable, promptCount < 10, not enough logged prompts or queued candidates, autoAdopt alias missing, no GPU price set, orchestration not configured.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | The policy model to train. Must be on the platform's fine-tunable base-model list, otherwise 400. | |
| qlora | No | QLoRA 4-bit training. Default true. | |
| reward | Yes | Reward spec (camelCase keys). Either { mode: "single", criterionId: string } or { mode: "compositional", criterionIds: string[] (min 1), assertions?: object[] }. Each assertion is { type: "json_valid"|"json_schema"|"regex_match"|"contains"|"not_contains"|"max_length"|"min_length"|"completed"|"tool_called"|"no_tool_call", value?: string } or an exec assertion { type: "exec", command: string, timeoutSec?: integer (1..120) } — exec assertions are only allowed when `environment` is set (agentic/trace-unit rewards). Every criterion must exist in the workspace and be calibrated; a non-agentic run requires request-unit criteria, an agentic run (with `environment`) requires trace-unit criteria. | |
| paramsB | No | Parameter count (billions) override for models whose name doesn't carry it. Must be > 0; capped at 1000. | |
| useVllm | No | Colocated vLLM rollouts (much faster steps). Forced true when `environment` is set. | |
| maxSteps | No | Training steps. Default 100, clamped 1..5000. | |
| autoAdopt | No | Opt-in auto-deploy on an 'improved' bake-off verdict: { aliasName: string (1..120, must already exist in the workspace or the start is refused), canaryPercent?: integer 1..50, gpuType: string, region: string, templateFlavor?: string }. Deploys to a dedicated endpoint, canaries on the alias, and the online gate earns the promote. Inconclusive/regressed rounds never deploy. | |
| groupSize | No | Rollouts sampled per prompt. Default 8, clamped 2..16. | |
| promptTag | No | Draw training prompts only from logged requests carrying this tag. Omit to sample the whole workspace's successful logged traffic. | |
| environment | No | Agentic mode — run episodes inside the tool environment: { proxy_base_url: string (snake_case, required), max_steps?: integer, simulate?: boolean }. Setting this forces useVllm=true and requires trace-unit reward criteria. | |
| platformGpu | No | Bill a platform-provisioned GPU: { gpuType: string, region: string, gpuCount?: integer (clamped 1..8) }. Rate + markup are frozen at start. Omit for bring-your-own compute (no GPU billing). 400 if no price is set for that GPU/region. | |
| promptCount | Yes | Number of prompts to train on. Minimum 10 (400 below that); clamped to 1..10000 at scheduling. A ~20% holdout (min 3) is carved off on top, and the workspace must have promptCount+holdout matching prompts logged or the run is refused with the real counts. | |
| tasksInline | No | Up to 10000 task objects for agentic runs: { goal: any[] (min 1), image?: string (<=500 chars), recorded?: any[], verifier?: [ { command: string (1..4000 chars), timeout_sec?: integer 1..120 } ] }. | |
| holdoutCount | No | Holdout size override (rounded, clamped 1..2000). Use 50+ for a real bake-off claim. Default max(3, ceil(promptCount*0.2)). | |
| autoProvision | No | Let the platform provision an auto-sized GPU box. 400 if provisioning isn't configured; holds a conservative GPU commitment (highest active rate x 8 GPUs x gpuHourBudget) on the wallet. | |
| gpuHourBudget | Yes | Hard cap on GPU hours. Must be > 0. For platform-provisioned GPUs the hours x frozen marked-up rate are held on the wallet at start. | |
| rewardBudgetUsd | Yes | Hard cap (USD) on judge/reward spend. Must be > 0. Held on the wallet at start. | |
| allowSideEffects | No | Agentic runs only: permit calls to tools not declared read-only. Default false. | |
| useCandidateQueue | No | Train on the workspace's GRPO candidate queue (the self-improvement give-up set) for the single reward criterion instead of a tag sample. Only effective with reward.mode=single. | |
| curriculumMixRatio | No | Candidate-queue runs: fraction of the training slice drawn from regular successful traffic. Clamped 0..0.9. | |
| maxCompletionTokens | No | Per-rollout generated-token budget, clamped 256..32768. Defaults: 8192 agentic, 1024 single-turn. | |
| vllmGpuMemoryUtilization | No | Clamped 0.05..0.9. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the sparse annotations by explicitly warning that this tool SPENDS MONEY, holds the commitment on the wallet, requires OWNER/ADMIN, is rate limited, is feature-flag gated, and returns specific failure codes (402, 403, 404, 429, 400) with their causes. This gives an agent a strong model of side effects and failure behavior before invoking it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but every sentence carries load-bearing operational information for a high-stakes, 22-parameter, money-spending tool. It front-loads purpose, endpoint, spending warning, and return value, then groups notes logically by billing, validation, auth, rate limits, and refusal reasons.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema but many non-obvious failure modes, the description supplies the return shape (201 with trigger_run_id), wallet implications, auth requirements, rate limits, feature gating, and the full set of 400 refusal reasons. This is comprehensive enough for an agent to call the tool confidently and diagnose failures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with rich descriptions, so the baseline is 3. The description adds useful body-level conventions (camelCase, selected snake_case exceptions, validation error shape) but does not deepen individual parameter semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific verb ('start'), a precise resource ('online-RL (GRPO) training run'), and the mechanism ('improves a fine-tunable base model against a calibrated judge as reward'), with clear boundaries (hard reward and GPU-hour budgets). The REST endpoint and the explicit goal of turning logged traffic or the candidate queue into a trained adapter make it readily distinguishable from siblings like create_fine_tuning_job or stop_grpo_run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear when-to-use signal ('use it to turn logged traffic or the candidate queue into a trained adapter') and notes prerequisites such as a fine-tunable model and calibrated judge. It does not explicitly contrast with alternative tools or state when not to use it, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_grpo_runstop grpo runA
Stop an ACTIVE online-RL (GRPO) run and release its wallet hold immediately — use it to cut a run short when spend or results aren't what you expected. POST /v1/grpo/runs/{id}/stop (API-key scope: platform:write). Returns: 200 { ok: true }. The run flips to STOPPED; the reward server refuses further scoring and the orchestrator exits on its next sweep. Notes: Idempotency: a run that is not ACTIVE (already stopped/completed) or not in the workspace returns 404 'Run not found or not active'. Money: the commitment hold is released right away; already-metered spend stays billed. Feature-flag gated (fineTuning flag off → 404). OWNER/ADMIN key required (403). No body is read.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The GRPO run id. Must be ACTIVE and belong to the workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses far more than annotations provide: the exact POST endpoint, API scope, 200 response, transition to STOPPED, refusal of further scoring, orchestrator exit, immediate hold release, already-metered spend staying billed, feature-flag gating, auth requirements, 404 behavior, and that no body is read. This is comprehensive behavioral disclosure with no contradiction to annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: main purpose is front-loaded, followed by endpoint, response, behavioral side effects, error cases, and auth. No filler or redundancy; the structure makes the information easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, the description is complete. It covers the return value ('200 { ok: true }'), side effects, error states, auth, feature-flag gating, billing implications, and idempotency behavior. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single required 'id' parameter is already documented in the schema as 'Must be ACTIVE and belong to the workspace.' The description repeats ACTIVE/workspace context but adds no new parameter-level semantics beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Stop an ACTIVE online-RL (GRPO) run and release its wallet hold immediately.' It clearly identifies this as the stop operation for GRPO runs, distinguishing it from sibling tools like start_grpo_run, get_grpo_run, and list_grpo_runs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit when-to-use statement: 'use it to cut a run short when spend or results aren't what you expected.' It also documents key conditions such as 404 for non-ACTIVE runs and OWNER/ADMIN key requirements. However, it does not explicitly name alternative tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_criteriasuggest criteriaA
Clusters the workspace's written failure critiques into up to 5 DRAFT judge criteria, one per failure mode — use it after grading a batch of fails with reasons to bootstrap criteria you then review and align. POST /v1/criteria/suggest (API-key scope: evals:write). SPENDS MONEY: this starts billable work on the workspace wallet. Returns: { created: [<criterion objects, same snake_case shape as GET /v1/criteria: id, name, description, judge_prompt, judge_model, status ('draft'), source ('assist_suggested'), unit, population, population_family, online_*, tier, trust, fail_grades_needed, pass_grades_needed, tpr_ci, tnr_ci, drift_*, tpr, tnr, kappa, alignment_n, aligned_at, created_at>], critiques_used: , skipped_duplicates: <int, proposed drafts whose name already existed> }. Notes: A body-less POST (or invalid JSON) is valid and uses the default judge — there is no 400 for a missing body. Requires an OWNER/ADMIN minting user (403). 400 when fewer than 10 FAIL grades carry a critique (message includes the current count); only the 200 most recent critiques are considered. 400 if the model returns no parseable JSON array ('try again'). SPENDS THE WALLET: one metered clustering call (billed under assist:suggest). Drafts are never trusted by any gate until a human reviews them and runs an alignment; an existing criterion with the same name is skipped, never overwritten. Function maxDuration is 300s.
| Name | Required | Description | Default |
|---|---|---|---|
| judge_model | No | Model used for the single clustering call (and set as judge_model on every draft). Defaults to the platform's recommended judge (Qwen/Qwen3-235B-A22B-Instruct-2507). Must be a model available in the workspace's playground catalog, else 400. Whitespace-only values fall back to the default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Extremely rich for a tool whose annotations only state readOnly=false, openWorld=true, idempotent=false, destructive=false. The description discloses billing (SPENDS MONEY, billed under assist:suggest), auth requirements (OWNER/ADMIN, evals:write scope), error conditions (400s with counts), the valid body-less POST, dedup behavior (same-name skipped, never overwritten), the trust model (drafts never gated until human review), and maxDuration 300s. No contradiction with annotations — readOnly=false and idempotent=false align with a billable draft-creating call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information-dense and front-loaded: the core purpose leads, followed by endpoint/scope, cost warning, return shape, and edge cases. Every sentence earns its place. The only minor redundancy is the billing warning appearing twice ('SPENDS MONEY' and 'SPENDS THE WALLET'), which can be read as deliberate emphasis on a critical fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the full burden of explaining return values — and does so exhaustively, including the exact criterion object shape plus critiques_used and skipped_duplicates. Prerequisites, failure modes, auth, timeout, and the dedup/trust behavior are all covered. Nothing essential is missing for an agent to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% — judge_model is fully documented with its default model, the playground-catalog requirement, and whitespace-only fallback. The description adds the body-less POST default-judge behavior, but since the schema already carries the parameter meaning, the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (clusters), resource (failure critiques → up to 5 DRAFT judge criteria, one per failure mode), and the workflow position (after grading fails with reasons). The draft/assist-suggested nature clearly distinguishes it from siblings like create_criterion, update_criterion, and auto_improve_criterion without needing to open their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: use it after grading a batch of fails with reasons to bootstrap criteria that are then reviewed and aligned. It also states the prerequisite (≥10 FAIL grades with critiques, only the 200 most recent considered) and follow-up workflow. However, it never explicitly names alternatives such as create_criterion for hand-writing a single criterion or run_criterion_alignment for the post-draft step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_criterionupdate criterionA
Update a criterion's prompt, judge model, population scope, online-monitoring settings or lifecycle status; instrument changes void its calibration. PATCH /v1/criteria/{id} (API-key scope: evals:write). Returns: 200 with the updated criterion object (same shape as GET /v1/criteria/{id}) Notes: OWNER/ADMIN only (403). 404 "Criterion not found". 400 for schema failures, a unit change, or an invalid status. MONEY: enabling online monitoring spends the wallet on judge calls, capped weekly by online_cap_usd. Voided calibration means trust becomes "unmeasured" until POST /align is run again.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Criterion id. | |
| name | No | Trimmed, 1..80 chars. | |
| unit | No | Accepted only if equal to the current unit; any change is refused with 400 (unit is create-only). | |
| status | No | Lifecycle. "retired" removes the criterion from online scoring and pickers. | |
| population | No | Request tag scope, max 64 chars; "" = all traffic. Changing it voids calibration. | |
| description | No | Max 500 chars; null clears. | |
| judge_model | No | Model id. Changing it voids calibration. | |
| judge_prompt | No | Trimmed, 10..4000 chars. Changing it VOIDS tpr/tnr/kappa/aligned_at and deletes stored confusion rows. | |
| online_cap_usd | No | Weekly online-judging spend ceiling in USD, 0..100000; 0 = uncapped. Money config; does not void calibration. | |
| online_enabled | No | Turn online monitoring on/off. When on, the judge scores a sample of fresh logged traffic and each judge call is billed as usage. | |
| online_percent | No | Percent of fresh in-scope traffic to judge, integer 1..100. | |
| population_family | No | Traffic-segment scope (family value from logs facets), max 32 chars; "" clears. Changing it voids calibration. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing side effects: instrument changes void calibration, judge_prompt changes delete stored confusion rows, retiring removes the criterion from online scoring, and enabling online monitoring spends wallet funds capped by online_cap_usd. It also states the return shape. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose first, then endpoint/auth, errors, return value, and high-impact consequences. Every sentence carries distinct information, and there is no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description specifies the 200 response shape, auth, expected error codes, side effects, and cost implications. Combined with the exhaustive input schema, an agent has everything needed to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter including constraints like unit being create-only and judge_prompt voiding calibration. The description adds a helpful high-level grouping and money caveat, but does not substantially add parameter-level semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource—'Update a criterion's prompt, judge model, population scope, online-monitoring settings or lifecycle status'—and names the exact fields and endpoint. This clearly distinguishes update_criterion from sibling tools like create_criterion, get_criterion, delete_criterion, and run_criterion_alignment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the operation context (PATCH update), required API-key scope (evals:write), access restriction (OWNER/ADMIN), and error cases (403, 404, 400). It does not explicitly name sibling alternatives or say when not to use it, but the field list and lifecycle notes make the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dedicated_endpointupdate dedicated endpointA
Scales, starts/stops, renames, or changes the GPU configuration of a dedicated endpoint — use enabled=false to stop billing without deleting, or gpu_type/gpu_count to re-size (which re-freezes the price). PATCH /v1/dedicated/{id} (API-key scope: platform:write). SPENDS MONEY: this starts billable work on the workspace wallet. Returns: { ok: true } on success (no body data). Notes: 400 'Invalid JSON body'. Requires an OWNER/ADMIN minting user (403). 404 'Endpoint not found'. 400 on invalid replica range (max must be >= min >= 1), GPU not available for the model/region, disallowed GPU count, max replicas above the configuration limit, or no price configured. MONEY: a GPU change re-prices the endpoint at today's rate (new frozen hourly_rate_usd) and is gated at 402 unless the wallet covers 1 prepay hour at the new configuration; stopping (enabled=false) or any GPU change immediately meters and bills the GPU-hours accrued so far. Status becomes UPDATING (GPU change), STOPPING (enabled=false) or STARTING (enabled=true). Scope note: local dedicated apiKeyActor does not enforce key scopes.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Dedicated endpoint id (must belong to the key's workspace). | |
| name | No | New display name (trimmed). | |
| enabled | No | false = STOP the endpoint (runs a final meter for accrued GPU-hours, status STOPPING); true = START it (status STARTING, billing resumes when RUNNING). Omit to leave unchanged. | |
| gpu_type | No | Change GPU type (must be available for the endpoint's model/flavor in its region). Alias: gpuType. Triggers a price re-freeze + wallet gate + final meter. | |
| gpu_count | No | Change GPU count (must be in allowed_gpu_counts). Alias: gpuCount. Same re-freeze semantics as gpu_type. | |
| description | No | New description (trimmed). | |
| max_replicas | No | >= min_replicas; defaults to the current value. Alias: maxReplicas. Sending either replica field pushes the new scaling range. | |
| min_replicas | No | >= 1; defaults to the current value. Alias: minReplicas. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations say readOnlyHint=false and destructiveHint=false, and the description is fully consistent with that. It goes far beyond annotations by disclosing that the call spends money, bills the workspace wallet, immediately meters accrued GPU-hours on stop/resize, requires an OWNER/ADMIN minting user, triggers specific status transitions, and returns only { ok: true }. This is exemplary behavioral disclosure for a mutating, money-spending operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every section earns its place: the opening sentence states the full purpose, the money warnings are prominent, return shape and status transitions are explicit, and error cases are enumerated. The MONEY note is repeated for emphasis, but given the financial impact and complexity of this tool, the length is justified and well organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex operation with no output schema, the description is complete: it covers the exact action, HTTP method and scope, billing consequences, wallet gating, authorization requirements, status transitions, and likely 4XX error cases. An agent has enough behavioral and environmental context to invoke the tool correctly and anticipate the important edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers 100% of parameters with rich descriptions, so the baseline is 3. The description adds cross-parameter meaning: enabled=false stops billing, gpu_type/gpu_count triggers price re-freeze and a wallet gate, and replica counts must satisfy max >= min >= 1. This goes beyond the schema's per-field descriptions and helps an agent reason about combinations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb-resource pair ('Scales, starts/stops, renames, or changes the GPU configuration of a dedicated endpoint') and clearly differentiates this update operation from sibling tools like create_dedicated_endpoint, get_dedicated_endpoint, and delete_dedicated_endpoint. It also anchors the HTTP method and path, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage scenarios: use enabled=false to stop billing without deleting, and use gpu_type/gpu_count to re-size. It contrasts stopping with deletion, which helps the agent choose this tool over delete_dedicated_endpoint. However, it does not explicitly list when not to use the tool or name alternative tools beyond that implied contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_training_fileupload training fileA
Upload a JSONL training (or validation) file for fine-tuning; the returned provider_file_id is what a job creation references. POST /v1/fine_tuning/files (API-key scope: platform:write). Returns: 201 {id, provider_file_id, filename, bytes, purpose:"fine-tune", created_at}. Use provider_file_id (not id) as training.file_id / training_file_id / validation_file_id in POST /v1/fine_tuning/jobs. Notes: Request must be multipart/form-data with a 'file' field — 400 "Expected multipart/form-data with a 'file' field" / "Missing 'file' field" otherwise. Requires OWNER/ADMIN minting user (403). Rate limited per workspace: 20 uploads per 60s → 429 with Retry-After. Feature-flag gated (404 when fineTuning is off). Storage is billable; the upload itself does not charge the wallet. Scopes are not enforced on this route today (see list_training_files).
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | multipart/form-data field named "file" (NOT JSON). The file's own name is used as the filename (falls back to "training.jsonl" when empty). Empty files are refused (400 "File is empty"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only provide generic hints (readOnlyHint false, idempotentHint false), so the description carries the burden and fully delivers. It discloses the API route, required auth scope, OWNER/ADMIN minting requirement, multipart request constraints, rate limits, feature-flag gating, billing implications, and unenforced scopes — far beyond the annotation signals.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries distinct operational value: purpose, return value, downstream usage, request format, auth, rate limits, feature flag, and billing. It front-loads the core purpose and return contract before diving into edge cases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description provides the 201 response shape and the key field to use downstream. It also covers failure modes, rate limits, permissions, feature-flag gating, scopes, and billing, making the tool fully callable without external documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents the only parameter, 'file', including the multipart field requirement and empty-file behavior. The description adds surrounding error messages and operational context, but it does not significantly enrich the parameter semantics beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact operation — uploading a JSONL training or validation file for fine-tuning — and explains the returned provider_file_id is what job creation references. This clearly separates it from sibling tools like list_training_files and create_fine_tuning_job by tying it to the upload lifecycle step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states when this tool fits in the workflow: before creating a fine-tuning job, and it even specifies which fields in POST /v1/fine_tuning/jobs should use provider_file_id. It does not explicitly list when-not-to-use or alternatives, but there is no same-purpose sibling, so the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_aliasupsert aliasAIdempotent
Create or repoint a model alias by name (idempotent upsert) so production traffic moves to a new model without a redeploy; optionally attach a canary split, a quality gate, or an evidence-required policy. PUT /v1/aliases (API-key scope: aliases:write). Returns: 200 with the alias object: { id, name, target_model, canary_model, canary_percent, description, gate_criterion_id, gate_mode, gate_min_samples, gate_rollback_threshold, gate_window_hours, gate_verdict, gate_verdict_at, model_version_id, require_evidence, last_evidence_run_id, created_at, updated_at } Notes: MOVES PRODUCTION TRAFFIC: the gateway resolves aliases within ~10s. Requires the key's minting user to be workspace OWNER/ADMIN (403 otherwise). Same status 200 whether created or updated. 412 Precondition Failed (code precondition_failed) when the evidence policy refuses the repoint; a brand-new alias is never blocked by the policy. 400 for schema failures, canary_percent > 0 without canary_model, canary equal to target, unavailable model, gate criterion never aligned, or auto-mode eligibility refusals (judge not trustworthy, drift-flagged, trace-unit, or judge trained the destination). 404 "Gate criterion not found". Billing always follows the model that actually ran; an alias is routing only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Alias name, 3..64 chars of letters/digits/dots/dashes/underscores, must start and end alphanumeric, no '/'. Upsert key within the workspace. | |
| gate_mode | No | "recommend" (default) only surfaces verdicts; "auto" lets the gate repoint the alias itself and requires a trustworthy, non-drift-flagged, request-unit judge that did not train the destination model. | |
| description | No | Free-text note, max 200 chars (nullable). | |
| canary_model | No | Model id for the canary arm (nullable). Must differ from target_model and be an available model. Required (non-null) whenever canary_percent > 0. | |
| target_model | Yes | Model id that receives the main share of traffic. Must be an available model or the call fails with "Model '<id>' is not available." | |
| canary_percent | No | Integer 0..100 share of traffic sent to canary_model. Default 0. Ignored (stored as 0) when canary_model is null. | |
| override_reason | No | Audited escape hatch for the evidence policy: a written justification of at least 10 characters lets the repoint through and records an audit event. Blank/missing is NOT an override. Shorter than 10 chars is a 400. | |
| gate_min_samples | No | Scored requests both arms need before a verdict. Integer 10..1000, default 50. | |
| require_evidence | No | Evidence policy. Omitted = leave the existing alias's setting unchanged (false on create). When on, a repoint that sends traffic to a model it is not already reaching is refused unless a finished comparison in the last 30 days proves the destination against the incumbent. | |
| gate_criterion_id | No | Id of a criterion in this workspace that scores both arms online. Null = no gate. The criterion must have been aligned at least once. | |
| gate_window_hours | No | Trailing window of online scores a verdict is computed over. Integer 1..720, default 168. | |
| gate_rollback_threshold | No | Roll back when the canary's upper CI bound on pass rate is below this. Number 0..1, default 0.7. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond annotations by disclosing that the gateway resolves aliases in ~10s, that a 200 is returned for both create and update, that evidence policy can block repointing with a 412, that a brand-new alias is never blocked, and that billing follows the model that actually ran. This is rich, non-obvious behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long due to the tool's complexity, but it is well structured and front-loaded: purpose first, then HTTP/scope, return shape, then behavioral notes and error semantics. Each section earns its place, though the dense list of 400-mode failures makes it slightly heavier than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 12 parameters, meaningful behavioral side effects, and no output schema, the description is remarkably complete: it covers the return object, auth requirements, idempotency, timing, billing, and the main 400/404/412 failure modes. An agent has enough information to invoke this tool correctly and understand consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already fully documents all 12 parameters. The description adds high-level context about optional canary/gate/evidence attachments and the returned alias object, but does not meaningfully expand on individual parameter semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb plus resource: 'Create or repoint a model alias by name (idempotent upsert)'. It clearly distinguishes this from the sibling list_alias and delete_alias operations, and states the production purpose of moving traffic without redeployment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong contextual guidance: when to use it ('so production traffic moves to a new model without a redeploy'), optional uses (canary split, quality gate, evidence policy), and the OWNER/ADMIN prerequisite. It does not explicitly name alternative tools or state when not to use it, but the use case is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_documentverify documentA
Verify that a downloaded certificate or evidence bundle was issued by the platform and has not been altered, by re-deriving its HMAC signature — use it when a third party hands you a document and you need to trust its numbers. POST /v1/verify (API-key scope: read). Returns: Always 200 for a well-formed body: { ok: true, key_id: string } when the bytes are ours and unaltered; otherwise { ok: false, reason: 'unsigned' (no signature field) | 'malformed' (not an object or signature shape wrong) | 'unknown_key' (signed by a key this platform doesn't hold, e.g. after rotation) | 'mismatch' (any field was edited) | 'no_secret' (verification not configured on the platform) }. Notes: Read scope suffices (POST that writes nothing); nothing is stored. Verification canonicalises the document (keys sorted recursively, undefined dropped) before hashing, so key order does not matter but any value change does. Sent with Cache-Control: no-store.
| Name | Required | Description | Default |
|---|---|---|---|
| document | Yes | The full signed JSON document exactly as downloaded (a certificate or evidence bundle carrying signature: { alg: 'HS256', key_id, value }). The `document` key must be present (400 'Body must be { document: <signed JSON> }' otherwise); its value may be any JSON. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the sparse annotations: it discloses that the POST writes nothing, nothing is stored, Cache-Control is no-store, verification canonicalises the document, and successful well-formed requests always return 200 with enumerated failure reasons. readOnlyHint=false and idempotentHint=false do not affirmatively claim side effects, so there is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but every clause earns its place: purpose, trigger, HTTP details, response variants, and canonicalisation behavior are all covered without redundancy. The response reason enum is presented compactly and readably.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description fully enumerates the response shape and all `ok: false` reasons. Combined with complete schema coverage for the single parameter, nothing an agent needs to call this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the single `document` parameter, so the baseline is 3. The description adds useful meaning by explaining what a signed document looks like, how HMAC re-derivation works, and why key order does not matter while value changes do.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Verify') and resource ('downloaded certificate or evidence bundle'), and explains the mechanism ('re-deriving its HMAC signature'). This clearly distinguishes it from verification-adjacent siblings like get_criterion_certificate or get_audit_verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger: 'use it when a third party hands you a document and you need to trust its numbers.' It does not name specific alternatives or exclusions, but the described scenario is sufficiently distinct to guide an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools target distinct resource+action combos, but there are genuine overlaps: can_i_ship and get_eval_gate both serve as CI-gate verdicts on finished eval runs, and is_my_judge_trustworthy largely re-reads trust/TPR/TNR/drift data already present in get_criterion and list_criteria. Additionally, create_eval and screen_my_traffic both support 'is a cheaper model better' screening, though the descriptions try to disambiguate them.
The dominant pattern is clean verb_noun snake_case (list_*, create_*, get_*, update_*, delete_*, cancel_*) applied consistently across 20+ resource domains. The exceptions are notable but few: the first-person sentence-style names can_i_ship, is_my_judge_trustworthy, and screen_my_traffic break the convention, and upsert_alias/auto_improve_criterion deviate slightly from standard CRUD verbs.
81 tools is far beyond a typical MCP surface and will substantially bloat agent context and increase misselection risk, even though the underlying platform genuinely spans many domains (evals, fine-tuning, GRPO, dedicated endpoints, audit, labels, datasets). The breadth is real but the tool count is still excessive for an agent-facing interface, sitting at the extreme end of 'too many.'
Core lifecycles are thoroughly covered for most resources: criteria, evals, dedicated endpoints, batches, fine-tuning jobs, GRPO runs, model versions, and logs all have create/read/list/update/delete or cancel where appropriate. Notable gaps exist: datasets are create-only (no list/get/delete for created datasets), label sets cannot be deleted, training files cannot be removed, and labels have no delete operation—gaps that will matter for cleanup workflows in an audit-focused platform.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Build, validate, deploy — HTTP APIs, cron jobs, webhooks and MCP tools — from your AI client.
Discover and call 10,000+ production APIs from one MCP server. Pay-per-call billing for AI agents.
Related MCP Servers
- FlicenseCqualityDmaintenanceEnables interaction with the OpenData Platform API by dynamically exposing all endpoints as MCP tools with typed input schemas and HTTP handlers.99
- AlicenseNot gradedqualityCmaintenanceExposes identity, tools, workflows, guardrails, and evaluation as MCP tools — so any AI agent can read and write your ecosystem programmatically.32MIT

JustOneAPI MCP Serverofficial
AlicenseNot gradedqualityAmaintenanceExposes JustOneAPI endpoints as MCP tools, returning raw upstream JSON without field parsing for maximum data fidelity.1929MIT
Patronus MCP Serverofficial
AlicenseNot gradedqualityDmaintenanceEnables running LLM evaluations, experiments, and custom evaluators through a standardized MCP interface.16Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/omnia-v/errorbar-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server