openpond-sdk 0.12.26 → 0.12.27

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 (200) hide show
  1. package/PRODUCT_INTEGRATION.md +13 -6
  2. package/README.md +2 -10
  3. package/SERVERLESS_SERVING.md +52 -35
  4. package/TASK_INGESTION.md +0 -4
  5. package/dist/advanced-refiner-evaluations.js +7 -7
  6. package/dist/ai-sdk.js +20 -83
  7. package/dist/ai-sdk.js.map +1 -1
  8. package/dist/candidate-evaluations.js +6 -6
  9. package/dist/{chunk-UZAVG2WK.js → chunk-3HOGOWKU.js} +8 -6
  10. package/dist/chunk-3HOGOWKU.js.map +1 -0
  11. package/dist/{chunk-YV6PPDXZ.js → chunk-3Z5IK2UK.js} +27 -2
  12. package/dist/chunk-3Z5IK2UK.js.map +1 -0
  13. package/dist/{chunk-4REK5TTE.js → chunk-4D4QSQC3.js} +2 -2
  14. package/dist/{chunk-AMZ2SWHR.js → chunk-534W2O2S.js} +2 -2
  15. package/dist/{chunk-6LVLWRBJ.js → chunk-54BJJL7G.js} +2 -2
  16. package/dist/{chunk-XWUTYFOU.js → chunk-5KJY44FB.js} +3 -3
  17. package/dist/{chunk-QKLZZOZD.js → chunk-7MLFWVDI.js} +29 -10
  18. package/dist/chunk-7MLFWVDI.js.map +1 -0
  19. package/dist/{chunk-4A4FNG4R.js → chunk-7ZV626YS.js} +2 -2
  20. package/dist/{chunk-57ROW3XF.js → chunk-ABOZV47D.js} +2 -2
  21. package/dist/{chunk-3BILL33A.js → chunk-BIQ5TG3T.js} +4 -4
  22. package/dist/{chunk-JINWKUKR.js → chunk-BT6CC6QB.js} +3 -3
  23. package/dist/{chunk-4PEK3YOW.js → chunk-CNFN6GHY.js} +2 -2
  24. package/dist/{chunk-X5AT253K.js → chunk-CVYGJUWM.js} +2 -2
  25. package/dist/{chunk-D26RJQU7.js → chunk-CX7ETU2F.js} +2 -2
  26. package/dist/{chunk-4CDLPMJK.js → chunk-D7LV3USE.js} +2 -2
  27. package/dist/{chunk-WZKKQNYY.js → chunk-GA7OSSEA.js} +2 -2
  28. package/dist/{chunk-EL6KZO43.js → chunk-GFWXDWEE.js} +3 -3
  29. package/dist/{chunk-XYK3MAIC.js → chunk-JYWIKBGD.js} +122 -112
  30. package/dist/chunk-JYWIKBGD.js.map +1 -0
  31. package/dist/{chunk-AQV7RQZH.js → chunk-K4WU4JOP.js} +2 -2
  32. package/dist/{chunk-CAOMKM55.js → chunk-L7MVGGBH.js} +2 -2
  33. package/dist/{chunk-P56JWQYV.js → chunk-LRFVISLA.js} +3 -3
  34. package/dist/{chunk-2U6BQ5C4.js → chunk-MJHQMQEW.js} +3 -3
  35. package/dist/chunk-ON3KSXWR.js +639 -0
  36. package/dist/chunk-ON3KSXWR.js.map +1 -0
  37. package/dist/{chunk-PMVSO23F.js → chunk-RMXZISHK.js} +10 -1
  38. package/dist/chunk-RMXZISHK.js.map +1 -0
  39. package/dist/{chunk-JWEIAEQ6.js → chunk-TMNEDWA7.js} +10 -3
  40. package/dist/chunk-TMNEDWA7.js.map +1 -0
  41. package/dist/{chunk-C7I4ZG6Q.js → chunk-TX552FQG.js} +3 -3
  42. package/dist/{chunk-4CRLQMJ2.js → chunk-VIDRZCPQ.js} +6 -6
  43. package/dist/{chunk-MN4FE52A.js → chunk-VRUAIMM3.js} +7 -7
  44. package/dist/chunk-VRUAIMM3.js.map +1 -0
  45. package/dist/{chunk-H5KHLBC5.js → chunk-WJZHSIGD.js} +6 -8
  46. package/dist/{chunk-H5KHLBC5.js.map → chunk-WJZHSIGD.js.map} +1 -1
  47. package/dist/{chunk-HCUZYGUK.js → chunk-WPTFJZ4L.js} +3 -3
  48. package/dist/connected-evidence.js +7 -7
  49. package/dist/dataset-workspaces.js +10 -10
  50. package/dist/errors.js +1 -1
  51. package/dist/experiment-evaluation-schedules.js +16 -16
  52. package/dist/experiment-improvements.js +7 -7
  53. package/dist/experiments.js +15 -15
  54. package/dist/index.js +23 -23
  55. package/dist/learning.js +15 -4
  56. package/dist/learning.js.map +1 -1
  57. package/dist/model-projects.js +1 -1
  58. package/dist/model-starter-attempts.js +2 -2
  59. package/dist/model-starter-catalog.js +4 -4
  60. package/dist/model-starters.js +4 -4
  61. package/dist/model-taskset-runs.js +3 -3
  62. package/dist/post-training.js +6 -6
  63. package/dist/taskset-drafts.js +6 -6
  64. package/dist/taskset-packages.js +12 -10
  65. package/dist/training-bundle.js +46 -20
  66. package/dist/training-bundle.js.map +1 -1
  67. package/dist/training-hardware.js +2 -2
  68. package/dist/training.js +5620 -4342
  69. package/dist/training.js.map +1 -1
  70. package/dist/types/packages/sdk/src/ai-sdk.d.ts.map +1 -1
  71. package/dist/types/packages/sdk/src/alphaedit-model-serving.d.ts +8 -4
  72. package/dist/types/packages/sdk/src/alphaedit-model-serving.d.ts.map +1 -1
  73. package/dist/types/packages/sdk/src/candidate-evaluation-client.d.ts +162 -162
  74. package/dist/types/packages/sdk/src/decision-model-serving.d.ts +4 -2
  75. package/dist/types/packages/sdk/src/decision-model-serving.d.ts.map +1 -1
  76. package/dist/types/packages/sdk/src/engram-model-serving.d.ts +3 -1
  77. package/dist/types/packages/sdk/src/engram-model-serving.d.ts.map +1 -1
  78. package/dist/types/packages/sdk/src/experiment-client.d.ts +699 -691
  79. package/dist/types/packages/sdk/src/experiment-client.d.ts.map +1 -1
  80. package/dist/types/packages/sdk/src/experiment-draft-storage.d.ts +34 -28
  81. package/dist/types/packages/sdk/src/experiment-draft-storage.d.ts.map +1 -1
  82. package/dist/types/packages/sdk/src/experiment-improvement-client.d.ts +1889 -1889
  83. package/dist/types/packages/sdk/src/experiment-run-details.d.ts +7 -7
  84. package/dist/types/packages/sdk/src/experiment-scoring-contracts.d.ts +21 -3
  85. package/dist/types/packages/sdk/src/experiment-scoring-contracts.d.ts.map +1 -1
  86. package/dist/types/packages/sdk/src/learning.d.ts +1 -0
  87. package/dist/types/packages/sdk/src/learning.d.ts.map +1 -1
  88. package/dist/types/packages/sdk/src/managed-alphaedit-executions.d.ts +272 -16
  89. package/dist/types/packages/sdk/src/managed-alphaedit-executions.d.ts.map +1 -1
  90. package/dist/types/packages/sdk/src/managed-compute-price.d.ts +53 -1
  91. package/dist/types/packages/sdk/src/managed-compute-price.d.ts.map +1 -1
  92. package/dist/types/packages/sdk/src/managed-decision-executions.d.ts +612 -356
  93. package/dist/types/packages/sdk/src/managed-decision-executions.d.ts.map +1 -1
  94. package/dist/types/packages/sdk/src/managed-engram-executions.d.ts +272 -16
  95. package/dist/types/packages/sdk/src/managed-engram-executions.d.ts.map +1 -1
  96. package/dist/types/packages/sdk/src/managed-modification-executions.d.ts +208 -16
  97. package/dist/types/packages/sdk/src/managed-modification-executions.d.ts.map +1 -1
  98. package/dist/types/packages/sdk/src/managed-neuron-training-executions.d.ts +272 -16
  99. package/dist/types/packages/sdk/src/managed-neuron-training-executions.d.ts.map +1 -1
  100. package/dist/types/packages/sdk/src/managed-serving-usage.d.ts +3 -0
  101. package/dist/types/packages/sdk/src/managed-serving-usage.d.ts.map +1 -1
  102. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts +25 -25
  103. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts.map +1 -1
  104. package/dist/types/packages/sdk/src/model-learning-capabilities.d.ts +4 -0
  105. package/dist/types/packages/sdk/src/model-learning-capabilities.d.ts.map +1 -0
  106. package/dist/types/packages/sdk/src/model-learning-policy.d.ts.map +1 -1
  107. package/dist/types/packages/sdk/src/model-supervised-training-defaults.d.ts.map +1 -1
  108. package/dist/types/packages/sdk/src/model-training-defaults.d.ts +5 -2
  109. package/dist/types/packages/sdk/src/model-training-defaults.d.ts.map +1 -1
  110. package/dist/types/packages/sdk/src/neuron-training-model-serving.d.ts +8 -4
  111. package/dist/types/packages/sdk/src/neuron-training-model-serving.d.ts.map +1 -1
  112. package/dist/types/packages/sdk/src/post-training.d.ts +7 -7
  113. package/dist/types/packages/sdk/src/product-model-response.d.ts +6 -2
  114. package/dist/types/packages/sdk/src/product-model-response.d.ts.map +1 -1
  115. package/dist/types/packages/sdk/src/product-model-transport.d.ts +99 -0
  116. package/dist/types/packages/sdk/src/product-model-transport.d.ts.map +1 -0
  117. package/dist/types/packages/sdk/src/product-model-wire.d.ts +104 -0
  118. package/dist/types/packages/sdk/src/product-model-wire.d.ts.map +1 -0
  119. package/dist/types/packages/sdk/src/product-models.d.ts +18 -15
  120. package/dist/types/packages/sdk/src/product-models.d.ts.map +1 -1
  121. package/dist/types/packages/sdk/src/serverless-serving.d.ts +416 -9
  122. package/dist/types/packages/sdk/src/serverless-serving.d.ts.map +1 -1
  123. package/dist/types/packages/sdk/src/steering-model-serving.d.ts +2144 -703
  124. package/dist/types/packages/sdk/src/steering-model-serving.d.ts.map +1 -1
  125. package/dist/types/packages/sdk/src/steering-profile-publication.d.ts +631 -0
  126. package/dist/types/packages/sdk/src/steering-profile-publication.d.ts.map +1 -1
  127. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +120 -120
  128. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +20 -20
  129. package/dist/types/packages/sdk/src/taskset-packages.d.ts +1 -0
  130. package/dist/types/packages/sdk/src/taskset-packages.d.ts.map +1 -1
  131. package/dist/types/packages/sdk/src/taskset-text-policy.d.ts +11 -0
  132. package/dist/types/packages/sdk/src/taskset-text-policy.d.ts.map +1 -0
  133. package/dist/types/packages/sdk/src/training-compute-selection.d.ts +6 -19
  134. package/dist/types/packages/sdk/src/training-compute-selection.d.ts.map +1 -1
  135. package/dist/types/packages/sdk/src/training-estimates.d.ts +1 -1
  136. package/dist/types/packages/sdk/src/training-experiment-setup.d.ts +4 -1
  137. package/dist/types/packages/sdk/src/training-experiment-setup.d.ts.map +1 -1
  138. package/dist/types/packages/sdk/src/training-harness-sources.d.ts +2 -2
  139. package/dist/types/packages/sdk/src/training-learning-batch.d.ts +40 -40
  140. package/dist/types/packages/sdk/src/training-model-serving-control.d.ts +406 -8
  141. package/dist/types/packages/sdk/src/training-model-serving-control.d.ts.map +1 -1
  142. package/dist/types/packages/sdk/src/training-model-serving.d.ts +1136 -30
  143. package/dist/types/packages/sdk/src/training-model-serving.d.ts.map +1 -1
  144. package/dist/types/packages/sdk/src/training-operations.d.ts +11197 -0
  145. package/dist/types/packages/sdk/src/training-operations.d.ts.map +1 -0
  146. package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts +25 -25
  147. package/dist/types/packages/sdk/src/training-supervised.d.ts +13 -0
  148. package/dist/types/packages/sdk/src/training-supervised.d.ts.map +1 -1
  149. package/dist/types/packages/sdk/src/training-transport.d.ts +4 -1
  150. package/dist/types/packages/sdk/src/training-transport.d.ts.map +1 -1
  151. package/dist/types/packages/sdk/src/training.d.ts +15885 -4662
  152. package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
  153. package/dist/types/packages/sdk/src/weight-inference.d.ts +8 -5
  154. package/dist/types/packages/sdk/src/weight-inference.d.ts.map +1 -1
  155. package/dist/types/packages/sdk/src/weight-model-versions.d.ts +2089 -398
  156. package/dist/types/packages/sdk/src/weight-model-versions.d.ts.map +1 -1
  157. package/dist/types/packages/sdk/src/weight-space-artifact.d.ts +433 -0
  158. package/dist/types/packages/sdk/src/weight-space-artifact.d.ts.map +1 -0
  159. package/dist/types/packages/sdk/src/weight-space-evaluation.d.ts +1437 -0
  160. package/dist/types/packages/sdk/src/weight-space-evaluation.d.ts.map +1 -0
  161. package/dist/types/packages/sdk/src/weight-space-model-serving.d.ts +2910 -0
  162. package/dist/types/packages/sdk/src/weight-space-model-serving.d.ts.map +1 -0
  163. package/dist/types/packages/sdk/src/weight-space-programming.d.ts +845 -0
  164. package/dist/types/packages/sdk/src/weight-space-programming.d.ts.map +1 -0
  165. package/dist/types/packages/sdk/src/weight-space-sessions.d.ts +4600 -0
  166. package/dist/types/packages/sdk/src/weight-space-sessions.d.ts.map +1 -0
  167. package/fixtures/python-foundation/operation-matrix.json +369 -0
  168. package/fixtures/python-foundation/schemas.json +34304 -27905
  169. package/fixtures/python-foundation/training-estimate-http-workflow.json +1 -1
  170. package/package.json +2 -2
  171. package/dist/chunk-JWEIAEQ6.js.map +0 -1
  172. package/dist/chunk-MN4FE52A.js.map +0 -1
  173. package/dist/chunk-PMVSO23F.js.map +0 -1
  174. package/dist/chunk-QKLZZOZD.js.map +0 -1
  175. package/dist/chunk-UZAVG2WK.js.map +0 -1
  176. package/dist/chunk-XYK3MAIC.js.map +0 -1
  177. package/dist/chunk-YV6PPDXZ.js.map +0 -1
  178. package/dist/chunk-ZG4HVCJB.js +0 -248
  179. package/dist/chunk-ZG4HVCJB.js.map +0 -1
  180. /package/dist/{chunk-4REK5TTE.js.map → chunk-4D4QSQC3.js.map} +0 -0
  181. /package/dist/{chunk-AMZ2SWHR.js.map → chunk-534W2O2S.js.map} +0 -0
  182. /package/dist/{chunk-6LVLWRBJ.js.map → chunk-54BJJL7G.js.map} +0 -0
  183. /package/dist/{chunk-XWUTYFOU.js.map → chunk-5KJY44FB.js.map} +0 -0
  184. /package/dist/{chunk-4A4FNG4R.js.map → chunk-7ZV626YS.js.map} +0 -0
  185. /package/dist/{chunk-57ROW3XF.js.map → chunk-ABOZV47D.js.map} +0 -0
  186. /package/dist/{chunk-3BILL33A.js.map → chunk-BIQ5TG3T.js.map} +0 -0
  187. /package/dist/{chunk-JINWKUKR.js.map → chunk-BT6CC6QB.js.map} +0 -0
  188. /package/dist/{chunk-4PEK3YOW.js.map → chunk-CNFN6GHY.js.map} +0 -0
  189. /package/dist/{chunk-X5AT253K.js.map → chunk-CVYGJUWM.js.map} +0 -0
  190. /package/dist/{chunk-D26RJQU7.js.map → chunk-CX7ETU2F.js.map} +0 -0
  191. /package/dist/{chunk-4CDLPMJK.js.map → chunk-D7LV3USE.js.map} +0 -0
  192. /package/dist/{chunk-WZKKQNYY.js.map → chunk-GA7OSSEA.js.map} +0 -0
  193. /package/dist/{chunk-EL6KZO43.js.map → chunk-GFWXDWEE.js.map} +0 -0
  194. /package/dist/{chunk-AQV7RQZH.js.map → chunk-K4WU4JOP.js.map} +0 -0
  195. /package/dist/{chunk-CAOMKM55.js.map → chunk-L7MVGGBH.js.map} +0 -0
  196. /package/dist/{chunk-P56JWQYV.js.map → chunk-LRFVISLA.js.map} +0 -0
  197. /package/dist/{chunk-2U6BQ5C4.js.map → chunk-MJHQMQEW.js.map} +0 -0
  198. /package/dist/{chunk-C7I4ZG6Q.js.map → chunk-TX552FQG.js.map} +0 -0
  199. /package/dist/{chunk-4CRLQMJ2.js.map → chunk-VIDRZCPQ.js.map} +0 -0
  200. /package/dist/{chunk-HCUZYGUK.js.map → chunk-WPTFJZ4L.js.map} +0 -0
