> ## Documentation Index
> Fetch the complete documentation index at: https://braintrust.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Use datasets in evaluations

> Pass datasets directly to Eval(), assign them to environments, or convert experiment results into dataset format.

Use datasets as the data source for evaluations. You can pass datasets directly or convert experiment results into dataset format.

## Pass datasets directly

Pass datasets directly to `Eval()`:

<CodeGroup dropdown>
  ```typescript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  import { initDataset, Eval } from "braintrust";
  import { Levenshtein } from "autoevals";

  Eval("Say Hi Bot", {
    data: initDataset("My App", { dataset: "My Dataset" }),
    task: async (input) => {
      return "Hi " + input;
    },
    scores: [Levenshtein],
  });
  ```

  ```python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  from autoevals import Levenshtein
  from braintrust import Eval, init_dataset

  Eval(
      "Say Hi Bot",
      data=init_dataset(project="My App", name="My Dataset"),
      task=lambda input: "Hi " + input,
      scores=[Levenshtein],
  )
  ```
</CodeGroup>

## Assign to environments

Environments are attached to [dataset snapshots](/annotate/datasets/manage#save-snapshots), not datasets directly. To assign a snapshot to an environment:

<Tabs>
  <Tab title="UI" icon="mouse-pointer-2">
    1. Go to [**<Icon icon="database" /> Datasets**](https://www.braintrust.dev/app/~/datasets).
    2. Open the dataset.
    3. Click <Icon icon="flag-triangle-right" /> **Snapshots** in the toolbar.
    4. Find the snapshot you want to assign, then select **Environments**.
    5. Toggle the environments in the submenu.

    <Tip>
      You can also tag and untag environments from [Loop](/loop#manage-dataset-versions) when working on a dataset page.
    </Tip>
  </Tab>

  <Tab title="API" icon="code">
    ```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
    # 1. Create a snapshot
    curl -X POST https://api.braintrust.dev/v1/dataset_snapshot \
      -H "Authorization: Bearer $BRAINTRUST_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "dataset_id": "DATASET_ID",
        "name": "prod snapshot",
        "xact_id": "DATASET_VERSION_OR_XACT_ID"
      }'

    # 2. Upsert the environment association
    curl -X PUT https://api.braintrust.dev/environment-object/dataset/DATASET_ID/ENVIRONMENT \
      -H "Authorization: Bearer $BRAINTRUST_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "object_version": "SNAPSHOT_XACT_ID"
      }'
    ```
  </Tab>
</Tabs>

Once assigned, load the dataset for that environment in your evals:

<CodeGroup dropdown>
  ```typescript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  import { Eval, initDataset } from "braintrust";

  // Load by environment
  Eval("My App", {
    data: initDataset({ project: "My App", dataset: "My Dataset", environment: "production" }),
    task: async (input) => { /* ... */ },
    scores: [],
  });

  // Load by version name
  Eval("My App", {
    data: initDataset({ project: "My App", dataset: "My Dataset", version_name: "version 1" }),
    task: async (input) => { /* ... */ },
    scores: [],
  });

  // Load by xact_id (less readable, but precise)
  Eval("My App", {
    data: initDataset({ project: "My App", dataset: "My Dataset", version: "8234923849293849..." }),
    task: async (input) => { /* ... */ },
    scores: [],
  });
  ```

  ```python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  from braintrust import Eval, init_dataset

  # Load by environment
  Eval(
      "My App",
      data=init_dataset(project="My App", name="My Dataset", environment="production"),
      task=lambda input: ...,
      scores=[],
  )

  # Load by version name
  Eval(
      "My App",
      data=init_dataset(project="My App", name="My Dataset", version_name="version 1"),
      task=lambda input: ...,
      scores=[],
  )

  # Load by xact_id (less readable, but precise)
  Eval(
      "My App",
      data=init_dataset(project="My App", name="My Dataset", version="8234923849293849..."),
      task=lambda input: ...,
      scores=[],
  )
  ```
</CodeGroup>

## Convert experiment results

Convert experiment results into dataset format using `asDataset()`/`as_dataset()`. This is useful for iterative improvement workflows where you want to use the results of one experiment as the baseline for future experiments:

<CodeGroup dropdown>
  ```typescript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  import { init, Eval } from "braintrust";
  import { Levenshtein } from "autoevals";

  const experiment = init("My App", {
    experiment: "my-experiment",
    open: true,
  });

  Eval<string, string>("My App", {
    data: experiment.asDataset(),
    task: async (input) => {
      return `hello ${input}`;
    },
    scores: [Levenshtein],
  });
  ```

  ```python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  from autoevals import Levenshtein
  from braintrust import Eval, init

  experiment = braintrust.init(
      project="My App",
      experiment="my-experiment",
      open=True,
  )

  Eval(
      "My App",
      data=experiment.as_dataset(),
      task=lambda input: f"hello {input}",
      scores=[Levenshtein],
  )
  ```
</CodeGroup>

## Next steps

* [Run evaluations](/evaluate/run-evaluations) for the full evaluation workflow.
* [Track performance](/annotate/datasets/track-performance) to see how dataset rows perform across experiments.
