openpond-sdk 0.12.5 → 0.12.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 (157) hide show
  1. package/TASKSETS.md +13 -0
  2. package/TRAINING_PROTOCOL.md +25 -0
  3. package/dist/advanced-refiner-evaluations.js +7 -7
  4. package/dist/candidate-evaluations.js +6 -6
  5. package/dist/{chunk-EJZ7HOIS.js → chunk-2XLKMZH5.js} +485 -251
  6. package/dist/chunk-2XLKMZH5.js.map +1 -0
  7. package/dist/{chunk-CAMLCKSF.js → chunk-3SIGXGAE.js} +132 -87
  8. package/dist/chunk-3SIGXGAE.js.map +1 -0
  9. package/dist/{chunk-T3MFWGMX.js → chunk-3VGTVZHL.js} +3 -3
  10. package/dist/{chunk-O54KGALH.js → chunk-5T76GARR.js} +2 -2
  11. package/dist/{chunk-WQFU635Q.js → chunk-ATVQQCYN.js} +8 -4
  12. package/dist/chunk-ATVQQCYN.js.map +1 -0
  13. package/dist/{chunk-MJELLVQP.js → chunk-B2MKB7NB.js} +2 -2
  14. package/dist/{chunk-H4NTJFEE.js → chunk-D3WOJTUY.js} +3 -2
  15. package/dist/{chunk-H4NTJFEE.js.map → chunk-D3WOJTUY.js.map} +1 -1
  16. package/dist/{chunk-F4GITADW.js → chunk-ETFWUMEJ.js} +2 -2
  17. package/dist/{chunk-6KKM2XRR.js → chunk-FPA3AVCP.js} +35 -6
  18. package/dist/chunk-FPA3AVCP.js.map +1 -0
  19. package/dist/{chunk-QFBSNSUL.js → chunk-HRJKDHHG.js} +6 -4
  20. package/dist/chunk-HRJKDHHG.js.map +1 -0
  21. package/dist/{chunk-6GQ3GIAP.js → chunk-HRZLFJXX.js} +3 -3
  22. package/dist/{chunk-BJ5MKLWH.js → chunk-KD6MM67B.js} +6 -6
  23. package/dist/{chunk-RE426Q7Y.js → chunk-LIMTJR3A.js} +3 -3
  24. package/dist/{chunk-ZFYI4P6C.js → chunk-ONGOAEY6.js} +14 -2
  25. package/dist/chunk-ONGOAEY6.js.map +1 -0
  26. package/dist/{chunk-FLNWE5ZA.js → chunk-QDYHSJT5.js} +22 -8
  27. package/dist/chunk-QDYHSJT5.js.map +1 -0
  28. package/dist/{chunk-GWGDWZVN.js → chunk-RDL6QIQO.js} +2 -2
  29. package/dist/{chunk-BGNPKYBJ.js → chunk-S2IASCGW.js} +3 -3
  30. package/dist/{chunk-KKL6OICH.js → chunk-SER76PQ7.js} +2 -2
  31. package/dist/{chunk-6MFFKAU6.js → chunk-SMHZT6RM.js} +2 -2
  32. package/dist/{chunk-BYNVSWIQ.js → chunk-SQBYHWZU.js} +2 -2
  33. package/dist/{chunk-6Y67YHVH.js → chunk-VBVFE33M.js} +5 -5
  34. package/dist/{chunk-DBKCSQVH.js → chunk-VQGTYGZH.js} +2 -2
  35. package/dist/{chunk-25L5IXHA.js → chunk-VTAGUWXH.js} +2 -2
  36. package/dist/{chunk-HOOHJCE7.js → chunk-XF3JR72U.js} +3 -3
  37. package/dist/{chunk-VZPNRPXL.js → chunk-Y3I7SN5W.js} +61 -35
  38. package/dist/chunk-Y3I7SN5W.js.map +1 -0
  39. package/dist/{chunk-XACJ63U4.js → chunk-Z4XGSEKC.js} +577 -249
  40. package/dist/chunk-Z4XGSEKC.js.map +1 -0
  41. package/dist/{chunk-AUNNXJQE.js → chunk-ZGZLN4LH.js} +2 -2
  42. package/dist/connected-evidence.js +14 -14
  43. package/dist/dataset-workspaces.js +14 -14
  44. package/dist/experiment-evaluation-schedules.js +18 -18
  45. package/dist/experiment-improvements.js +7 -7
  46. package/dist/experiments.js +17 -17
  47. package/dist/index.js +34 -33
  48. package/dist/index.js.map +1 -1
  49. package/dist/learning.js +113 -9
  50. package/dist/learning.js.map +1 -1
  51. package/dist/model-projects.js +1 -1
  52. package/dist/model-starter-attempts.js +2 -2
  53. package/dist/model-starter-catalog.js +9 -9
  54. package/dist/model-starters.js +13 -9
  55. package/dist/model-taskset-runs.js +3 -3
  56. package/dist/post-training.js +6 -6
  57. package/dist/taskset-drafts.js +12 -12
  58. package/dist/taskset-packages.js +15 -15
  59. package/dist/training-bundle.js +81 -19
  60. package/dist/training-bundle.js.map +1 -1
  61. package/dist/training.js +39 -7
  62. package/dist/types/packages/cloud/src/sandbox/sandbox-instance-client.d.ts.map +1 -1
  63. package/dist/types/packages/cloud/src/sandbox/url.d.ts +3 -1
  64. package/dist/types/packages/cloud/src/sandbox/url.d.ts.map +1 -1
  65. package/dist/types/packages/sdk/src/connected-evidence-client.d.ts +4 -0
  66. package/dist/types/packages/sdk/src/connected-evidence-client.d.ts.map +1 -1
  67. package/dist/types/packages/sdk/src/dataset-preparation-workspace.d.ts +2 -0
  68. package/dist/types/packages/sdk/src/dataset-preparation-workspace.d.ts.map +1 -1
  69. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts +14 -0
  70. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts.map +1 -1
  71. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts +4 -0
  72. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts.map +1 -1
  73. package/dist/types/packages/sdk/src/dataset-workspace-operations.d.ts +4 -0
  74. package/dist/types/packages/sdk/src/dataset-workspace-operations.d.ts.map +1 -1
  75. package/dist/types/packages/sdk/src/learning-client.d.ts +1 -0
  76. package/dist/types/packages/sdk/src/learning-client.d.ts.map +1 -1
  77. package/dist/types/packages/sdk/src/learning-correction-metrics.d.ts +358 -0
  78. package/dist/types/packages/sdk/src/learning-correction-metrics.d.ts.map +1 -0
  79. package/dist/types/packages/sdk/src/learning.d.ts +1 -0
  80. package/dist/types/packages/sdk/src/learning.d.ts.map +1 -1
  81. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts +24 -0
  82. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts.map +1 -1
  83. package/dist/types/packages/sdk/src/model-learning-policy.d.ts +16 -0
  84. package/dist/types/packages/sdk/src/model-learning-policy.d.ts.map +1 -1
  85. package/dist/types/packages/sdk/src/model-projects.d.ts +172 -0
  86. package/dist/types/packages/sdk/src/model-projects.d.ts.map +1 -1
  87. package/dist/types/packages/sdk/src/model-starters.d.ts +84 -1
  88. package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -1
  89. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +28 -28
  90. package/dist/types/packages/sdk/src/model-training-defaults.d.ts +14 -0
  91. package/dist/types/packages/sdk/src/model-training-defaults.d.ts.map +1 -1
  92. package/dist/types/packages/sdk/src/post-training.d.ts +46 -0
  93. package/dist/types/packages/sdk/src/post-training.d.ts.map +1 -1
  94. package/dist/types/packages/sdk/src/taskset-authored-files.d.ts.map +1 -1
  95. package/dist/types/packages/sdk/src/taskset-authored-portable-release.d.ts.map +1 -1
  96. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts +4 -0
  97. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts.map +1 -1
  98. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +141 -120
  99. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts.map +1 -1
  100. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts +4 -0
  101. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts.map +1 -1
  102. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts +4 -0
  103. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts.map +1 -1
  104. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts +4 -0
  105. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts.map +1 -1
  106. package/dist/types/packages/sdk/src/taskset-package-client.d.ts +51 -0
  107. package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
  108. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts.map +1 -1
  109. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts.map +1 -1
  110. package/dist/types/packages/sdk/src/training-bundle.d.ts.map +1 -1
  111. package/dist/types/packages/sdk/src/training-compute-selection.d.ts +52 -0
  112. package/dist/types/packages/sdk/src/training-compute-selection.d.ts.map +1 -0
  113. package/dist/types/packages/sdk/src/training-estimates.d.ts +1069 -0
  114. package/dist/types/packages/sdk/src/training-estimates.d.ts.map +1 -0
  115. package/dist/types/packages/sdk/src/training-learning-batch.d.ts +40 -40
  116. package/dist/types/packages/sdk/src/training-physical-placement.d.ts +16 -0
  117. package/dist/types/packages/sdk/src/training-physical-placement.d.ts.map +1 -0
  118. package/dist/types/packages/sdk/src/training-preparations.d.ts +248 -0
  119. package/dist/types/packages/sdk/src/training-preparations.d.ts.map +1 -1
  120. package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts +20 -0
  121. package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts.map +1 -1
  122. package/dist/types/packages/sdk/src/training-queue.d.ts +24 -0
  123. package/dist/types/packages/sdk/src/training-queue.d.ts.map +1 -0
  124. package/dist/types/packages/sdk/src/training-recipe-binding.d.ts.map +1 -1
  125. package/dist/types/packages/sdk/src/training-recovery.d.ts +85 -0
  126. package/dist/types/packages/sdk/src/training-recovery.d.ts.map +1 -0
  127. package/dist/types/packages/sdk/src/training-verifier-assets.d.ts +7 -0
  128. package/dist/types/packages/sdk/src/training-verifier-assets.d.ts.map +1 -0
  129. package/dist/types/packages/sdk/src/training.d.ts +599 -0
  130. package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
  131. package/package.json +3 -3
  132. package/dist/chunk-6KKM2XRR.js.map +0 -1
  133. package/dist/chunk-CAMLCKSF.js.map +0 -1
  134. package/dist/chunk-EJZ7HOIS.js.map +0 -1
  135. package/dist/chunk-FLNWE5ZA.js.map +0 -1
  136. package/dist/chunk-QFBSNSUL.js.map +0 -1
  137. package/dist/chunk-VZPNRPXL.js.map +0 -1
  138. package/dist/chunk-WQFU635Q.js.map +0 -1
  139. package/dist/chunk-XACJ63U4.js.map +0 -1
  140. package/dist/chunk-ZFYI4P6C.js.map +0 -1
  141. /package/dist/{chunk-T3MFWGMX.js.map → chunk-3VGTVZHL.js.map} +0 -0
  142. /package/dist/{chunk-O54KGALH.js.map → chunk-5T76GARR.js.map} +0 -0
  143. /package/dist/{chunk-MJELLVQP.js.map → chunk-B2MKB7NB.js.map} +0 -0
  144. /package/dist/{chunk-F4GITADW.js.map → chunk-ETFWUMEJ.js.map} +0 -0
  145. /package/dist/{chunk-6GQ3GIAP.js.map → chunk-HRZLFJXX.js.map} +0 -0
  146. /package/dist/{chunk-BJ5MKLWH.js.map → chunk-KD6MM67B.js.map} +0 -0
  147. /package/dist/{chunk-RE426Q7Y.js.map → chunk-LIMTJR3A.js.map} +0 -0
  148. /package/dist/{chunk-GWGDWZVN.js.map → chunk-RDL6QIQO.js.map} +0 -0
  149. /package/dist/{chunk-BGNPKYBJ.js.map → chunk-S2IASCGW.js.map} +0 -0
  150. /package/dist/{chunk-KKL6OICH.js.map → chunk-SER76PQ7.js.map} +0 -0
  151. /package/dist/{chunk-6MFFKAU6.js.map → chunk-SMHZT6RM.js.map} +0 -0
  152. /package/dist/{chunk-BYNVSWIQ.js.map → chunk-SQBYHWZU.js.map} +0 -0
  153. /package/dist/{chunk-6Y67YHVH.js.map → chunk-VBVFE33M.js.map} +0 -0
  154. /package/dist/{chunk-DBKCSQVH.js.map → chunk-VQGTYGZH.js.map} +0 -0
  155. /package/dist/{chunk-25L5IXHA.js.map → chunk-VTAGUWXH.js.map} +0 -0
  156. /package/dist/{chunk-HOOHJCE7.js.map → chunk-XF3JR72U.js.map} +0 -0
  157. /package/dist/{chunk-AUNNXJQE.js.map → chunk-ZGZLN4LH.js.map} +0 -0
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  ModelProjectVersionedRefSchema,
9
9
  canonicalJson as canonicalJson2
