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
@@ -4,44 +4,60 @@ import {
4
4
  ModelBatchReviewRequestSchema
5
5
  } from "./chunk-K5ZCYOZO.js";
6
6
  import {
7
- GraderFixtureSchema,
8
- GraderSpecSchema,
9
- MAX_TASKSET_PACKAGE_BYTES,
7
+ importedPackageGraders,
8
+ learningVerifierModule,
9
+ materializePortableTasksetRelease,
10
+ portableTasksetEnvironment,
11
+ portableTasksetTools,
12
+ projectLearningBatchGraders,
13
+ projectPortableTaskRecord,
14
+ projectPreferenceComparisonRelease,
15
+ resolvePortableTasksetRewardExecution
16
+ } from "./chunk-ARUJ3FJT.js";
17
+ import {
10
18
  OpenPondTasksetPackageClient,
11
19
  OpenPondTasksetPackageError,
12
20
  TasksetDraftSchema,
13
- TasksetEnvironmentResourceSchema,
14
- TasksetPackageContentSchema,
15
- TasksetPackageFileSchema,
16
- TasksetPackageLearningResourcesSchema,
17
21
  TasksetPackageModelConfigurationSchema,
18
22
  TasksetPackagePublicationSchema,
19
23
  TasksetPackageReadbackSchema,
20
24
  TasksetPackageReceiptSchema,
25
+ configuredTasksetDraftFiles,
26
+ createTasksetDraft,
27
+ createTasksetDraftWorkspace,
28
+ decodeTasksetDraftWorkspaceFile,
29
+ isManagedTasksetDraftFilePath,
30
+ publishTasksetDraft,
31
+ renderTasksetDraftManifests,
32
+ validateTasksetDraftWorkspace
33
+ } from "./chunk-UJZ3XEE3.js";
34
+ import {
35
+ GraderFixtureSchema,
36
+ MAX_TASKSET_PACKAGE_BYTES,
37
+ TasksetEnvironmentResourceSchema,
38
+ TasksetPackageContentSchema,
39
+ TasksetPackageFileSchema,
40
+ TasksetPackageLearningResourcesSchema,
21
41
  TasksetPackageSchema,
22
42
  TasksetSchema,
23
43
  TasksetSourceRefSchema,
24
44
  assertModelTasksetAuthoring,
25
45
  computeTasksetHash,
26
- configuredTasksetDraftFiles,
27
- createTasksetDraft,
28
- createTasksetDraftWorkspace,
29
46
  createTasksetPackage,
30
47
  createTasksetPackageExecutionFile,
31
- decodeTasksetDraftWorkspaceFile,
32
48
  decodeTasksetPackageFile,
33
- isManagedTasksetDraftFilePath,
34
49
  learningPackageContextFiles,
35
50
  modelAuthoredTasksetId,
36
- publishTasksetDraft,
37
- renderTasksetDraftManifests,
38
51
  resolveTasksetPackageExecution,
39
52
  resolveTasksetPackageInstructions,
40
53
  tasksetPackageRewardBinding,
41
- validateTasksetDraftWorkspace,
42
54
  validateTasksetLearningResources,
43
55
  validateTasksetPackage
44
- } from "./chunk-PXB6YY36.js";
56
+ } from "./chunk-QFT2MCIC.js";
57
+ import {
58
+ ModelStarterExecutionSchema,
59
+ modelStarterExecutionAssetId
60
+ } from "./chunk-4IDTRFW2.js";
45
61
  import {
46
62
  ModelTasksetAuthoringOwnerSchema,
47
63
  ModelTasksetAuthoringSchema,
@@ -55,19 +71,12 @@ import {
55
71
  } from "./chunk-S7I45WJQ.js";
56
72
  import "./chunk-F5JBFRAH.js";
57
73
  import "./chunk-A4ZDOZKP.js";
58
- import {
59
- ModelStarterExecutionSchema,
60
- modelStarterExecutionAssetId
61
- } from "./chunk-4IDTRFW2.js";
62
- import {
63
- CapabilityRequirementSchema,
64
- ToolDeclarationSchema
65
- } from "./chunk-EV4PKJWN.js";
74
+ import "./chunk-UKVK7MRJ.js";
66
75
  import {
67
76
  ImmutableAssetRefSchema,
68
77
  contentHash,
69
78
  sha256
70
- } from "./chunk-NF63YMOL.js";
79
+ } from "./chunk-QUOW6URQ.js";
71
80
  import "./chunk-ZNFOVV7B.js";
72
81
 
73
82
  // src/model-batch-review.ts
@@ -372,431 +381,8 @@ function requireOrdinaryPackage(value) {
372
381
  return result;
373
382
  }
374
383
 
