Name: Descriptive name reflecting the queue’s purpose (for example, “Failed Evaluations Review - Q1 2026”)
Project: Agent Observability project this queue belongs to
Description (optional): Explain the queue’s purpose and any special instructions for annotators
Then click Next.
On the Schema tab, define your new queue’s label schema. Use the Preview pane to see how labels appear to annotators as you configure them. Each label can be marked as required and can optionally include:
Assessment criteria: Allow annotators to indicate pass/fail for that label value
Reasoning: Allow annotators to add a short explanation
Review your queue configuration and click Create to create the queue.
Step 2: Select traces for annotation
You can create add traces to queue manually from Trace Explorer or populate queues automatically using Automation Rules.
Add traces to a queue manually from the Trace Explorer:
Filter traces using available facets (evaluation results, error status, application, time range)
Select individual traces or bulk select multiple traces
Click Flag for Annotation
Choose Create New Queue or select an existing queue
Instead of manually selecting traces, use Automation Rules to route traces into annotation queues automatically based on filters and sampling criteria. This enables continuous, hands-off queue population without requiring manual trace selection. See Automation Rules for the full feature reference, including supported filter fields and limits.
Automations apply going forward: new traces matching your rule are routed to the queue as they arrive. Existing traces matching the filter are not added retroactively.
To add an annotation queue action to an Automation Rule:
Apply filters to identify traces you want to route (evaluation failures, latency thresholds, specific applications). See Automation Rules > Supported filter fields for what’s allowed.
Click Automate Query
Configure sampling rate (up to 5% for annotation queues; for example, 2% of matching traces).
Under Actions, select Add to Annotation Queue.
Choose the target queue.
Save the rule.
Traces matching the rule’s filters are added to the queue as they arrive. Annotation queues hold up to 1,000 records; the automation pauses when the queue reaches that limit.
Annotating traces
Accessing your queues
Navigate to AI Observability > Experiment > Annotations to see all available annotation queues. Click on a queue to see the trace list, then click Review to begin annotating.
Review Mode displays:
Full trace context (right panel):
Complete span tree with inputs, outputs, metadata
Tool calls and intermediate reasoning steps
Evaluation results on trace and individual spans
Annotation controls (left panel):
Configured labels for this queue
Progress indicator showing position in queue
Navigation controls (Previous, Next)
Applying labels
For each trace:
Review the full trace context: Expand spans as needed to understand inputs, outputs, tool calls, and evaluation results.
Apply labels: Fill in the configured labels based on your assessment.
Annotations are be autosaved.
Best practices for annotation
Be consistent:
Review the queue description and label definitions before starting.
When multiple annotators work on the same queue, establish shared understanding of criteria.
Document reasoning in notes for borderline cases.
Provide reasoning:
Use free-form notes to document why you applied specific labels.
Note patterns you observe across multiple traces.
Reasoning helps refine evaluation criteria and understand failure modes.
Managing queues
Tracking queue progress
The Annotations list page displays a progress bar for each queue showing the ratio of reviewed interactions to total interactions. Use this to monitor annotation completion across queues at a glance.
Filtering traces by annotation labels
use the Annotation Labels facet to filter traces by labels applied in annotation queues. This allows you to:
Find all traces tagged with a specific failure mode (for example, failure_type: hallucination)
Build targeted samples for downstream review, dataset creation, or CSV export for data analysis
Editing queue schema
You can modify a queue’s label schema after creation:
The file downloads as annotations_<queue-id>.csv. You can also retrieve span data programmatically using the Export API.
CSV format
Each row represents one annotated interaction. The file begins with these fixed columns:
Column
Description
Content ID
ID of the annotated content (for example, a trace ID or session ID)
Type
Interaction type: trace, experiment_trace, or session
Input
Input summary (empty for session interactions)
Output
Output summary (empty for session interactions)
Expected Output
Only present when Include Expected Output is enabled; populated for experiment traces only
After the fixed columns, there is one set of columns per reviewer per label. Reviewers are sorted alphabetically by display name (spaces replaced with underscores). Labels follow the order defined in the queue schema:
Column
Description
{reviewer}_{label}
Label value (string, number, boolean, or JSON array)
{reviewer}_{label}_assessment
pass or fail, if assessment criteria is enabled for that label
{reviewer}_{label}_reasoning
Free-text reasoning, if reasoning is enabled for that label
If a reviewer has not annotated a given row, those cells are empty.
Example: A queue with reviewers Alice Johnson and Bob Smith and labels quality (score) and failure_type (categorical) produces these column headers:
After exporting annotation data, use the Export API to retrieve the full span data for traces or sessions in the CSV and join it with your annotation labels.
From interaction: use each trace’s actual output. For experiment traces, you can also pick Expected output to use the original expected output from the experiment’s source dataset.
From annotation label: use the values the annotators applied. Pick one or more labels. The record’s expected_output is built from your selection.
Choose an existing dataset, or create a dataset.
When expected output is built from annotation labels, the exported value is a JSON object keyed by label name, for example { "is_harmful": false, "tone": ["neutral"], "topics": ["safety", "policy"] }. The same shape applies whether you select one label or multiple labels. Categorical labels are always exported as arrays of selected options, whether the label is single-select or multi-select.
How annotation values are aggregated across annotators
When multiple annotators have annotated the same trace, the value for each label is aggregated across them by consensus:
Label type
Aggregation
Boolean
Majority vote (ties break in favor of true)
Categorical
Intersection: the sorted set of options that every annotator selected
Score
Average
Text
List of responses
For categorical labels (single-select or multi-select), the aggregated value is the sorted array of options that every annotator selected. If any annotator’s selection differs, the value is an empty array. The result is always an array, even when only one annotator has annotated the trace.
Example: categorical (consensus). Three annotators rate tone and all agree:
Annotator A: polite
Annotator B: polite
Annotator C: polite
Aggregated: ["polite"].
Example: categorical (disagreement). Three annotators rate tone and one differs:
Annotator A: polite
Annotator B: rude
Annotator C: polite
Aggregated: []. The intersection is empty because rude is not in every annotator’s set.
Example: categorical (multi-select). Three annotators tag topics (each can pick multiple options):
Annotator A: ["safety", "policy"]
Annotator B: ["safety", "billing"]
Annotator C: ["safety", "policy"]
Aggregated: ["safety"]. Only safety appears in every annotator’s set; policy is missing from B’s selection and billing is missing from A’s and C’s.
Example: text. Two annotators leave notes:
Annotator A: "Confusing phrasing"
Annotator B: "Tone too casual"
Aggregated: ["Confusing phrasing", "Tone too casual"]. Every annotator’s value is preserved.
Raw per-annotator values are preserved in each record’s metadata, along with annotator identity. If the default consensus doesn’t fit your workflow, you can recompute with a different strategy (for example, median, weighted vote, or reviewer pick).
Labels not selected as expected output are also included with each trace as metadata.
See Datasets for more information about using datasets in experiments.
Deleting a queue removes the queue and label associations, but does not delete the underlying traces from Agent Observability. Traces remain accessible in Trace Explorer.