@@ -15,6 +15,8 @@ var SftRecipeSchema = z.object({
15
15
  dataset: z.object({
16
16
  trainSplit: z.literal("train"),
17
17
  validationSplit: z.enum(["validation", "frozen_eval"]),
18
+ /** Exact bounded optimizer evaluation membership in the pinned held-out source. */
19
+ validationTaskIds: z.array(Id).min(1).max(1e3).refine((ids) => new Set(ids).size === ids.length, "Validation task IDs must be unique.").optional(),
18
20
  completionOnly: z.boolean(),
19
21
  maxSequenceLength: z.number().int().positive().max(32768),
20
22
  maxExamples: z.number().int().positive().max(1e5).default(1e3),
@@ -35,12 +37,30 @@ var SftRecipeSchema = z.object({
35
37
  gradientAccumulationSteps: z.number().int().positive().max(1e4),
36
38
  seed: z.number().int()
37
39
  }),
40
+ /** Explicit held-out generation horizon, separately reviewed from fitting. */
41
+ evaluation: z.object({ maxOutputTokens: z.number().int().positive().max(8192) }).strict().optional(),
38
42
  resourceLimits: z.object({
39
43
  cpuThreads: z.number().int().positive().max(256),
40
44
  memoryBytes: z.number().int().positive(),
41
45
  wallTimeMs: z.number().int().positive()
42
46
  })
43
47
  });
48
+ function selectSftValidationTasks(tasks, selection) {
49
+ const candidates = tasks.filter((task) => task.split === selection.validationSplit);
50
+ if (selection.validationTaskIds === void 0) return candidates;
51
+ const ids = SftRecipeSchema.shape.dataset.shape.validationTaskIds.parse(
52
+ selection.validationTaskIds
53
+ );
54
+ const byId = new Map(candidates.map((task) => [task.id, task]));
55
+ if (byId.size !== candidates.length)
56
+ throw new Error("Validation task identities must be unique.");
57
+ return ids.map((id) => {
58
+ const task = byId.get(id);
59
+ if (!task)
60
+ throw new Error("A selected validation task is absent from the pinned held-out split.");
61
+ return task;
62
+ });
63
+ }
44
64
  var ManagedSftRecipeSchema = SftRecipeSchema.safeExtend({
45
65
  dataset: SftRecipeSchema.shape.dataset.safeExtend({
46
66
  completionOnly: z.literal(true),
@@ -91,7 +111,11 @@ var TrainingSftImageCapabilitiesSchema = z.object({
91
111
  evidenceSha256: z.string().regex(/^[a-f0-9]{64}$/)
92
112
  }).strict().superRefine((value, context) => {
93
113
  if (new Set(value.supportedRanks).size !== value.supportedRanks.length)
94
- context.addIssue({ code: "custom", path: ["supportedRanks"], message: "Supported ranks must be unique." });
114
+ context.addIssue({
115
+ code: "custom",
116
+ path: ["supportedRanks"],
117
+ message: "Supported ranks must be unique."
118
+ });
95
119
  });
96
120
  function supportsTrainingSftRecipe(image, recipe) {
97
121
  return image.baseModel.id === recipe.baseModel.id && image.baseModel.revision === recipe.baseModel.revision && image.baseModel.tokenizerRevision === recipe.baseModel.tokenizerRevision && image.baseModel.chatTemplateHash === recipe.baseModel.chatTemplateHash && image.supportedRanks.includes(recipe.lora.rank) && recipe.dataset.maxSequenceLength <= image.maxSequenceLength && recipe.optimizer.epochs <= image.maxEpochs && recipe.optimizer.maxSteps <= image.maxOptimizerSteps;
@@ -99,8 +123,9 @@ function supportsTrainingSftRecipe(image, recipe) {
99
123
 
100
124
  export {
101
125
  SftRecipeSchema,
126
+ selectSftValidationTasks,
102
127
  ManagedSftRecipeSchema,
103
128
  TrainingSftImageCapabilitiesSchema,
104
129
  supportsTrainingSftRecipe
105
130
  };
106
- //# sourceMappingURL=chunk-YV6PPDXZ.js.map
131
+ //# sourceMappingURL=chunk-3Z5IK2UK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/training-supervised.ts"],"sourcesContent":["import { z } from \"zod\";\n\nconst Id = z.string().trim().min(1).max(240);\nconst Hash = z.string().trim().min(8).max(256);\n\n/** Shared recipe for the public API, local workbench, and managed executor.\n * Supervised training has no rollout-group, reward, or relative-loss settings.\n */\nexport const SftRecipeSchema = z.object({\n schemaVersion: z.literal(\"openpond.sftRecipe.v1\"),\n method: z.literal(\"sft\"),\n parameterization: z.literal(\"lora\"),\n baseModel: z.object({\n id: Id,\n revision: z.string().trim().min(1).max(256),\n tokenizerRevision: z.string().trim().min(1).max(256),\n chatTemplateHash: Hash,\n }),\n dataset: z.object({\n trainSplit: z.literal(\"train\"),\n validationSplit: z.enum([\"validation\", \"frozen_eval\"]),\n /** Exact bounded optimizer evaluation membership in the pinned held-out source. */\n validationTaskIds: z\n .array(Id)\n .min(1)\n .max(1000)\n .refine((ids) => new Set(ids).size === ids.length, \"Validation task IDs must be unique.\")\n .optional(),\n completionOnly: z.boolean(),\n maxSequenceLength: z.number().int().positive().max(32_768),\n maxExamples: z.number().int().positive().max(100_000).default(1_000),\n selectionStrategy: z.literal(\"stable_hash_top_n\").default(\"stable_hash_top_n\"),\n selectionSeed: z.number().int().default(17),\n }),\n lora: z.object({\n rank: z.number().int().positive().max(256),\n alpha: z.number().positive().max(1_024),\n dropout: z.number().min(0).max(1),\n targetModules: z.array(Id).min(1).max(100),\n }),\n optimizer: z.object({\n learningRate: z.number().positive(),\n epochs: z.number().positive().max(100),\n maxSteps: z.number().int().positive().max(1_000_000),\n batchSize: z.number().int().positive().max(10_000),\n gradientAccumulationSteps: z.number().int().positive().max(10_000),\n seed: z.number().int(),\n }),\n /** Explicit held-out generation horizon, separately reviewed from fitting. */\n evaluation: z.object({ maxOutputTokens: z.number().int().positive().max(8192) }).strict().optional(),\n resourceLimits: z.object({\n cpuThreads: z.number().int().positive().max(256),\n memoryBytes: z.number().int().positive(),\n wallTimeMs: z.number().int().positive(),\n }),\n});\nexport type SftRecipe = z.infer<typeof SftRecipeSchema>;\n\n/** Membership is explicit; missing, duplicate or wrong-split tasks never widen to all held-out rows. */\nexport function selectSftValidationTasks<T extends { id: string; split: string }>(\n tasks: readonly T[],\n selection: Pick<SftRecipe[\"dataset\"], \"validationSplit\" | \"validationTaskIds\">,\n): T[] {\n const candidates = tasks.filter((task) => task.split === selection.validationSplit);\n if (selection.validationTaskIds === undefined) return candidates;\n const ids = SftRecipeSchema.shape.dataset.shape.validationTaskIds.parse(\n selection.validationTaskIds,\n )!;\n const byId = new Map(candidates.map((task) => [task.id, task]));\n if (byId.size !== candidates.length)\n throw new Error(\"Validation task identities must be unique.\");\n return ids.map((id) => {\n const task = byId.get(id);\n if (!task)\n throw new Error(\"A selected validation task is absent from the pinned held-out split.\");\n return task;\n });\n}\n\n/** Managed authoring ceiling. An immutable worker's advertised SFT envelope\n * may be smaller and must also admit the recipe before paid execution.\n */\nexport const ManagedSftRecipeSchema = SftRecipeSchema.safeExtend({\n dataset: SftRecipeSchema.shape.dataset.safeExtend({\n completionOnly: z.literal(true),\n maxSequenceLength: z.number().int().min(2).max(8192),\n maxExamples: z.number().int().min(1).max(1000).default(1000),\n }),\n lora: SftRecipeSchema.shape.lora.safeExtend({\n rank: z.number().int().min(1).max(64),\n dropout: z.number().min(0).lt(1),\n targetModules: z\n .array(z.enum([\"q_proj\", \"k_proj\", \"v_proj\", \"o_proj\", \"gate_proj\", \"up_proj\", \"down_proj\"]))\n .min(1)\n .max(7),\n }),\n optimizer: SftRecipeSchema.shape.optimizer.safeExtend({\n learningRate: z.number().positive().max(0.001),\n epochs: z.number().positive().max(20),\n maxSteps: z.number().int().min(1).max(400),\n batchSize: z.number().int().min(1).max(32),\n gradientAccumulationSteps: z.number().int().min(1).max(32),\n seed: z\n .number()\n .int()\n .min(-(2 ** 31))\n .max(2 ** 31 - 1),\n }),\n resourceLimits: SftRecipeSchema.shape.resourceLimits.safeExtend({\n wallTimeMs: z.number().int().min(1000).max(21_600_000),\n }),\n}).superRefine((recipe, context) => {\n if (recipe.optimizer.batchSize * recipe.optimizer.gradientAccumulationSteps > 32)\n context.addIssue({\n code: \"custom\",\n path: [\"optimizer\"],\n message: \"Managed SFT supports at most 32 accumulated examples.\",\n });\n if (new Set(recipe.lora.targetModules).size !== recipe.lora.targetModules.length)\n context.addIssue({\n code: \"custom\",\n path: [\"lora\", \"targetModules\"],\n message: \"Adapter target modules must be unique.\",\n });\n});\n\n/** Image-specific support, rather than the broad managed authoring ceiling.\n * Receipt identity belongs to the server's reviewed immutable-image registry.\n */\nexport const TrainingSftImageCapabilitiesSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.managedSftImageSupport.v2\"),\n workerImageDigest: z.string().regex(/^sha256:[a-f0-9]{64}$/),\n workerSourceReleaseSha256: z.string().regex(/^[a-f0-9]{64}$/),\n baseModel: SftRecipeSchema.shape.baseModel,\n gpuCount: z.literal(1),\n supportedRanks: z.array(z.number().int().min(1).max(64)).min(1).max(64),\n maxSequenceLength: z.number().int().min(2).max(8192),\n maxEpochs: z.number().positive().max(20),\n maxOptimizerSteps: z.number().int().min(1).max(400),\n evidenceRef: z.string().trim().min(1).max(2048),\n evidenceSha256: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict()\n .superRefine((value, context) => {\n if (new Set(value.supportedRanks).size !== value.supportedRanks.length)\n context.addIssue({\n code: \"custom\",\n path: [\"supportedRanks\"],\n message: \"Supported ranks must be unique.\",\n });\n });\nexport type TrainingSftImageCapabilities = z.infer<typeof TrainingSftImageCapabilitiesSchema>;\n\nexport function supportsTrainingSftRecipe(\n image: TrainingSftImageCapabilities,\n recipe: SftRecipe,\n): boolean {\n return (\n image.baseModel.id === recipe.baseModel.id &&\n image.baseModel.revision === recipe.baseModel.revision &&\n image.baseModel.tokenizerRevision === recipe.baseModel.tokenizerRevision &&\n image.baseModel.chatTemplateHash === recipe.baseModel.chatTemplateHash &&\n image.supportedRanks.includes(recipe.lora.rank) &&\n recipe.dataset.maxSequenceLength <= image.maxSequenceLength &&\n recipe.optimizer.epochs <= image.maxEpochs &&\n recipe.optimizer.maxSteps <= image.maxOptimizerSteps\n );\n}\n"],"mappings":"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","names":[]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  HarnessExperimentPolicySchema,
3
3
  ModelTasksetRunRequestSchema
4
- } from "./chunk-XWUTYFOU.js";
4
+ } from "./chunk-5KJY44FB.js";
5
5
  import {
6
6
  contentHash
7
7
  } from "./chunk-H3JZ3P5T.js";
@@ -172,4 +172,4 @@ export {
172
172
  verifyExperimentDefinition,
173
173
  experimentDefinitionRef
174
174
  };
175
- //# sourceMappingURL=chunk-4REK5TTE.js.map
175
+ //# sourceMappingURL=chunk-4D4QSQC3.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  RunExperimentSchema
3
- } from "./chunk-2U6BQ5C4.js";
3
+ } from "./chunk-MJHQMQEW.js";
4
4
  import {
5
5
  contentHash
6
6
  } from "./chunk-H3JZ3P5T.js";
@@ -136,4 +136,4 @@ export {
136
136
  CandidateEvaluationPreparationSchema,
137
137
  CandidateEvaluationControlSchema
138
138
  };
139
- //# sourceMappingURL=chunk-AMZ2SWHR.js.map
139
+ //# sourceMappingURL=chunk-534W2O2S.js.map
@@ -11,7 +11,7 @@ import {
11
11
  ConnectedStartingAssetsRequestSchema,
12
12
  DatasetWorkspaceReceiptSchema,
13
13
  verifyConnectedStartingAssetsReceipt
14
- } from "./chunk-57ROW3XF.js";
14
+ } from "./chunk-ABOZV47D.js";
15
15
  import {
16
16
  ImmutableReleaseRefSchema,
17
17
  contentHash
@@ -653,4 +653,4 @@ export {
653
653
  summarizeCollectorCoverage2 as summarizeCollectorCoverage,
654
654
  hashCollectorEligibleBoundaries
655
655
  };
656
- //# sourceMappingURL=chunk-6LVLWRBJ.js.map
656
+ //# sourceMappingURL=chunk-54BJJL7G.js.map
@@ -3,10 +3,10 @@ import {
3
3
  EvaluationProjectContextSchema,
4
4
  ModelStarterAttemptPolicySchema,
5
5
  ModelStarterAttemptSummarySchema
6
- } from "./chunk-CAOMKM55.js";
6
+ } from "./chunk-L7MVGGBH.js";
7
7
  import {
8
8
  ModelProjectVersionedRefSchema
9
- } from "./chunk-H5KHLBC5.js";
9
+ } from "./chunk-WJZHSIGD.js";
10
10
  import {
11
11
  canonicalJson,
12
12
  canonicalSha256
@@ -179,4 +179,4 @@ export {
179
179
  verifyModelTasksetRunDetails,
180
180
  verifyModelTasksetRunResult
181
181
  };
182
- //# sourceMappingURL=chunk-XWUTYFOU.js.map
182
+ //# sourceMappingURL=chunk-5KJY44FB.js.map
@@ -24,7 +24,8 @@ var OpenPondTrainingApiError = class extends Error {
24
24
  retryable;
25
25
  requestId;
26
26
  details;
27
- constructor(status, error) {
27
+ responseMediaType;
28
+ constructor(status, error, responseMediaType2) {
28
29
  super(error.message);
29
30
  this.name = "OpenPondTrainingApiError";
30
31
  this.status = status;
@@ -32,8 +33,17 @@ var OpenPondTrainingApiError = class extends Error {
32
33
  this.retryable = error.retryable;
33
34
  this.requestId = error.requestId;
34
35
  this.details = error.details;
36
+ this.responseMediaType = responseMediaType2;
35
37
  }
36
38
  };
39
+ function responseMediaType(response) {
40
+ const type = response.headers.get("content-type")?.split(";", 1)[0]?.trim().toLowerCase();
41
+ if (!type) return "missing";
42
+ if (type === "application/json" || type.endsWith("+json")) return "json";
43
+ if (type === "text/html" || type === "application/xhtml+xml") return "html";
44
+ if (type.startsWith("text/")) return "text";
45
+ return "other";
46
+ }
37
47
  function headersRecord(headers) {
38
48
  const result = {};
39
49
  new Headers(headers).forEach((value, key) => {
@@ -67,10 +77,15 @@ function createTrainingRequest(input) {
67
77
  await new Promise((resolve) => setTimeout(resolve, 250 * 2 ** (attempt - 1)));
68
78
  continue;
69
79
  }
70
- const body = await readBoundedJsonResponse(response, responseLimit, "Training API response");
80
+ let body;
81
+ try {
82
+ body = await readBoundedJsonResponse(response, responseLimit, "Training API response");
83
+ } catch (error2) {
84
+ if (response.ok || !(error2 instanceof OpenPondProtocolError) || error2.code !== "invalid_json") throw error2;
85
+ }
71
86
  if (response.ok) return body;
72
- const error = trainingApiError(body, response.status);
73
- if (attempt === maximumAttempts || !trainingReadFailureIsRetryable(response.status, error)) {
87
+ const error = trainingApiError(body, response.status, responseMediaType(response));
88
+ if (attempt === maximumAttempts || init?.signal?.aborted || !trainingReadFailureIsRetryable(response.status, error)) {
74
89
  throw error;
75
90
  }
76
91
  await new Promise((resolve) => setTimeout(resolve, 250 * 2 ** (attempt - 1)));
@@ -92,15 +107,19 @@ function trainingReadFailureIsRetryable(status, error) {
92
107
  }
93
108
  return error instanceof TypeError;
94
109
  }
95
- function trainingApiError(value, status) {
110
+ function trainingApiError(value, status, mediaType) {
96
111
  const parsed = TrainingApiErrorSchema.safeParse(value);
97
112
  if (parsed.success) {
98
113
  return new OpenPondTrainingApiError(status, parsed.data);
99
114
  }
100
- return new OpenPondProtocolError(
101
- "invalid_error_response",
102
- `Training request failed with HTTP ${status} and an invalid error envelope.`
103
- );
115
+ return new OpenPondTrainingApiError(status, {
116
+ schemaVersion: "openpond.trainingApiError.v2",
117
+ code: "invalid_error_response",
118
+ message: `Training request failed with HTTP ${status} and an invalid error envelope (${mediaType} response).`,
119
+ retryable: trainingReadFailureIsRetryable(status, null),
120
+ requestId: null,
121
+ details: {}
122
+ }, mediaType);
104
123
  }
105
124
 
106
125
  export {
@@ -108,4 +127,4 @@ export {
108
127
  OpenPondTrainingApiError,
109
128
  createTrainingRequest
110
129
  };
111
- //# sourceMappingURL=chunk-QKLZZOZD.js.map
130
+ //# sourceMappingURL=chunk-7MLFWVDI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/training-transport.ts"],"sourcesContent":["import { DEFAULT_API_BASE_URL } from \"./endpoints.js\";\nimport { z } from \"zod\";\nimport {\n OPENPOND_TRAINING_MEDIA_TYPE,\n TRAINING_API_RESPONSE_MAX_BYTES,\n OpenPondProtocolError,\n readBoundedJsonResponse,\n} from \"./protocol.js\";\n\nexport const TrainingApiErrorSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.trainingApiError.v2\"),\n code: z.string().trim().min(1).max(200),\n message: z.string().trim().min(1).max(5_000),\n retryable: z.boolean().default(false),\n requestId: z.string().trim().min(1).max(500).nullable().default(null),\n details: z.record(z.string(), z.unknown()).default({}),\n })\n .strict();\n\nexport class OpenPondTrainingApiError extends Error {\n readonly status: number;\n readonly code: string;\n readonly retryable: boolean;\n readonly requestId: string | null;\n readonly details: Record<string, unknown>;\n readonly responseMediaType?: TrainingResponseMediaType;\n\n constructor(status: number, error: z.infer<typeof TrainingApiErrorSchema>, responseMediaType?: TrainingResponseMediaType) {\n super(error.message);\n this.name = \"OpenPondTrainingApiError\";\n this.status = status;\n this.code = error.code;\n this.retryable = error.retryable;\n this.requestId = error.requestId;\n this.details = error.details;\n this.responseMediaType = responseMediaType;\n }\n}\n\ntype TrainingResponseMediaType = \"json\" | \"html\" | \"text\" | \"other\" | \"missing\";\n\n// Classify a header without exposing arbitrary upstream values or response bodies.\nfunction responseMediaType(response: Response): TrainingResponseMediaType {\n const type = response.headers.get(\"content-type\")?.split(\";\", 1)[0]?.trim().toLowerCase();\n if (!type) return \"missing\";\n if (type === \"application/json\" || type.endsWith(\"+json\")) return \"json\";\n if (type === \"text/html\" || type === \"application/xhtml+xml\") return \"html\";\n if (type.startsWith(\"text/\")) return \"text\";\n return \"other\";\n}\n\nfunction headersRecord(headers: HeadersInit | undefined): Record<string, string> {\n const result: Record<string, string> = {};\n new Headers(headers).forEach((value, key) => {\n result[key] = value;\n });\n return result;\n}\n\nexport type TrainingTransportOptions = {\n baseUrl?: string;\n fetch?: typeof fetch;\n headers?: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);\n};\nexport function createTrainingRequest(input: TrainingTransportOptions) {\n const fetchImpl = input.fetch ?? fetch;\n const baseUrl = (input.baseUrl ?? DEFAULT_API_BASE_URL).replace(/\\/$/, \"\");\n\n async function request(\n pathname: string,\n init?: RequestInit,\n responseLimit = TRAINING_API_RESPONSE_MAX_BYTES,\n ): Promise<unknown> {\n const readOnly = init?.method === undefined || init.method.toUpperCase() === \"GET\";\n const maximumAttempts = readOnly ? 3 : 1;\n for (let attempt = 1; attempt <= maximumAttempts; attempt += 1) {\n let response: Response;\n try {\n const configuredHeaders =\n typeof input.headers === \"function\" ? await input.headers() : (input.headers ?? {});\n response = await fetchImpl(`${baseUrl}${pathname}`, {\n ...init,\n headers: {\n accept: OPENPOND_TRAINING_MEDIA_TYPE,\n ...(init?.body ? { \"content-type\": OPENPOND_TRAINING_MEDIA_TYPE } : {}),\n ...headersRecord(configuredHeaders),\n ...headersRecord(init?.headers),\n },\n });\n } catch (error) {\n if (\n attempt === maximumAttempts ||\n init?.signal?.aborted ||\n !trainingReadFailureIsRetryable(null, error)\n ) {\n throw error;\n }\n await new Promise((resolve) => setTimeout(resolve, 250 * 2 ** (attempt - 1)));\n continue;\n }\n let body: unknown;\n try {\n body = await readBoundedJsonResponse(response, responseLimit, \"Training API response\");\n } catch (error) {\n // Keep successful-response validation, size limits, and stream/abort failures intact.\n if (response.ok || !(error instanceof OpenPondProtocolError) || error.code !== \"invalid_json\") throw error;\n }\n if (response.ok) return body;\n const error = trainingApiError(body, response.status, responseMediaType(response));\n if (attempt === maximumAttempts || init?.signal?.aborted || !trainingReadFailureIsRetryable(response.status, error)) {\n throw error;\n }\n await new Promise((resolve) => setTimeout(resolve, 250 * 2 ** (attempt - 1)));\n }\n throw new OpenPondProtocolError(\n \"training_read_retry_exhausted\",\n \"Training read retry loop exhausted without a response.\",\n );\n }\n\n return request;\n}\n\nfunction trainingReadFailureIsRetryable(status: number | null, error: unknown): boolean {\n if (status !== null) {\n return status === 408 || status === 429 || status >= 500;\n }\n if (error instanceof OpenPondTrainingApiError) return error.retryable;\n if (error instanceof OpenPondProtocolError) {\n return error.code === \"invalid_error_response\";\n }\n return error instanceof TypeError;\n}\n\nfunction trainingApiError(value: unknown, status: number, mediaType: TrainingResponseMediaType): OpenPondTrainingApiError {\n const parsed = TrainingApiErrorSchema.safeParse(value);\n if (parsed.success) {\n return new OpenPondTrainingApiError(status, parsed.data);\n }\n return new OpenPondTrainingApiError(status, {\n schemaVersion: \"openpond.trainingApiError.v2\",\n code: \"invalid_error_response\",\n message: `Training request failed with HTTP ${status} and an invalid error envelope (${mediaType} response).`,\n retryable: trainingReadFailureIsRetryable(status, null),\n requestId: null,\n details: {},\n }, mediaType);\n}\n"],"mappings":";;;;;;;;;;;AACA,SAAS,SAAS;AAQX,IAAM,yBAAyB,EACnC,OAAO;AAAA,EACN,eAAe,EAAE,QAAQ,8BAA8B;AAAA,EACvD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACtC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK;AAAA,EAC3C,WAAW,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACpC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EACpE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC,EACA,OAAO;AAEH,IAAM,2BAAN,cAAuC,MAAM;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAgB,OAA+CA,oBAA+C;AACxH,UAAM,MAAM,OAAO;AACnB,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,OAAO,MAAM;AAClB,SAAK,YAAY,MAAM;AACvB,SAAK,YAAY,MAAM;AACvB,SAAK,UAAU,MAAM;AACrB,SAAK,oBAAoBA;AAAA,EAC3B;AACF;AAKA,SAAS,kBAAkB,UAA+C;AACxE,QAAM,OAAO,SAAS,QAAQ,IAAI,cAAc,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,YAAY;AACxF,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,SAAS,sBAAsB,KAAK,SAAS,OAAO,EAAG,QAAO;AAClE,MAAI,SAAS,eAAe,SAAS,wBAAyB,QAAO;AACrE,MAAI,KAAK,WAAW,OAAO,EAAG,QAAO;AACrC,SAAO;AACT;AAEA,SAAS,cAAc,SAA0D;AAC/E,QAAM,SAAiC,CAAC;AACxC,MAAI,QAAQ,OAAO,EAAE,QAAQ,CAAC,OAAO,QAAQ;AAC3C,WAAO,GAAG,IAAI;AAAA,EAChB,CAAC;AACD,SAAO;AACT;AAOO,SAAS,sBAAsB,OAAiC;AACrE,QAAM,YAAY,MAAM,SAAS;AACjC,QAAM,WAAW,MAAM,WAAW,sBAAsB,QAAQ,OAAO,EAAE;AAEzE,iBAAe,QACb,UACA,MACA,gBAAgB,iCACE;AAClB,UAAM,WAAW,MAAM,WAAW,UAAa,KAAK,OAAO,YAAY,MAAM;AAC7E,UAAM,kBAAkB,WAAW,IAAI;AACvC,aAAS,UAAU,GAAG,WAAW,iBAAiB,WAAW,GAAG;AAC9D,UAAI;AACJ,UAAI;AACF,cAAM,oBACJ,OAAO,MAAM,YAAY,aAAa,MAAM,MAAM,QAAQ,IAAK,MAAM,WAAW,CAAC;AACnF,mBAAW,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,IAAI;AAAA,UAClD,GAAG;AAAA,UACH,SAAS;AAAA,YACP,QAAQ;AAAA,YACR,GAAI,MAAM,OAAO,EAAE,gBAAgB,6BAA6B,IAAI,CAAC;AAAA,YACrE,GAAG,cAAc,iBAAiB;AAAA,YAClC,GAAG,cAAc,MAAM,OAAO;AAAA,UAChC;AAAA,QACF,CAAC;AAAA,MACH,SAASC,QAAO;AACd,YACE,YAAY,mBACZ,MAAM,QAAQ,WACd,CAAC,+BAA+B,MAAMA,MAAK,GAC3C;AACA,gBAAMA;AAAA,QACR;AACA,cAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,MAAM,MAAM,UAAU,EAAE,CAAC;AAC5E;AAAA,MACF;AACA,UAAI;AACJ,UAAI;AACF,eAAO,MAAM,wBAAwB,UAAU,eAAe,uBAAuB;AAAA,MACvF,SAASA,QAAO;AAEd,YAAI,SAAS,MAAM,EAAEA,kBAAiB,0BAA0BA,OAAM,SAAS,eAAgB,OAAMA;AAAA,MACvG;AACA,UAAI,SAAS,GAAI,QAAO;AACxB,YAAM,QAAQ,iBAAiB,MAAM,SAAS,QAAQ,kBAAkB,QAAQ,CAAC;AACjF,UAAI,YAAY,mBAAmB,MAAM,QAAQ,WAAW,CAAC,+BAA+B,SAAS,QAAQ,KAAK,GAAG;AACnH,cAAM;AAAA,MACR;AACA,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,MAAM,MAAM,UAAU,EAAE,CAAC;AAAA,IAC9E;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,+BAA+B,QAAuB,OAAyB;AACtF,MAAI,WAAW,MAAM;AACnB,WAAO,WAAW,OAAO,WAAW,OAAO,UAAU;AAAA,EACvD;AACA,MAAI,iBAAiB,yBAA0B,QAAO,MAAM;AAC5D,MAAI,iBAAiB,uBAAuB;AAC1C,WAAO,MAAM,SAAS;AAAA,EACxB;AACA,SAAO,iBAAiB;AAC1B;AAEA,SAAS,iBAAiB,OAAgB,QAAgB,WAAgE;AACxH,QAAM,SAAS,uBAAuB,UAAU,KAAK;AACrD,MAAI,OAAO,SAAS;AAClB,WAAO,IAAI,yBAAyB,QAAQ,OAAO,IAAI;AAAA,EACzD;AACA,SAAO,IAAI,yBAAyB,QAAQ;AAAA,IAC1C,eAAe;AAAA,IACf,MAAM;AAAA,IACN,SAAS,qCAAqC,MAAM,mCAAmC,SAAS;AAAA,IAChG,WAAW,+BAA+B,QAAQ,IAAI;AAAA,IACtD,WAAW;AAAA,IACX,SAAS,CAAC;AAAA,EACZ,GAAG,SAAS;AACd;","names":["responseMediaType","error"]}
@@ -11,7 +11,7 @@ import {
11
11
  TasksetPreferenceComparisonBindingSchema,
12
12
  TasksetPurposeSchema,
13
13
  TasksetSourceRefSchema
14
- } from "./chunk-AQV7RQZH.js";
14
+ } from "./chunk-K4WU4JOP.js";
15
15
  import {
16
16
  ModelTasksetDraftPreparationSchema
17
17
  } from "./chunk-TK3DXH7A.js";
@@ -910,4 +910,4 @@ export {
910
910
  computeTasksetHash,
911
911
  validatePortability
912
912
  };
913
- //# sourceMappingURL=chunk-4A4FNG4R.js.map
913
+ //# sourceMappingURL=chunk-7ZV626YS.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  TasksetDraftWorkspaceSchema
3
- } from "./chunk-JINWKUKR.js";
3
+ } from "./chunk-BT6CC6QB.js";
4
4
  import {
5
5
  TasksetCatalogReleaseRefSchema
6
6
  } from "./chunk-VE5JD5FN.js";
@@ -178,4 +178,4 @@ export {
178
178
  ConnectedStartingAssetsReceiptSchema,
179
179
  verifyConnectedStartingAssetsReceipt
180
180
  };
181
- //# sourceMappingURL=chunk-57ROW3XF.js.map
181
+ //# sourceMappingURL=chunk-ABOZV47D.js.map
@@ -4,7 +4,7 @@ import {
4
4
  publishTasksetDraft,
5
5
  renderTasksetDraftManifests,
6
6
  validateTasksetDraftWorkspace
7
- } from "./chunk-JINWKUKR.js";
7
+ } from "./chunk-BT6CC6QB.js";
8
8
  import {
9
9
  materializePortableTasksetRelease,
10
10
  portableTasksetEnvironment,
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  TasksetSchema,
15
15
  computeTasksetHash
16
- } from "./chunk-4A4FNG4R.js";
16
+ } from "./chunk-7ZV626YS.js";
17
17
  import {
18
18
  MAX_TASKSET_PACKAGE_BYTES,
19
19
  ModelStarterExecutionSchema,
@@ -32,7 +32,7 @@ import {
32
32
  resolveTasksetPackageInstructions,
33
33
  structuredSamplingSchemaDeclaration,
34
34
  validateTasksetPackage
35
- } from "./chunk-AQV7RQZH.js";
35
+ } from "./chunk-K4WU4JOP.js";
36
36
  import {
37
37
  ModelTasksetAuthoringOwnerSchema,
38
38
  ModelTasksetDraftPreparationSchema,
@@ -471,4 +471,4 @@ export {
471
471
  compileTasksetDraftWorkspace,
472
472
  compileModelTasksetDraftWorkspace
473
473
  };
474
- //# sourceMappingURL=chunk-3BILL33A.js.map
474
+ //# sourceMappingURL=chunk-BIQ5TG3T.js.map
@@ -5,10 +5,10 @@ import {
5
5
  computeTasksetHash,
6
6
  draftPublishIssues,
7
7
  validateTaskset
8
- } from "./chunk-4A4FNG4R.js";
8
+ } from "./chunk-7ZV626YS.js";
9
9
  import {
10
10
  TaskDataRecordSchema
11
- } from "./chunk-AQV7RQZH.js";
11
+ } from "./chunk-K4WU4JOP.js";
12
12
  import {
13
13
  TasksetDraftFileContentSchema,
14
14
  TasksetDraftFileMutationSchema,
@@ -487,4 +487,4 @@ export {
487
487
  tasksetDraftFromTaskset,
488
488
  publishTasksetDraft
489
489
  };
490
- //# sourceMappingURL=chunk-JINWKUKR.js.map
490
+ //# sourceMappingURL=chunk-BT6CC6QB.js.map
@@ -10,7 +10,7 @@ import {
10
10
  ExperimentImprovementTestRecipeSchema,
11
11
  verifyExperimentImprovementHumanOptions,
12
12
  verifyExperimentImprovementState
13
- } from "./chunk-D26RJQU7.js";
13
+ } from "./chunk-CX7ETU2F.js";
14
14
  import {
15
15
  fetchConnectedJson
16
16
  } from "./chunk-O6FKHAWN.js";
@@ -160,4 +160,4 @@ export {
160
160
  HostedProfileCandidateCommandSchema,
161
161
  ExperimentImprovementClient
162
162
  };
163
- //# sourceMappingURL=chunk-4PEK3YOW.js.map
163
+ //# sourceMappingURL=chunk-CNFN6GHY.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ExperimentImprovementOptionsSchema
3
- } from "./chunk-D26RJQU7.js";
3
+ } from "./chunk-CX7ETU2F.js";
4
4
  import {
5
5
  EvaluationCoordinationTransport
6
6
  } from "./chunk-456F3BXD.js";
@@ -264,4 +264,4 @@ export {
264
264
  AdvancedRefinerEvaluationAccountingSchema,
265
265
  OpenPondAdvancedRefinerEvaluationClient
266
266
  };
267
- //# sourceMappingURL=chunk-X5AT253K.js.map
267
+ //# sourceMappingURL=chunk-CVYGJUWM.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ExperimentScoringRequestSchema
3
- } from "./chunk-JWEIAEQ6.js";
3
+ } from "./chunk-TMNEDWA7.js";
4
4
  import {
5
5
  ImmutableReleaseRefSchema,
6
6
  contentHash
@@ -141,4 +141,4 @@ export {
141
141
  verifyExperimentImprovementHumanOptions,
142
142
  sealExperimentImprovementHumanOptions
143
143
  };
144
- //# sourceMappingURL=chunk-D26RJQU7.js.map
144
+ //# sourceMappingURL=chunk-CX7ETU2F.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createTrainingRequest
3
- } from "./chunk-QKLZZOZD.js";
3
+ } from "./chunk-7MLFWVDI.js";
4
4
  import {
5
5
  OpenPondProtocolError
6
6
  } from "./chunk-B3ZHJ2KK.js";