375
- // src/taskset-authored-portable-release.ts
376
- import {
377
- TaskRecordSchema,
378
- GraderSpecSchema as PortableGraderSpecSchema,
379
- TasksetReleaseContentSchema,
380
- TasksetReleaseSchema as TasksetReleaseSchema2,
381
- bindTasksetExecutionReleases,
382
- createEnvironmentRelease,
383
- createVerifierSetRelease as createVerifierSetRelease2,
384
- EnvironmentReleaseSchema,
385
- VerifierSetReleaseSchema,
386
- verifyEnvironmentRelease,
387
- verifyVerifierSetRelease,
388
- verifyPreferenceComparisonRelease
389
- } from "@openpond/evals";
390
- import { TaskBatchPackageMetadataSchema } from "@openpond/evals/learning";
391
- import { compileBoundGraders as compileBoundGraders2, RewardBindingSchema, RewardReleaseSchema } from "@openpond/evals/rewards";
392
- import { portableDeterministicCheck } from "@openpond/evals/graders";
393
- function resolvePortableTasksetRewardExecution(taskset, supplied) {
394
- const learning = taskset.metadata.learning === void 0 ? null : TaskBatchPackageMetadataSchema.parse(taskset.metadata.learning);
395
- const embedded = taskset.metadata.rewardExecution;
396
- const execution = supplied ?? (embedded ? {
397
- binding: RewardBindingSchema.parse(embedded.binding),
398
- rewards: RewardReleaseSchema.array().parse(embedded.rewards)
399
- } : learning);
400
- if (taskset.metadata.rewardBinding !== void 0) {
401
- const reference = taskset.metadata.rewardBinding;
402
- if (!execution || !reference || reference.id !== execution.binding.id || reference.revision !== execution.binding.revision || reference.contentHash !== execution.binding.contentHash) {
403
- throw new Error("Portable Taskset requires its exact published Reward binding.");
404
- }
405
- }
406
- if (execution) compileBoundGraders2(execution.binding, execution.rewards);
407
- return execution ? { binding: execution.binding, rewards: execution.rewards } : null;
408
- }
409
- function materializePortableTasksetRelease(input) {
410
- const environment = portableEnvironment(input.taskset);
411
- const tools = portableTools(input.taskset);
412
- const learning = input.taskset.metadata.learning === void 0 ? null : TaskBatchPackageMetadataSchema.parse(input.taskset.metadata.learning);
413
- const embedded = input.taskset.metadata.rewardExecution;
414
- const rewardExecution = resolvePortableTasksetRewardExecution(input.taskset, input.rewardExecution);
415
- const graders = rewardExecution ? compileBoundGraders2(rewardExecution.binding, rewardExecution.rewards) : input.taskset.graders.map(portableGrader);
416
- const tasks = input.selectedTasks?.length ? input.selectedTasks : input.taskset.tasks;
417
- if (!tasks.length) throw new Error("A portable Taskset release requires at least one task.");
418
- const pinned = input.taskset.environment.metadata.portableExecutionResources;
419
- if (environment.entrypoint === "openpond.javascript-environment.v1" && !pinned) throw new Error("Tool Taskset publication requires its pinned execution resources.");
420
- const environmentRelease = pinned ? EnvironmentReleaseSchema.parse(pinned.environment) : createEnvironmentRelease({
421
- schemaVersion: "openpond.environmentRelease.v1",
422
- id: `environment-release-${input.taskset.id}-r${input.taskset.revision}`,
423
- revision: input.taskset.revision,
424
- contract: environment,
425
- actionSchemaRef: null,
426
- observationSchemaRef: null,
427
- stateSchemaRef: null,
428
- artifactCollection: {
429
- maxArtifacts: 1e5,
430
- maxTotalBytes: 25e7
431
- },
432
- adapterConformanceHashes: {
433
- [input.adapterId]: contentHash({ adapterId: input.adapterId, environment, tools })
434
- },
435
- metadata: {
436
- sourceTasksetId: input.taskset.id,
437
- sourcePackageHash: input.taskset.metadata.sourcePackageHash ?? null,
438
- resources: input.taskset.environment.resources ?? []
439
- }
440
- });
441
- const verifierSetRelease = pinned?.verifierSet !== void 0 ? VerifierSetReleaseSchema.parse(pinned.verifierSet) : createVerifierSetRelease2({
442
- schemaVersion: "openpond.verifierSetRelease.v1",
443
- id: `verifier-set-release-${input.taskset.id}-r${input.taskset.revision}`,
444
- revision: input.taskset.revision,
445
- graders,
446
- isolation: {
447
- processBoundary: "isolated_process",
448
- networkPolicy: "none",
449
- defaultTimeoutMs: Math.min(input.taskset.environment.defaultTimeoutMs, 3e5)
450
- },
451
- calibrationReceiptRefs: [],
452
- metadata: { sourceTasksetId: input.taskset.id }
453
- });
454
- if (!verifyEnvironmentRelease(environmentRelease) || !verifyVerifierSetRelease(verifierSetRelease) || contentHash(environmentRelease.contract) !== contentHash(environment) || contentHash(verifierSetRelease.graders) !== contentHash(graders)) {
455
- throw new Error("Taskset execution resources differ from its declared environment or graders.");
456
- }
457
- const tasksetContent = TasksetReleaseContentSchema.parse({
458
- schemaVersion: "openpond.tasksetRelease.v2",
459
- id: input.taskset.metadata.derivedPortableMetadata === void 0 ? `taskset-release-${input.taskset.id}-r${input.taskset.revision}` : input.taskset.id,
460
- revision: input.taskset.revision,
461
- policy: {
462
- policyVisibleFields: input.taskset.policy.policyVisibleFields,
463
- privilegedFields: input.taskset.policy.privilegedFields,
464
- hiddenGraderRefs: input.taskset.policy.hiddenGraderRefs,
465
- connectedAppScopes: input.taskset.policy.connectedAppScopes
466
- },
467
- environment,
468
- tools,
469
- capabilities: portableCapabilities(input.taskset),
470
- tasks: tasks.map(projectPortableTaskRecord),
471
- graders,
472
- ...input.taskset.metrics ? { metrics: input.taskset.metrics } : {},
473
- metadata: input.taskset.metadata.derivedPortableMetadata ?? {
474
- sourceTasksetId: input.taskset.id,
475
- sourceTasksetHash: input.taskset.contentHash,
476
- sourcePackageHash: input.taskset.metadata.sourcePackageHash ?? null,
477
- environmentResources: input.taskset.environment.resources ?? [],
478
- ordinaryAuthoring: {
479
- instructions: input.taskset.objective,
480
- graderFixtures: input.taskset.graderFixtures,
481
- judgeCalibrationFixtures: Object.fromEntries(input.taskset.graders.filter((grader) => grader.kind === "model_judge").map((grader) => [grader.id, grader.calibrationFixtureRefs]))
482
- },
483
- ...learning ? { learning } : {},
484
- // A sealed batch already pins these resources in learning metadata.
485
- // Resolving that same binding at admission must not change its release.
486
- ...rewardExecution && !learning && (input.rewardExecution || embedded) ? { rewardExecution: { binding: rewardExecution.binding, rewards: rewardExecution.rewards } } : {}
487
- }
488
- });
489
- const draft = input.admittedTasksetRelease ? TasksetReleaseSchema2.parse(input.admittedTasksetRelease) : TasksetReleaseSchema2.parse({
490
- ...tasksetContent,
491
- contentHash: contentHash(tasksetContent)
492
- });
493
- const tasksetRelease = draft.environmentRelease ? assertReleaseBindings({ draft, environmentRelease, verifierSetRelease }) : bindTasksetExecutionReleases({
494
- taskset: draft,
495
- environment: environmentRelease,
496
- verifierSet: verifierSetRelease
497
- });
498
- return { environmentRelease, verifierSetRelease, tasksetRelease };
499
- }
500
- function projectPreferenceComparisonRelease(input) {
501
- if (!verifyPreferenceComparisonRelease(input.preferenceComparison)) {
502
- throw new Error("Preference comparison release failed immutable content verification.");
503
- }
504
- const release = input.preferenceComparison;
505
- if (release.tasksetRelease.id !== input.tasksetRelease.id || release.tasksetRelease.contentHash !== input.tasksetRelease.contentHash) {
506
- throw new Error("Preference comparison release must reference the admitted portable Taskset release.");
507
- }
508
- return release;
509
- }
510
- function portableTasksetEnvironment(taskset) {
511
- return portableEnvironment(taskset);
512
- }
513
- function portableTasksetTools(taskset) {
514
- return portableTools(taskset);
515
- }
516
- function projectPortableTaskRecord(task) {
517
- const admitted = task.metadata.portableTaskRecord;
518
- if (admitted !== void 0) {
519
- const original = TaskRecordSchema.parse(admitted);
520
- const projected = TaskRecordSchema.parse({
521
- ...original,
522
- id: task.id,
523
- clusterKey: task.clusterKey,
524
- split: task.split,
525
- input: task.input,
526
- expectedOutput: portableExpectedOutput(task),
527
- policyVisibleContext: task.policyVisibleContext,
528
- privilegedContextRef: task.privilegedContextRef,
529
- tags: task.tags,
530
- artifactRefs: task.assets === void 0 ? original.artifactRefs : task.assets.map((asset) => {
531
- const previous = original.artifactRefs.find((item) => item.id === asset.id);
532
- return {
533
- id: asset.id,
534
- path: previous?.path ?? `tasks/${segment(task.id)}/${segment(asset.fileName)}`,
535
- contentHash: hash(asset.sha256),
536
- sizeBytes: asset.sizeBytes,
537
- mediaType: asset.mediaType,
538
- visibility: previous?.visibility ?? "policy"
539
- };
540
- }),
541
- requiredOutputs: task.requiredOutputs === void 0 ? original.requiredOutputs : task.requiredOutputs.map((output) => {
542
- const previous = original.requiredOutputs?.find((item) => item.path === output.path);
543
- return {
544
- path: output.path,
545
- mediaType: output.mediaType,
546
- schemaRef: previous?.schemaRef && previous.schemaRef.id === output.schemaRef ? previous.schemaRef : null,
547
- maxBytes: output.maxBytes ?? null,
548
- metadata: {
549
- ...output.metadata,
550
- ...output.schemaRef && previous?.schemaRef?.id !== output.schemaRef ? { legacySchemaRef: output.schemaRef } : {}
551
- }
552
- };
553
- })
554
- });
555
- if (projected.requiredOutputs === void 0) delete projected.requiredOutputs;
556
- return projected;
557
- }
558
- return {
559
- id: task.id,
560
- clusterKey: task.clusterKey,
561
- split: task.split,
562
- input: task.input,
563
- expectedOutput: portableExpectedOutput(task),
564
- policyVisibleContext: task.policyVisibleContext,
565
- privilegedContextRef: task.privilegedContextRef,
566
- artifactRefs: (task.assets ?? []).map((item) => ({
567
- id: item.id,
568
- path: `tasks/${segment(task.id)}/${segment(item.fileName)}`,
569
- contentHash: hash(item.sha256),
570
- sizeBytes: item.sizeBytes,
571
- mediaType: item.mediaType,
572
- visibility: "policy"
573
- })),
574
- requiredOutputs: (task.requiredOutputs ?? []).map((output) => ({
575
- path: output.path,
576
- mediaType: output.mediaType,
577
- schemaRef: null,
578
- maxBytes: output.maxBytes ?? null,
579
- metadata: {
580
- ...output.metadata,
581
- legacySchemaRef: output.schemaRef ?? null
582
- }
583
- })),
584
- tags: task.tags
585
- };
586
- }
587
- function portableExpectedOutput(task) {
588
- if (!task.expectedOutput) return null;
589
- if ("artifactRenderer" in task.expectedOutput) {
590
- throw new Error(
591
- `Task ${task.id} embeds an artifact renderer. Put shared renderer configuration in Environment resources and reference it from the Scenario.`
592
- );
593
- }
594
- return task.expectedOutput;
595
- }
596
- function portableEnvironment(taskset) {
597
- const kind = taskset.environment.kind === "chat" ? "text" : taskset.environment.kind === "work" ? "work" : taskset.environment.kind === "program" ? "custom_program" : "agent";
598
- return {
599
- protocolVersion: "openpond.environment.v1",
600
- kind,
601
- entrypoint: taskset.environment.entrypoint,
602
- stateful: taskset.environment.stateful,
603
- deterministicSeeds: taskset.environment.deterministicSeeds,
604
- lifecycle: ["create", "reset", "step", "collect", "destroy"],
605
- networkPolicy: taskset.environment.networkPolicy,
606
- defaultTimeoutMs: taskset.environment.defaultTimeoutMs
607
- };
608
- }
609
- function portableTools(taskset) {
610
- const admitted = taskset.environment.metadata.portableTools;
611
- if (admitted !== void 0) {
612
- return ToolDeclarationSchema.array().max(200).parse(admitted);
613
- }
614
- const bindings = taskset.environment.actionBindings ?? [];
615
- if (bindings.length) return bindings.map((binding) => ({
616
- name: binding.modelToolName,
617
- description: binding.description,
618
- inputSchema: binding.inputSchema,
619
- inputSchemaHash: hash(binding.actionSchemaHash),
620
- sideEffect: binding.sideEffect,
621
- timeoutMs: binding.timeoutMs
622
- }));
623
- return taskset.environment.toolNames.map((name) => ({
624
- name,
625
- description: `Host-provided ${name} tool.`,
626
- inputSchema: {},
627
- inputSchemaHash: contentHash({}),
628
- sideEffect: "write",
629
- timeoutMs: taskset.environment.defaultTimeoutMs
630
- }));
631
- }
632
- function portableGrader(grader) {
633
- const base = {
634
- id: grader.id,
635
- version: grader.version,
636
- weight: grader.weight,
637
- hardGate: grader.hardGate,
638
- rewardEligible: grader.rewardEligible,
639
- privileged: grader.privileged
640
- };
641
- if (grader.kind === "model_judge") return {
642
- ...base,
643
- kind: "model_judge",
644
- rubricRef: rubricAsset(grader),
645
- model: modelJudgeRef(grader),
646
- temperature: grader.temperature,
647
- calibrationStatus: grader.calibrationStatus
648
- };
649
- if (grader.kind === "custom_verifier") {
650
- if (grader.metadata.portableVerifierRef === void 0) {
651
- throw new Error(`Custom verifier ${grader.id} requires its immutable executable asset before publication.`);
652
- }
653
- const imported = PortableGraderSpecSchema.safeParse(grader.metadata.portableGrader);
654
- const preserveDefault = imported.success && imported.data.kind === "custom_verifier" && imported.data.exportName === void 0 && grader.exportName === "verify";
655
- return {
656
- ...base,
657
- kind: "custom_verifier",
658
- verifierRef: ImmutableAssetRefSchema.parse(grader.metadata.portableVerifierRef),
659
- timeoutMs: grader.timeoutMs,
660
- ...preserveDefault ? {} : { exportName: grader.exportName },
661
- networkPolicy: "none"
662
- };
663
- }
664
- if (grader.kind === "human") return {
665
- ...base,
666
- kind: "human",
667
- rubricRef: rubricAsset(grader),
668
- reviewerRole: grader.reviewerRole
669
- };
670
- return {
671
- ...base,
672
- ...portableDeterministicCheck(grader)
673
- };
674
- }
675
- function portableCapabilities(taskset) {
676
- const admitted = taskset.metadata.portableCapabilities;
677
- if (admitted !== void 0) {
678
- return CapabilityRequirementSchema.array().max(200).parse(admitted);
679
- }
680
- return [
681
- ...taskset.capabilities.requiresTools ? [{ id: "tools", required: true, scopes: taskset.environment.toolNames }] : [],
682
- ...taskset.capabilities.requiresState ? [{ id: "local-state", required: true, scopes: [] }] : [],
683
- ...taskset.capabilities.requiresPrivilegedGrading ? [{ id: "private-verifier", required: true, scopes: taskset.policy.hiddenGraderRefs }] : [],
684
- ...taskset.policy.connectedAppScopes.map((scope) => ({
685
- id: `connected-app-${segment(scope)}`,
686
- required: true,
687
- scopes: [scope]
688
- }))
689
- ].map((requirement) => ({
690
- ...requirement,
691
- portability: requirement.id === "local-state" ? "host_adapter" : "portable"
692
- }));
693
- }
694
- function assertReleaseBindings(input) {
695
- if (input.draft.environmentRelease?.id !== input.environmentRelease.id || input.draft.environmentRelease.contentHash !== input.environmentRelease.contentHash) {
696
- throw new Error("Admitted Taskset Release binds a different Environment Release.");
697
- }
698
- if (input.draft.verifierSetRelease?.id !== input.verifierSetRelease.id || input.draft.verifierSetRelease.contentHash !== input.verifierSetRelease.contentHash) {
699
- throw new Error("Admitted Taskset Release binds a different Verifier Set Release.");
700
- }
701
- if (contentHash(input.draft.environment) !== contentHash(input.environmentRelease.contract)) {
702
- throw new Error("Admitted Taskset Environment differs from its bound Environment Release.");
703
- }
704
- if (contentHash(input.draft.graders) !== contentHash(input.verifierSetRelease.graders)) {
705
- throw new Error("Admitted Taskset graders differ from its bound Verifier Set Release.");
706
- }
707
- return input.draft;
708
- }
709
- function modelJudgeRef(grader) {
710
- const previous = grader.metadata.portableGrader === void 0 ? null : PortableGraderSpecSchema.parse(grader.metadata.portableGrader);
711
- const revision = previous?.kind === "model_judge" && previous.model?.providerId === grader.judge.providerId && previous.model.modelId === grader.judge.modelId ? previous.model.revision : null;
712
- return { ...grader.judge, revision };
713
- }
714
- function rubricAsset(grader) {
715
- const contentHash2 = sha256(grader.rubric);
716
- const sizeBytes = new TextEncoder().encode(grader.rubric).byteLength;
717
- const reference = grader.metadata.portableRubricRef;
718
- if (reference !== void 0) {
719
- const asset = ImmutableAssetRefSchema.parse(reference);
720
- if (asset.contentHash !== contentHash2 || asset.sizeBytes !== sizeBytes || asset.visibility === "policy") throw new Error("Taskset rubric differs from its published private source.");
721
- return asset;
722
- }
723
- return { id: `rubric-${grader.id}`, path: `graders/${segment(grader.id)}/rubric.md`, contentHash: contentHash2, sizeBytes, mediaType: "text/markdown", visibility: "verifier" };
724
- }
725
- function hash(value) {
726
- return /^[a-f0-9]{64}$/.test(value) ? value : contentHash(value);
727
- }
728
- function segment(value) {
729
- const normalized = value.trim().replace(/[^a-zA-Z0-9._-]+/g, "-").replace(/^-+|-+$/g, "");
730
- return normalized || "asset";
731
- }
732
-
733
- // src/taskset-package-projection.ts
734
- import { learningRef as learningRef5, taskBatchPackageMetadata as taskBatchPackageMetadata3, verifyLearningTextAsset as verifyLearningTextAsset3 } from "@openpond/evals/learning";
735
-
736
- // src/taskset-package-grader-projection.ts
737
- import { compileBoundGraders as compileBoundGraders3, resolveBoundRewards as resolveBoundRewards2 } from "@openpond/evals/rewards";
738
- import { learningRef as learningRef4, verifyLearningTextAsset as verifyLearningTextAsset2 } from "@openpond/evals/learning";
739
- import { z } from "zod";
740
- function importedPackageGraders(value) {
741
- const authoring = value.taskset.metadata.ordinaryAuthoring;
742
- const calibrationFixtures = z.record(z.string(), z.array(z.string().min(1)).max(1e5)).parse(authoring?.judgeCalibrationFixtures ?? {});
743
- return value.taskset.graders.map((grader) => {
744
- const base = { ...grader, label: grader.id, metadata: { portableGrader: grader } };
745
- if (grader.kind === "custom_verifier") return GraderSpecSchema.parse({
746
- ...base,
747
- module: learningVerifierModule(grader.verifierRef.contentHash),
748
- exportName: grader.exportName ?? "verify",
749
- metadata: { ...base.metadata, portableVerifierRef: grader.verifierRef }
750
- });
751
- if (grader.kind === "human" || grader.kind === "model_judge") {
752
- const file = value.files.find((file2) => file2.asset.id === grader.rubricRef.id);
753
- if (!file) throw new Error(`Imported rubric is missing: ${grader.id}.`);
754
- const rubric = new TextDecoder("utf-8", { fatal: true }).decode(decodeTasksetPackageFile(file));
755
- const metadata = { ...base.metadata, portableRubricRef: grader.rubricRef };
756
- if (grader.kind === "human") return GraderSpecSchema.parse({ ...base, rubric, metadata });
757
- if (!grader.model) throw new Error(`Imported judge ${grader.id} requires its declared model before local preparation.`);
758
- return GraderSpecSchema.parse({
759
- ...base,
760
- rubric,
761
- metadata,
762
- judge: grader.model,
763
- temperature: grader.temperature ?? 0,
764
- calibrationStatus: "pending",
765
- calibrationFixtureRefs: calibrationFixtures[grader.id] ?? []
766
- });
767
- }
768
- return GraderSpecSchema.parse({
769
- ...base,
770
- kind: grader.kind === "artifact" ? "file" : grader.kind,
771
- config: grader.kind === "artifact" ? { ...grader.config, ...grader.config.refIncludes === void 0 ? {} : { pathIncludes: grader.config.refIncludes } } : grader.config
772
- });
773
- });
774
- }
775
- function projectLearningBatchGraders(binding, rewards, assets = []) {
776
- const resolved = resolveBoundRewards2(binding, rewards);
777
- return compileBoundGraders3(binding, rewards).map((grader) => {
778
- const reward = resolved.find(({ source }) => source.graderId === grader.id).reward;
779
- const base = { ...grader, label: reward.name, metadata: { rewardBinding: learningRef4(binding) } };
780
- if (grader.kind === "model_judge") throw new Error(`Reward ${grader.id} needs a calibrated model execution adapter before preparation.`);
781
- if (grader.kind === "custom_verifier") return GraderSpecSchema.parse({
782
- ...base,
783
- module: learningVerifierModule(grader.verifierRef.contentHash),
784
- exportName: grader.exportName ?? "verify",
785
- metadata: { ...base.metadata, portableVerifierRef: grader.verifierRef }
786
- });
787
- if (grader.kind === "human") {
788
- const asset = assets.find((asset2) => asset2.id === grader.rubricRef.id);
789
- if (!asset) throw new Error(`Reward ${grader.id} is missing its immutable rubric.`);
790
- return GraderSpecSchema.parse({ ...base, rubric: verifyLearningTextAsset2(asset, grader.rubricRef) });
791
- }
792
- return GraderSpecSchema.parse({ ...base, kind: grader.kind === "artifact" ? "file" : grader.kind });
793
- });
794
- }
795
- function learningVerifierModule(hash2) {
796
- return `graders/reward-${hash2}.js`;
797
- }
798
-
799
384
  // src/taskset-package-projection.ts
