openpond-sdk 0.5.6 → 0.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/TRAINING_PROTOCOL.md +19 -0
  2. package/dist/chunk-ARUJ3FJT.js +447 -0
  3. package/dist/chunk-ARUJ3FJT.js.map +7 -0
  4. package/dist/chunk-QFT2MCIC.js +1526 -0
  5. package/dist/chunk-QFT2MCIC.js.map +7 -0
  6. package/dist/{chunk-NF63YMOL.js → chunk-QUOW6URQ.js} +7 -9
  7. package/dist/{chunk-NF63YMOL.js.map → chunk-QUOW6URQ.js.map} +3 -3
  8. package/dist/{chunk-25TBEGXB.js → chunk-TKJU3BOW.js} +2 -2
  9. package/dist/chunk-UJZ3XEE3.js +902 -0
  10. package/dist/chunk-UJZ3XEE3.js.map +7 -0
  11. package/dist/{chunk-EV4PKJWN.js → chunk-UKVK7MRJ.js} +320 -208
  12. package/dist/chunk-UKVK7MRJ.js.map +7 -0
  13. package/dist/index.js +3 -3
  14. package/dist/learning.js +3 -3
  15. package/dist/model-taskset-runs.js +2 -2
  16. package/dist/refiner.js +1 -1
  17. package/dist/taskset-drafts.js +35 -33
  18. package/dist/taskset-drafts.js.map +1 -1
  19. package/dist/taskset-packages.js +51 -465
  20. package/dist/taskset-packages.js.map +4 -4
  21. package/dist/training-bundle.js +459 -0
  22. package/dist/training-bundle.js.map +7 -0
  23. package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts +2 -2
  24. package/dist/types/packages/sdk/src/taskset-authored-files.d.ts +1 -1
  25. package/dist/types/packages/sdk/src/taskset-draft-dataset-artifacts.d.ts +2 -2
  26. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +1 -1
  27. package/dist/types/packages/sdk/src/training-bundle-contracts.d.ts +287 -0
  28. package/dist/types/packages/sdk/src/training-bundle-contracts.d.ts.map +1 -0
  29. package/dist/types/packages/sdk/src/training-bundle.d.ts +48 -0
  30. package/dist/types/packages/sdk/src/training-bundle.d.ts.map +1 -0
  31. package/dist/types/packages/sdk/src/training-learning-batch.d.ts +719 -0
  32. package/dist/types/packages/sdk/src/training-learning-batch.d.ts.map +1 -0
  33. package/package.json +6 -2
  34. package/dist/chunk-EV4PKJWN.js.map +0 -7
  35. package/dist/chunk-PXB6YY36.js +0 -2395
  36. package/dist/chunk-PXB6YY36.js.map +0 -7
  37. /package/dist/{chunk-25TBEGXB.js.map → chunk-TKJU3BOW.js.map} +0 -0
@@ -156,3 +156,22 @@ The endpoints are `GET` and `POST`
156
156
  `?decisionId=...`. These contracts require candidate-decision service support.
157
157
  Acceptance and rejection retain the original training/evaluation receipts. They
158
158
  do not launch inference, change a serving binding, or bypass serving eligibility.