10
- } from "./chunk-CAMLCKSF.js";
10
+ } from "./chunk-3SIGXGAE.js";
11
11
  import {
12
12
  ImmutableAssetRefSchema,
13
13
  ImmutableReleaseRefSchema,
@@ -442,9 +442,9 @@ var require_codegen = __commonJS({
442
442
  }
443
443
  };
444
444
  var Label = class extends Node {
445
- constructor(label) {
445
+ constructor(label2) {
446
446
  super();
447
- this.label = label;
447
+ this.label = label2;
448
448
  this.names = {};
449
449
  }
450
450
  render({ _n }) {
@@ -452,14 +452,14 @@ var require_codegen = __commonJS({
452
452
  }
453
453
  };
454
454
  var Break = class extends Node {
455
- constructor(label) {
455
+ constructor(label2) {
456
456
  super();
457
- this.label = label;
457
+ this.label = label2;
458
458
  this.names = {};
459
459
  }
460
460
  render({ _n }) {
461
- const label = this.label ? ` ${this.label}` : "";
462
- return `break${label};` + _n;
461
+ const label2 = this.label ? ` ${this.label}` : "";
462
+ return `break${label2};` + _n;
463
463
  }
464
464
  };
465
465
  var Throw = class extends Node {
@@ -871,12 +871,12 @@ var require_codegen = __commonJS({
871
871
  return this._endBlockNode(For);
872
872
  }
873
873
  // `label` statement
874
- label(label) {
875
- return this._leafNode(new Label(label));
874
+ label(label2) {
875
+ return this._leafNode(new Label(label2));
876
876
  }
877
877
  // `break` statement
878
- break(label) {
879
- return this._leafNode(new Break(label));
878
+ break(label2) {
879
+ return this._leafNode(new Break(label2));
880
880
  }
881
881
  // `return` statement
882
882
  return(value) {
@@ -2974,7 +2974,7 @@ var require_compile = __commonJS({
2974
2974
  const schOrFunc = root.refs[ref];
2975
2975
  if (schOrFunc)
2976
2976
  return schOrFunc;
2977
- let _sch = resolve.call(this, root, ref);
2977
+ let _sch = resolve2.call(this, root, ref);
2978
2978
  if (_sch === void 0) {
2979
2979
  const schema = (_a = root.localRefs) === null || _a === void 0 ? void 0 : _a[ref];
2980
2980
  const { schemaId } = this.opts;
@@ -3001,7 +3001,7 @@ var require_compile = __commonJS({
3001
3001
  function sameSchemaEnv(s1, s2) {
3002
3002
  return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;
3003
3003
  }
3004
- function resolve(root, ref) {
3004
+ function resolve2(root, ref) {
3005
3005
  let sch;
3006
3006
  while (typeof (sch = this.refs[ref]) == "string")
3007
3007
  ref = sch;
@@ -3632,7 +3632,7 @@ var require_fast_uri = __commonJS({
3632
3632
  }
3633
3633
  return uri;
3634
3634
  }
3635
- function resolve(baseURI, relativeURI, options) {
3635
+ function resolve2(baseURI, relativeURI, options) {
3636
3636
  const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
3637
3637
  const resolved = resolveComponent(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true);
3638
3638
  schemelessOptions.skipEscape = true;
@@ -3890,7 +3890,7 @@ var require_fast_uri = __commonJS({
3890
3890
  var fastUri = {
3891
3891
  SCHEMES,
3892
3892
  normalize,
3893
- resolve,
3893
+ resolve: resolve2,
3894
3894
  resolveComponent,
3895
3895
  equal: equal2,
3896
3896
  serialize,
@@ -7408,13 +7408,218 @@ var ExternalDatasetSourceRefSchema = z3.discriminatedUnion("kind", [
7408
7408
  ]);
7409
7409
 
7410
7410
  // src/taskset-draft-harness-actions.ts
7411
- import { z as z4 } from "zod";
7411
+ import { z as z5 } from "zod";
7412
7412
 
7413
7413
  // ../harness/dist/structured-output.js
7414
7414
  var import__ = __toESM(require__(), 1);
7415
+
7416
+ // ../harness/dist/structured-output-diagnostics.js
7417
+ var object = (value) => !!value && typeof value === "object" && !Array.isArray(value);
7418
+ var escape2 = (value) => value.replaceAll("~", "~0").replaceAll("/", "~1");
7419
+ var unescape2 = (value) => value.replaceAll("~1", "/").replaceAll("~0", "~");
7420
+ var label = (path) => path || "/";
7421
+ function literal(value) {
7422
+ const text = JSON.stringify(value);
7423
+ return text && text.length <= 160 ? text : "the value declared in the public schema";
7424
+ }
7425
+ function at(root, parts) {
7426
+ let value = root;
7427
+ for (const encoded of parts) {
7428
+ const key = unescape2(encoded);
7429
+ if (!object(value) && !Array.isArray(value) || !Object.hasOwn(value, key))
7430
+ return void 0;
7431
+ value = value[key];
7432
+ }
7433
+ return value;
7434
+ }
7435
+ function resolve(schema, root, depth = 0) {
7436
+ if (!object(schema) || depth > 20)
7437
+ return null;
7438
+ if (typeof schema.$ref === "string" && schema.$ref.startsWith("#/")) {
7439
+ return resolve(at(root, schema.$ref.slice(2).split("/")), root, depth + 1);
7440
+ }
7441
+ return schema;
7442
+ }
7443
+ function describe(schema, path, data, root, depth = 0) {
7444
+ const rule = resolve(schema, root);
7445
+ if (!rule || depth > 6)
7446
+ return null;
7447
+ const where = label(path);
7448
+ if (Object.hasOwn(rule, "const"))
7449
+ return `${where} must equal ${literal(rule.const)}`;
7450
+ if (Array.isArray(rule.enum) && rule.enum.length <= 12)
7451
+ return `${where} must be one of ${literal(rule.enum)}`;
7452
+ if (Array.isArray(data)) {
7453
+ if (rule.maxItems === 0)
7454
+ return `${where} must be an empty array`;
7455
+ const negated = object(rule.not) ? rule.not : null;
7456
+ const every = negated && object(negated.items) ? negated.items : null;
7457
+ const predicate = every && object(every.not) ? resolve(every.not, root) : null;
7458
+ const required = predicate?.required;
7459
+ if (predicate && object(predicate.properties) && Array.isArray(required)) {
7460
+ const fields = Object.entries(predicate.properties);
7461
+ if (fields.length && fields.every(([key, value]) => object(value) && Object.hasOwn(value, "const") && required.includes(key))) {
7462
+ const match = Object.fromEntries(fields.map(([key, value]) => [key, value.const]));
7463
+ return `${where} must contain at least one item matching ${literal(match)}`;
7464
+ }
7465
+ }
7466
+ if (typeof rule.maxItems === "number")
7467
+ return `${where} must contain at most ${rule.maxItems} items`;
7468
+ if (typeof rule.minItems === "number")
7469
+ return `${where} must contain at least ${rule.minItems} items`;
7470
+ }
7471
+ if (object(rule.properties) && object(data)) {
7472
+ const parts = Object.entries(rule.properties).flatMap(([key, child]) => {
7473
+ if (!Object.hasOwn(data, key))
7474
+ return [];
7475
+ const message = describe(child, path + "/" + escape2(key), data[key], root, depth + 1);
7476
+ return message ? [message] : [];
7477
+ });
7478
+ if (parts.length)
7479
+ return parts.slice(0, 4).join("; ");
7480
+ }
7481
+ if (Array.isArray(rule.required) && object(data)) {
7482
+ const missing = rule.required.filter((key) => typeof key === "string" && !Object.hasOwn(data, key));
7483
+ if (missing.length)
7484
+ return `${where} must include ${missing.slice(0, 4).map(literal).join(", ")}`;
7485
+ }
7486
+ return null;
7487
+ }
7488
+ function structuredOutputDiagnostic(schema, data, error) {
7489
+ const path = error.instancePath + (error.keyword === "required" ? "/" + escape2(String(error.params.missingProperty)) : "");
7490
+ const parts = error.schemaPath.startsWith("#/") ? error.schemaPath.slice(2).split("/") : [];
7491
+ let message = error.message ?? "Schema assertion failed";
7492
+ const owner = at(schema, parts.slice(0, -1));
7493
+ const requirement = describe(owner, error.instancePath, at(data, error.instancePath ? error.instancePath.slice(1).split("/") : []), schema);
7494
+ for (let index = parts.length - 1; index >= 0; index--) {
7495
+ if (parts[index] !== "then" && parts[index] !== "else")
7496
+ continue;
7497
+ const conditional = at(schema, parts.slice(0, index));
7498
+ if (!object(conditional) || !object(conditional.if))
7499
+ continue;
7500
+ const instance = error.instancePath ? error.instancePath.slice(1).split("/") : [];
7501
+ const suffix = parts.slice(index + 1);
7502
+ const descents = suffix.filter((part, offset) => offset > 0 && suffix[offset - 1] === "properties" || part === "items" && suffix[offset - 1] !== "properties").length;
7503
+ const parent = descents <= instance.length ? instance.slice(0, instance.length - descents) : [];
7504
+ const parentPath = parent.length ? "/" + parent.join("/") : "";
7505
+ const condition = describe(conditional.if, parentPath, at(data, parent), schema);
7506
+ if (condition && requirement) {
7507
+ const observed = condition.replaceAll(" must be ", " is ").replaceAll(" must equal ", " equals ").replaceAll(" must contain ", " contains ").replaceAll(" must include ", " includes ");
7508
+ message = `${parts[index] === "then" ? "When" : "When the following condition does not hold:"} ${observed}, ${requirement}.`;
7509
+ }
7510
+ break;
7511
+ }
7512
+ if (message === error.message && requirement && ["not", "enum", "const", "minItems", "maxItems"].includes(error.keyword)) {
7513
+ message = requirement + ".";
7514
+ }
7515
+ return { path, message, keyword: error.keyword, schemaPath: error.schemaPath };
7516
+ }
7517
+
7518
+ // ../harness/dist/structured-output-sampling.js
7519
+ import { z as z4 } from "zod";
7520
+ var StructuredSamplingSchemaDeclarationSchema = z4.object({
7521
+ schemaVersion: z4.literal("openpond.structuredSamplingSchema.v1"),
7522
+ validationSchemaHash: z4.string().regex(/^[a-f0-9]{64}$/),
7523
+ schemaRef: ImmutableAssetRefSchema.refine((ref) => ref.visibility === "policy" && ref.sizeBytes <= 128e3 && ["application/json", "application/schema+json"].includes(ref.mediaType), "Sampling schemas must be bounded policy-visible JSON assets."),
7524
+ postValidationOnly: z4.array(z4.object({
7525
+ schemaPath: z4.string().min(1).max(2e3),
7526
+ keyword: z4.literal("maxItems"),
7527
+ enforcement: z4.literal("full_validation_only")
7528
+ }).strict()).min(1).max(100)
7529
+ }).strict();
7530
+ var StructuredSamplingSchemaContractSchema = z4.object({
7531
+ declaration: StructuredSamplingSchemaDeclarationSchema,
7532
+ schema: z4.record(z4.string(), z4.unknown()),
7533
+ schemaHash: z4.string().regex(/^[a-f0-9]{64}$/),
7534
+ schemaSource: z4.string().max(128e3)
7535
+ }).strict();
7536
+ function structuredSamplingSchemaDeclaration(metadata) {
7537
+ const value = metadata?.structuredSamplingSchema;
7538
+ return value === void 0 ? void 0 : StructuredSamplingSchemaDeclarationSchema.parse(value);
7539
+ }
7540
+ var object2 = (value) => !!value && typeof value === "object" && !Array.isArray(value);
7541
+ var escape3 = (key) => key.replaceAll("~", "~0").replaceAll("/", "~1");
7542
+ function projectStructuredSamplingSchema(full, declarationInput) {
7543
+ const declaration = StructuredSamplingSchemaDeclarationSchema.parse(declarationInput);
7544
+ if (declaration.validationSchemaHash !== full.schemaHash)
7545
+ throw new Error("structured_sampling_validation_identity_changed");
7546
+ if (sha256Hex(full.schemaSource) !== full.schemaHash || canonicalJson(JSON.parse(full.schemaSource)) !== canonicalJson(full.schema))
7547
+ throw new Error("structured_sampling_validation_source_changed");
7548
+ const result = JSON.parse(full.schemaSource);
7549
+ const targets = /* @__PURE__ */ new Map();
7550
+ function visit(schema, path, positive = true) {
7551
+ if (!object2(schema))
7552
+ return;
7553
+ if (schema.$ref !== void 0)
7554
+ throw new Error("structured_sampling_reference_unsupported");
7555
+ const types = Array.isArray(schema.type) ? schema.type : [schema.type];
7556
+ if (positive && types.includes("array") && Number.isSafeInteger(schema.maxItems) && Number(schema.maxItems) >= 0) {
7557
+ targets.set(`${path}/maxItems`, schema);
7558
+ }
7559
+ for (const key of ["properties", "$defs"])
7560
+ if (object2(schema[key])) {
7561
+ for (const [name, child] of Object.entries(schema[key]))
7562
+ visit(child, `${path}/${key}/${escape3(name)}`, positive && key !== "$defs");
7563
+ }
7564
+ for (const key of ["items", "additionalProperties", "then", "else", "not", "if"]) {
7565
+ if (schema[key] !== void 0)
7566
+ visit(schema[key], `${path}/${key}`, positive && key !== "not" && key !== "if");
7567
+ }
7568
+ for (const key of ["allOf", "anyOf", "oneOf"])
7569
+ if (Array.isArray(schema[key])) {
7570
+ schema[key].forEach((child, index) => visit(child, `${path}/${key}/${index}`, positive && key !== "oneOf"));
7571
+ }
7572
+ }
7573
+ visit(result, "");
7574
+ const seen = /* @__PURE__ */ new Set();
7575
+ for (const assertion of declaration.postValidationOnly) {
7576
+ const target = targets.get(assertion.schemaPath);
7577
+ if (!target || seen.has(assertion.schemaPath))
7578
+ throw new Error("structured_sampling_assertion_path_invalid");
7579
+ seen.add(assertion.schemaPath);
7580
+ delete target.maxItems;
7581
+ }
7582
+ return result;
7583
+ }
7584
+ function assertStructuredSamplingSchema(full, input) {
7585
+ const sampling = StructuredSamplingSchemaContractSchema.parse(input);
7586
+ const derived = projectStructuredSamplingSchema(full, sampling.declaration);
7587
+ const expectedSource = JSON.stringify(derived);
7588
+ if (sampling.schemaSource !== expectedSource || canonicalJson(sampling.schema) !== canonicalJson(derived) || sha256Hex(expectedSource) !== sampling.schemaHash || sampling.schemaHash !== sampling.declaration.schemaRef.contentHash || new TextEncoder().encode(expectedSource).byteLength !== sampling.declaration.schemaRef.sizeBytes) {
7589
+ throw new Error("structured_sampling_schema_identity_changed");
7590
+ }
7591
+ }
7592
+ function resolveStructuredSamplingSchema(full, declarationInput, bytes) {
7593
+ const declaration = StructuredSamplingSchemaDeclarationSchema.parse(declarationInput);
7594
+ if (bytes.byteLength > 128e3 || bytes.byteLength !== declaration.schemaRef.sizeBytes || sha256Hex(bytes) !== declaration.schemaRef.contentHash)
7595
+ throw new Error("structured_sampling_asset_mismatch");
7596
+ const schemaSource = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
7597
+ const sampling = {
7598
+ declaration,
7599
+ schema: JSON.parse(schemaSource),
7600
+ schemaHash: declaration.schemaRef.contentHash,
7601
+ schemaSource
7602
+ };
7603
+ assertStructuredSamplingSchema(full, sampling);
7604
+ return sampling;
7605
+ }
7606
+ function structuredSamplingSchemaAssertions(full, sampling) {
7607
+ assertStructuredSamplingSchema(full, sampling);
7608
+ const schema = JSON.parse(full.schemaSource);
7609
+ return sampling.declaration.postValidationOnly.map((assertion) => {
7610
+ let value = schema;
7611
+ for (const part of assertion.schemaPath.slice(1).split("/")) {
7612
+ const key = part.replaceAll("~1", "/").replaceAll("~0", "~");
7613
+ value = object2(value) || Array.isArray(value) ? Reflect.get(value, key) : void 0;
7614
+ }
7615
+ return { ...assertion, value };
7616
+ });
7617
+ }
7618
+
7619
+ // ../harness/dist/structured-output.js
7415
7620
  var STRUCTURED_OUTPUT_CAPABILITY = "work.structured-output.v1";
7416
7621
  var keywords = /* @__PURE__ */ new Set(["$schema", "$id", "$defs", "$ref", "title", "description", "type", "properties", "required", "additionalProperties", "items", "minItems", "maxItems", "minLength", "maxLength", "minimum", "maximum", "enum", "const", "allOf", "anyOf", "oneOf", "not", "if", "then", "else", "uniqueItems", "pattern", "multipleOf", "exclusiveMinimum", "exclusiveMaximum", "minProperties", "maxProperties"]);
7417
- var object = (value) => !!value && typeof value === "object" && !Array.isArray(value);
7622
+ var object3 = (value) => !!value && typeof value === "object" && !Array.isArray(value);
7418
7623
  var validators = /* @__PURE__ */ new Map();
7419
7624
  function compiled(schema) {
7420
7625
  const key = sha256Hex(JSON.stringify(schema));
@@ -7428,14 +7633,14 @@ function compiled(schema) {
7428
7633
  return validator;
7429
7634
  }
7430
7635
  function assertStructuredOutputSchema(schema) {
7431
- if (!object(schema) || schema.type !== "object" || JSON.stringify(schema).length > 128e3)
7636
+ if (!object3(schema) || schema.type !== "object" || JSON.stringify(schema).length > 128e3)
7432
7637
  throw new Error("structured_schema_tool_root_or_size_invalid");
7433
7638
  const root = schema;
7434
7639
  let nodes = 0;
7435
7640
  function visit(value, depth, ancestors) {
7436
7641
  if (typeof value === "boolean")
7437
7642
  return;
7438
- if (!object(value) || depth > 20 || ++nodes > 2e3 || ancestors.has(value))
7643
+ if (!object3(value) || depth > 20 || ++nodes > 2e3 || ancestors.has(value))
7439
7644
  throw new Error("structured_schema_complexity_or_shape");
7440
7645
  const next = new Set(ancestors).add(value);
7441
7646
  for (const key of Object.keys(value))
@@ -7448,7 +7653,7 @@ function assertStructuredOutputSchema(schema) {
7448
7653
  throw new Error("structured_schema_external_or_recursive_ref");
7449
7654
  let target = root;
7450
7655
  for (const part of value.$ref.slice(2).split("/"))
7451
- target = object(target) && Object.hasOwn(target, part.replaceAll("~1", "/").replaceAll("~0", "~")) ? target[part.replaceAll("~1", "/").replaceAll("~0", "~")] : void 0;
7656
+ target = object3(target) && Object.hasOwn(target, part.replaceAll("~1", "/").replaceAll("~0", "~")) ? target[part.replaceAll("~1", "/").replaceAll("~0", "~")] : void 0;
7452
7657
  visit(target, depth + 1, next);
7453
7658
  }
7454
7659
  if (value.pattern !== void 0) {
@@ -7460,7 +7665,7 @@ function assertStructuredOutputSchema(schema) {
7460
7665
  }
7461
7666
  for (const key of ["properties", "$defs"])
7462
7667
  if (value[key] !== void 0) {
7463
- if (!object(value[key]))
7668
+ if (!object3(value[key]))
7464
7669
  throw new Error("structured_schema_map_invalid");
7465
7670
  for (const child of Object.values(value[key]))
7466
7671
  visit(child, depth + 1, next);
@@ -7492,6 +7697,8 @@ function assertStructuredOutputContract(contract) {
7492
7697
  throw new Error("structured_schema_contract_changed");
7493
7698
  if (!/^[a-f0-9]{64}$/.test(contract.schemaHash))
7494
7699
  throw new Error("structured_schema_hash_invalid");
7700
+ if (contract.sampling !== void 0)
7701
+ assertStructuredSamplingSchema(contract, contract.sampling);
7495
7702
  }
7496
7703
  function structuredOutputTools(outputs) {
7497
7704
  const paths = /* @__PURE__ */ new Set();
@@ -7507,7 +7714,7 @@ function structuredOutputTools(outputs) {
7507
7714
  if (output.mediaType !== "application/json" || !output.structuredOutput)
7508
7715
  throw new Error("structured_output_contract_missing");
7509
7716
  assertStructuredOutputContract(output.structuredOutput);
7510
- return [{ type: "function", function: { name: `work_submit_output_${index + 1}`, description: `Validate and save ${output.path}. Supply the output fields directly; validation errors can be corrected and resubmitted.`, parameters: output.structuredOutput.schema } }];
7717
+ return [{ type: "function", function: { name: `work_submit_output_${index + 1}`, description: `Validate and save ${output.path}. Supply the output fields directly; validation errors can be corrected and resubmitted.${output.structuredOutput.sampling ? " Full validation also enforces the postValidationOnly limits listed in requiredOutputs; a generated call can fail those submission limits." : ""}`, parameters: output.structuredOutput.sampling ? JSON.parse(output.structuredOutput.sampling.schemaSource) : output.structuredOutput.schema } }];
7511
7718
  });
7512
7719
  }
7513
7720
  function structuredToolOutput(outputs, name) {
@@ -7518,7 +7725,7 @@ function validateStructuredOutput(schema, data) {
7518
7725
  function bound(value, depth) {
7519
7726
  if (depth > 30 || ++nodes > 1e4 || Array.isArray(value) && value.length > 1e3)
7520
7727
  throw new Error("structured_output_payload_complexity");
7521
- if (object(value) || Array.isArray(value))
7728
+ if (object3(value) || Array.isArray(value))
7522
7729
  for (const child of Object.values(value))
7523
7730
  bound(child, depth + 1);
7524
7731
  }
@@ -7526,7 +7733,7 @@ function validateStructuredOutput(schema, data) {
7526
7733
  const validator = compiled(schema);
7527
7734
  if (validator(data))
7528
7735
  return [];
7529
- return (validator.errors ?? []).slice(0, 20).map((error) => ({ path: error.instancePath + (error.keyword === "required" ? "/" + String(error.params.missingProperty).replaceAll("~", "~0").replaceAll("/", "~1") : ""), message: error.message ?? "Schema assertion failed" }));
7736
+ return (validator.errors ?? []).slice(0, 20).map((error) => structuredOutputDiagnostic(schema, data, error));
7530
7737
  }
7531
7738
  function validateOutputBytes(output, bytes) {
7532
7739
  if (bytes.byteLength > (output.maxBytes ?? 1e7))
@@ -7545,7 +7752,17 @@ function validateOutputBytes(output, bytes) {
7545
7752
  const errors = validateStructuredOutput(output.structuredOutput.schema, data);
7546
7753
  if (errors.length)
7547
7754
  throw new Error("structured_output_invalid:" + JSON.stringify(errors));
7548
- return { status: "passed", schemaHash: output.structuredOutput.schemaHash, artifactHash: sha256Hex(bytes), capability: STRUCTURED_OUTPUT_CAPABILITY };
7755
+ return {
7756
+ status: "passed",
7757
+ schemaHash: output.structuredOutput.schemaHash,
7758
+ ...output.structuredOutput.sampling ? {
7759
+ samplingSchemaHash: output.structuredOutput.sampling.schemaHash,
7760
+ samplingSchemaDeclaration: output.structuredOutput.sampling.declaration,
7761
+ postValidationOnly: structuredSamplingSchemaAssertions(output.structuredOutput, output.structuredOutput.sampling)
7762
+ } : {},
7763
+ artifactHash: sha256Hex(bytes),
7764
+ capability: STRUCTURED_OUTPUT_CAPABILITY
7765
+ };
7549
7766
  }
7550
7767
  function serializeStructuredOutput(output, data) {
7551
7768
  const bytes = new TextEncoder().encode(JSON.stringify(data, null, 2) + "\n");
@@ -7554,38 +7771,38 @@ function serializeStructuredOutput(output, data) {
7554
7771
  }
7555
7772
 
7556
7773
  // src/taskset-draft-harness-actions.ts
7557
- var HarnessActionBindingSchema = z4.object({
7558
- schemaVersion: z4.literal("openpond.harnessActionBinding.v1"),
7774
+ var HarnessActionBindingSchema = z5.object({
7775
+ schemaVersion: z5.literal("openpond.harnessActionBinding.v1"),
7559
7776
  actionId: ReleaseIdSchema,
7560
- modelToolName: z4.string().trim().min(1).max(64).regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/),
7561
- description: z4.string().trim().min(1).max(1e3),
7562
- inputSchema: z4.record(z4.string(), z4.unknown()),
7777
+ modelToolName: z5.string().trim().min(1).max(64).regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/),
7778
+ description: z5.string().trim().min(1).max(1e3),
7779
+ inputSchema: z5.record(z5.string(), z5.unknown()),
7563
7780
  actionSchemaHash: ReleaseHashSchema,
7564
7781
  agentRelease: ImmutableReleaseRefSchema,
7565
7782
  implementationHash: ReleaseHashSchema,
7566
7783
  runtimeBindingId: ReleaseIdSchema,
7567
7784
  capabilityReceiptHash: ReleaseHashSchema,
7568
- sideEffect: z4.enum(["read", "write"]),
7569
- studentVisible: z4.boolean(),
7570
- timeoutMs: z4.number().int().positive().max(36e5),
7571
- episodeArgumentBindings: z4.array(
7572
- z4.object({
7785
+ sideEffect: z5.enum(["read", "write"]),
7786
+ studentVisible: z5.boolean(),
7787
+ timeoutMs: z5.number().int().positive().max(36e5),
7788
+ episodeArgumentBindings: z5.array(
7789
+ z5.object({
7573
7790
  argument: ReleaseIdSchema,
7574
- source: z4.literal("case_id")
7791
+ source: z5.literal("case_id")
7575
7792
  }).strict()
7576
7793
  ).max(20).default([])
7577
7794
  }).strict();
7578
7795
 
7579
7796
  // src/taskset-draft-core.ts
7580
- import { z as z5 } from "zod";
7797
+ import { z as z6 } from "zod";
7581
7798
  import { CustomVerifierRuntimeSchema } from "@openpond/evals/tasksets";
7582
7799
  import { HumanFormSchema } from "@openpond/evals/human-review";
7583
- var IdSchema3 = z5.string().trim().min(1).max(240);
7584
- var TimestampSchema3 = z5.string().trim().min(1);
7585
- var HashSchema3 = z5.string().trim().min(8).max(256);
7586
- var Sha256Schema = z5.string().trim().regex(/^[a-f0-9]{64}$/);
7587
- var CodeIdentifierSchema = z5.string().trim().regex(/^[A-Za-z_$][A-Za-z0-9_$]*$/);
7588
- var MetadataSchema2 = z5.record(z5.string(), z5.unknown()).default({});
7800
+ var IdSchema3 = z6.string().trim().min(1).max(240);
7801
+ var TimestampSchema3 = z6.string().trim().min(1);
7802
+ var HashSchema3 = z6.string().trim().min(8).max(256);
7803
+ var Sha256Schema = z6.string().trim().regex(/^[a-f0-9]{64}$/);
7804
+ var CodeIdentifierSchema = z6.string().trim().regex(/^[A-Za-z_$][A-Za-z0-9_$]*$/);
7805
+ var MetadataSchema2 = z6.record(z6.string(), z6.unknown()).default({});
7589
7806
  var NullableIdSchema = IdSchema3.nullable();
7590
7807
  function safeRelativeFilePath(value) {
7591
7808
  const normalized = value.trim().replaceAll("\\", "/");
@@ -7601,175 +7818,175 @@ function safeFileName(value) {
7601
7818
  return normalized.length > 0 && normalized !== "." && normalized !== ".." && !normalized.includes("/") && !normalized.includes("\\") && !normalized.includes("\0");
7602
7819
  }
7603
7820
  var TasksetSplitSchema = DatasetSplitSchema;
7604
- var TasksetPurposeSchema = z5.enum(["general", "benchmark"]);
7605
- var TasksetBenchmarkBindingSchema = z5.object({
7606
- schemaVersion: z5.literal("openpond.tasksetBenchmark.v1"),
7821
+ var TasksetPurposeSchema = z6.enum(["general", "benchmark"]);
7822
+ var TasksetBenchmarkBindingSchema = z6.object({
7823
+ schemaVersion: z6.literal("openpond.tasksetBenchmark.v1"),
7607
7824
  definitionId: IdSchema3,
7608
7825
  releaseId: IdSchema3,
7609
7826
  releaseHash: Sha256Schema,
7610
- managedReleasePath: z5.string().trim().min(1).max(1e3).refine(safeRelativeFilePath, "Benchmark release paths must remain relative."),
7827
+ managedReleasePath: z6.string().trim().min(1).max(1e3).refine(safeRelativeFilePath, "Benchmark release paths must remain relative."),
7611
7828
  adaptationSplit: TasksetSplitSchema,
7612
7829
  evaluationSplit: TasksetSplitSchema,
7613
- primaryMetric: z5.enum([
7830
+ primaryMetric: z6.enum([
7614
7831
  "foreground_tokens",
7615
7832
  "success_rate",
7616
7833
  "latency_ms",
7617
7834
  "cost_usd"
7618
7835
  ]),
7619
- qualityGate: z5.enum(["none", "non_regression", "all_pass"]),
7620
- source: z5.enum(["builtin", "imported"]),
7836
+ qualityGate: z6.enum(["none", "non_regression", "all_pass"]),
7837
+ source: z6.enum(["builtin", "imported"]),
7621
7838
  metadata: MetadataSchema2
7622
7839
  });
7623
- var TasksetPreferenceComparisonBindingSchema = z5.object({
7624
- schemaVersion: z5.literal("openpond.tasksetPreferenceComparisonBinding.v1"),
7840
+ var TasksetPreferenceComparisonBindingSchema = z6.object({
7841
+ schemaVersion: z6.literal("openpond.tasksetPreferenceComparisonBinding.v1"),
7625
7842
  releaseId: IdSchema3,
7626
7843
  releaseHash: Sha256Schema,
7627
7844
  publishedAt: TimestampSchema3,
7628
7845
  metadata: MetadataSchema2
7629
7846
  });
7630
- var TrainingSourceConsentSchema = z5.object({
7631
- status: z5.enum(["pending", "granted", "denied", "revoked"]),
7632
- scope: z5.enum(["metadata_only", "selected_turns", "full_session"]),
7847
+ var TrainingSourceConsentSchema = z6.object({
7848
+ status: z6.enum(["pending", "granted", "denied", "revoked"]),
7849
+ scope: z6.enum(["metadata_only", "selected_turns", "full_session"]),
7633
7850
  grantedBy: NullableIdSchema,
7634
7851
  grantedAt: TimestampSchema3.nullable(),
7635
- purpose: z5.literal("task_authoring_and_evaluation")
7852
+ purpose: z6.literal("task_authoring_and_evaluation")
7636
7853
  });
7637
- var TrainingSourceRefSchema = z5.object({
7638
- schemaVersion: z5.literal("openpond.trainingSource.v1"),
7854
+ var TrainingSourceRefSchema = z6.object({
7855
+ schemaVersion: z6.literal("openpond.trainingSource.v1"),
7639
7856
  id: IdSchema3,
7640
7857
  profileId: IdSchema3,
7641
7858
  sessionId: IdSchema3,
7642
- turnIds: z5.array(IdSchema3).max(1e3).default([]),
7859
+ turnIds: z6.array(IdSchema3).max(1e3).default([]),
7643
7860
  workspaceId: NullableIdSchema,
7644
7861
  sourceHash: HashSchema3,
7645
7862
  clusterKey: IdSchema3,
7646
- title: z5.string().trim().min(1).max(500),
7863
+ title: z6.string().trim().min(1).max(500),
7647
7864
  occurredAt: TimestampSchema3,
7648
7865
  consent: TrainingSourceConsentSchema,
7649
- connectedAppIds: z5.array(IdSchema3).max(100).default([]),
7650
- secretScanStatus: z5.enum(["pending", "passed", "blocked"]),
7651
- piiScanStatus: z5.enum(["pending", "passed", "review", "blocked"]),
7652
- licensingStatus: z5.enum(["pending", "approved", "review", "blocked"]),
7866
+ connectedAppIds: z6.array(IdSchema3).max(100).default([]),
7867
+ secretScanStatus: z6.enum(["pending", "passed", "blocked"]),
7868
+ piiScanStatus: z6.enum(["pending", "passed", "review", "blocked"]),
7869
+ licensingStatus: z6.enum(["pending", "approved", "review", "blocked"]),
7653
7870
  metadata: MetadataSchema2
7654
7871
  });
7655
- var TasksetSourceRefSchema = z5.union([
7872
+ var TasksetSourceRefSchema = z6.union([
7656
7873
  TrainingSourceRefSchema,
7657
7874
  ExternalDatasetSourceRefSchema,
7658
7875
  ConnectedDatasetSourceRefSchema
7659
7876
  ]);
7660
- var TaskPolicyBoundarySchema = z5.object({
7661
- policyVisibleFields: z5.array(IdSchema3).max(1e3).default([]),
7662
- privilegedFields: z5.array(IdSchema3).max(1e3).default([]),
7663
- hiddenGraderRefs: z5.array(IdSchema3).max(100).default([]),
7664
- connectedAppScopes: z5.array(IdSchema3).max(100).default([])
7877
+ var TaskPolicyBoundarySchema = z6.object({
7878
+ policyVisibleFields: z6.array(IdSchema3).max(1e3).default([]),
7879
+ privilegedFields: z6.array(IdSchema3).max(1e3).default([]),
7880
+ hiddenGraderRefs: z6.array(IdSchema3).max(100).default([]),
7881
+ connectedAppScopes: z6.array(IdSchema3).max(100).default([])
7665
7882
  });
7666
- var TaskAssetRefSchema = z5.object({
7883
+ var TaskAssetRefSchema = z6.object({
7667
7884
  id: IdSchema3,
7668
7885
  sourceRefId: IdSchema3,
7669
- artifactRef: z5.string().trim().min(1).max(4e3).refine(safeRelativeFilePath, "Task asset references must be safe relative paths."),
7670
- fileName: z5.string().trim().min(1).max(500).refine(safeFileName, "Task asset file names must not contain path separators."),
7671
- stagingPath: z5.string().trim().min(1).max(1e3).refine(safeRelativeFilePath, "Task asset staging paths must stay inside Work inputs.").optional(),
7672
- mediaType: z5.string().trim().min(1).max(200),
7886
+ artifactRef: z6.string().trim().min(1).max(4e3).refine(safeRelativeFilePath, "Task asset references must be safe relative paths."),
7887
+ fileName: z6.string().trim().min(1).max(500).refine(safeFileName, "Task asset file names must not contain path separators."),
7888
+ stagingPath: z6.string().trim().min(1).max(1e3).refine(safeRelativeFilePath, "Task asset staging paths must stay inside Work inputs.").optional(),
7889
+ mediaType: z6.string().trim().min(1).max(200),
7673
7890
  sha256: Sha256Schema,
7674
- sizeBytes: z5.number().int().nonnegative().max(25e7),
7891
+ sizeBytes: z6.number().int().nonnegative().max(25e7),
7675
7892
  split: TasksetSplitSchema,
7676
7893
  metadata: MetadataSchema2
7677
7894
  }).superRefine((value, ctx) => {
7678
7895
  if (value.stagingPath && value.stagingPath.split("/").at(-1) !== value.fileName)
7679
7896
  ctx.addIssue({ code: "custom", message: "Staged task assets must preserve their source file name.", path: ["stagingPath"] });
7680
7897
  });
7681
- var TaskRequiredOutputSchema = z5.object({
7682
- path: z5.string().trim().min(1).max(1e3).refine(safeRelativeFilePath, "Required output paths must stay inside the Work output directory."),
7683
- mediaType: z5.string().trim().min(1).max(200),
7898
+ var TaskRequiredOutputSchema = z6.object({
7899
+ path: z6.string().trim().min(1).max(1e3).refine(safeRelativeFilePath, "Required output paths must stay inside the Work output directory."),
7900
+ mediaType: z6.string().trim().min(1).max(200),
7684
7901
  schemaRef: IdSchema3.nullable().optional(),
7685
- submissionMode: z5.literal("structured_json").optional(),
7686
- maxBytes: z5.number().int().positive().max(1e7).optional(),
7902
+ submissionMode: z6.literal("structured_json").optional(),
7903
+ maxBytes: z6.number().int().positive().max(1e7).optional(),
7687
7904
  metadata: MetadataSchema2
7688
7905
  });
7689
- var TaskDataRecordSchema = z5.object({
7690
- schemaVersion: z5.literal("openpond.taskData.v1"),
7906
+ var TaskDataRecordSchema = z6.object({
7907
+ schemaVersion: z6.literal("openpond.taskData.v1"),
7691
7908
  id: IdSchema3,
7692
7909
  clusterKey: IdSchema3,
7693
7910
  split: TasksetSplitSchema,
7694
- input: z5.record(z5.string(), z5.unknown()),
7695
- expectedOutput: z5.record(z5.string(), z5.unknown()).nullable(),
7696
- policyVisibleContext: z5.record(z5.string(), z5.unknown()).default({}),
7911
+ input: z6.record(z6.string(), z6.unknown()),
7912
+ expectedOutput: z6.record(z6.string(), z6.unknown()).nullable(),
7913
+ policyVisibleContext: z6.record(z6.string(), z6.unknown()).default({}),
7697
7914
  privilegedContextRef: NullableIdSchema,
7698
- sourceRefs: z5.array(IdSchema3).min(1).max(100),
7699
- assets: z5.array(TaskAssetRefSchema).max(1e3).optional(),
7700
- resourceRefs: z5.array(IdSchema3).max(1e3).optional(),
7701
- requiredOutputs: z5.array(TaskRequiredOutputSchema).max(100).optional(),
7702
- tags: z5.array(IdSchema3).max(100).default([]),
7915
+ sourceRefs: z6.array(IdSchema3).min(1).max(100),
7916
+ assets: z6.array(TaskAssetRefSchema).max(1e3).optional(),
7917
+ resourceRefs: z6.array(IdSchema3).max(1e3).optional(),
7918
+ requiredOutputs: z6.array(TaskRequiredOutputSchema).max(100).optional(),
7919
+ tags: z6.array(IdSchema3).max(100).default([]),
7703
7920
  metadata: MetadataSchema2
7704
7921
  });
7705
- var TasksetEnvironmentResourceSchema = z5.object({
7922
+ var TasksetEnvironmentResourceSchema = z6.object({
7706
7923
  id: IdSchema3,
7707
- kind: z5.enum(["file", "catalog", "configuration", "code_module"]),
7708
- path: z5.string().trim().min(1).max(1e3).refine(safeRelativeFilePath, "Environment resource paths must remain relative."),
7709
- mediaType: z5.string().trim().min(1).max(200).nullable().optional(),
7710
- visibility: z5.enum(["policy_visible", "policy_hidden", "privileged"]),
7711
- required: z5.boolean(),
7924
+ kind: z6.enum(["file", "catalog", "configuration", "code_module"]),
7925
+ path: z6.string().trim().min(1).max(1e3).refine(safeRelativeFilePath, "Environment resource paths must remain relative."),
7926
+ mediaType: z6.string().trim().min(1).max(200).nullable().optional(),
7927
+ visibility: z6.enum(["policy_visible", "policy_hidden", "privileged"]),
7928
+ required: z6.boolean(),
7712
7929
  metadata: MetadataSchema2
7713
7930
  });
7714
- var LearningSignalBaseSchema = z5.object({
7931
+ var LearningSignalBaseSchema = z6.object({
7715
7932
  id: IdSchema3,
7716
7933
  taskId: NullableIdSchema,
7717
- sourceRefs: z5.array(IdSchema3).min(1).max(100),
7934
+ sourceRefs: z6.array(IdSchema3).min(1).max(100),
7718
7935
  artifactRef: IdSchema3,
7719
- approved: z5.boolean(),
7720
- confidence: z5.number().min(0).max(1),
7936
+ approved: z6.boolean(),
7937
+ confidence: z6.number().min(0).max(1),
7721
7938
  metadata: MetadataSchema2
7722
7939
  });
7723
7940
  var DemonstrationSignalSchema = LearningSignalBaseSchema.extend({
7724
- kind: z5.literal("demonstration"),
7725
- prompt: z5.string().max(1e5).nullable().default(null),
7726
- response: z5.string().max(2e5).nullable().default(null)
7941
+ kind: z6.literal("demonstration"),
7942
+ prompt: z6.string().max(1e5).nullable().default(null),
7943
+ response: z6.string().max(2e5).nullable().default(null)
7727
7944
  });
7728
7945
  var PreferenceSignalSchema = LearningSignalBaseSchema.extend({
7729
- kind: z5.literal("preference"),
7730
- prompt: z5.string().max(1e5),
7731
- chosen: z5.string().max(2e5),
7732
- rejected: z5.string().max(2e5),
7733
- rationale: z5.string().max(1e5).nullable().default(null)
7946
+ kind: z6.literal("preference"),
7947
+ prompt: z6.string().max(1e5),
7948
+ chosen: z6.string().max(2e5),
7949
+ rejected: z6.string().max(2e5),
7950
+ rationale: z6.string().max(1e5).nullable().default(null)
7734
7951
  });
7735
7952
  var CorrectionSignalSchema = LearningSignalBaseSchema.extend({
7736
- kind: z5.literal("correction"),
7737
- original: z5.string().max(2e5),
7738
- corrected: z5.string().max(2e5),
7739
- rationale: z5.string().max(1e5).nullable().default(null)
7953
+ kind: z6.literal("correction"),
7954
+ original: z6.string().max(2e5),
7955
+ corrected: z6.string().max(2e5),
7956
+ rationale: z6.string().max(1e5).nullable().default(null)
7740
7957
  });
7741
7958
  var FeedbackSignalSchema = LearningSignalBaseSchema.extend({
7742
- kind: z5.literal("feedback"),
7743
- feedback: z5.string().max(1e5),
7744
- polarity: z5.enum(["positive", "negative", "mixed", "neutral"])
7959
+ kind: z6.literal("feedback"),
7960
+ feedback: z6.string().max(1e5),
7961
+ polarity: z6.enum(["positive", "negative", "mixed", "neutral"])
7745
7962
  });
7746
7963
  var RewardSignalSchema = LearningSignalBaseSchema.extend({
7747
- kind: z5.literal("reward"),
7748
- task: z5.string().max(1e5),
7749
- rules: z5.array(z5.object({
7964
+ kind: z6.literal("reward"),
7965
+ task: z6.string().max(1e5),
7966
+ rules: z6.array(z6.object({
7750
7967
  id: IdSchema3,
7751
- points: z5.number().finite(),
7752
- condition: z5.string().trim().min(1).max(1e5)
7968
+ points: z6.number().finite(),
7969
+ condition: z6.string().trim().min(1).max(1e5)
7753
7970
  })).min(1).max(1e3),
7754
- otherwisePoints: z5.number().finite(),
7755
- executable: z5.boolean()
7971
+ otherwisePoints: z6.number().finite(),
7972
+ executable: z6.boolean()
7756
7973
  });
7757
7974
  var LabelSignalSchema = LearningSignalBaseSchema.extend({
7758
- kind: z5.literal("label"),
7759
- labelKind: z5.literal("rubric"),
7760
- task: z5.string().max(1e5),
7761
- criteria: z5.array(z5.object({
7975
+ kind: z6.literal("label"),
7976
+ labelKind: z6.literal("rubric"),
7977
+ task: z6.string().max(1e5),
7978
+ criteria: z6.array(z6.object({
7762
7979
  id: IdSchema3,
7763
- label: z5.string().trim().min(1).max(500),
7764
- description: z5.string().trim().min(1).max(1e5)
7980
+ label: z6.string().trim().min(1).max(500),
7981
+ description: z6.string().trim().min(1).max(1e5)
7765
7982
  })).min(1).max(1e3),
7766
- calibrationExamples: z5.object({
7767
- positive: z5.string().trim().min(1).max(2e5),
7768
- negative: z5.string().trim().min(1).max(2e5),
7769
- boundary: z5.string().trim().min(1).max(2e5)
7983
+ calibrationExamples: z6.object({
7984
+ positive: z6.string().trim().min(1).max(2e5),
7985
+ negative: z6.string().trim().min(1).max(2e5),
7986
+ boundary: z6.string().trim().min(1).max(2e5)
7770
7987
  })
7771
7988
  });
7772
- var LearningSignalRefSchema = z5.discriminatedUnion("kind", [
7989
+ var LearningSignalRefSchema = z6.discriminatedUnion("kind", [
7773
7990
  DemonstrationSignalSchema,
7774
7991
  PreferenceSignalSchema,
7775
7992
  CorrectionSignalSchema,
@@ -7777,85 +7994,85 @@ var LearningSignalRefSchema = z5.discriminatedUnion("kind", [
7777
7994
  RewardSignalSchema,
7778
7995
  LabelSignalSchema
7779
7996
  ]);
7780
- var LearningSignalInventorySchema = z5.object({
7781
- demonstrations: z5.array(DemonstrationSignalSchema).max(1e5).default([]),
7782
- preferences: z5.array(PreferenceSignalSchema).max(1e5).default([]),
7783
- corrections: z5.array(CorrectionSignalSchema).max(1e5).default([]),
7784
- feedback: z5.array(FeedbackSignalSchema).max(1e5).default([]),
7785
- rewards: z5.array(RewardSignalSchema).max(1e5).default([]),
7786
- labels: z5.array(LabelSignalSchema).max(1e5).default([])
7787
- });
7788
- var TasksetEnvironmentContractSchema = z5.object({
7789
- protocolVersion: z5.literal("openpond.taskEnvironment.v1"),
7790
- kind: z5.enum(["chat", "agent", "program", "stateful_harness", "work"]),
7791
- entrypoint: z5.string().trim().min(1).max(1e3),
7792
- stateful: z5.boolean(),
7793
- deterministicSeeds: z5.boolean(),
7794
- toolNames: z5.array(IdSchema3).max(200).default([]),
7795
- actionBindings: z5.array(HarnessActionBindingSchema).max(200).optional(),
7796
- lifecycle: z5.array(z5.enum(["create", "reset", "step", "grade", "cleanup"])).min(1),
7797
- defaultTimeoutMs: z5.number().int().positive().max(36e5),
7798
- networkPolicy: z5.enum(["none", "declared_read_only", "declared_scoped"]),
7799
- resources: z5.array(TasksetEnvironmentResourceSchema).max(1e4).optional(),
7997
+ var LearningSignalInventorySchema = z6.object({
7998
+ demonstrations: z6.array(DemonstrationSignalSchema).max(1e5).default([]),
7999
+ preferences: z6.array(PreferenceSignalSchema).max(1e5).default([]),
8000
+ corrections: z6.array(CorrectionSignalSchema).max(1e5).default([]),
8001
+ feedback: z6.array(FeedbackSignalSchema).max(1e5).default([]),
8002
+ rewards: z6.array(RewardSignalSchema).max(1e5).default([]),
8003
+ labels: z6.array(LabelSignalSchema).max(1e5).default([])
8004
+ });
8005
+ var TasksetEnvironmentContractSchema = z6.object({
8006
+ protocolVersion: z6.literal("openpond.taskEnvironment.v1"),
8007
+ kind: z6.enum(["chat", "agent", "program", "stateful_harness", "work"]),
8008
+ entrypoint: z6.string().trim().min(1).max(1e3),
8009
+ stateful: z6.boolean(),
8010
+ deterministicSeeds: z6.boolean(),
8011
+ toolNames: z6.array(IdSchema3).max(200).default([]),
8012
+ actionBindings: z6.array(HarnessActionBindingSchema).max(200).optional(),
8013
+ lifecycle: z6.array(z6.enum(["create", "reset", "step", "grade", "cleanup"])).min(1),
8014
+ defaultTimeoutMs: z6.number().int().positive().max(36e5),
8015
+ networkPolicy: z6.enum(["none", "declared_read_only", "declared_scoped"]),
8016
+ resources: z6.array(TasksetEnvironmentResourceSchema).max(1e4).optional(),
7800
8017
  metadata: MetadataSchema2
7801
8018
  });
7802
- var TasksetCapabilityManifestSchema = z5.object({
7803
- schemaVersion: z5.literal("openpond.tasksetCapabilities.v1"),
7804
- taskKind: z5.enum(["chat", "single_agent", "multi_agent", "custom_program"]),
7805
- supportedSignals: z5.array(z5.enum(["demonstration", "preference", "correction", "feedback", "reward", "label"])),
7806
- compatibleMethods: z5.array(z5.enum(["none", "retrieval", "sft", "dpo", "grpo", "ppo", "sdft", "opd", "opsd", "sdpo"])),
7807
- rewardKinds: z5.array(z5.enum(["none", "exact", "deterministic", "model_judge", "human"])),
7808
- requiresTools: z5.boolean(),
7809
- requiresState: z5.boolean(),
7810
- requiresPrivilegedGrading: z5.boolean(),
7811
- environmentPlacements: z5.array(z5.enum(["local", "remote", "colocated", "provider_native"])),
7812
- exportable: z5.boolean(),
7813
- portabilityBlockers: z5.array(z5.string().trim().min(1).max(2e3)).default([])
7814
- });
7815
- var GraderBaseSchema = z5.object({
8019
+ var TasksetCapabilityManifestSchema = z6.object({
8020
+ schemaVersion: z6.literal("openpond.tasksetCapabilities.v1"),
8021
+ taskKind: z6.enum(["chat", "single_agent", "multi_agent", "custom_program"]),
8022
+ supportedSignals: z6.array(z6.enum(["demonstration", "preference", "correction", "feedback", "reward", "label"])),
8023
+ compatibleMethods: z6.array(z6.enum(["none", "retrieval", "sft", "dpo", "grpo", "ppo", "sdft", "opd", "opsd", "sdpo"])),
8024
+ rewardKinds: z6.array(z6.enum(["none", "exact", "deterministic", "model_judge", "human"])),
8025
+ requiresTools: z6.boolean(),
8026
+ requiresState: z6.boolean(),
8027
+ requiresPrivilegedGrading: z6.boolean(),
8028
+ environmentPlacements: z6.array(z6.enum(["local", "remote", "colocated", "provider_native"])),
8029
+ exportable: z6.boolean(),
8030
+ portabilityBlockers: z6.array(z6.string().trim().min(1).max(2e3)).default([])
8031
+ });
8032
+ var GraderBaseSchema = z6.object({
7816
8033
  id: IdSchema3,
7817
- taskIds: z5.array(IdSchema3).min(1).max(1e4).refine((ids) => new Set(ids).size === ids.length, "Grader task IDs must be unique.").optional(),
7818
- version: z5.string().trim().min(1).max(100),
7819
- label: z5.string().trim().min(1).max(500),
7820
- weight: z5.number().min(0).max(1e3).default(1),
7821
- hardGate: z5.boolean().default(false),
7822
- rewardEligible: z5.boolean().default(false),
7823
- privileged: z5.boolean().default(false),
8034
+ taskIds: z6.array(IdSchema3).min(1).max(1e4).refine((ids) => new Set(ids).size === ids.length, "Grader task IDs must be unique.").optional(),
8035
+ version: z6.string().trim().min(1).max(100),
8036
+ label: z6.string().trim().min(1).max(500),
8037
+ weight: z6.number().min(0).max(1e3).default(1),
8038
+ hardGate: z6.boolean().default(false),
8039
+ rewardEligible: z6.boolean().default(false),
8040
+ privileged: z6.boolean().default(false),
7824
8041
  metadata: MetadataSchema2
7825
8042
  });
7826
8043
  var DeterministicGraderSpecSchema = GraderBaseSchema.extend({
7827
- kind: z5.enum(["content", "schema", "file", "diff", "test", "runtime_event", "state"]),
7828
- config: z5.record(z5.string(), z5.unknown())
8044
+ kind: z6.enum(["content", "schema", "file", "diff", "test", "runtime_event", "state"]),
8045
+ config: z6.record(z6.string(), z6.unknown())
7829
8046
  });
7830
8047
  var RubricGraderSpecSchema = GraderBaseSchema.extend({
7831
- kind: z5.literal("model_judge"),
7832
- rubric: z5.string().trim().min(1).max(5e4),
8048
+ kind: z6.literal("model_judge"),
8049
+ rubric: z6.string().trim().min(1).max(5e4),
7833
8050
  judge: ChatModelRefSchema,
7834
- calibrationFixtureRefs: z5.array(IdSchema3).min(1).max(500),
7835
- calibrationStatus: z5.enum(["pending", "passed", "failed"]),
7836
- temperature: z5.number().min(0).max(2).default(0)
8051
+ calibrationFixtureRefs: z6.array(IdSchema3).min(1).max(500),
8052
+ calibrationStatus: z6.enum(["pending", "passed", "failed"]),
8053
+ temperature: z6.number().min(0).max(2).default(0)
7837
8054
  });
7838
8055
  var HumanGraderSpecSchema = GraderBaseSchema.extend({
7839
- kind: z5.literal("human"),
8056
+ kind: z6.literal("human"),
7840
8057
  form: HumanFormSchema.optional(),
7841
- rubric: z5.string().trim().min(1).max(5e4),
7842
- reviewerRole: z5.string().trim().min(1).max(500)
8058
+ rubric: z6.string().trim().min(1).max(5e4),
8059
+ reviewerRole: z6.string().trim().min(1).max(500)
7843
8060
  });
7844
8061
  var CustomVerifierGraderSpecSchema = GraderBaseSchema.extend({
7845
- kind: z5.literal("custom_verifier"),
8062
+ kind: z6.literal("custom_verifier"),
7846
8063
  runtime: CustomVerifierRuntimeSchema.optional(),
7847
- module: z5.string().trim().min(1).max(1e3).refine(safeRelativeFilePath, "Custom verifier modules must use a safe relative path."),
8064
+ module: z6.string().trim().min(1).max(1e3).refine(safeRelativeFilePath, "Custom verifier modules must use a safe relative path."),
7848
8065
  exportName: CodeIdentifierSchema,
7849
- timeoutMs: z5.number().int().positive().max(3e5),
7850
- networkPolicy: z5.literal("none")
8066
+ timeoutMs: z6.number().int().positive().max(3e5),
8067
+ networkPolicy: z6.literal("none")
7851
8068
  });
7852
- var GraderSpecSchema = z5.union([
8069
+ var GraderSpecSchema = z6.union([
7853
8070
  DeterministicGraderSpecSchema,
7854
8071
  RubricGraderSpecSchema,
7855
8072
  HumanGraderSpecSchema,
7856
8073
  CustomVerifierGraderSpecSchema
7857
8074
  ]);
7858
- var GraderFixtureLabelSchema = z5.enum([
8075
+ var GraderFixtureLabelSchema = z6.enum([
7859
8076
  "positive",
7860
8077
  "negative",
7861
8078
  "boundary",
@@ -7863,19 +8080,19 @@ var GraderFixtureLabelSchema = z5.enum([
7863
8080
  "prompt_injection",
7864
8081
  "infrastructure_failure"
7865
8082
  ]);
7866
- var GraderFixtureSchema = z5.object({
8083
+ var GraderFixtureSchema = z6.object({
7867
8084
  id: IdSchema3,
7868
8085
  taskId: IdSchema3,
7869
8086
  label: GraderFixtureLabelSchema,
7870
- output: z5.record(z5.string(), z5.unknown()),
7871
- infrastructureError: z5.string().trim().min(1).max(1e4).nullable(),
7872
- expectedPassed: z5.boolean(),
7873
- expectedRewardEligible: z5.boolean(),
8087
+ output: z6.record(z6.string(), z6.unknown()),
8088
+ infrastructureError: z6.string().trim().min(1).max(1e4).nullable(),
8089
+ expectedPassed: z6.boolean(),
8090
+ expectedRewardEligible: z6.boolean(),
7874
8091
  metadata: MetadataSchema2
7875
8092
  });
7876
8093
 
7877
8094
  // src/model-starter-execution.ts
7878
- import { z as z6 } from "zod";
8095
+ import { z as z7 } from "zod";
7879
8096
  import { EnvironmentReleaseSchema, VerifierSetReleaseSchema } from "@openpond/evals";
7880
8097
  import { JavaScriptEnvironmentDefinitionSchema, assertJavaScriptEnvironmentDefinition } from "@openpond/evals/javascript-environment/contracts";
7881
8098
  import { createLearningTextAsset, learningRef, sealLearningContent, verifyLearningTextAsset } from "@openpond/evals/learning";
@@ -7884,17 +8101,17 @@ import {
7884
8101
  NativeHarnessExperimentAttemptSchema,
7885
8102
  verifyNativeHarnessExperimentAttempt
7886
8103
  } from "@openpond/evals/experiments";
7887
- var HashSchema4 = z6.string().regex(/^[a-f0-9]{64}$/);
7888
- var ModelStarterEnvironmentAttemptSchema = /* @__PURE__ */ (() => z6.object({
7889
- schemaVersion: z6.literal("openpond.javascriptEnvironmentAttempt.v1"),
7890
- taskId: z6.string(),
7891
- status: z6.enum(["completed", "budget_exhausted", "cancelled", "timed_out", "policy_failure", "environment_failure"]),
7892
- output: z6.string().nullable(),
7893
- collected: z6.boolean(),
7894
- environmentCleanupComplete: z6.boolean(),
7895
- snapshot: z6.object({ definition: ModelProjectVersionedRefSchema, inputHash: HashSchema4, seed: z6.number().int(), initialStateHash: HashSchema4, finalStateHash: HashSchema4, state: z6.record(z6.string(), z6.unknown()), events: z6.array(z6.record(z6.string(), z6.unknown())) }).strict().nullable(),
7896
- messages: z6.array(z6.unknown()),
7897
- error: z6.string().nullable(),
8104
+ var HashSchema4 = z7.string().regex(/^[a-f0-9]{64}$/);
8105
+ var ModelStarterEnvironmentAttemptSchema = /* @__PURE__ */ (() => z7.object({
8106
+ schemaVersion: z7.literal("openpond.javascriptEnvironmentAttempt.v1"),
8107
+ taskId: z7.string(),
8108
+ status: z7.enum(["completed", "budget_exhausted", "cancelled", "timed_out", "policy_failure", "environment_failure"]),
8109
+ output: z7.string().nullable(),
8110
+ collected: z7.boolean(),
8111
+ environmentCleanupComplete: z7.boolean(),
8112
+ snapshot: z7.object({ definition: ModelProjectVersionedRefSchema, inputHash: HashSchema4, seed: z7.number().int(), initialStateHash: HashSchema4, finalStateHash: HashSchema4, state: z7.record(z7.string(), z7.unknown()), events: z7.array(z7.record(z7.string(), z7.unknown())) }).strict().nullable(),
8113
+ messages: z7.array(z7.unknown()),
8114
+ error: z7.string().nullable(),
7898
8115
  contentHash: HashSchema4
7899
8116
  }).strict())();
7900
8117
  function verifyModelStarterEnvironmentAttempt(value, context) {
@@ -7904,13 +8121,13 @@ function verifyModelStarterEnvironmentAttempt(value, context) {
7904
8121
  if (sealLearningContent(content).contentHash !== contentHash2 || result.taskId !== context.taskId || result.snapshot && (!equal(result.snapshot.definition, context.javascript) || result.snapshot.inputHash !== sealLearningContent(context.input).contentHash || result.snapshot.seed !== context.seed || result.snapshot.finalStateHash !== sealLearningContent(result.snapshot.state).contentHash)) throw new Error("Starter environment attempt differs from its admitted task or recorded bytes.");
7905
8122
  return result;
7906
8123
  }
7907
- var ModelStarterExecutionSchema = z6.object({
8124
+ var ModelStarterExecutionSchema = z7.object({
7908
8125
  environment: EnvironmentReleaseSchema,
7909
8126
  verifierSet: VerifierSetReleaseSchema,
7910
8127
  javascript: JavaScriptEnvironmentDefinitionSchema
7911
8128
  }).strict();
7912
- var ModelStarterToolFixtureScriptSchema = z6.object({
7913
- actions: z6.array(z6.object({ name: z6.string().min(1).max(64), arguments: z6.record(z6.string(), z6.unknown()) }).strict()).max(1e3)
8129
+ var ModelStarterToolFixtureScriptSchema = z7.object({
8130
+ actions: z7.array(z7.object({ name: z7.string().min(1).max(64), arguments: z7.record(z7.string(), z7.unknown()) }).strict()).max(1e3)
7914
8131
  }).strict();
7915
8132
  function modelStarterExecutionAssetId(context) {
7916
8133
  if (!context.environmentRelease || !context.verifierSetRelease) throw new Error("Starter execution release references are missing.");
@@ -7973,10 +8190,10 @@ function validateModelStarterExecution(execution, taskset, assets) {
7973
8190
  }
7974
8191
 
7975
8192
  // src/model-taskset-resources.ts
7976
- import { z as z7 } from "zod";
8193
+ import { z as z8 } from "zod";
7977
8194
  import { EnvironmentReleaseSchema as EnvironmentReleaseSchema2, VerifierSetReleaseSchema as VerifierSetReleaseSchema2, verifyEnvironmentRelease, verifyVerifierSetRelease } from "@openpond/evals";
7978
8195
  import { createLearningTextAsset as createLearningTextAsset2, sealLearningContent as sealLearningContent2, verifyLearningTextAsset as verifyLearningTextAsset2 } from "@openpond/evals/learning";
7979
- var ModelTasksetExecutionResourcesSchema = z7.object({ environment: EnvironmentReleaseSchema2, verifierSet: VerifierSetReleaseSchema2 }).strict();
8196
+ var ModelTasksetExecutionResourcesSchema = z8.object({ environment: EnvironmentReleaseSchema2, verifierSet: VerifierSetReleaseSchema2 }).strict();
7980
8197
  function modelTasksetExecutionResourcesAssetId(context) {
7981
8198
  if (!context.environmentRelease || !context.verifierSetRelease) throw new Error("Taskset execution references are missing.");
7982
8199
  return `taskset-execution-${sealLearningContent2({ environment: context.environmentRelease, verifiers: context.verifierSetRelease }).contentHash}`;
@@ -8000,28 +8217,28 @@ function assertIntegrity(resources) {
8000
8217
  }
8001
8218
 
8002
8219
  // src/model-taskset-derivation.ts
8003
- import { z as z8 } from "zod";
8220
+ import { z as z9 } from "zod";
8004
8221
  import { createEnvironmentRelease, createVerifierSetRelease, verifyEnvironmentRelease as verifyEnvironmentRelease2, verifyVerifierSetRelease as verifyVerifierSetRelease2 } from "@openpond/evals";
8005
8222
  import { LearningTextAssetSchema, TaskDefinitionSchema, assertLearningContentHash, learningRef as learningRef2, sameLearningRef, sealLearningContent as sealLearningContent3, verifyLearningTextAsset as verifyLearningTextAsset3 } from "@openpond/evals/learning";
8006
8223
  import { RewardBindingSchema, RewardReleaseSchema, compileBoundGraders } from "@openpond/evals/rewards";
8007
8224
  import { TasksetReleaseSchema, assertTasksetRelease } from "@openpond/evals/tasksets";
8008
8225
  import { validateTaskValue } from "@openpond/evals/task-schema";
8009
- var OwnerSchema = z8.object({ scopeId: z8.string().trim().min(1).max(500), modelId: z8.string().trim().min(1).max(500) }).strict();
8010
- var ModelTasksetDerivationSchema = z8.object({
8011
- schemaVersion: z8.literal("openpond.modelTasksetDerivation.v1"),
8226
+ var OwnerSchema = z9.object({ scopeId: z9.string().trim().min(1).max(500), modelId: z9.string().trim().min(1).max(500) }).strict();
8227
+ var ModelTasksetDerivationSchema = z9.object({
8228
+ schemaVersion: z9.literal("openpond.modelTasksetDerivation.v1"),
8012
8229
  owner: OwnerSchema,
8013
8230
  root: ModelProjectVersionedRefSchema,
8014
8231
  parent: ModelProjectVersionedRefSchema
8015
8232
  }).strict();
8016
- var ModelTasksetPackageSchema = z8.object({
8233
+ var ModelTasksetPackageSchema = z9.object({
8017
8234
  taskset: TasksetReleaseSchema,
8018
8235
  taskDefinition: TaskDefinitionSchema,
8019
8236
  rewardBinding: RewardBindingSchema,
8020
- rewards: z8.array(RewardReleaseSchema).min(1).max(100),
8021
- assets: z8.array(LearningTextAssetSchema).max(1e3),
8237
+ rewards: z9.array(RewardReleaseSchema).min(1).max(100),
8238
+ assets: z9.array(LearningTextAssetSchema).max(1e3),
8022
8239
  executionResources: ModelTasksetExecutionResourcesSchema.optional(),
8023
8240
  execution: ModelStarterExecutionSchema.optional(),
8024
- instructionMode: z8.literal("per_task").optional()
8241
+ instructionMode: z9.literal("per_task").optional()
8025
8242
  }).strict();
8026
8243
  var same = (left, right) => sealLearningContent3({ value: left }).contentHash === sealLearningContent3({ value: right }).contentHash;
8027
8244
  var identity = (owner, root) => `model-taskset-${sealLearningContent3({ owner, root }).contentHash}`;
@@ -8102,7 +8319,7 @@ function validateModelTasksetPackage(value) {
8102
8319
  if (!same(taskDefinition.execution, { policy, environment, ...environmentRelease ? { environmentRelease } : {}, tools, capabilities, ...verifierSetRelease ? { verifierSetRelease } : {} })) throw new Error("Taskset definition differs from its execution resources.");
8103
8320
  if (!same(taskset.graders, compileBoundGraders(rewardBinding, rewards))) throw new Error("Taskset graders differ from its Reward binding.");
8104
8321
  if (taskset.metadata.starter !== void 0) {
8105
- const metadata = z8.object({ taskDefinition: ModelProjectVersionedRefSchema, rewardBinding: ModelProjectVersionedRefSchema }).passthrough().parse(taskset.metadata.starter);
8322
+ const metadata = z9.object({ taskDefinition: ModelProjectVersionedRefSchema, rewardBinding: ModelProjectVersionedRefSchema }).passthrough().parse(taskset.metadata.starter);
8106
8323
  if (!sameLearningRef(metadata.taskDefinition, learningRef2(taskDefinition)) || !sameLearningRef(metadata.rewardBinding, learningRef2(rewardBinding))) throw new Error("Taskset metadata differs from its immutable grading resources.");
8107
8324
  }
8108
8325
  if (taskset.metadata.rewardExecution !== void 0 && !same(taskset.metadata.rewardExecution, { binding: rewardBinding, rewards })) throw new Error("Taskset embedded Rewards differ from its immutable grading resources.");
@@ -8137,7 +8354,7 @@ function validateModelTasksetPackage(value) {
8137
8354
  }
8138
8355
 
8139
8356
  // src/taskset-package-learning.ts
8140
- import { z as z9 } from "zod";
8357
+ import { z as z10 } from "zod";
8141
8358
  import {
8142
8359
  TaskBatchSchema,
8143
8360
  TaskEvidenceSchema,
@@ -8151,12 +8368,12 @@ import {
8151
8368
  taskBatchPackageMetadata,
8152
8369
  verifyLearningTextAsset as verifyLearningTextAsset4
8153
8370
  } from "@openpond/evals/learning";
8154
- var TasksetPackageLearningResourcesSchema = z9.object({
8371
+ var TasksetPackageLearningResourcesSchema = z10.object({
8155
8372
  batch: TaskBatchSchema,
8156
- evidence: z9.array(TaskEvidenceSchema).min(1).max(1e4),
8157
- decisions: z9.array(TaskAdmissionDecisionSchema).min(1).max(1e4),
8158
- sources: z9.array(LearningSourceSchema).min(1).max(1e4),
8159
- assets: z9.array(LearningTextAssetSchema2).max(1e3)
8373
+ evidence: z10.array(TaskEvidenceSchema).min(1).max(1e4),
8374
+ decisions: z10.array(TaskAdmissionDecisionSchema).min(1).max(1e4),
8375
+ sources: z10.array(LearningSourceSchema).min(1).max(1e4),
8376
+ assets: z10.array(LearningTextAssetSchema2).max(1e3)
8160
8377
  }).strict();
8161
8378
  function learningPackageContextFiles(resources) {
8162
8379
  return resources.evidence.filter((evidence) => evidence.submission.evaluatorContext !== null).map((evidence) => {
@@ -8234,11 +8451,11 @@ function validateTasksetLearningResources(taskset, input) {
8234
8451
  }
8235
8452
 
8236
8453
  // src/taskset-package-files.ts
8237
- import { z as z10 } from "zod";
8454
+ import { z as z11 } from "zod";
8238
8455
  var MAX_TASKSET_PACKAGE_BYTES = 64 * 1024 * 1024;
8239
- var TasksetPackageFileSchema = z10.object({
8456
+ var TasksetPackageFileSchema = z11.object({
8240
8457
  asset: ImmutableAssetRefSchema,
8241
- base64: z10.string()
8458
+ base64: z11.string()
8242
8459
  }).strict();
8243
8460
  function decodeTasksetPackageFile(value) {
8244
8461
  const file = TasksetPackageFileSchema.parse(value);
@@ -8289,7 +8506,7 @@ function createTasksetPackageExecutionFile(execution) {
8289
8506
  }
8290
8507
 
8291
8508
  // src/taskset-calibration-fixtures.ts
8292
- import { z as z11 } from "zod";
8509
+ import { z as z12 } from "zod";
8293
8510
  import { compileBoundGraders as compileBoundGraders2, createRewardBinding, RewardReleaseRefSchema } from "@openpond/evals/rewards";
8294
8511
  import { TaskRecordSchema } from "@openpond/evals/tasksets";
8295
8512
  import {
@@ -8300,21 +8517,21 @@ import {
8300
8517
  rewardCalibrationClosureAsset,
8301
8518
  MAX_REWARD_CALIBRATION_CLOSURE_BYTES
8302
8519
  } from "@openpond/evals/learning/reward-calibration-closure";
8303
- var ProjectionSchema = z11.object({
8304
- schemaVersion: z11.literal("openpond.connectedRewardCalibrationProjection.v1"),
8520
+ var ProjectionSchema = z12.object({
8521
+ schemaVersion: z12.literal("openpond.connectedRewardCalibrationProjection.v1"),
8305
8522
  sourceReward: RewardReleaseRefSchema,
8306
8523
  fixtureSet: ImmutableAssetRefSchema,
8307
8524
  calibrationCheck: LearningRevisionRefSchema,
8308
8525
  fixture: RewardFixtureSchema,
8309
- fixtureHash: z11.string().regex(/^[a-f0-9]{64}$/),
8310
- checkResultHash: z11.string().regex(/^[a-f0-9]{64}$/),
8311
- independentCalibrationTask: z11.literal(true),
8526
+ fixtureHash: z12.string().regex(/^[a-f0-9]{64}$/),
8527
+ checkResultHash: z12.string().regex(/^[a-f0-9]{64}$/),
8528
+ independentCalibrationTask: z12.literal(true),
8312
8529
  closureRef: ImmutableAssetRefSchema,
8313
- graderId: z11.string().min(1).max(240).optional()
8530
+ graderId: z12.string().min(1).max(240).optional()
8314
8531
  }).strict();
8315
8532
  function authoredFixtures(value) {
8316
8533
  const authoring = value.taskset.metadata.ordinaryAuthoring ?? value.taskset.metadata.starterAuthoring;
8317
- return z11.object({ graderFixtures: GraderFixtureSchema.array().max(1e5).default([]) }).passthrough().parse(authoring ?? {}).graderFixtures;
8534
+ return z12.object({ graderFixtures: GraderFixtureSchema.array().max(1e5).default([]) }).passthrough().parse(authoring ?? {}).graderFixtures;
8318
8535
  }
8319
8536
  function isIndependent(fixture) {
8320
8537
  const projection = fixture.metadata.rewardCalibration;
@@ -8432,7 +8649,7 @@ function readPrivateClosure(value, reference) {
8432
8649
  if (ref && isAlias(ref)) fail("calibration_closure_environment_schema_alias");
8433
8650
  for (const metadata of [value.taskset.metadata.environmentResources, value.environment.metadata.resources]) {
8434
8651
  if (metadata === void 0) continue;
8435
- const resources = z11.array(z11.object({ id: z11.string().optional(), path: z11.string(), visibility: z11.string().optional() }).passthrough()).parse(metadata);
8652
+ const resources = z12.array(z12.object({ id: z12.string().optional(), path: z12.string(), visibility: z12.string().optional() }).passthrough()).parse(metadata);
8436
8653
  for (const resource of resources) {
8437
8654
  const file = value.files.find((item) => item.asset.path === resource.path);
8438
8655
  if (resource.id === reference.id || resource.path === reference.path || file && isAlias(file.asset))
@@ -8453,7 +8670,7 @@ function fail(code) {
8453
8670
  function assertJudgeFixtureMembership(value, grader, selected, closure) {
8454
8671
  const graderId = grader.id;
8455
8672
  const authoring = value.taskset.metadata.ordinaryAuthoring ?? value.taskset.metadata.starterAuthoring;
8456
- const mapping = z11.object({ judgeCalibrationFixtures: z11.record(z11.string(), z11.array(z11.string().min(1)).max(500)) }).passthrough().parse(authoring);
8673
+ const mapping = z12.object({ judgeCalibrationFixtures: z12.record(z12.string(), z12.array(z12.string().min(1)).max(500)) }).passthrough().parse(authoring);
8457
8674
  const expected = closure.check.fixtureRefs.map((ref) => `calibration-${contentHash([selected.sourceReward, ref.id])}`);
8458
8675
  if (contentHash(mapping.judgeCalibrationFixtures[graderId] ?? []) !== contentHash(expected)) fail("calibration_judge_membership_changed");
8459
8676
  const fixtures = authoredFixtures(value);
@@ -8471,7 +8688,7 @@ function assertJudgeFixtureMembership(value, grader, selected, closure) {
8471
8688
  }
8472
8689
 
8473
8690
  // src/taskset-package-contracts.ts
8474
- import { z as z12 } from "zod";
8691
+ import { z as z13 } from "zod";
8475
8692
  import { EnvironmentReleaseSchema as EnvironmentReleaseSchema3, VerifierSetReleaseSchema as VerifierSetReleaseSchema3, verifyEnvironmentRelease as verifyEnvironmentRelease3, verifyVerifierSetRelease as verifyVerifierSetRelease3 } from "@openpond/evals";
8476
8693
  import { assertTasksetRelease as assertTasksetRelease2, TasksetReleaseSchema as TasksetReleaseSchema2 } from "@openpond/evals/tasksets";
8477
8694
  import { assertBoundedTaskJson as assertBoundedTaskJson2 } from "@openpond/evals/task-schema";
@@ -8493,23 +8710,23 @@ function assertModelTasksetAuthoring(taskset) {
8493
8710
 
8494
8711
  // src/taskset-package-contracts.ts
8495
8712
  var BoundModelResourcesSchema = ModelTasksetPackageSchema.omit({ taskset: true, executionResources: true });
8496
- var TasksetPackageContentSchema = z12.object({
8497
- schemaVersion: z12.literal("openpond.tasksetPackage.v1"),
8713
+ var TasksetPackageContentSchema = z13.object({
8714
+ schemaVersion: z13.literal("openpond.tasksetPackage.v1"),
8498
8715
  taskset: TasksetReleaseSchema2,
8499
8716
  environment: EnvironmentReleaseSchema3,
8500
8717
  verifierSet: VerifierSetReleaseSchema3,
8501
- files: z12.array(TasksetPackageFileSchema).max(1e4),
8718
+ files: z13.array(TasksetPackageFileSchema).max(1e4),
8502
8719
  modelResources: BoundModelResourcesSchema.optional(),
8503
8720
  learningResources: TasksetPackageLearningResourcesSchema.optional()
8504
8721
  }).strict();
8505
- var TasksetPackageSchema = TasksetPackageContentSchema.extend({ contentHash: z12.string().regex(/^[a-f0-9]{64}$/) }).strict();
8722
+ var TasksetPackageSchema = TasksetPackageContentSchema.extend({ contentHash: z13.string().regex(/^[a-f0-9]{64}$/) }).strict();
8506
8723
  function tasksetPackageRewardBinding(value) {
8507
8724
  return value.learningResources ? taskBatchPackageMetadata2(value.taskset).binding : value.modelResources?.rewardBinding ?? null;
8508
8725
  }
8509
8726
  function resolveTasksetPackageInstructions(value) {
8510
8727
  if (value.learningResources) return taskBatchPackageMetadata2(value.taskset).definition.instructions;
8511
8728
  if (value.modelResources) return value.modelResources.taskDefinition.instructions;
8512
- const authoring = z12.object({ instructions: z12.string().max(2e4).optional() }).passthrough().parse(value.taskset.metadata.ordinaryAuthoring ?? {});
8729
+ const authoring = z13.object({ instructions: z13.string().max(2e4).optional() }).passthrough().parse(value.taskset.metadata.ordinaryAuthoring ?? {});
8513
8730
  return authoring.instructions ?? "";
8514
8731
  }
8515
8732
  function validateTasksetPackage(value, maximumBytes = MAX_TASKSET_PACKAGE_BYTES) {
@@ -8537,10 +8754,17 @@ function validateTasksetPackage(value, maximumBytes = MAX_TASKSET_PACKAGE_BYTES)
8537
8754
  for (const task of taskset.tasks) {
8538
8755
  for (const asset of task.artifactRefs) requireAsset(asset);
8539
8756
  for (const output of task.requiredOutputs ?? []) {
8757
+ const sampling = structuredSamplingSchemaDeclaration(output.metadata);
8758
+ if (sampling && output.submissionMode !== "structured_json") throw new Error("Sampling schema requires a structured output.");
8540
8759
  if (output.schemaRef) requireAsset(output.schemaRef);
8541
8760
  if (output.submissionMode === "structured_json") {
8542
8761
  if (!output.schemaRef || output.schemaRef.visibility !== "policy" || output.mediaType !== "application/json" || environment.contract.kind !== "work") throw new Error("Structured output requires a policy-visible JSON schema in Work.");
8543
- resolveStructuredOutput(decodeTasksetPackageFile(files.get(output.schemaRef.id)), output.schemaRef.contentHash);
8762
+ const full = resolveStructuredOutput(decodeTasksetPackageFile(files.get(output.schemaRef.id)), output.schemaRef.contentHash);
8763
+ if (sampling) {
8764
+ requireAsset(sampling.schemaRef);
8765
+ if (!task.artifactRefs.some((ref) => same2(ref, sampling.schemaRef))) throw new Error("Sampling schema must be an ordinary declared policy artifact.");
8766
+ resolveStructuredSamplingSchema(full, sampling, decodeTasksetPackageFile(files.get(sampling.schemaRef.id)));
8767
+ }
8544
8768
  }
8545
8769
  }
8546
8770
  if (task.privilegedContextRef && files.get(task.privilegedContextRef)?.asset.visibility !== "host_private") {
@@ -8564,7 +8788,7 @@ function validateTasksetPackage(value, maximumBytes = MAX_TASKSET_PACKAGE_BYTES)
8564
8788
  }
8565
8789
  for (const declarations of [taskset.metadata.environmentResources, environment.metadata.resources]) {
8566
8790
  if (declarations === void 0) continue;
8567
- for (const resource of z12.array(z12.object({ path: z12.string().min(1) }).passthrough()).parse(declarations)) {
8791
+ for (const resource of z13.array(z13.object({ path: z13.string().min(1) }).passthrough()).parse(declarations)) {
8568
8792
  if (!result.files.some((file) => file.asset.path === resource.path)) throw new Error(`Taskset environment resource is missing: ${resource.path}.`);
8569
8793
  }
8570
8794
  }
@@ -8604,12 +8828,22 @@ function resolveTasksetWorkOutputs(input, taskId) {
8604
8828
  maxBytes: output.maxBytes,
8605
8829
  ...output.submissionMode === "structured_json" ? {
8606
8830
  submissionMode: "structured_json",
8607
- structuredOutput: resolveStructuredOutput(decodeTasksetPackageFile(value.files.find((file) => file.asset.id === output.schemaRef.id)), output.schemaRef.contentHash)
8831
+ structuredOutput: (() => {
8832
+ const full = resolveStructuredOutput(decodeTasksetPackageFile(value.files.find((file) => file.asset.id === output.schemaRef.id)), output.schemaRef.contentHash);
8833
+ const sampling = structuredSamplingSchemaDeclaration(output.metadata);
8834
+ return sampling ? { ...full, sampling: resolveStructuredSamplingSchema(
8835
+ full,
8836
+ sampling,
8837
+ decodeTasksetPackageFile(value.files.find((file) => file.asset.id === sampling.schemaRef.id))
8838
+ ) } : full;
8839
+ })()
8608
8840
  } : {}
8609
8841
  }));
8610
8842
  }
8611
8843
 
8612
8844
  export {
8845
+ structuredSamplingSchemaDeclaration,
8846
+ resolveStructuredSamplingSchema,
8613
8847
  resolveStructuredOutput,
8614
8848
  structuredOutputTools,
8615
8849
  structuredToolOutput,
@@ -8706,4 +8940,4 @@ export {
8706
8940
  createTasksetPackage,
8707
8941
  resolveTasksetWorkOutputs
8708
8942
  };
8709
- //# sourceMappingURL=chunk-EJZ7HOIS.js.map
8943
+ //# sourceMappingURL=chunk-2XLKMZH5.js.map