diff --git a/js/src/framework.test.ts b/js/src/framework.test.ts index 095a2d28b..6fe9d72cb 100644 --- a/js/src/framework.test.ts +++ b/js/src/framework.test.ts @@ -212,6 +212,7 @@ describe("runEvaluator", () => { datum: { input: number; id: string; + metadata?: Record; _xact_id?: string; created?: string; origin?: { @@ -309,6 +310,41 @@ describe("runEvaluator", () => { }); }); + test("strips review assignment metadata from dataset-backed eval rows", async () => { + const data = makeDatasetData("00000000-0000-0000-0000-000000000001", { + input: 1, + id: "dataset-row-1", + metadata: { + keep: "yes", + "~__bt_assignments": ["user-id"], + "~__bt_review_lists": { + __bt_default_review_list: { status: "PENDING" }, + }, + }, + }); + let taskMetadata: Record | null = null; + + const out = await runEvaluator( + null, + { + projectName: "proj", + evalName: "eval", + data, + task: async (input: number, { metadata }) => { + taskMetadata = { ...metadata }; + return input * 2; + }, + scores: [], + }, + new NoopProgressReporter(), + [], + undefined, + ); + + expect(taskMetadata).toEqual({ keep: "yes" }); + expect(out.results[0].metadata).toEqual({ keep: "yes" }); + }); + test("falls back to source origin when dataset row origin is incomplete", async () => { const datasetId = "00000000-0000-0000-0000-000000000001"; const sourceOrigin = { diff --git a/js/src/framework.ts b/js/src/framework.ts index bb59b02dd..f87c67cd0 100644 --- a/js/src/framework.ts +++ b/js/src/framework.ts @@ -975,6 +975,24 @@ export function classifierName( return classifier.name || `classifier_${classifier_idx}`; } +const REVIEW_ASSIGNMENT_METADATA_KEYS = new Set([ + "~__bt_assignments", + "~__bt_review_lists", +]); + +function stripReviewAssignmentMetadata( + metadata: Record | undefined, +): Record { + if (metadata === undefined) { + return {}; + } + return Object.fromEntries( + Object.entries(metadata).filter( + ([key]) => !REVIEW_ASSIGNMENT_METADATA_KEYS.has(key), + ), + ); +} + export async function _internalRunEvaluatorTask( task: EvalTask, datum: EvalCase, @@ -987,9 +1005,9 @@ export async function _internalRunEvaluatorTask( metadata: Record; tags: string[]; }> { - const metadata: Record = { - ...("metadata" in datum ? datum.metadata : {}), - }; + const metadata = stripReviewAssignmentMetadata( + "metadata" in datum ? datum.metadata : undefined, + ); const hooks: EvalHooks, EvalParameters> = { meta(value) { Object.assign(metadata, value);