Skip to main content
If your dataset lives outside HoneyHive (S3, databases, internal tools), you can keep it in sync by storing a stable external ID in each datapoint’s metadata.

How it works

  1. Each source row has a unique ID (database primary key, row number, etc.)
  2. Store that ID as external_id in the datapoint’s metadata
  3. On each sync run, compare source rows to existing datapoints by external_id
  4. Create, update, or delete as needed
This preserves datapoint IDs across syncs, so experiment history stays linked.
We’re building native dataset sync into the SDK to make this easier. In the meantime, the pattern below works well.

Sync script

Adapt the inputs and ground_truth mapping to match your data schema.

Skip unchanged rows with hashing

The script above updates every matched row, even if nothing changed. For large datasets, add a content hash to skip unnecessary API calls.
When creating or updating, store the hash in metadata:

Track dataset versions

You can keep a version manifest alongside your sync script to track what changed and when.
Update the manifest after each sync:
If you add a version field, a simple convention: patch (v1.0.1) for label fixes, minor (v1.1.0) for new rows with the same schema, major (v2.0.0) for schema changes.

Automate with CI/CD

Run the sync whenever your dataset source changes. For example, if your test cases live in a JSON file in your repo, trigger the sync on push:
For databases or S3, use a webhook or event trigger from your data pipeline instead.

Run with HoneyHive Datasets

Evaluate your AI against the synced dataset

Upload datasets

One-time upload via UI or SDK

Export datasets

Export datapoints for external use

Manage as code

Define datasets and evaluators in .honeyhive/ and apply with the CLI