@voltagent/evals@2.0.4

VoltAgent/voltagent@voltagent/evals@2.0.4Feb 25, 2026by voltagent-bot

AI Summary

Patch fix that enables offline experiment runs to persist when using inline datasets with non-UUID item IDs. The VoltOpsRunManager now allows run creation even when dataset.versionId is missing, fixing API failures with string IDs like 'item-1'.

Key Highlights

  • VoltOpsRunManager now allows run creation when dataset.versionId is missing
  • Non-UUID item IDs (like 'item-1') are now supported
  • UUID item IDs sent as datasetItemId, non-UUID sent as null with datasetItemHash tracking
  • Fixes API failures when inline dataset items use string IDs

New Features

  • Persist offline eval runs when using inline datasets (dataset.items)

Full Release Notes

### Patch Changes

-   [#1108](https://github.com/VoltAgent/voltagent/pull/1108) [`c1df46f`](https://github.com/VoltAgent/voltagent/commit/c1df46fe3a2f478615310c51e649309647b0370c) Thanks [@omeraplak](https://github.com/omeraplak)! - fix: persist offline eval runs when using inline datasets (`dataset.items`)

    Offline experiment runs now create and sync run results even when the dataset is provided inline without a managed `datasetVersionId`.

    ### What changed

    -   `VoltOpsRunManager` now allows run creation when `dataset.versionId` is missing.
    -   Append payload generation now normalizes `datasetItemId`:
        -   UUID item IDs are sent as `datasetItemId`.
        -   Non-UUID item IDs are sent as `null` and still tracked via `datasetItemHash`.

    This avoids API failures when inline dataset items use string IDs like `"item-1"`.

    ### Example

    ```ts
    import { createExperiment, runExperiment } from "@voltagent/evals";

    const experiment = createExperiment({
      dataset: {
        name: "inline-smoke",
        items: [
          {
            id: "item-1", // non-UUID is supported
            input: "What is VoltAgent?",
            expected: "An open-source TypeScript framework for AI agents.",
          },
        ],
      },
      runner: async ({ item }) => ({ output: String(item.input) }),
    });

    const result = await runExperiment(experiment, { voltOpsClient });
    console.log(result.runId); // now created and persisted
    ```