159
+
160
+ ## Shared training bundle preparation
161
+
162
+ `openpond-sdk/training-bundle` exports `buildTasksetTrainingBundle` and the
163
+ runtime, compute, engine, run-manifest, and resolved-bundle schemas. Desktop and
164
+ hosted workers use this compiler with the same pinned Model, Taskset, Harness,
165
+ Reward, evaluation source, and asset bytes. It produces an immutable manifest
166
+ and an in-memory asset map without creating a training job or acquiring compute.
167
+
168
+ The compiler verifies selected release identities and private verifier bytes,
169
+ checks training/evaluation isolation, and rejects missing or unexpected Work
170
+ assets. Callers retain responsibility for authorizing the inputs and staging the
171
+ result through the training artifact API before job admission. Filesystem cache
172
+ materialization remains a Desktop concern.
173
+
174
+ The same entry point exports `materializeLearningBatchTaskset`. It verifies a
175
+ sealed learning batch and its evidence, admission decisions, Reward releases,
176
+ and verifier assets, then returns the authored Taskset, portable release, and
177
+ generated verifier files consumed by training preparation.
@@ -0,0 +1,447 @@
1
+ import {
2
+ GraderSpecSchema,
3
+ decodeTasksetPackageFile
4
+ } from "./chunk-QFT2MCIC.js";
5
+ import {
6
+ CapabilityRequirementSchema,
7
+ ToolDeclarationSchema
8
+ } from "./chunk-UKVK7MRJ.js";
9
+ import {
10
+ ImmutableAssetRefSchema,
11
+ contentHash,
12
+ sha256
13
+ } from "./chunk-QUOW6URQ.js";
14
+
15
+ // src/taskset-authored-portable-release.ts
16
+ import {
17
+ TaskRecordSchema,
18
+ GraderSpecSchema as PortableGraderSpecSchema,
19
+ TasksetReleaseContentSchema,
20
+ TasksetReleaseSchema,
21
+ bindTasksetExecutionReleases,
22
+ createEnvironmentRelease,
23
+ createVerifierSetRelease,
24
+ EnvironmentReleaseSchema,
25
+ VerifierSetReleaseSchema,
26
+ verifyEnvironmentRelease,
27
+ verifyVerifierSetRelease,
28
+ verifyPreferenceComparisonRelease
29
+ } from "@openpond/evals";
30
+ import { TaskBatchPackageMetadataSchema } from "@openpond/evals/learning";
31
+ import { compileBoundGraders, RewardBindingSchema, RewardReleaseSchema } from "@openpond/evals/rewards";
32
+ import { portableDeterministicCheck } from "@openpond/evals/graders";
33
+ function resolvePortableTasksetRewardExecution(taskset, supplied) {
34
+ const learning = taskset.metadata.learning === void 0 ? null : TaskBatchPackageMetadataSchema.parse(taskset.metadata.learning);
35
+ const embedded = taskset.metadata.rewardExecution;
36
+ const execution = supplied ?? (embedded ? {
37
+ binding: RewardBindingSchema.parse(embedded.binding),
38
+ rewards: RewardReleaseSchema.array().parse(embedded.rewards)
39
+ } : learning);
40
+ if (taskset.metadata.rewardBinding !== void 0) {
41
+ const reference = taskset.metadata.rewardBinding;
42
+ if (!execution || !reference || reference.id !== execution.binding.id || reference.revision !== execution.binding.revision || reference.contentHash !== execution.binding.contentHash) {
43
+ throw new Error("Portable Taskset requires its exact published Reward binding.");
44
+ }
45
+ }
46
+ if (execution) compileBoundGraders(execution.binding, execution.rewards);
47
+ return execution ? { binding: execution.binding, rewards: execution.rewards } : null;
48
+ }
49
+ function materializePortableTasksetRelease(input) {
50
+ const environment = portableEnvironment(input.taskset);
51
+ const tools = portableTools(input.taskset);
52
+ const learning = input.taskset.metadata.learning === void 0 ? null : TaskBatchPackageMetadataSchema.parse(input.taskset.metadata.learning);
53
+ const embedded = input.taskset.metadata.rewardExecution;
54
+ const rewardExecution = resolvePortableTasksetRewardExecution(input.taskset, input.rewardExecution);
55
+ const graders = rewardExecution ? compileBoundGraders(rewardExecution.binding, rewardExecution.rewards) : input.taskset.graders.map(portableGrader);
56
+ const tasks = input.selectedTasks?.length ? input.selectedTasks : input.taskset.tasks;
57
+ if (!tasks.length) throw new Error("A portable Taskset release requires at least one task.");
58
+ const pinned = input.taskset.environment.metadata.portableExecutionResources;
59
+ if (environment.entrypoint === "openpond.javascript-environment.v1" && !pinned) throw new Error("Tool Taskset publication requires its pinned execution resources.");
60
+ const environmentRelease = pinned ? EnvironmentReleaseSchema.parse(pinned.environment) : createEnvironmentRelease({
61
+ schemaVersion: "openpond.environmentRelease.v1",
62
+ id: `environment-release-${input.taskset.id}-r${input.taskset.revision}`,
63
+ revision: input.taskset.revision,
64
+ contract: environment,
65
+ actionSchemaRef: null,
66
+ observationSchemaRef: null,
67
+ stateSchemaRef: null,
68
+ artifactCollection: {
69
+ maxArtifacts: 1e5,
70
+ maxTotalBytes: 25e7
71
+ },
72
+ adapterConformanceHashes: {
73
+ [input.adapterId]: contentHash({ adapterId: input.adapterId, environment, tools })
74
+ },
75
+ metadata: {
76
+ sourceTasksetId: input.taskset.id,
77
+ sourcePackageHash: input.taskset.metadata.sourcePackageHash ?? null,
78
+ resources: input.taskset.environment.resources ?? []
79
+ }
80
+ });
81
+ const verifierSetRelease = pinned?.verifierSet !== void 0 ? VerifierSetReleaseSchema.parse(pinned.verifierSet) : createVerifierSetRelease({
82
+ schemaVersion: "openpond.verifierSetRelease.v1",
83
+ id: `verifier-set-release-${input.taskset.id}-r${input.taskset.revision}`,
84
+ revision: input.taskset.revision,
85
+ graders,
86
+ isolation: {
87
+ processBoundary: "isolated_process",
88
+ networkPolicy: "none",
89
+ defaultTimeoutMs: Math.min(input.taskset.environment.defaultTimeoutMs, 3e5)
90
+ },
91
+ calibrationReceiptRefs: [],
92
+ metadata: { sourceTasksetId: input.taskset.id }
93
+ });
94
+ if (!verifyEnvironmentRelease(environmentRelease) || !verifyVerifierSetRelease(verifierSetRelease) || contentHash(environmentRelease.contract) !== contentHash(environment) || contentHash(verifierSetRelease.graders) !== contentHash(graders)) {
95
+ throw new Error("Taskset execution resources differ from its declared environment or graders.");
96
+ }
97
+ const tasksetContent = TasksetReleaseContentSchema.parse({
98
+ schemaVersion: "openpond.tasksetRelease.v2",
99
+ id: input.taskset.metadata.derivedPortableMetadata === void 0 ? `taskset-release-${input.taskset.id}-r${input.taskset.revision}` : input.taskset.id,
100
+ revision: input.taskset.revision,
101
+ policy: {
102
+ policyVisibleFields: input.taskset.policy.policyVisibleFields,
103
+ privilegedFields: input.taskset.policy.privilegedFields,
104
+ hiddenGraderRefs: input.taskset.policy.hiddenGraderRefs,
105
+ connectedAppScopes: input.taskset.policy.connectedAppScopes
106
+ },
107
+ environment,
108
+ tools,
109
+ capabilities: portableCapabilities(input.taskset),
110
+ tasks: tasks.map(projectPortableTaskRecord),
111
+ graders,
112
+ ...input.taskset.metrics ? { metrics: input.taskset.metrics } : {},
113
+ metadata: input.taskset.metadata.derivedPortableMetadata ?? {
114
+ sourceTasksetId: input.taskset.id,
115
+ sourceTasksetHash: input.taskset.contentHash,
116
+ sourcePackageHash: input.taskset.metadata.sourcePackageHash ?? null,
117
+ environmentResources: input.taskset.environment.resources ?? [],
118
+ ordinaryAuthoring: {
119
+ instructions: input.taskset.objective,
120
+ graderFixtures: input.taskset.graderFixtures,
121
+ judgeCalibrationFixtures: Object.fromEntries(input.taskset.graders.filter((grader) => grader.kind === "model_judge").map((grader) => [grader.id, grader.calibrationFixtureRefs]))
122
+ },
123
+ ...learning ? { learning } : {},
124
+ // A sealed batch already pins these resources in learning metadata.
125
+ // Resolving that same binding at admission must not change its release.
126
+ ...rewardExecution && !learning && (input.rewardExecution || embedded) ? { rewardExecution: { binding: rewardExecution.binding, rewards: rewardExecution.rewards } } : {}
127
+ }
128
+ });
129
+ const draft = input.admittedTasksetRelease ? TasksetReleaseSchema.parse(input.admittedTasksetRelease) : TasksetReleaseSchema.parse({
130
+ ...tasksetContent,
131
+ contentHash: contentHash(tasksetContent)
132
+ });
133
+ const tasksetRelease = draft.environmentRelease ? assertReleaseBindings({ draft, environmentRelease, verifierSetRelease }) : bindTasksetExecutionReleases({
134
+ taskset: draft,
135
+ environment: environmentRelease,
136
+ verifierSet: verifierSetRelease
137
+ });
138
+ return { environmentRelease, verifierSetRelease, tasksetRelease };
139
+ }
140
+ function projectPreferenceComparisonRelease(input) {
141
+ if (!verifyPreferenceComparisonRelease(input.preferenceComparison)) {
142
+ throw new Error("Preference comparison release failed immutable content verification.");
143
+ }
144
+ const release = input.preferenceComparison;
145
+ if (release.tasksetRelease.id !== input.tasksetRelease.id || release.tasksetRelease.contentHash !== input.tasksetRelease.contentHash) {
146
+ throw new Error("Preference comparison release must reference the admitted portable Taskset release.");
147
+ }
148
+ return release;
149
+ }
150
+ function portableTasksetEnvironment(taskset) {
151
+ return portableEnvironment(taskset);
152
+ }
153
+ function portableTasksetTools(taskset) {
154
+ return portableTools(taskset);
155
+ }
156
+ function projectPortableTaskRecord(task) {
157
+ const admitted = task.metadata.portableTaskRecord;
158
+ if (admitted !== void 0) {
159
+ const original = TaskRecordSchema.parse(admitted);
160
+ const projected = TaskRecordSchema.parse({
161
+ ...original,
162
+ id: task.id,
163
+ clusterKey: task.clusterKey,
164
+ split: task.split,
165
+ input: task.input,
166
+ expectedOutput: portableExpectedOutput(task),
167
+ policyVisibleContext: task.policyVisibleContext,
168
+ privilegedContextRef: task.privilegedContextRef,
169
+ tags: task.tags,
170
+ artifactRefs: task.assets === void 0 ? original.artifactRefs : task.assets.map((asset) => {
171
+ const previous = original.artifactRefs.find((item) => item.id === asset.id);
172
+ return {
173
+ id: asset.id,
174
+ path: previous?.path ?? `tasks/${segment(task.id)}/${segment(asset.fileName)}`,
175
+ contentHash: hash(asset.sha256),
176
+ sizeBytes: asset.sizeBytes,
177
+ mediaType: asset.mediaType,
178
+ visibility: previous?.visibility ?? "policy"
179
+ };
180
+ }),
181
+ requiredOutputs: task.requiredOutputs === void 0 ? original.requiredOutputs : task.requiredOutputs.map((output) => {
182
+ const previous = original.requiredOutputs?.find((item) => item.path === output.path);
183
+ return {
184
+ path: output.path,
185
+ mediaType: output.mediaType,
186
+ schemaRef: previous?.schemaRef && previous.schemaRef.id === output.schemaRef ? previous.schemaRef : null,
187
+ maxBytes: output.maxBytes ?? null,
188
+ metadata: {
189
+ ...output.metadata,
190
+ ...output.schemaRef && previous?.schemaRef?.id !== output.schemaRef ? { legacySchemaRef: output.schemaRef } : {}
191
+ }
192
+ };
193
+ })
194
+ });
195
+ if (projected.requiredOutputs === void 0) delete projected.requiredOutputs;
196
+ return projected;
197
+ }
198
+ return {
199
+ id: task.id,
200
+ clusterKey: task.clusterKey,
201
+ split: task.split,
202
+ input: task.input,
203
+ expectedOutput: portableExpectedOutput(task),
204
+ policyVisibleContext: task.policyVisibleContext,
205
+ privilegedContextRef: task.privilegedContextRef,
206
+ artifactRefs: (task.assets ?? []).map((item) => ({
207
+ id: item.id,
208
+ path: `tasks/${segment(task.id)}/${segment(item.fileName)}`,
209
+ contentHash: hash(item.sha256),
210
+ sizeBytes: item.sizeBytes,
211
+ mediaType: item.mediaType,
212
+ visibility: "policy"
213
+ })),
214
+ requiredOutputs: (task.requiredOutputs ?? []).map((output) => ({
215
+ path: output.path,
216
+ mediaType: output.mediaType,
217
+ schemaRef: null,
218
+ maxBytes: output.maxBytes ?? null,
219
+ metadata: {
220
+ ...output.metadata,
221
+ legacySchemaRef: output.schemaRef ?? null
222
+ }
223
+ })),
224
+ tags: task.tags
225
+ };
226
+ }
227
+ function portableExpectedOutput(task) {
228
+ if (!task.expectedOutput) return null;
229
+ if ("artifactRenderer" in task.expectedOutput) {
230
+ throw new Error(
231
+ `Task ${task.id} embeds an artifact renderer. Put shared renderer configuration in Environment resources and reference it from the Scenario.`
232
+ );
233
+ }
234
+ return task.expectedOutput;
235
+ }
236
+ function portableEnvironment(taskset) {
237
+ const kind = taskset.environment.kind === "chat" ? "text" : taskset.environment.kind === "work" ? "work" : taskset.environment.kind === "program" ? "custom_program" : "agent";
238
+ return {
239
+ protocolVersion: "openpond.environment.v1",
240
+ kind,
241
+ entrypoint: taskset.environment.entrypoint,
242
+ stateful: taskset.environment.stateful,
243
+ deterministicSeeds: taskset.environment.deterministicSeeds,
244
+ lifecycle: ["create", "reset", "step", "collect", "destroy"],
245
+ networkPolicy: taskset.environment.networkPolicy,
246
+ defaultTimeoutMs: taskset.environment.defaultTimeoutMs
247
+ };
248
+ }
249
+ function portableTools(taskset) {
250
+ const admitted = taskset.environment.metadata.portableTools;
251
+ if (admitted !== void 0) {
252
+ return ToolDeclarationSchema.array().max(200).parse(admitted);
253
+ }
254
+ const bindings = taskset.environment.actionBindings ?? [];
255
+ if (bindings.length) return bindings.map((binding) => ({
256
+ name: binding.modelToolName,
257
+ description: binding.description,
258
+ inputSchema: binding.inputSchema,
259
+ inputSchemaHash: hash(binding.actionSchemaHash),
260
+ sideEffect: binding.sideEffect,
261
+ timeoutMs: binding.timeoutMs
262
+ }));
263
+ return taskset.environment.toolNames.map((name) => ({
264
+ name,
265
+ description: `Host-provided ${name} tool.`,
266
+ inputSchema: {},
267
+ inputSchemaHash: contentHash({}),
268
+ sideEffect: "write",
269
+ timeoutMs: taskset.environment.defaultTimeoutMs
270
+ }));
271
+ }
272
+ function portableGrader(grader) {
273
+ const base = {
274
+ id: grader.id,
275
+ version: grader.version,
276
+ weight: grader.weight,
277
+ hardGate: grader.hardGate,
278
+ rewardEligible: grader.rewardEligible,
279
+ privileged: grader.privileged
280
+ };
281
+ if (grader.kind === "model_judge") return {
282
+ ...base,
283
+ kind: "model_judge",
284
+ rubricRef: rubricAsset(grader),
285
+ model: modelJudgeRef(grader),
286
+ temperature: grader.temperature,
287
+ calibrationStatus: grader.calibrationStatus
288
+ };
289
+ if (grader.kind === "custom_verifier") {
290
+ if (grader.metadata.portableVerifierRef === void 0) {
291
+ throw new Error(`Custom verifier ${grader.id} requires its immutable executable asset before publication.`);
292
+ }
293
+ const imported = PortableGraderSpecSchema.safeParse(grader.metadata.portableGrader);
294
+ const preserveDefault = imported.success && imported.data.kind === "custom_verifier" && imported.data.exportName === void 0 && grader.exportName === "verify";
295
+ return {
296
+ ...base,
297
+ kind: "custom_verifier",
298
+ verifierRef: ImmutableAssetRefSchema.parse(grader.metadata.portableVerifierRef),
299
+ timeoutMs: grader.timeoutMs,
300
+ ...preserveDefault ? {} : { exportName: grader.exportName },
301
+ networkPolicy: "none"
302
+ };
303
+ }
304
+ if (grader.kind === "human") return {
305
+ ...base,
306
+ kind: "human",
307
+ rubricRef: rubricAsset(grader),
308
+ reviewerRole: grader.reviewerRole
309
+ };
310
+ return {
311
+ ...base,
312
+ ...portableDeterministicCheck(grader)
313
+ };
314
+ }
315
+ function portableCapabilities(taskset) {
316
+ const admitted = taskset.metadata.portableCapabilities;
317
+ if (admitted !== void 0) {
318
+ return CapabilityRequirementSchema.array().max(200).parse(admitted);
319
+ }
320
+ return [
321
+ ...taskset.capabilities.requiresTools ? [{ id: "tools", required: true, scopes: taskset.environment.toolNames }] : [],
322
+ ...taskset.capabilities.requiresState ? [{ id: "local-state", required: true, scopes: [] }] : [],
323
+ ...taskset.capabilities.requiresPrivilegedGrading ? [{ id: "private-verifier", required: true, scopes: taskset.policy.hiddenGraderRefs }] : [],
324
+ ...taskset.policy.connectedAppScopes.map((scope) => ({
325
+ id: `connected-app-${segment(scope)}`,
326
+ required: true,
327
+ scopes: [scope]
328
+ }))
329
+ ].map((requirement) => ({
330
+ ...requirement,
331
+ portability: requirement.id === "local-state" ? "host_adapter" : "portable"
332
+ }));
333
+ }
334
+ function assertReleaseBindings(input) {
335
+ if (input.draft.environmentRelease?.id !== input.environmentRelease.id || input.draft.environmentRelease.contentHash !== input.environmentRelease.contentHash) {
336
+ throw new Error("Admitted Taskset Release binds a different Environment Release.");
337
+ }
338
+ if (input.draft.verifierSetRelease?.id !== input.verifierSetRelease.id || input.draft.verifierSetRelease.contentHash !== input.verifierSetRelease.contentHash) {
339
+ throw new Error("Admitted Taskset Release binds a different Verifier Set Release.");
340
+ }
341
+ if (contentHash(input.draft.environment) !== contentHash(input.environmentRelease.contract)) {
342
+ throw new Error("Admitted Taskset Environment differs from its bound Environment Release.");
343
+ }
344
+ if (contentHash(input.draft.graders) !== contentHash(input.verifierSetRelease.graders)) {
345
+ throw new Error("Admitted Taskset graders differ from its bound Verifier Set Release.");
346
+ }
347
+ return input.draft;
348
+ }
349
+ function modelJudgeRef(grader) {
350
+ const previous = grader.metadata.portableGrader === void 0 ? null : PortableGraderSpecSchema.parse(grader.metadata.portableGrader);
351
+ const revision = previous?.kind === "model_judge" && previous.model?.providerId === grader.judge.providerId && previous.model.modelId === grader.judge.modelId ? previous.model.revision : null;
352
+ return { ...grader.judge, revision };
353
+ }
354
+ function rubricAsset(grader) {
355
+ const contentHash2 = sha256(grader.rubric);
356
+ const sizeBytes = new TextEncoder().encode(grader.rubric).byteLength;
357
+ const reference = grader.metadata.portableRubricRef;
358
+ if (reference !== void 0) {
359
+ const asset = ImmutableAssetRefSchema.parse(reference);
360
+ if (asset.contentHash !== contentHash2 || asset.sizeBytes !== sizeBytes || asset.visibility === "policy") throw new Error("Taskset rubric differs from its published private source.");
361
+ return asset;
362
+ }
363
+ return { id: `rubric-${grader.id}`, path: `graders/${segment(grader.id)}/rubric.md`, contentHash: contentHash2, sizeBytes, mediaType: "text/markdown", visibility: "verifier" };
364
+ }
365
+ function hash(value) {
366
+ return /^[a-f0-9]{64}$/.test(value) ? value : contentHash(value);
367
+ }
368
+ function segment(value) {
369
+ const normalized = value.trim().replace(/[^a-zA-Z0-9._-]+/g, "-").replace(/^-+|-+$/g, "");
370
+ return normalized || "asset";
371
+ }
372
+
373
+ // src/taskset-package-grader-projection.ts
374
+ import { compileBoundGraders as compileBoundGraders2, resolveBoundRewards } from "@openpond/evals/rewards";
375
+ import { learningRef, verifyLearningTextAsset } from "@openpond/evals/learning";
376
+ import { z } from "zod";
377
+ function importedPackageGraders(value) {
378
+ const authoring = value.taskset.metadata.ordinaryAuthoring;
379
+ const calibrationFixtures = z.record(z.string(), z.array(z.string().min(1)).max(1e5)).parse(authoring?.judgeCalibrationFixtures ?? {});
380
+ return value.taskset.graders.map((grader) => {
381
+ const base = { ...grader, label: grader.id, metadata: { portableGrader: grader } };
382
+ if (grader.kind === "custom_verifier") return GraderSpecSchema.parse({
383
+ ...base,
384
+ module: learningVerifierModule(grader.verifierRef.contentHash),
385
+ exportName: grader.exportName ?? "verify",
386
+ metadata: { ...base.metadata, portableVerifierRef: grader.verifierRef }
387
+ });
388
+ if (grader.kind === "human" || grader.kind === "model_judge") {
389
+ const file = value.files.find((file2) => file2.asset.id === grader.rubricRef.id);
390
+ if (!file) throw new Error(`Imported rubric is missing: ${grader.id}.`);
391
+ const rubric = new TextDecoder("utf-8", { fatal: true }).decode(decodeTasksetPackageFile(file));
392
+ const metadata = { ...base.metadata, portableRubricRef: grader.rubricRef };
393
+ if (grader.kind === "human") return GraderSpecSchema.parse({ ...base, rubric, metadata });
394
+ if (!grader.model) throw new Error(`Imported judge ${grader.id} requires its declared model before local preparation.`);
395
+ return GraderSpecSchema.parse({
396
+ ...base,
397
+ rubric,
398
+ metadata,
399
+ judge: grader.model,
400
+ temperature: grader.temperature ?? 0,
401
+ calibrationStatus: "pending",
402
+ calibrationFixtureRefs: calibrationFixtures[grader.id] ?? []
403
+ });
404
+ }
405
+ return GraderSpecSchema.parse({
406
+ ...base,
407
+ kind: grader.kind === "artifact" ? "file" : grader.kind,
408
+ config: grader.kind === "artifact" ? { ...grader.config, ...grader.config.refIncludes === void 0 ? {} : { pathIncludes: grader.config.refIncludes } } : grader.config
409
+ });
410
+ });
411
+ }
412
+ function projectLearningBatchGraders(binding, rewards, assets = []) {
413
+ const resolved = resolveBoundRewards(binding, rewards);
414
+ return compileBoundGraders2(binding, rewards).map((grader) => {
415
+ const reward = resolved.find(({ source }) => source.graderId === grader.id).reward;
416
+ const base = { ...grader, label: reward.name, metadata: { rewardBinding: learningRef(binding) } };
417
+ if (grader.kind === "model_judge") throw new Error(`Reward ${grader.id} needs a calibrated model execution adapter before preparation.`);
418
+ if (grader.kind === "custom_verifier") return GraderSpecSchema.parse({
419
+ ...base,
420
+ module: learningVerifierModule(grader.verifierRef.contentHash),
421
+ exportName: grader.exportName ?? "verify",
422
+ metadata: { ...base.metadata, portableVerifierRef: grader.verifierRef }
423
+ });
424
+ if (grader.kind === "human") {
425
+ const asset = assets.find((asset2) => asset2.id === grader.rubricRef.id);
426
+ if (!asset) throw new Error(`Reward ${grader.id} is missing its immutable rubric.`);
427
+ return GraderSpecSchema.parse({ ...base, rubric: verifyLearningTextAsset(asset, grader.rubricRef) });
428
+ }
429
+ return GraderSpecSchema.parse({ ...base, kind: grader.kind === "artifact" ? "file" : grader.kind });
430
+ });
431
+ }
432
+ function learningVerifierModule(hash2) {
433
+ return `graders/reward-${hash2}.js`;
434
+ }
435
+
436
+ export {
437
+ resolvePortableTasksetRewardExecution,
438
+ materializePortableTasksetRelease,
439
+ projectPreferenceComparisonRelease,
440
+ portableTasksetEnvironment,
441
+ portableTasksetTools,
442
+ projectPortableTaskRecord,
443
+ importedPackageGraders,
444
+ projectLearningBatchGraders,
445
+ learningVerifierModule
446
+ };
447
+ //# sourceMappingURL=chunk-ARUJ3FJT.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/taskset-authored-portable-release.ts", "../src/taskset-package-grader-projection.ts"],
4
+ "sourcesContent": ["import type { Taskset } from \"./taskset-authored-contracts.js\";\nimport type {\n GraderSpec,\n TaskDataRecord,\n} from \"./taskset-draft-core.js\";\nimport {\n TaskRecordSchema,\n GraderSpecSchema as PortableGraderSpecSchema,\n TasksetReleaseContentSchema,\n TasksetReleaseSchema,\n bindTasksetExecutionReleases,\n createEnvironmentRelease,\n createVerifierSetRelease,\n EnvironmentReleaseSchema,\n VerifierSetReleaseSchema,\n verifyEnvironmentRelease,\n verifyVerifierSetRelease,\n verifyPreferenceComparisonRelease,\n type EnvironmentContract,\n type GraderSpec as PortableGraderSpec,\n type PreferenceComparisonRelease,\n type TasksetRelease,\n} from \"@openpond/evals\";\nimport type {\n ImmutableAssetRef,\n ToolDeclaration,\n} from \"@openpond/harness\";\nimport {\n CapabilityRequirementSchema,\n ImmutableAssetRefSchema,\n ToolDeclarationSchema,\n} from \"@openpond/harness\";\n\nimport { contentHash, sha256 } from \"@openpond/harness\";\nimport { TaskBatchPackageMetadataSchema } from \"@openpond/evals/learning\";\nimport { compileBoundGraders, RewardBindingSchema, RewardReleaseSchema, type RewardBinding, type RewardRelease } from \"@openpond/evals/rewards\";\nimport { portableDeterministicCheck } from \"@openpond/evals/graders\";\n\nexport type TasksetRewardExecution = { binding: RewardBinding; rewards: RewardRelease[] };\n\nexport function resolvePortableTasksetRewardExecution(taskset: Taskset, supplied?: TasksetRewardExecution): TasksetRewardExecution | null {\n const learning = taskset.metadata.learning === undefined ? null : TaskBatchPackageMetadataSchema.parse(taskset.metadata.learning);\n const embedded = taskset.metadata.rewardExecution as { binding?: unknown; rewards?: unknown } | undefined;\n const execution = supplied ?? (embedded ? {\n binding: RewardBindingSchema.parse(embedded.binding),\n rewards: RewardReleaseSchema.array().parse(embedded.rewards),\n } : learning);\n if (taskset.metadata.rewardBinding !== undefined) {\n const reference = taskset.metadata.rewardBinding as Partial<RewardBinding> | null;\n if (!execution || !reference || reference.id !== execution.binding.id\n || reference.revision !== execution.binding.revision || reference.contentHash !== execution.binding.contentHash) {\n throw new Error(\"Portable Taskset requires its exact published Reward binding.\");\n }\n }\n if (execution) compileBoundGraders(execution.binding, execution.rewards);\n return execution ? { binding: execution.binding, rewards: execution.rewards } : null;\n}\n\nexport function materializePortableTasksetRelease(input: {\n taskset: Taskset;\n selectedTasks?: TaskDataRecord[];\n adapterId: string;\n admittedTasksetRelease?: TasksetRelease | null;\n rewardExecution?: TasksetRewardExecution;\n}): {\n environmentRelease: ReturnType<typeof createEnvironmentRelease>;\n verifierSetRelease: ReturnType<typeof createVerifierSetRelease>;\n tasksetRelease: TasksetRelease;\n} {\n const environment = portableEnvironment(input.taskset);\n const tools = portableTools(input.taskset);\n const learning = input.taskset.metadata.learning === undefined ? null : TaskBatchPackageMetadataSchema.parse(input.taskset.metadata.learning);\n const embedded = input.taskset.metadata.rewardExecution;\n const rewardExecution = resolvePortableTasksetRewardExecution(input.taskset, input.rewardExecution);\n const graders = rewardExecution ? compileBoundGraders(rewardExecution.binding, rewardExecution.rewards) : input.taskset.graders.map(portableGrader);\n const tasks = input.selectedTasks?.length\n ? input.selectedTasks\n : input.taskset.tasks;\n if (!tasks.length) throw new Error(\"A portable Taskset release requires at least one task.\");\n const pinned = input.taskset.environment.metadata.portableExecutionResources as { environment?: unknown; verifierSet?: unknown } | undefined;\n if (environment.entrypoint === \"openpond.javascript-environment.v1\" && !pinned) throw new Error(\"Tool Taskset publication requires its pinned execution resources.\");\n const environmentRelease = pinned ? EnvironmentReleaseSchema.parse(pinned.environment) : createEnvironmentRelease({\n schemaVersion: \"openpond.environmentRelease.v1\",\n id: `environment-release-${input.taskset.id}-r${input.taskset.revision}`,\n revision: input.taskset.revision,\n contract: environment,\n actionSchemaRef: null,\n observationSchemaRef: null,\n stateSchemaRef: null,\n artifactCollection: {\n maxArtifacts: 100_000,\n maxTotalBytes: 250_000_000,\n },\n adapterConformanceHashes: {\n [input.adapterId]: contentHash({ adapterId: input.adapterId, environment, tools }),\n },\n metadata: {\n sourceTasksetId: input.taskset.id,\n sourcePackageHash: input.taskset.metadata.sourcePackageHash ?? null,\n resources: input.taskset.environment.resources ?? [],\n },\n });\n const verifierSetRelease = pinned?.verifierSet !== undefined ? VerifierSetReleaseSchema.parse(pinned.verifierSet) : createVerifierSetRelease({\n schemaVersion: \"openpond.verifierSetRelease.v1\",\n id: `verifier-set-release-${input.taskset.id}-r${input.taskset.revision}`,\n revision: input.taskset.revision,\n graders,\n isolation: {\n processBoundary: \"isolated_process\",\n networkPolicy: \"none\",\n defaultTimeoutMs: Math.min(input.taskset.environment.defaultTimeoutMs, 300_000),\n },\n calibrationReceiptRefs: [],\n metadata: { sourceTasksetId: input.taskset.id },\n });\n if (!verifyEnvironmentRelease(environmentRelease) || !verifyVerifierSetRelease(verifierSetRelease) ||\n contentHash(environmentRelease.contract) !== contentHash(environment) || contentHash(verifierSetRelease.graders) !== contentHash(graders)) {\n throw new Error(\"Taskset execution resources differ from its declared environment or graders.\");\n }\n const tasksetContent = TasksetReleaseContentSchema.parse({\n schemaVersion: \"openpond.tasksetRelease.v2\",\n id: input.taskset.metadata.derivedPortableMetadata === undefined ? `taskset-release-${input.taskset.id}-r${input.taskset.revision}` : input.taskset.id,\n revision: input.taskset.revision,\n policy: {\n policyVisibleFields: input.taskset.policy.policyVisibleFields,\n privilegedFields: input.taskset.policy.privilegedFields,\n hiddenGraderRefs: input.taskset.policy.hiddenGraderRefs,\n connectedAppScopes: input.taskset.policy.connectedAppScopes,\n },\n environment,\n tools,\n capabilities: portableCapabilities(input.taskset),\n tasks: tasks.map(projectPortableTaskRecord),\n graders,\n ...(input.taskset.metrics ? { metrics: input.taskset.metrics } : {}),\n metadata: input.taskset.metadata.derivedPortableMetadata ?? {\n sourceTasksetId: input.taskset.id,\n sourceTasksetHash: input.taskset.contentHash,\n sourcePackageHash: input.taskset.metadata.sourcePackageHash ?? null,\n environmentResources: input.taskset.environment.resources ?? [],\n ordinaryAuthoring: {\n instructions: input.taskset.objective,\n graderFixtures: input.taskset.graderFixtures,\n judgeCalibrationFixtures: Object.fromEntries(input.taskset.graders\n .filter(grader => grader.kind === \"model_judge\")\n .map(grader => [grader.id, grader.calibrationFixtureRefs])),\n },\n ...(learning ? { learning } : {}),\n // A sealed batch already pins these resources in learning metadata.\n // Resolving that same binding at admission must not change its release.\n ...(rewardExecution && !learning && (input.rewardExecution || embedded) ? { rewardExecution: { binding: rewardExecution.binding, rewards: rewardExecution.rewards } } : {}),\n },\n });\n const draft = input.admittedTasksetRelease\n ? TasksetReleaseSchema.parse(input.admittedTasksetRelease)\n : TasksetReleaseSchema.parse({\n ...tasksetContent,\n contentHash: contentHash(tasksetContent),\n });\n const tasksetRelease = draft.environmentRelease\n ? assertReleaseBindings({ draft, environmentRelease, verifierSetRelease })\n : bindTasksetExecutionReleases({\n taskset: draft,\n environment: environmentRelease,\n verifierSet: verifierSetRelease,\n });\n return { environmentRelease, verifierSetRelease, tasksetRelease };\n}\n\n/**\n * Admits a published comparison policy against the exact portable Taskset\n * release it names. A comparison is deliberately not embedded in that release:\n * doing so would create a content-hash cycle between Taskset and comparison.\n */\nexport function projectPreferenceComparisonRelease(input: {\n tasksetRelease: TasksetRelease;\n preferenceComparison: PreferenceComparisonRelease;\n}): PreferenceComparisonRelease {\n if (!verifyPreferenceComparisonRelease(input.preferenceComparison)) {\n throw new Error(\"Preference comparison release failed immutable content verification.\");\n }\n const release = input.preferenceComparison;\n if (\n release.tasksetRelease.id !== input.tasksetRelease.id\n || release.tasksetRelease.contentHash !== input.tasksetRelease.contentHash\n ) {\n throw new Error(\"Preference comparison release must reference the admitted portable Taskset release.\");\n }\n return release;\n}\n\nexport function portableTasksetEnvironment(taskset: Taskset): EnvironmentContract {\n return portableEnvironment(taskset);\n}\n\nexport function portableTasksetTools(taskset: Taskset): ToolDeclaration[] {\n return portableTools(taskset);\n}\n\n/** Preserve immutable file/schema references while overlaying current edits. */\nexport function projectPortableTaskRecord(task: TaskDataRecord) {\n const admitted = task.metadata.portableTaskRecord;\n if (admitted !== undefined) {\n const original = TaskRecordSchema.parse(admitted);\n const projected = TaskRecordSchema.parse({\n ...original,\n id: task.id,\n clusterKey: task.clusterKey,\n split: task.split,\n input: task.input,\n expectedOutput: portableExpectedOutput(task),\n policyVisibleContext: task.policyVisibleContext,\n privilegedContextRef: task.privilegedContextRef,\n tags: task.tags,\n artifactRefs: task.assets === undefined ? original.artifactRefs : task.assets.map((asset) => {\n const previous = original.artifactRefs.find(item => item.id === asset.id);\n return {\n id: asset.id,\n path: previous?.path ?? `tasks/${segment(task.id)}/${segment(asset.fileName)}`,\n contentHash: hash(asset.sha256),\n sizeBytes: asset.sizeBytes,\n mediaType: asset.mediaType,\n visibility: previous?.visibility ?? \"policy\",\n };\n }),\n requiredOutputs: task.requiredOutputs === undefined ? original.requiredOutputs : task.requiredOutputs.map((output) => {\n const previous = original.requiredOutputs?.find(item => item.path === output.path);\n return {\n path: output.path,\n mediaType: output.mediaType,\n schemaRef: previous?.schemaRef && previous.schemaRef.id === output.schemaRef ? previous.schemaRef : null,\n maxBytes: output.maxBytes ?? null,\n metadata: {\n ...output.metadata,\n ...(output.schemaRef && previous?.schemaRef?.id !== output.schemaRef\n ? { legacySchemaRef: output.schemaRef }\n : {}),\n },\n };\n }),\n });\n if (projected.requiredOutputs === undefined) delete projected.requiredOutputs;\n return projected;\n }\n return {\n id: task.id,\n clusterKey: task.clusterKey,\n split: task.split,\n input: task.input,\n expectedOutput: portableExpectedOutput(task),\n policyVisibleContext: task.policyVisibleContext,\n privilegedContextRef: task.privilegedContextRef,\n artifactRefs: (task.assets ?? []).map((item) => ({\n id: item.id,\n path: `tasks/${segment(task.id)}/${segment(item.fileName)}`,\n contentHash: hash(item.sha256),\n sizeBytes: item.sizeBytes,\n mediaType: item.mediaType,\n visibility: \"policy\" as const,\n })),\n requiredOutputs: (task.requiredOutputs ?? []).map((output) => ({\n path: output.path,\n mediaType: output.mediaType,\n schemaRef: null,\n maxBytes: output.maxBytes ?? null,\n metadata: {\n ...output.metadata,\n legacySchemaRef: output.schemaRef ?? null,\n },\n })),\n tags: task.tags,\n };\n}\n\nfunction portableExpectedOutput(\n task: TaskDataRecord,\n): Record<string, unknown> | null {\n if (!task.expectedOutput) return null;\n if (\"artifactRenderer\" in task.expectedOutput) {\n throw new Error(\n `Task ${task.id} embeds an artifact renderer. Put shared renderer configuration in Environment resources and reference it from the Scenario.`,\n );\n }\n return task.expectedOutput;\n}\n\nfunction portableEnvironment(taskset: Taskset): EnvironmentContract {\n const kind: EnvironmentContract[\"kind\"] = taskset.environment.kind === \"chat\"\n ? \"text\"\n : taskset.environment.kind === \"work\" ? \"work\"\n : taskset.environment.kind === \"program\" ? \"custom_program\" : \"agent\";\n return {\n protocolVersion: \"openpond.environment.v1\",\n kind,\n entrypoint: taskset.environment.entrypoint,\n stateful: taskset.environment.stateful,\n deterministicSeeds: taskset.environment.deterministicSeeds,\n lifecycle: [\"create\", \"reset\", \"step\", \"collect\", \"destroy\"],\n networkPolicy: taskset.environment.networkPolicy,\n defaultTimeoutMs: taskset.environment.defaultTimeoutMs,\n };\n}\n\nfunction portableTools(taskset: Taskset): ToolDeclaration[] {\n const admitted = taskset.environment.metadata.portableTools;\n if (admitted !== undefined) {\n return ToolDeclarationSchema.array().max(200).parse(admitted);\n }\n const bindings = taskset.environment.actionBindings ?? [];\n if (bindings.length) return bindings.map((binding) => ({\n name: binding.modelToolName,\n description: binding.description,\n inputSchema: binding.inputSchema,\n inputSchemaHash: hash(binding.actionSchemaHash),\n sideEffect: binding.sideEffect,\n timeoutMs: binding.timeoutMs,\n }));\n return taskset.environment.toolNames.map((name) => ({\n name,\n description: `Host-provided ${name} tool.`,\n inputSchema: {},\n inputSchemaHash: contentHash({}),\n sideEffect: \"write\" as const,\n timeoutMs: taskset.environment.defaultTimeoutMs,\n }));\n}\n\nfunction portableGrader(grader: GraderSpec): PortableGraderSpec {\n const base = {\n id: grader.id,\n version: grader.version,\n weight: grader.weight,\n hardGate: grader.hardGate,\n rewardEligible: grader.rewardEligible,\n privileged: grader.privileged,\n };\n if (grader.kind === \"model_judge\") return {\n ...base,\n kind: \"model_judge\",\n rubricRef: rubricAsset(grader),\n model: modelJudgeRef(grader),\n temperature: grader.temperature,\n calibrationStatus: grader.calibrationStatus,\n };\n if (grader.kind === \"custom_verifier\") {\n if (grader.metadata.portableVerifierRef === undefined) {\n throw new Error(`Custom verifier ${grader.id} requires its immutable executable asset before publication.`);\n }\n const imported = PortableGraderSpecSchema.safeParse(grader.metadata.portableGrader);\n // An omitted portable export means \"verify\". Preserve that encoding on an\n // unchanged import so executing it does not silently replace its release.\n const preserveDefault = imported.success && imported.data.kind === \"custom_verifier\"\n && imported.data.exportName === undefined && grader.exportName === \"verify\";\n return {\n ...base,\n kind: \"custom_verifier\",\n verifierRef: ImmutableAssetRefSchema.parse(grader.metadata.portableVerifierRef),\n timeoutMs: grader.timeoutMs,\n ...(preserveDefault ? {} : { exportName: grader.exportName }),\n networkPolicy: \"none\",\n };\n }\n if (grader.kind === \"human\") return {\n ...base,\n kind: \"human\",\n rubricRef: rubricAsset(grader),\n reviewerRole: grader.reviewerRole,\n };\n return {\n ...base,\n ...portableDeterministicCheck(grader),\n };\n}\n\nfunction portableCapabilities(taskset: Taskset) {\n const admitted = taskset.metadata.portableCapabilities;\n if (admitted !== undefined) {\n return CapabilityRequirementSchema.array().max(200).parse(admitted);\n }\n return [\n ...(taskset.capabilities.requiresTools\n ? [{ id: \"tools\", required: true, scopes: taskset.environment.toolNames }]\n : []),\n ...(taskset.capabilities.requiresState\n ? [{ id: \"local-state\", required: true, scopes: [] }]\n : []),\n ...(taskset.capabilities.requiresPrivilegedGrading\n ? [{ id: \"private-verifier\", required: true, scopes: taskset.policy.hiddenGraderRefs }]\n : []),\n ...taskset.policy.connectedAppScopes.map((scope) => ({\n id: `connected-app-${segment(scope)}`,\n required: true,\n scopes: [scope],\n })),\n ].map((requirement) => ({\n ...requirement,\n portability: requirement.id === \"local-state\" ? \"host_adapter\" as const : \"portable\" as const,\n }));\n}\n\nfunction assertReleaseBindings(input: {\n draft: TasksetRelease;\n environmentRelease: ReturnType<typeof createEnvironmentRelease>;\n verifierSetRelease: ReturnType<typeof createVerifierSetRelease>;\n}): TasksetRelease {\n if (\n input.draft.environmentRelease?.id !== input.environmentRelease.id\n || input.draft.environmentRelease.contentHash !== input.environmentRelease.contentHash\n ) {\n throw new Error(\"Admitted Taskset Release binds a different Environment Release.\");\n }\n if (\n input.draft.verifierSetRelease?.id !== input.verifierSetRelease.id\n || input.draft.verifierSetRelease.contentHash !== input.verifierSetRelease.contentHash\n ) {\n throw new Error(\"Admitted Taskset Release binds a different Verifier Set Release.\");\n }\n if (contentHash(input.draft.environment) !== contentHash(input.environmentRelease.contract)) {\n throw new Error(\"Admitted Taskset Environment differs from its bound Environment Release.\");\n }\n if (contentHash(input.draft.graders) !== contentHash(input.verifierSetRelease.graders)) {\n throw new Error(\"Admitted Taskset graders differ from its bound Verifier Set Release.\");\n }\n return input.draft;\n}\n\nfunction modelJudgeRef(grader: Extract<GraderSpec, { kind: \"model_judge\" }>) {\n const previous = grader.metadata.portableGrader === undefined ? null : PortableGraderSpecSchema.parse(grader.metadata.portableGrader);\n const revision = previous?.kind === \"model_judge\" && previous.model?.providerId === grader.judge.providerId && previous.model.modelId === grader.judge.modelId ? previous.model.revision : null;\n return { ...grader.judge, revision };\n}\n\nfunction rubricAsset(grader: Extract<GraderSpec, { kind: \"human\" | \"model_judge\" }>): ImmutableAssetRef {\n const contentHash = sha256(grader.rubric);\n const sizeBytes = new TextEncoder().encode(grader.rubric).byteLength;\n const reference = grader.metadata.portableRubricRef;\n if (reference !== undefined) {\n const asset = ImmutableAssetRefSchema.parse(reference);\n if (asset.contentHash !== contentHash || asset.sizeBytes !== sizeBytes || asset.visibility === \"policy\") throw new Error(\"Taskset rubric differs from its published private source.\");\n return asset;\n }\n return { id: `rubric-${grader.id}`, path: `graders/${segment(grader.id)}/rubric.md`, contentHash, sizeBytes, mediaType: \"text/markdown\", visibility: \"verifier\" };\n}\n\nfunction hash(value: string): string {\n return /^[a-f0-9]{64}$/.test(value) ? value : contentHash(value);\n}\n\nfunction segment(value: string): string {\n const normalized = value.trim().replace(/[^a-zA-Z0-9._-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n return normalized || \"asset\";\n}\n", "import { compileBoundGraders, resolveBoundRewards, type RewardBinding, type RewardRelease } from \"@openpond/evals/rewards\";\nimport { learningRef, verifyLearningTextAsset, type LearningTextAsset } from \"@openpond/evals/learning\";\nimport type { GraderSpec } from \"./taskset-draft-core.js\";\nimport { GraderSpecSchema } from \"./taskset-draft-core.js\";\nimport { decodeTasksetPackageFile, type TasksetPackage } from \"./taskset-package-contracts.js\";\nimport { z } from \"zod\";\n\n/** Project an ordinary portable package without inventing a Reward binding. */\nexport function importedPackageGraders(value: TasksetPackage) {\n const authoring = value.taskset.metadata.ordinaryAuthoring as { judgeCalibrationFixtures?: unknown } | undefined;\n const calibrationFixtures = z.record(z.string(), z.array(z.string().min(1)).max(100_000)).parse(authoring?.judgeCalibrationFixtures ?? {});\n return value.taskset.graders.map(grader => {\n const base = { ...grader, label: grader.id, metadata: { portableGrader: grader } };\n if (grader.kind === \"custom_verifier\") return GraderSpecSchema.parse({ ...base,\n module: learningVerifierModule(grader.verifierRef.contentHash), exportName: grader.exportName ?? \"verify\",\n metadata: { ...base.metadata, portableVerifierRef: grader.verifierRef } });\n if (grader.kind === \"human\" || grader.kind === \"model_judge\") {\n const file = value.files.find(file => file.asset.id === grader.rubricRef.id);\n if (!file) throw new Error(`Imported rubric is missing: ${grader.id}.`);\n const rubric = new TextDecoder(\"utf-8\", { fatal: true }).decode(decodeTasksetPackageFile(file));\n const metadata = { ...base.metadata, portableRubricRef: grader.rubricRef };\n if (grader.kind === \"human\") return GraderSpecSchema.parse({ ...base, rubric, metadata });\n if (!grader.model) throw new Error(`Imported judge ${grader.id} requires its declared model before local preparation.`);\n return GraderSpecSchema.parse({ ...base, rubric, metadata, judge: grader.model, temperature: grader.temperature ?? 0,\n calibrationStatus: \"pending\", calibrationFixtureRefs: calibrationFixtures[grader.id] ?? [] });\n }\n return GraderSpecSchema.parse({ ...base, kind: grader.kind === \"artifact\" ? \"file\" : grader.kind,\n config: grader.kind === \"artifact\" ? { ...grader.config, ...(grader.config.refIncludes === undefined ? {} : { pathIncludes: grader.config.refIncludes }) } : grader.config });\n });\n}\n\nexport function projectLearningBatchGraders(binding: RewardBinding, rewards: RewardRelease[], assets: LearningTextAsset[] = []): GraderSpec[] {\n const resolved = resolveBoundRewards(binding, rewards);\n return compileBoundGraders(binding, rewards).map((grader) => {\n const reward = resolved.find(({ source }) => source.graderId === grader.id)!.reward;\n const base = { ...grader, label: reward.name, metadata: { rewardBinding: learningRef(binding) } };\n if (grader.kind === \"model_judge\") throw new Error(`Reward ${grader.id} needs a calibrated model execution adapter before preparation.`);\n if (grader.kind === \"custom_verifier\") return GraderSpecSchema.parse({ ...base,\n module: learningVerifierModule(grader.verifierRef.contentHash), exportName: grader.exportName ?? \"verify\",\n metadata: { ...base.metadata, portableVerifierRef: grader.verifierRef },\n });\n if (grader.kind === \"human\") {\n const asset = assets.find((asset) => asset.id === grader.rubricRef.id);\n if (!asset) throw new Error(`Reward ${grader.id} is missing its immutable rubric.`);\n return GraderSpecSchema.parse({ ...base, rubric: verifyLearningTextAsset(asset, grader.rubricRef) });\n }\n return GraderSpecSchema.parse({ ...base, kind: grader.kind === \"artifact\" ? \"file\" : grader.kind });\n });\n}\n\nexport function learningVerifierModule(hash: string) { return `graders/reward-${hash}.js`; }\n"],
5
+ "mappings": "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",
6
+ "names": ["contentHash", "compileBoundGraders", "file", "compileBoundGraders", "asset", "hash"]
7
+ }