Skip to main content
The Eval API is the durable record of an evaluation, not a hosted runner. Your harness or CI executes each case and produces traces; the SDK stores the dataset, experiment, immutable per-case result, scorer definition, and final summary.

Start from an existing dataset

SDK 0.2.1 adds one shared start path for live evaluation runners. Pass a dataset artifact ID or its exact name. The SDK resolves one dataset, pins its current Registry version, creates a running experiment, and returns the experiment ID before the runner starts.

Pin the context that changes behavior

A context manifest is the fingerprint of the agent setup used for a run. It answers a specific question: which version of every behavior-shaping input was active when this result was produced? The manifest contains references and hashes, not the underlying content. The SDK sorts its entries, writes the canonical manifest to the experiment config, and computes one manifest digest. Python and TypeScript produce the same digest for the same entries, regardless of input order. Each context item has the following shape: TypeScript accepts artifactId and versionOrdinal, then serializes the same snake-case manifest as Python. Use one item for each input that can change independently: Keep run data on its native Eval surface:
kind is extensible, but the item structure is fixed in SDK 0.2.1. Use a new lowercase kind for a new artifact category. Do not put arbitrary metadata or raw protected content into the manifest.
Change an item’s version and digest whenever its effective content changes. Keep the manifest unchanged when only the dataset case, run timestamp, or model configuration changes. That separation supports three useful comparisons:
run.experiment is the generated experiment-create response. Python exposes its ID as run.id and run.experiment_id; TypeScript exposes run.id and run.experimentId. A name match is exact and workspace-scoped. Multiple exact matches fail instead of selecting one. The experiment config keeps both context_manifest and context_manifest_digest. The trace scope carries the digest alongside the experiment ID. This gives every result a path back to the exact prompt, skill, tool contract, and knowledge versions that shaped it.
The helper starts the Registry lifecycle. Your harness still executes the dataset, uploads results, summarizes score spans, and marks the experiment completed or failed through client.experiments.

Record the whole evaluation

Start by creating a dataset and the cases it contains. Every Eval create body needs workspace_id, even when the client has a default workspace header.
Python
The TypeScript client has the same resource tree, with camelCase body keys and awaited calls: await client.datasets.records.create(datasetId, body) and await client.experiments.results.create(experimentId, body). An experiment’s trace views scope OTel data by the atlan.eval.experiment_id span attribute. run.trace() in Python and propagateAttributes(run.traceOptions, fn) in TypeScript stamp that association and the context-manifest digest on every span created inside the runner scope.

Keep evidence that remains useful

The value of an evaluation is being able to diagnose a regression months later, not only its average score. Preserve these fields as part of each run: Scorers are versioned artifacts. Results are create-only, and a completed or failed experiment is frozen. That combination preserves the run as evidence instead of allowing later dataset edits or result updates to rewrite history.

Read and compare

Use the resource tree to review an experiment’s durable results and the live trace detail behind them:
Python
For the complete endpoint list, including search, bulk result upload, archive, and trace statistics, see the generated resource references below.

Datasets

Curate dataset records and preserve their provenance.

Experiments

Record runs, results, traces, and score rollups.

Scorers

Version the score definition alongside the evaluation.

Tracing and scores

Capture the execution evidence that makes an evaluation explainable.