385
+ import { learningRef as learningRef4, taskBatchPackageMetadata as taskBatchPackageMetadata3, verifyLearningTextAsset as verifyLearningTextAsset2 } from "@openpond/evals/learning";
800
386
  function prepareImportedTasksetPackage(input) {
801
387
  const value = validateTasksetPackage(input.package);
802
388
  const release = value.taskset;
@@ -827,7 +413,7 @@ function prepareImportedTasksetPackage(input) {
827
413
  const file = value.files.find((file2) => file2.asset.id === grader.verifierRef.id);
828
414
  if (!file) throw new Error(`Imported verifier source is missing: ${grader.id}.`);
829
415
  const name = learningVerifierModule(grader.verifierRef.contentHash);
830
- if (!files.some((file2) => file2.path === name)) files.push({ path: name, role: "verifier", content: asset ? verifyLearningTextAsset3(asset, grader.verifierRef) : new TextDecoder("utf-8", { fatal: true }).decode(decodeTasksetPackageFile(file)) });
416
+ if (!files.some((file2) => file2.path === name)) files.push({ path: name, role: "verifier", content: asset ? verifyLearningTextAsset2(asset, grader.verifierRef) : new TextDecoder("utf-8", { fatal: true }).decode(decodeTasksetPackageFile(file)) });
831
417
  }
832
418
  const authoring = release.metadata.ordinaryAuthoring ?? release.metadata.starterAuthoring;
833
419
  const fixtures = GraderFixtureSchema.array().max(1e5).parse(authoring?.graderFixtures ?? []);
@@ -919,8 +505,8 @@ function prepareImportedTasksetPackage(input) {
919
505
  ...learning ? { learning } : {},
920
506
  portableFileInventory: value.files.map((file) => ({ asset: file.asset, sourcePath: file.asset.path })),
921
507
  ...resources ? {
922
- taskDefinition: learningRef5(resources.taskDefinition),
923
- rewardBinding: learningRef5(resources.rewardBinding),
508
+ taskDefinition: learningRef4(resources.taskDefinition),
509
+ rewardBinding: learningRef4(resources.rewardBinding),
924
510
  rewardExecution: { binding: resources.rewardBinding, rewards: resources.rewards }
925
511
  } : {},
926
512
  portableCapabilities: release.capabilities,
@@ -935,12 +521,12 @@ function tasksetPackageSourceId(profileId, packageHash) {
935
521
  }
936
522
 
937
523
  // src/taskset-authored-files.ts
938
- import { z as z2 } from "zod";
524
+ import { z } from "zod";
939
525
 
940
526
  // src/taskset-authored-tool-environment.ts
941
- import { createEnvironmentRelease as createEnvironmentRelease2 } from "@openpond/evals";
527
+ import { createEnvironmentRelease } from "@openpond/evals";
942
528
  import { JavaScriptEnvironmentDefinitionSchema } from "@openpond/evals/javascript-environment";
943
- import { learningRef as learningRef6, sealLearningContent as sealLearningContent3 } from "@openpond/evals/learning";
529
+ import { learningRef as learningRef5, sealLearningContent as sealLearningContent3 } from "@openpond/evals/learning";
944
530
  function prepareAuthoredToolEnvironment(taskset, bytes, inventory, adapterId) {
945
531
  if (taskset.environment.entrypoint !== "openpond.javascript-environment.v1") return { taskset, inventory, generatedFiles: [] };
946
532
  const declarationPath = "environment/execution.json";
@@ -961,7 +547,7 @@ function prepareAuthoredToolEnvironment(taskset, bytes, inventory, adapterId) {
961
547
  module: repin(previous.javascript.module)
962
548
  }));
963
549
  if (contentHash(javascript.tools) !== contentHash(taskset.environment.metadata.portableTools) || contentHash(javascript.tools.map((tool) => tool.name)) !== contentHash(taskset.environment.toolNames)) throw new Error("Authored environment tools differ from the Taskset's declared tools.");
964
- const environment = createEnvironmentRelease2({
550
+ const environment = createEnvironmentRelease({
965
551
  schemaVersion: "openpond.environmentRelease.v1",
966
552
  id: `environment-${taskset.id}`,
967
553
  revision: taskset.revision,
@@ -971,7 +557,7 @@ function prepareAuthoredToolEnvironment(taskset, bytes, inventory, adapterId) {
971
557
  stateSchemaRef: repin(previous.environment.stateSchemaRef),
972
558
  artifactCollection: previous.environment.artifactCollection,
973
559
  adapterConformanceHashes: {},
974
- metadata: { javascriptEnvironment: learningRef6(javascript), resources: taskset.environment.resources ?? [] }
560
+ metadata: { javascriptEnvironment: learningRef5(javascript), resources: taskset.environment.resources ?? [] }
975
561
  });
976
562
  const prepared = TasksetSchema.parse({ ...taskset, environment: {
977
563
  ...taskset.environment,
@@ -989,9 +575,9 @@ function prepareAuthoredToolEnvironment(taskset, bytes, inventory, adapterId) {
989
575
  }
990
576
 
991
577
  // src/taskset-authored-files.ts
992
- var AuthoredTasksetFileInventorySchema = z2.array(z2.object({
578
+ var AuthoredTasksetFileInventorySchema = z.array(z.object({
993
579
  asset: ImmutableAssetRefSchema,
994
- sourcePath: z2.string().min(1)
580
+ sourcePath: z.string().min(1)
995
581
  }).strict()).max(1e4);
996
582
  var GENERATED_MANIFESTS = /* @__PURE__ */ new Set(["taskset.json", "capabilities.json", "data/tasks.jsonl", "graders/graders.json", "fixtures/grader-fixtures.json", "environment/taskset.ts"]);
997
583
  function isGeneratedTasksetPublicationFilePath(path) {
@@ -1064,7 +650,7 @@ function prepareAuthoredTasksetSource(tasksetInput, sourceFiles, adapterId) {
1064
650
  const { importedPackageHash, derivedPortableMetadata: _derived, ...metadata } = taskset.metadata;
1065
651
  const environmentMetadata = { ...taskset.environment.metadata };
1066
652
  if (environmentMetadata.portableExecutionResources !== void 0) {
1067
- const resources = z2.object({ environment: z2.unknown(), verifierSet: z2.unknown().optional() }).parse(environmentMetadata.portableExecutionResources);
653
+ const resources = z.object({ environment: z.unknown(), verifierSet: z.unknown().optional() }).parse(environmentMetadata.portableExecutionResources);
1068
654
  environmentMetadata.portableExecutionResources = { environment: resources.environment };
1069
655
  }
1070
656
  const prepared = TasksetSchema.parse({
@@ -1105,17 +691,17 @@ function compileModelTasksetDraftWorkspace(input) {
1105
691
  }
1106
692
 
1107
693
  // src/taskset-draft-source.ts
1108
- import { z as z3 } from "zod";
1109
- import { learningRef as learningRef7, sameLearningRef as sameLearningRef4 } from "@openpond/evals/learning";
1110
- var TasksetDraftSourceInitializationSchema = z3.object({
694
+ import { z as z2 } from "zod";
695
+ import { learningRef as learningRef6, sameLearningRef as sameLearningRef4 } from "@openpond/evals/learning";
696
+ var TasksetDraftSourceInitializationSchema = z2.object({
1111
697
  draft: TasksetDraftSchema,
1112
- filePaths: z3.array(z3.object({ assetId: z3.string().min(1), paths: z3.array(TasksetDraftFilePathSchema).min(1).max(1e4) }).strict()).max(1e4)
698
+ filePaths: z2.array(z2.object({ assetId: z2.string().min(1), paths: z2.array(TasksetDraftFilePathSchema).min(1).max(1e4) }).strict()).max(1e4)
1113
699
  }).strict();
1114
700
  function prepareTasksetDraftSource(input) {
1115
701
  const source = validateTasksetPackage(input.source);
1116
702
  const original = TasksetDraftSchema.parse(input.sourceDraft);
1117
703
  const preparation = ModelTasksetDraftPreparationSchema.parse(input.preparation);
1118
- if (source.contentHash !== preparation.sourcePackageHash || !sameLearningRef4(learningRef7(source.taskset), preparation.sourceTasksetRef)) throw new Error("Taskset draft preparation differs from its source package.");
704
+ if (source.contentHash !== preparation.sourcePackageHash || !sameLearningRef4(learningRef6(source.taskset), preparation.sourceTasksetRef)) throw new Error("Taskset draft preparation differs from its source package.");
1119
705
  if (source.modelResources || source.learningResources) throw new Error("This Taskset requires its bound or reviewed authoring workflow.");
1120
706
  const inventory = AuthoredTasksetFileInventorySchema.parse(original.metadata.portableFileInventory ?? []);
1121
707
  const sourcePath = (relative) => isManagedTasksetDraftFilePath(relative) ? `source-artifacts/${source.contentHash}/${contentHash(relative)}/${relative.split("/").at(-1)}` : relative;