@@ -158,4 +158,4 @@ export {
158
158
  createTrainingHardwareClient,
159
159
  createHardwareObservationClient
160
160
  };
161
- //# sourceMappingURL=chunk-4CDLPMJK.js.map
161
+ //# sourceMappingURL=chunk-D7LV3USE.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-456F3BXD.js";
4
4
  import {
5
5
  RunExperimentSchema
6
- } from "./chunk-2U6BQ5C4.js";
6
+ } from "./chunk-MJHQMQEW.js";
7
7
  import {
8
8
  ImmutableReleaseRefSchema,
9
9
  assertContentHash,
@@ -171,4 +171,4 @@ export {
171
171
  ExperimentEvaluationScheduleCommandSchema,
172
172
  OpenPondExperimentEvaluationScheduleClient
173
173
  };
174
- //# sourceMappingURL=chunk-WZKKQNYY.js.map
174
+ //# sourceMappingURL=chunk-GA7OSSEA.js.map
@@ -2,7 +2,7 @@ import {
2
2
  TasksetSchema,
3
3
  computeTasksetHash,
4
4
  createTasksetDraft
5
- } from "./chunk-4A4FNG4R.js";
5
+ } from "./chunk-7ZV626YS.js";
6
6
  import {
7
7
  GraderFixtureSchema,
8
8
  GraderSpecSchema,
@@ -11,7 +11,7 @@ import {
11
11
  decodeTasksetPackageFile,
12
12
  resolveTasksetPackageInstructions,
13
13
  validateTasksetPackage
14
- } from "./chunk-AQV7RQZH.js";
14
+ } from "./chunk-K4WU4JOP.js";
15
15
  import {
16
16
  contentHash
17
17
  } from "./chunk-H3JZ3P5T.js";
@@ -266,4 +266,4 @@ export {
266
266
  prepareImportedTasksetPackage,
267
267
  tasksetPackageSourceId
268
268
  };
269
- //# sourceMappingURL=chunk-EL6KZO43.js.map
269
+ //# sourceMappingURL=chunk-GFWXDWEE.js.map