diff --git a/src/main/java/dev/braintrust/eval/Eval.java b/src/main/java/dev/braintrust/eval/Eval.java
index 64fc7bc..c12de92 100644
--- a/src/main/java/dev/braintrust/eval/Eval.java
+++ b/src/main/java/dev/braintrust/eval/Eval.java
@@ -99,6 +99,10 @@ private void evalOne(String experimentId, DatasetCase datasetCase
rootSpan.setAttribute(
AttributeKey.stringArrayKey("braintrust.tags"), datasetCase.tags());
}
+ if (!datasetCase.metadata().isEmpty()) {
+ rootSpan.setAttribute(
+ AttributeKey.stringKey("braintrust.metadata"), toJson(datasetCase.metadata()));
+ }
try (var rootScope = BraintrustContext.ofExperiment(experimentId, rootSpan).makeCurrent()) {
final TaskResult taskResult;
{ // run task
diff --git a/src/test/java/dev/braintrust/eval/EvalTest.java b/src/test/java/dev/braintrust/eval/EvalTest.java
index 29687ab..75bc419 100644
--- a/src/test/java/dev/braintrust/eval/EvalTest.java
+++ b/src/test/java/dev/braintrust/eval/EvalTest.java
@@ -204,6 +204,35 @@ public List score(
assertTrue(
tags.contains("sweet") || tags.contains("savory"),
"tags should contain taste");
+ var metadata =
+ span.getAttributes().get(AttributeKey.stringKey("braintrust.metadata"));
+ assertNotNull(metadata, "root span should have metadata");
+
+ // Parse metadata JSON and verify values based on which case this is
+ @SuppressWarnings("unchecked")
+ Map metadataMap = fromJson(metadata, Map.class);
+ assertNotNull(metadataMap, "metadata should parse as a map");
+ assertTrue(metadataMap.containsKey("calories"), "metadata should contain calories");
+ assertTrue(metadataMap.containsKey("season"), "metadata should contain season");
+
+ if (tags.contains("red")) {
+ // strawberry case
+ assertEquals(
+ 32, metadataMap.get("calories"), "strawberry should have 32 calories");
+ assertEquals(
+ "summer",
+ metadataMap.get("season"),
+ "strawberry should be summer season");
+ } else {
+ // asparagus case
+ assertEquals(
+ 20, metadataMap.get("calories"), "asparagus should have 20 calories");
+ assertEquals(
+ "spring",
+ metadataMap.get("season"),
+ "asparagus should be spring season");
+ }
+
numRootSpans.incrementAndGet();
}
}