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(); } }