Skip to main content

acryl-datahub-cloud evals

Feature Availability
DataHub Core (OSS)
DataHub Cloud
Private BetaInvite-only and evolving rapidly. Contact your DataHub Cloud representative to request access.

The evals command manages Context Evals — question-and-answer checks that measure whether DataHub answers questions about your metadata correctly. An eval pairs a question with one or more pass conditions; running it records a verdict you can track over time or gate a CI job on.

Context Evals are in private beta, so the command surface can change between releases.

Installation​

The command lives in the acryl-datahub-cloud package only — it is not part of the open source acryl-datahub CLI. It needs Python 3.10 or later.

pip install 'acryl-datahub-cloud[datahub-evals]>=2.1.4rc1'

Install it into a virtualenv or with pipx: the package pins its own acryl-datahub version, so a shared environment can end up with a different datahub CLI than the one you had. Connection details come from ~/.datahubenv (written by datahub init) or from DATAHUB_GMS_URL and DATAHUB_GMS_TOKEN.

Quick Start​

# Create or update evals from a definition file
acryl-datahub-cloud evals upsert -f evals.yml

# List what exists
acryl-datahub-cloud evals list

# Run one eval and wait for the verdict
acryl-datahub-cloud evals run urn:li:eval:my-eval

# Run everything for one agent and fail the shell on any failed eval
acryl-datahub-cloud evals run --all --agent-urn urn:li:aiAgent:my-agent --fail-on-fail

upsert is the default subcommand, so acryl-datahub-cloud evals -f evals.yml works too. Run any subcommand with --help for its full option list.

Defining Evals​

upsert reads a YAML or JSON file containing either one eval object or a list of them. An entry with a urn updates that eval; an entry without one creates a new eval.

- name: Revenue table owner
description: Ask DataHub who owns the revenue table.
question: Who owns the revenue table?
evalType: METADATA
origin: CONTEXT_HUB
executor:
type: NATIVE
conditions:
- type: LLM_JUDGE
llmJudge:
guidelines: The answer names the owning team and links the dataset.
- type: ASSET_REFERENCE
assetReference:
mustReference:
- urn:li:dataset:(urn:li:dataPlatform:snowflake,my_db.my_schema.revenue,PROD)
mustNotReference:
- urn:li:dataset:(urn:li:dataPlatform:snowflake,my_db.my_schema.revenue_staging,PROD)
FieldRequiredDescription
nameYesDisplay name.
questionYesThe question put to DataHub.
conditionsYesAt least one pass condition.
executorYesNATIVE for DataHub to answer, EXTERNAL for your own harness.
originYesCONTEXT_HUB or CUSTOM_AGENT.
evalTypeNoMETADATA or SQL.
descriptionNoWhat the eval covers.
referenceOutputNoAn example of a good answer, used as judging context.
agentUrnNoThe agent the eval belongs to.
urnNoPresent means update, absent means create.

A condition is either an LLM_JUDGE — requiring llmJudge.guidelines — or an ASSET_REFERENCE, requiring at least one DataHub URN across assetReference.mustReference and assetReference.mustNotReference. origin and agentUrn are fixed once an eval is created, so an exported definition can be re-applied unchanged.

Commands​

list​

acryl-datahub-cloud evals list
acryl-datahub-cloud evals list --agent-urn urn:li:aiAgent:my-agent --eval-type METADATA
acryl-datahub-cloud evals list --start 20 --limit 20

Filter with --agent-urn or --base-agent-only (not both), --eval-type, --eval-executor, and --query. Pages are --limit results (default 10) from the zero-based --start offset.

get​

acryl-datahub-cloud evals get urn:li:eval:my-eval
acryl-datahub-cloud evals get urn:li:eval:my-eval --history 5
acryl-datahub-cloud evals get urn:li:eval:my-eval --format upsert > my-eval.yml

--format upsert drops the read-only run fields, so the output can be edited and fed back to upsert.

upsert​

acryl-datahub-cloud evals upsert -f evals.yml
acryl-datahub-cloud evals upsert -f evals.yml --dry-run

--dry-run validates the file and reports create-versus-update per entry without writing. If one entry of a multi-eval file fails, the CLI prints the entries that already succeeded with their URNs and exits non-zero — reuse those URNs when retrying, since a repeated create makes a duplicate eval.

delete​

acryl-datahub-cloud evals delete urn:li:eval:my-eval

run​

acryl-datahub-cloud evals run urn:li:eval:my-eval urn:li:eval:my-other-eval
acryl-datahub-cloud evals run --all --agent-urn urn:li:aiAgent:my-agent
acryl-datahub-cloud evals run --all --wait 600 --fail-on-fail

Pass either URNs or --all, not both, and wait up to --wait seconds (default 300) for every selected eval to reach a terminal event.

With --fail-on-fail, the command exits 1 when any selected eval ends up FAIL, ERROR, stale (queued or running for more than 15 minutes), or incomplete (no terminal event within --wait). Without the flag all four still exit 0, so CI jobs should always pass it.

Other things worth knowing:

  • --all without --agent-urn covers only the Ask DataHub base agent, whereas list without a filter spans every agent, so the two can return different counts.
  • A run selects at most 1000 evals. A larger --all selection is refused before anything is queued.
  • --eval-executor EXTERNAL is rejected — starting a run always queues native execution, which would answer the eval itself and race your harness. Run those in your harness and use report.

report​

Submit an answer produced outside DataHub, using the run ID returned by run.

acryl-datahub-cloud evals report urn:li:eval:my-eval \
--run-id "$RUN_ID" \
--answer "The revenue table is owned by the analytics team."

# Read a long answer from stdin
my-harness answer | acryl-datahub-cloud evals report urn:li:eval:my-eval --run-id "$RUN_ID" --answer -

Omit --type to let DataHub judge the submitted answer. To report your own verdict, pass --type (PASS, FAIL, or ERROR) — it is required alongside the verdict options --condition-results, --judge-model, --judge-reasoning, and --error. --agent-model, --external-client, and --session-id record where the answer came from. Reporting twice against a run ID that is already terminal is deduplicated rather than duplicated.

history​

acryl-datahub-cloud evals history urn:li:eval:my-eval
acryl-datahub-cloud evals history urn:li:eval:my-eval --limit 50

Returns --limit run events (default 10). Add --include-proposal-runs, or --action-request-urn for one change proposal, but not both.

CI Example​

pip install 'acryl-datahub-cloud[datahub-evals]>=2.1.4rc1'

export DATAHUB_GMS_URL=https://your-instance.acryl.io/gms
export DATAHUB_GMS_TOKEN=your-token

acryl-datahub-cloud evals upsert -f evals.yml
acryl-datahub-cloud evals run --all --agent-urn "$AGENT_URN" --wait 900 --fail-on-fail

The run exits non-zero on any failed eval, which fails the job.