openpond-sdk 0.12.13 → 0.12.15

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 (301) hide show
  1. package/TRAINING_WORKFLOWS.md +497 -4
  2. package/dist/advanced-refiner-evaluations.js +7 -7
  3. package/dist/candidate-evaluations.js +6 -6
  4. package/dist/{chunk-TLSP5JKG.js → chunk-3BYFS4RO.js} +2 -2
  5. package/dist/{chunk-XRBM6PBD.js → chunk-3MDNVNBM.js} +5 -5
  6. package/dist/{chunk-CNREFTAV.js → chunk-3VUF5H3B.js} +2 -2
  7. package/dist/{chunk-LHHHJIDR.js → chunk-626JLH4D.js} +2 -2
  8. package/dist/{chunk-Q4TKI2MV.js → chunk-774OWTCD.js} +63 -80
  9. package/dist/chunk-774OWTCD.js.map +1 -0
  10. package/dist/{chunk-HAQPGTQ4.js → chunk-7F43U2NC.js} +2 -2
  11. package/dist/{chunk-ORYA2G7S.js → chunk-7G47YXQT.js} +3 -3
  12. package/dist/{chunk-XMVSQIK4.js → chunk-AG6UJ3DI.js} +2 -2
  13. package/dist/chunk-EBB36D5X.js +866 -0
  14. package/dist/chunk-EBB36D5X.js.map +1 -0
  15. package/dist/{chunk-JBYFD3QS.js → chunk-GBDBKGXW.js} +3 -3
  16. package/dist/{chunk-GHPCQXG5.js → chunk-GCUWJUUM.js} +2 -2
  17. package/dist/{chunk-C4W2MEFP.js → chunk-GS5HEE4M.js} +2 -2
  18. package/dist/{chunk-ATVQQCYN.js → chunk-GWXJSBWR.js} +2 -2
  19. package/dist/{chunk-RLW4Y5ZV.js → chunk-JMFYNIYZ.js} +4 -3
  20. package/dist/chunk-JMFYNIYZ.js.map +1 -0
  21. package/dist/{chunk-UOV2LEXS.js → chunk-MVAEE5EI.js} +60 -3
  22. package/dist/chunk-MVAEE5EI.js.map +1 -0
  23. package/dist/{chunk-KOJC3TH4.js → chunk-OBI2MQYU.js} +6 -6
  24. package/dist/chunk-PMVSO23F.js +65 -0
  25. package/dist/chunk-PMVSO23F.js.map +1 -0
  26. package/dist/{chunk-JDQVAG3R.js → chunk-Q4RGCEOI.js} +3 -3
  27. package/dist/{chunk-YIGFQWZV.js → chunk-QIGMNB6M.js} +3 -3
  28. package/dist/{chunk-O3NOGKMT.js → chunk-QNOCM5JX.js} +2 -2
  29. package/dist/{chunk-2LVR24GU.js → chunk-QOX57Y27.js} +6 -6
  30. package/dist/chunk-QTNYXOJW.js +27 -0
  31. package/dist/chunk-QTNYXOJW.js.map +1 -0
  32. package/dist/{chunk-UWY5PUHR.js → chunk-RN5MK7NH.js} +2 -2
  33. package/dist/{chunk-47I6LT4X.js → chunk-RT7SQHO4.js} +271 -7
  34. package/dist/chunk-RT7SQHO4.js.map +1 -0
  35. package/dist/chunk-UVQENVTW.js +85 -0
  36. package/dist/chunk-UVQENVTW.js.map +1 -0
  37. package/dist/{chunk-7BYLH47N.js → chunk-VPK3SM45.js} +15 -3
  38. package/dist/{chunk-7BYLH47N.js.map → chunk-VPK3SM45.js.map} +1 -1
  39. package/dist/{chunk-RN5G3DQN.js → chunk-WM3U4RPZ.js} +6 -6
  40. package/dist/{chunk-IFBCLRBM.js → chunk-ZQ6QTYRE.js} +2 -2
  41. package/dist/{chunk-IFBCLRBM.js.map → chunk-ZQ6QTYRE.js.map} +1 -1
  42. package/dist/{chunk-K54BDIKL.js → chunk-ZQFROKKS.js} +3 -3
  43. package/dist/{chunk-ZYDDHHZZ.js → chunk-ZRTNR4U7.js} +3 -3
  44. package/dist/connected-evidence.js +9 -17
  45. package/dist/dataset-workspaces.js +12 -17
  46. package/dist/dataset-workspaces.js.map +1 -1
  47. package/dist/errors.js +3 -3
  48. package/dist/experiment-evaluation-schedules.js +18 -21
  49. package/dist/experiment-improvements.js +9 -8
  50. package/dist/experiments.js +17 -20
  51. package/dist/index.js +25 -27
  52. package/dist/index.js.map +1 -1
  53. package/dist/model-projects.js +1 -1
  54. package/dist/model-starter-attempts.js +2 -2
  55. package/dist/model-starter-catalog.js +4 -12
  56. package/dist/model-starter-catalog.js.map +1 -1
  57. package/dist/model-starters.js +4 -12
  58. package/dist/model-taskset-runs.js +3 -3
  59. package/dist/post-training.js +6 -6
  60. package/dist/taskset-drafts.js +6 -15
  61. package/dist/taskset-drafts.js.map +1 -1
  62. package/dist/taskset-packages.js +28 -18
  63. package/dist/tool-learning-local-store.js +2 -1
  64. package/dist/tool-learning-local-store.js.map +1 -1
  65. package/dist/training-bundle.js +33 -32
  66. package/dist/training-bundle.js.map +1 -1
  67. package/dist/training.js +8483 -49
  68. package/dist/training.js.map +1 -1
  69. package/dist/types/packages/cloud/src/sandbox/types/billing.d.ts +87 -6
  70. package/dist/types/packages/cloud/src/sandbox/types/billing.d.ts.map +1 -1
  71. package/dist/types/packages/cloud/src/sandbox/types/io.d.ts +3 -0
  72. package/dist/types/packages/cloud/src/sandbox/types/io.d.ts.map +1 -1
  73. package/dist/types/packages/sdk/src/activation-experiment-draft.d.ts +70 -0
  74. package/dist/types/packages/sdk/src/activation-experiment-draft.d.ts.map +1 -0
  75. package/dist/types/packages/sdk/src/activation-form-compiler.d.ts +25 -0
  76. package/dist/types/packages/sdk/src/activation-form-compiler.d.ts.map +1 -0
  77. package/dist/types/packages/sdk/src/activation-reference.d.ts +347 -0
  78. package/dist/types/packages/sdk/src/activation-reference.d.ts.map +1 -0
  79. package/dist/types/packages/sdk/src/activation-result-comparison.d.ts +185 -0
  80. package/dist/types/packages/sdk/src/activation-result-comparison.d.ts.map +1 -0
  81. package/dist/types/packages/sdk/src/alphaedit-artifact.d.ts +872 -0
  82. package/dist/types/packages/sdk/src/alphaedit-artifact.d.ts.map +1 -0
  83. package/dist/types/packages/sdk/src/alphaedit-experiment-draft.d.ts +123 -0
  84. package/dist/types/packages/sdk/src/alphaedit-experiment-draft.d.ts.map +1 -0
  85. package/dist/types/packages/sdk/src/alphaedit-model-serving.d.ts +3218 -0
  86. package/dist/types/packages/sdk/src/alphaedit-model-serving.d.ts.map +1 -0
  87. package/dist/types/packages/sdk/src/alphaedit.d.ts +258 -0
  88. package/dist/types/packages/sdk/src/alphaedit.d.ts.map +1 -0
  89. package/dist/types/packages/sdk/src/dataset-training-review-contracts.d.ts +181 -0
  90. package/dist/types/packages/sdk/src/dataset-training-review-contracts.d.ts.map +1 -0
  91. package/dist/types/packages/sdk/src/dataset-training-review-files.d.ts +17 -0
  92. package/dist/types/packages/sdk/src/dataset-training-review-files.d.ts.map +1 -0
  93. package/dist/types/packages/sdk/src/dataset-training-review-preparation.d.ts +541 -0
  94. package/dist/types/packages/sdk/src/dataset-training-review-preparation.d.ts.map +1 -0
  95. package/dist/types/packages/sdk/src/dataset-training-review-source.d.ts +41 -0
  96. package/dist/types/packages/sdk/src/dataset-training-review-source.d.ts.map +1 -0
  97. package/dist/types/packages/sdk/src/dataset-training-review.d.ts +79 -0
  98. package/dist/types/packages/sdk/src/dataset-training-review.d.ts.map +1 -0
  99. package/dist/types/packages/sdk/src/decision-experiment-authoring.d.ts +11 -0
  100. package/dist/types/packages/sdk/src/decision-experiment-authoring.d.ts.map +1 -0
  101. package/dist/types/packages/sdk/src/decision-experiment-draft.d.ts +150 -0
  102. package/dist/types/packages/sdk/src/decision-experiment-draft.d.ts.map +1 -0
  103. package/dist/types/packages/sdk/src/decision-model-artifact.d.ts +541 -0
  104. package/dist/types/packages/sdk/src/decision-model-artifact.d.ts.map +1 -0
  105. package/dist/types/packages/sdk/src/decision-model-data.d.ts +588 -0
  106. package/dist/types/packages/sdk/src/decision-model-data.d.ts.map +1 -0
  107. package/dist/types/packages/sdk/src/decision-model-scoring.d.ts +1587 -0
  108. package/dist/types/packages/sdk/src/decision-model-scoring.d.ts.map +1 -0
  109. package/dist/types/packages/sdk/src/decision-model-serving.d.ts +5328 -0
  110. package/dist/types/packages/sdk/src/decision-model-serving.d.ts.map +1 -0
  111. package/dist/types/packages/sdk/src/decision-model-training.d.ts +871 -0
  112. package/dist/types/packages/sdk/src/decision-model-training.d.ts.map +1 -0
  113. package/dist/types/packages/sdk/src/decision-model-version.d.ts +2971 -0
  114. package/dist/types/packages/sdk/src/decision-model-version.d.ts.map +1 -0
  115. package/dist/types/packages/sdk/src/decision-model.d.ts +241 -0
  116. package/dist/types/packages/sdk/src/decision-model.d.ts.map +1 -0
  117. package/dist/types/packages/sdk/src/engram-adapter.d.ts +788 -0
  118. package/dist/types/packages/sdk/src/engram-adapter.d.ts.map +1 -0
  119. package/dist/types/packages/sdk/src/engram-experiment-authoring.d.ts +14 -0
  120. package/dist/types/packages/sdk/src/engram-experiment-authoring.d.ts.map +1 -0
  121. package/dist/types/packages/sdk/src/engram-experiment-draft.d.ts +92 -0
  122. package/dist/types/packages/sdk/src/engram-experiment-draft.d.ts.map +1 -0
  123. package/dist/types/packages/sdk/src/engram-inference.d.ts +180 -0
  124. package/dist/types/packages/sdk/src/engram-inference.d.ts.map +1 -0
  125. package/dist/types/packages/sdk/src/engram-model-serving.d.ts +2183 -0
  126. package/dist/types/packages/sdk/src/engram-model-serving.d.ts.map +1 -0
  127. package/dist/types/packages/sdk/src/engram-model-version.d.ts +1335 -0
  128. package/dist/types/packages/sdk/src/engram-model-version.d.ts.map +1 -0
  129. package/dist/types/packages/sdk/src/evaluation-experiment-draft.d.ts +1009 -0
  130. package/dist/types/packages/sdk/src/evaluation-experiment-draft.d.ts.map +1 -0
  131. package/dist/types/packages/sdk/src/experiment-client.d.ts +686 -686
  132. package/dist/types/packages/sdk/src/experiment-draft-storage.d.ts +11638 -0
  133. package/dist/types/packages/sdk/src/experiment-draft-storage.d.ts.map +1 -0
  134. package/dist/types/packages/sdk/src/experiment-result-reference.d.ts +288 -0
  135. package/dist/types/packages/sdk/src/experiment-result-reference.d.ts.map +1 -0
  136. package/dist/types/packages/sdk/src/experiment-run-details.d.ts +7 -7
  137. package/dist/types/packages/sdk/src/experiment-starting-model.d.ts +911 -0
  138. package/dist/types/packages/sdk/src/experiment-starting-model.d.ts.map +1 -0
  139. package/dist/types/packages/sdk/src/hosted-evaluation-experiment-draft.d.ts +693 -0
  140. package/dist/types/packages/sdk/src/hosted-evaluation-experiment-draft.d.ts.map +1 -0
  141. package/dist/types/packages/sdk/src/managed-alphaedit-executions.d.ts +3152 -0
  142. package/dist/types/packages/sdk/src/managed-alphaedit-executions.d.ts.map +1 -0
  143. package/dist/types/packages/sdk/src/managed-compute-price.d.ts +50 -0
  144. package/dist/types/packages/sdk/src/managed-compute-price.d.ts.map +1 -0
  145. package/dist/types/packages/sdk/src/managed-decision-executions.d.ts +6755 -0
  146. package/dist/types/packages/sdk/src/managed-decision-executions.d.ts.map +1 -0
  147. package/dist/types/packages/sdk/src/managed-engram-executions.d.ts +2774 -0
  148. package/dist/types/packages/sdk/src/managed-engram-executions.d.ts.map +1 -0
  149. package/dist/types/packages/sdk/src/managed-modification-compilation.d.ts +523 -0
  150. package/dist/types/packages/sdk/src/managed-modification-compilation.d.ts.map +1 -0
  151. package/dist/types/packages/sdk/src/managed-modification-executions.d.ts +1470 -0
  152. package/dist/types/packages/sdk/src/managed-modification-executions.d.ts.map +1 -0
  153. package/dist/types/packages/sdk/src/managed-neuron-training-executions.d.ts +3447 -0
  154. package/dist/types/packages/sdk/src/managed-neuron-training-executions.d.ts.map +1 -0
  155. package/dist/types/packages/sdk/src/managed-serving-usage.d.ts +228 -0
  156. package/dist/types/packages/sdk/src/managed-serving-usage.d.ts.map +1 -0
  157. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts +26 -26
  158. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts.map +1 -1
  159. package/dist/types/packages/sdk/src/model-batch-review-contracts.d.ts +11 -0
  160. package/dist/types/packages/sdk/src/model-batch-review-contracts.d.ts.map +1 -1
  161. package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts +10 -0
  162. package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts.map +1 -1
  163. package/dist/types/packages/sdk/src/model-batch-review.d.ts +21 -0
  164. package/dist/types/packages/sdk/src/model-batch-review.d.ts.map +1 -1
  165. package/dist/types/packages/sdk/src/model-learning-policy.d.ts +9 -0
  166. package/dist/types/packages/sdk/src/model-learning-policy.d.ts.map +1 -1
  167. package/dist/types/packages/sdk/src/model-modification-capabilities.d.ts +323 -0
  168. package/dist/types/packages/sdk/src/model-modification-capabilities.d.ts.map +1 -0
  169. package/dist/types/packages/sdk/src/model-serving-pool.d.ts +28 -0
  170. package/dist/types/packages/sdk/src/model-serving-pool.d.ts.map +1 -0
  171. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts +22 -0
  172. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts.map +1 -1
  173. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +216 -216
  174. package/dist/types/packages/sdk/src/modification-recordings.d.ts +1303 -0
  175. package/dist/types/packages/sdk/src/modification-recordings.d.ts.map +1 -0
  176. package/dist/types/packages/sdk/src/neuron-calibration-records.d.ts +816 -0
  177. package/dist/types/packages/sdk/src/neuron-calibration-records.d.ts.map +1 -0
  178. package/dist/types/packages/sdk/src/neuron-residual-calibration.d.ts +189 -0
  179. package/dist/types/packages/sdk/src/neuron-residual-calibration.d.ts.map +1 -0
  180. package/dist/types/packages/sdk/src/neuron-steering.d.ts +260 -0
  181. package/dist/types/packages/sdk/src/neuron-steering.d.ts.map +1 -0
  182. package/dist/types/packages/sdk/src/neuron-training-artifact.d.ts +517 -0
  183. package/dist/types/packages/sdk/src/neuron-training-artifact.d.ts.map +1 -0
  184. package/dist/types/packages/sdk/src/neuron-training-experiment-draft.d.ts +172 -0
  185. package/dist/types/packages/sdk/src/neuron-training-experiment-draft.d.ts.map +1 -0
  186. package/dist/types/packages/sdk/src/neuron-training-model-serving.d.ts +3502 -0
  187. package/dist/types/packages/sdk/src/neuron-training-model-serving.d.ts.map +1 -0
  188. package/dist/types/packages/sdk/src/neuron-training-result.d.ts +590 -0
  189. package/dist/types/packages/sdk/src/neuron-training-result.d.ts.map +1 -0
  190. package/dist/types/packages/sdk/src/neuron-training.d.ts +260 -0
  191. package/dist/types/packages/sdk/src/neuron-training.d.ts.map +1 -0
  192. package/dist/types/packages/sdk/src/post-training.d.ts +21 -0
  193. package/dist/types/packages/sdk/src/post-training.d.ts.map +1 -1
  194. package/dist/types/packages/sdk/src/profile-external-dataset-package.d.ts +10 -0
  195. package/dist/types/packages/sdk/src/profile-external-dataset-package.d.ts.map +1 -1
  196. package/dist/types/packages/sdk/src/steering-experiment-authoring.d.ts +15 -0
  197. package/dist/types/packages/sdk/src/steering-experiment-authoring.d.ts.map +1 -0
  198. package/dist/types/packages/sdk/src/steering-experiment-source-verification.d.ts +97 -0
  199. package/dist/types/packages/sdk/src/steering-experiment-source-verification.d.ts.map +1 -0
  200. package/dist/types/packages/sdk/src/steering-experiment-source.d.ts +29 -0
  201. package/dist/types/packages/sdk/src/steering-experiment-source.d.ts.map +1 -0
  202. package/dist/types/packages/sdk/src/steering-inference.d.ts +224 -0
  203. package/dist/types/packages/sdk/src/steering-inference.d.ts.map +1 -0
  204. package/dist/types/packages/sdk/src/steering-model-selection.d.ts +15 -0
  205. package/dist/types/packages/sdk/src/steering-model-selection.d.ts.map +1 -0
  206. package/dist/types/packages/sdk/src/steering-model-serving.d.ts +8759 -0
  207. package/dist/types/packages/sdk/src/steering-model-serving.d.ts.map +1 -0
  208. package/dist/types/packages/sdk/src/steering-profile-publication.d.ts +7892 -0
  209. package/dist/types/packages/sdk/src/steering-profile-publication.d.ts.map +1 -0
  210. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts +20 -0
  211. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts.map +1 -1
  212. package/dist/types/packages/sdk/src/taskset-package-client.d.ts +40 -0
  213. package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
  214. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts +20 -0
  215. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts.map +1 -1
  216. package/dist/types/packages/sdk/src/taskset-package-learning.d.ts +20 -0
  217. package/dist/types/packages/sdk/src/taskset-package-learning.d.ts.map +1 -1
  218. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +10 -0
  219. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts.map +1 -1
  220. package/dist/types/packages/sdk/src/taskset-packages.d.ts +4 -0
  221. package/dist/types/packages/sdk/src/taskset-packages.d.ts.map +1 -1
  222. package/dist/types/packages/sdk/src/tool-learning-local-store.d.ts +2 -0
  223. package/dist/types/packages/sdk/src/tool-learning-local-store.d.ts.map +1 -1
  224. package/dist/types/packages/sdk/src/training-compute-selection.d.ts +186 -1
  225. package/dist/types/packages/sdk/src/training-compute-selection.d.ts.map +1 -1
  226. package/dist/types/packages/sdk/src/training-estimate-workload.d.ts +185 -0
  227. package/dist/types/packages/sdk/src/training-estimate-workload.d.ts.map +1 -0
  228. package/dist/types/packages/sdk/src/training-estimates.d.ts +185 -0
  229. package/dist/types/packages/sdk/src/training-estimates.d.ts.map +1 -1
  230. package/dist/types/packages/sdk/src/training-executions.d.ts +275 -0
  231. package/dist/types/packages/sdk/src/training-executions.d.ts.map +1 -0
  232. package/dist/types/packages/sdk/src/training-experiment-setup.d.ts +5957 -0
  233. package/dist/types/packages/sdk/src/training-experiment-setup.d.ts.map +1 -0
  234. package/dist/types/packages/sdk/src/training-funding.d.ts +153 -0
  235. package/dist/types/packages/sdk/src/training-funding.d.ts.map +1 -0
  236. package/dist/types/packages/sdk/src/training-hardware-catalog.d.ts +155 -0
  237. package/dist/types/packages/sdk/src/training-hardware-catalog.d.ts.map +1 -0
  238. package/dist/types/packages/sdk/src/training-job-contracts.d.ts +1535 -0
  239. package/dist/types/packages/sdk/src/training-job-contracts.d.ts.map +1 -0
  240. package/dist/types/packages/sdk/src/training-learning-batch.d.ts +40 -40
  241. package/dist/types/packages/sdk/src/training-model-save.d.ts +2466 -0
  242. package/dist/types/packages/sdk/src/training-model-save.d.ts.map +1 -0
  243. package/dist/types/packages/sdk/src/training-model-serving-control.d.ts +397 -0
  244. package/dist/types/packages/sdk/src/training-model-serving-control.d.ts.map +1 -0
  245. package/dist/types/packages/sdk/src/training-model-serving.d.ts +2662 -0
  246. package/dist/types/packages/sdk/src/training-model-serving.d.ts.map +1 -0
  247. package/dist/types/packages/sdk/src/training-preparations.d.ts +1001 -0
  248. package/dist/types/packages/sdk/src/training-preparations.d.ts.map +1 -1
  249. package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts +1 -1
  250. package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts.map +1 -1
  251. package/dist/types/packages/sdk/src/training-result.d.ts +4577 -0
  252. package/dist/types/packages/sdk/src/training-result.d.ts.map +1 -0
  253. package/dist/types/packages/sdk/src/training-usage-funding.d.ts +273 -0
  254. package/dist/types/packages/sdk/src/training-usage-funding.d.ts.map +1 -0
  255. package/dist/types/packages/sdk/src/training-usage-status.d.ts +27 -0
  256. package/dist/types/packages/sdk/src/training-usage-status.d.ts.map +1 -0
  257. package/dist/types/packages/sdk/src/training.d.ts +18309 -3682
  258. package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
  259. package/dist/types/packages/sdk/src/weight-experiment-authoring.d.ts +23 -0
  260. package/dist/types/packages/sdk/src/weight-experiment-authoring.d.ts.map +1 -0
  261. package/dist/types/packages/sdk/src/weight-inference.d.ts +155 -0
  262. package/dist/types/packages/sdk/src/weight-inference.d.ts.map +1 -0
  263. package/dist/types/packages/sdk/src/weight-model-versions.d.ts +4578 -0
  264. package/dist/types/packages/sdk/src/weight-model-versions.d.ts.map +1 -0
  265. package/fixtures/python-foundation/activation-reference-workflow.json +6403 -0
  266. package/fixtures/python-foundation/dataset-training-review-http-workflow.json +62 -0
  267. package/fixtures/python-foundation/operation-matrix.json +1410 -220
  268. package/fixtures/python-foundation/schemas.json +59491 -25928
  269. package/fixtures/python-foundation/training-estimate-http-workflow.json +100 -0
  270. package/fixtures/python-foundation/training-funding-http-workflow.json +61 -0
  271. package/fixtures/python-foundation/training-model-save-http-workflow.json +302 -0
  272. package/fixtures/python-foundation/training-model-serving-control-http-workflow.json +1633 -0
  273. package/fixtures/python-foundation/training-model-serving-http-workflow.json +1181 -0
  274. package/fixtures/python-foundation/training-result-http-workflow.json +230 -0
  275. package/package.json +3 -3
  276. package/dist/chunk-47I6LT4X.js.map +0 -1
  277. package/dist/chunk-GJRXJL6G.js +0 -1528
  278. package/dist/chunk-GJRXJL6G.js.map +0 -1
  279. package/dist/chunk-Q4TKI2MV.js.map +0 -1
  280. package/dist/chunk-RLW4Y5ZV.js.map +0 -1
  281. package/dist/chunk-UOV2LEXS.js.map +0 -1
  282. /package/dist/{chunk-TLSP5JKG.js.map → chunk-3BYFS4RO.js.map} +0 -0
  283. /package/dist/{chunk-XRBM6PBD.js.map → chunk-3MDNVNBM.js.map} +0 -0
  284. /package/dist/{chunk-CNREFTAV.js.map → chunk-3VUF5H3B.js.map} +0 -0
  285. /package/dist/{chunk-LHHHJIDR.js.map → chunk-626JLH4D.js.map} +0 -0
  286. /package/dist/{chunk-HAQPGTQ4.js.map → chunk-7F43U2NC.js.map} +0 -0
  287. /package/dist/{chunk-ORYA2G7S.js.map → chunk-7G47YXQT.js.map} +0 -0
  288. /package/dist/{chunk-XMVSQIK4.js.map → chunk-AG6UJ3DI.js.map} +0 -0
  289. /package/dist/{chunk-JBYFD3QS.js.map → chunk-GBDBKGXW.js.map} +0 -0
  290. /package/dist/{chunk-GHPCQXG5.js.map → chunk-GCUWJUUM.js.map} +0 -0
  291. /package/dist/{chunk-C4W2MEFP.js.map → chunk-GS5HEE4M.js.map} +0 -0
  292. /package/dist/{chunk-ATVQQCYN.js.map → chunk-GWXJSBWR.js.map} +0 -0
  293. /package/dist/{chunk-KOJC3TH4.js.map → chunk-OBI2MQYU.js.map} +0 -0
  294. /package/dist/{chunk-JDQVAG3R.js.map → chunk-Q4RGCEOI.js.map} +0 -0
  295. /package/dist/{chunk-YIGFQWZV.js.map → chunk-QIGMNB6M.js.map} +0 -0
  296. /package/dist/{chunk-O3NOGKMT.js.map → chunk-QNOCM5JX.js.map} +0 -0
  297. /package/dist/{chunk-2LVR24GU.js.map → chunk-QOX57Y27.js.map} +0 -0
  298. /package/dist/{chunk-UWY5PUHR.js.map → chunk-RN5MK7NH.js.map} +0 -0
  299. /package/dist/{chunk-RN5G3DQN.js.map → chunk-WM3U4RPZ.js.map} +0 -0
  300. /package/dist/{chunk-K54BDIKL.js.map → chunk-ZQFROKKS.js.map} +0 -0
  301. /package/dist/{chunk-ZYDDHHZZ.js.map → chunk-ZRTNR4U7.js.map} +0 -0
@@ -0,0 +1,866 @@
1
+ import {
2
+ SftRecipeSchema
3
+ } from "./chunk-UVQENVTW.js";
4
+ import {
5
+ ModelProjectBaseModelSchema,
6
+ ModelProjectImmutableRefSchema,
7
+ ModelProjectRecipeDocumentSchema,
8
+ ModelProjectVersionedRefSchema,
9
+ TrainingGpuSelectionSchema
10
+ } from "./chunk-MVAEE5EI.js";
11
+ import {
12
+ OpenPondProtocolError,
13
+ TRAINING_INPUT_ARTIFACT_MAX_BYTES,
14
+ TRAINING_JOB_SUBMISSION_MAX_BYTES,
15
+ assertCanonicalPayloadSize,
16
+ canonicalSha256
17
+ } from "./chunk-B3ZHJ2KK.js";
18
+
19
+ // src/managed-compute-price.ts
20
+ import { z } from "zod";
21
+ var Hash = z.string().regex(/^[a-f0-9]{64}$/);
22
+ var Money = z.string().regex(/^(0|[1-9]\d*)(\.\d{1,6})?$/).max(24);
23
+ var micros = (value) => {
24
+ const [whole, fraction = ""] = Money.parse(value).split(".");
25
+ return BigInt(whole) * 1000000n + BigInt(fraction.padEnd(6, "0"));
26
+ };
27
+ var ComputeAppliedPriceSchema = z.object({
28
+ schemaVersion: z.literal("openpond.computeAppliedPrice.v1"),
29
+ version: z.string().min(1).max(500),
30
+ service: z.enum(["managed_rl", "model_modification", "model_serving", "sandbox"]),
31
+ profileHash: Hash,
32
+ currency: z.literal("USD"),
33
+ unit: z.literal("resource_hour"),
34
+ hourlyUsd: Money.refine((value) => {
35
+ if (!Money.safeParse(value).success) return false;
36
+ const amount = micros(value);
37
+ return amount > 0n && amount <= BigInt(Number.MAX_SAFE_INTEGER);
38
+ })
39
+ }).strict();
40
+ var ManagedModificationPriceSchema = z.object({
41
+ schemaVersion: z.literal("openpond.modificationPrice.v1"),
42
+ appliedPrice: ComputeAppliedPriceSchema.extend({ service: z.literal("model_modification") }),
43
+ billingBoundary: z.literal("active_allocation_until_verified_cleanup"),
44
+ startupBillable: z.literal(true),
45
+ postCompletionIdleBillable: z.literal(false),
46
+ minimumBillableSeconds: z.literal(0),
47
+ warmReuseSeconds: z.literal(300)
48
+ }).strict();
49
+ function canonicalComputeSpendCap(value) {
50
+ if (value == null || value.trim() === "") return null;
51
+ const amount = micros(value);
52
+ if (amount <= 0n || amount > 1000000000000n)
53
+ throw new OpenPondProtocolError("managed_modification_cap_invalid", "Choose a positive spending limit of at most 1,000,000 USD, or use available credits.");
54
+ return `${amount / 1000000n}.${(amount % 1000000n).toString().padStart(6, "0")}`;
55
+ }
56
+ function assertManagedModificationPricing(plan) {
57
+ if (plan.maximumSpendUsd !== canonicalComputeSpendCap(plan.maximumSpendUsd) || plan.maximumSpendUsd === null && !plan.computePrice || plan.computePrice && plan.computePrice.appliedPrice.profileHash !== plan.runtimeHash)
58
+ throw new OpenPondProtocolError("managed_modification_price_mismatch", "Retain the exact reviewed rate, runtime and optional spending limit.");
59
+ }
60
+ async function managedModificationPriceApprovalMatches(plan, command) {
61
+ return plan.computePrice ? command.approvedPriceHash === await canonicalSha256(plan.computePrice) : command.approvedPriceHash === void 0;
62
+ }
63
+
64
+ // src/training-usage-funding.ts
65
+ import { z as z2 } from "zod";
66
+ var Id = z2.string().min(1).max(500);
67
+ var Hash2 = z2.string().regex(/^[a-f0-9]{64}$/);
68
+ var Price = ComputeAppliedPriceSchema.extend({ service: z2.literal("managed_rl") });
69
+ var Cap = z2.string().regex(/^(0|[1-9]\d*)\.\d{6}$/).max(24).refine((value) => {
70
+ if (!/^(0|[1-9]\d*)\.\d{6}$/.test(value) || value.length > 24) return false;
71
+ const micros2 = BigInt(value.replace(".", ""));
72
+ return micros2 > 0n && micros2 <= BigInt(Number.MAX_SAFE_INTEGER);
73
+ }).nullable();
74
+ var Guests = z2.array(z2.object({
75
+ profileHash: Hash2,
76
+ price: Price,
77
+ resources: z2.object({ cpu: z2.number().positive(), memoryGb: z2.number().positive(), diskGb: z2.number().nonnegative() }).strict()
78
+ }).strict()).max(32);
79
+ var Rate = z2.string().regex(/^(0|[1-9]\d*)\.\d{6}$/).max(24).refine((value) => /^(0|[1-9]\d*)\.\d{6}$/.test(value) && value.length <= 24 && BigInt(value.replace(".", "")) <= BigInt(Number.MAX_SAFE_INTEGER));
80
+ var Judges = z2.object({
81
+ billing: z2.literal("existing_retail_child_captures"),
82
+ acceptedPricingHashes: z2.array(Hash2).max(64),
83
+ prices: z2.array(z2.object({
84
+ modelId: Id,
85
+ displayName: Id,
86
+ acceptedPricingHash: Hash2,
87
+ inputUsdPerMillionTokens: Rate,
88
+ cachedInputUsdPerMillionTokens: Rate,
89
+ outputUsdPerMillionTokens: Rate,
90
+ cacheWriteUsdPerMillionTokens: Rate.nullable(),
91
+ cacheWriteOneHourUsdPerMillionTokens: Rate.nullable(),
92
+ longContextThresholdTokens: z2.number().int().positive().nullable(),
93
+ longContext: z2.object({
94
+ inputUsdPerMillionTokens: Rate,
95
+ cachedInputUsdPerMillionTokens: Rate,
96
+ outputUsdPerMillionTokens: Rate,
97
+ cacheWriteUsdPerMillionTokens: Rate.nullable()
98
+ }).strict().nullable()
99
+ }).strict()).max(64)
100
+ }).strict();
101
+ var TrainingBillingModesSchema = z2.tuple([
102
+ z2.object({ mode: z2.literal("prepaid_only"), availability: z2.literal("available"), reason: z2.null() }).strict(),
103
+ z2.object({
104
+ mode: z2.literal("actual_usage"),
105
+ availability: z2.enum(["unavailable", "requires_preparation"]),
106
+ reason: z2.string().min(1).max(500).nullable()
107
+ }).strict()
108
+ ]);
109
+ var TrainingUsageFundingRequestSchema = z2.object({
110
+ schemaVersion: z2.literal("openpond.trainingUsageFundingRequest.v1"),
111
+ billingMode: z2.literal("actual_usage"),
112
+ customerCapUsd: Cap
113
+ }).strict();
114
+ var TrainingUsageQuoteContentSchema = z2.object({
115
+ schemaVersion: z2.literal("openpond.trainingUsageQuote.v1"),
116
+ teamId: Id,
117
+ actorUserId: Id,
118
+ preparationId: Id,
119
+ submissionHash: Hash2,
120
+ workerImageDigest: z2.string().regex(/^sha256:[a-f0-9]{64}$/),
121
+ customerCapUsd: Cap,
122
+ maximumWallSeconds: z2.number().int().positive(),
123
+ retentionDays: z2.number().int().nonnegative(),
124
+ gpu: Price,
125
+ guests: Guests,
126
+ judges: Judges,
127
+ storage: z2.object({
128
+ price: Price,
129
+ storageClass: z2.literal("STANDARD"),
130
+ quantityBasis: z2.literal("gib_milliseconds"),
131
+ onCreditExhaustion: z2.literal("retain_objects_and_stop_new_storage")
132
+ }).strict(),
133
+ gpuBillingBoundary: z2.literal("active_allocation_until_verified_cleanup"),
134
+ storageBillingBoundary: z2.literal("accepted_retention_window"),
135
+ startupBillable: z2.literal(true),
136
+ postCompletionIdleBillable: z2.literal(false),
137
+ minimumBillableSeconds: z2.literal(0),
138
+ issuedAt: z2.iso.datetime(),
139
+ expiresAt: z2.iso.datetime()
140
+ }).strict();
141
+ var TrainingUsageQuoteSchema = TrainingUsageQuoteContentSchema.extend({ contentHash: Hash2, signature: Id }).strict();
142
+ async function verifyTrainingUsageQuote(raw, expected) {
143
+ const quote = TrainingUsageQuoteSchema.parse(raw), { contentHash, signature: _signature, ...content } = quote;
144
+ if (contentHash !== await canonicalSha256(content) || quote.teamId !== expected.teamId || quote.actorUserId !== expected.actorUserId || quote.preparationId !== expected.preparationId || quote.submissionHash !== expected.submissionHash || quote.customerCapUsd !== expected.customerCapUsd || Date.parse(quote.expiresAt) <= Date.parse(quote.issuedAt) || new Set(quote.guests.map((guest) => guest.profileHash)).size !== quote.guests.length || quote.guests.some((guest) => guest.profileHash !== guest.price.profileHash) || new Set(quote.judges.acceptedPricingHashes).size !== quote.judges.acceptedPricingHashes.length || new Set(quote.judges.prices.map((price) => price.acceptedPricingHash)).size !== quote.judges.prices.length || quote.judges.prices.length !== quote.judges.acceptedPricingHashes.length || quote.judges.prices.some((price) => !quote.judges.acceptedPricingHashes.includes(price.acceptedPricingHash)))
145
+ throw new OpenPondProtocolError("training_usage_quote_mismatch", "Training prices differ from the reviewed preparation, actor or spending limit.");
146
+ return quote;
147
+ }
148
+
149
+ // src/training-recovery.ts
150
+ import { z as z3 } from "zod";
151
+ var id = z3.string().trim().min(1).max(191);
152
+ var hash = z3.string().regex(/^[a-f0-9]{64}$/);
153
+ var ApprovalBodySchema = z3.object({
154
+ schemaVersion: z3.literal("openpond.checkpointRecoveryResourceApproval.v1"),
155
+ ownerUserId: id,
156
+ teamId: id,
157
+ sourceJobId: id,
158
+ sourceJobVersion: z3.number().int().positive(),
159
+ sourceInputManifestSha256: hash,
160
+ checkpointId: id,
161
+ adapterSha256: hash,
162
+ resumeSha256: hash,
163
+ idempotencyKey: z3.string().trim().min(16).max(191),
164
+ approvedAt: z3.iso.datetime({ offset: true }),
165
+ maximumSpendUsd: z3.number().positive().finite().max(30).refine(
166
+ (value) => Number(value.toFixed(6)) === value,
167
+ "Recovery spend must use whole microdollars"
168
+ ),
169
+ maximumGpuSeconds: z3.number().int().positive().max(21600),
170
+ maximumWallSeconds: z3.number().int().positive().max(21600)
171
+ }).strict();
172
+ var TrainingCheckpointRecoveryResourceApprovalSchema = ApprovalBodySchema.extend({
173
+ approvalHash: hash
174
+ }).strict().superRefine((value, context) => {
175
+ if (value.maximumGpuSeconds > value.maximumWallSeconds)
176
+ context.addIssue({
177
+ code: "custom",
178
+ path: ["maximumGpuSeconds"],
179
+ message: "Recovery GPU duration exceeds its wall"
180
+ });
181
+ });
182
+ async function createTrainingCheckpointRecoveryResourceApproval(input) {
183
+ const body = ApprovalBodySchema.parse(input);
184
+ return TrainingCheckpointRecoveryResourceApprovalSchema.parse({
185
+ ...body,
186
+ approvalHash: await canonicalSha256(body)
187
+ });
188
+ }
189
+ var TrainingCheckpointRecoveryRequestSchema = z3.object({
190
+ resourceApproval: TrainingCheckpointRecoveryResourceApprovalSchema.optional(),
191
+ mode: z3.literal("evaluation_only").optional(),
192
+ evaluationGpuType: z3.enum(["NVIDIA A100 80GB PCIe", "NVIDIA A100-SXM4-80GB", "NVIDIA H100 80GB HBM3"]).optional(),
193
+ expectedVersion: z3.number().int().positive(),
194
+ checkpointId: id,
195
+ idempotencyKey: z3.string().trim().min(16).max(191),
196
+ maximumSpendUsd: z3.number().positive().finite(),
197
+ maximumWallSeconds: z3.number().int().positive().max(21600)
198
+ }).strict().superRefine((value, context) => {
199
+ if (value.evaluationGpuType && value.mode !== "evaluation_only")
200
+ context.addIssue({
201
+ code: "custom",
202
+ path: ["evaluationGpuType"],
203
+ message: "GPU substitution requires explicit evaluation-only recovery"
204
+ });
205
+ const a = value.resourceApproval;
206
+ if (a && (a.sourceJobVersion !== value.expectedVersion || a.checkpointId !== value.checkpointId || a.idempotencyKey !== value.idempotencyKey || a.maximumSpendUsd !== value.maximumSpendUsd || a.maximumWallSeconds !== value.maximumWallSeconds))
207
+ context.addIssue({
208
+ code: "custom",
209
+ path: ["resourceApproval"],
210
+ message: "Recovery resource approval does not match its request"
211
+ });
212
+ });
213
+
214
+ // src/training-physical-placement.ts
215
+ import { z as z4 } from "zod";
216
+ var TrainingPhysicalPlacementSchema = z4.object({
217
+ mode: z4.literal("reuse_only"),
218
+ physicalWorkerId: z4.string().trim().min(1).max(191),
219
+ providerPodId: z4.string().trim().min(1).max(191),
220
+ workerImageDigest: z4.string().regex(/^sha256:[a-f0-9]{64}$/),
221
+ baseProfileSha256: z4.string().regex(/^[a-f0-9]{64}$/),
222
+ gpuType: z4.string().trim().min(1).max(200),
223
+ sourceJobId: z4.string().trim().min(1).max(191),
224
+ sourceInputManifestSha256: z4.string().regex(/^[a-f0-9]{64}$/),
225
+ ownerTeamId: z4.string().trim().min(1).max(191),
226
+ deadlineAt: z4.string().datetime({ offset: true })
227
+ }).strict();
228
+
229
+ // src/training-queue.ts
230
+ import { z as z5 } from "zod";
231
+ var Timestamp = z5.string().datetime({ offset: true });
232
+ var TrainingQueueStatusSchema = z5.object({
233
+ ticketId: z5.string().trim().min(1).max(191),
234
+ ticketNumber: z5.number().int().positive().max(Number.MAX_SAFE_INTEGER),
235
+ label: z5.literal("Waiting for resources"),
236
+ position: z5.number().int().positive().nullable(),
237
+ positionScope: z5.literal("compatible_fair_queue"),
238
+ enqueuedAt: Timestamp,
239
+ asOf: Timestamp,
240
+ estimate: z5.object({
241
+ revision: z5.number().int().nonnegative(),
242
+ estimatedStartAt: Timestamp,
243
+ expiresAt: Timestamp,
244
+ evidence: z5.enum(["observed_capacity", "measured_bootstrap", "scheduled_release"])
245
+ }).strict().nullable()
246
+ }).strict().superRefine((value, context) => {
247
+ if (value.estimate && Date.parse(value.estimate.expiresAt) <= Date.parse(value.asOf))
248
+ context.addIssue({ code: "custom", path: ["estimate"], message: "An expired queue forecast must be returned as unavailable" });
249
+ });
250
+
251
+ // src/training-usage-status.ts
252
+ import { z as z6 } from "zod";
253
+ var Money2 = z6.string().regex(/^(0|[1-9]\d*)\.\d{6}$/).max(24).refine((value) => /^(0|[1-9]\d*)\.\d{6}$/.test(value) && value.length <= 24 && BigInt(value.replace(".", "")) <= BigInt(Number.MAX_SAFE_INTEGER));
254
+ var TrainingUsageSnapshotSchema = z6.object({
255
+ schemaVersion: z6.literal("openpond.trainingUsageSnapshot.v1"),
256
+ asOf: z6.iso.datetime(),
257
+ customerCapUsd: Money2.nullable(),
258
+ chargedUsd: Money2,
259
+ committedUsd: Money2,
260
+ outstandingUsd: Money2,
261
+ remainingCapUsd: Money2.nullable(),
262
+ availableCreditUsd: Money2,
263
+ complete: z6.boolean(),
264
+ components: z6.array(z6.object({
265
+ component: z6.enum(["gpu", "guest", "storage", "judge"]),
266
+ chargedUsd: Money2,
267
+ committedUsd: Money2,
268
+ outstandingUsd: Money2,
269
+ openOwners: z6.number().int().nonnegative()
270
+ }).strict()).length(4).refine((values) => values.every((value, index) => value.component === ["gpu", "guest", "storage", "judge"][index]))
271
+ }).strict();
272
+
273
+ // src/training-job-contracts.ts
274
+ import { z as z7 } from "zod";
275
+ import { TrainingHandoffOriginSchema } from "@openpond/evals/learning";
276
+ var IdSchema = z7.string().trim().min(1).max(500);
277
+ var HashSchema = z7.string().regex(/^[a-f0-9]{64}$/);
278
+ var TimestampSchema = z7.string().datetime({ offset: true });
279
+ var TrainingInputArtifactUploadSchema = z7.object({
280
+ schemaVersion: z7.literal("openpond.trainingInputArtifactUpload.v2"),
281
+ kind: z7.enum(["portable_training_bundle", "reward_model_dataset"]),
282
+ idempotencyKey: z7.string().trim().min(1).max(500),
283
+ sourceManifest: ModelProjectImmutableRefSchema,
284
+ payload: z7.unknown(),
285
+ contentHash: HashSchema
286
+ }).strict();
287
+ var TrainingInputArtifactSchema = z7.object({
288
+ schemaVersion: z7.literal("openpond.trainingInputArtifact.v2"),
289
+ kind: z7.enum(["portable_training_bundle", "reward_model_dataset"]),
290
+ sourceManifest: ModelProjectImmutableRefSchema,
291
+ artifactRef: z7.string().trim().min(1).max(2e3),
292
+ contentHash: HashSchema,
293
+ sizeBytes: z7.number().int().positive(),
294
+ createdAt: TimestampSchema
295
+ }).strict();
296
+ async function trainingInputArtifactUploadHash(upload) {
297
+ const { contentHash: _contentHash, ...content } = upload;
298
+ return canonicalSha256(content);
299
+ }
300
+ async function parseAndVerifyTrainingInputArtifactUpload(value) {
301
+ assertCanonicalPayloadSize(value, TRAINING_INPUT_ARTIFACT_MAX_BYTES, "Training input artifact");
302
+ const parsed = TrainingInputArtifactUploadSchema.parse(value);
303
+ const expectedHash = await trainingInputArtifactUploadHash(parsed);
304
+ if (parsed.contentHash !== expectedHash) {
305
+ throw new OpenPondProtocolError(
306
+ "content_hash_mismatch",
307
+ `Training input artifact contentHash ${parsed.contentHash} does not match ${expectedHash}.`
308
+ );
309
+ }
310
+ return parsed;
311
+ }
312
+ var TrainingJobKindSchema = z7.enum(["reward_model_train", "policy_optimize"]);
313
+ var TrainingJobStateSchema = z7.enum([
314
+ "queued",
315
+ "admitting",
316
+ "provisioning",
317
+ "running",
318
+ "stopping",
319
+ "cancelling",
320
+ "succeeded",
321
+ "failed",
322
+ "cancelled"
323
+ ]);
324
+ var TrainingCapabilityRequirementSchema = z7.object({
325
+ id: IdSchema,
326
+ version: z7.string().trim().min(1).max(200).nullable().default(null),
327
+ required: z7.boolean().default(true)
328
+ }).strict();
329
+ var TrainingJobSourceSchema = z7.object({
330
+ origin: TrainingHandoffOriginSchema.optional(),
331
+ modelProject: z7.object({
332
+ id: IdSchema,
333
+ portableProjectId: IdSchema,
334
+ revision: z7.number().int().positive(),
335
+ contentHash: HashSchema
336
+ }).strict(),
337
+ harnessRunManifest: ModelProjectImmutableRefSchema,
338
+ harnessRelease: ModelProjectImmutableRefSchema,
339
+ taskset: ModelProjectVersionedRefSchema,
340
+ tasksetRelease: ModelProjectImmutableRefSchema,
341
+ evaluation: z7.object({
342
+ taskset: ModelProjectVersionedRefSchema,
343
+ dataset: ModelProjectImmutableRefSchema
344
+ }).strict().nullable().optional(),
345
+ dataset: ModelProjectImmutableRefSchema,
346
+ evidenceSets: z7.array(ModelProjectImmutableRefSchema).max(1e4)
347
+ }).strict();
348
+ var RewardModelTrainingRequestSchema = z7.object({
349
+ kind: z7.literal("reward_model_train"),
350
+ baseModel: ModelProjectBaseModelSchema,
351
+ preferenceDatasetRelease: ModelProjectImmutableRefSchema,
352
+ processorRelease: ModelProjectImmutableRefSchema,
353
+ recipe: z7.object({
354
+ schemaVersion: z7.literal("openpond.rewardModelRecipe.v1"),
355
+ method: z7.literal("reward_model"),
356
+ parameterization: z7.literal("lora_with_scalar_head")
357
+ }).catchall(z7.unknown())
358
+ }).strict();
359
+ var DeterministicRewardSourceSchema = z7.object({
360
+ kind: z7.literal("deterministic"),
361
+ grader: ModelProjectImmutableRefSchema,
362
+ composer: ModelProjectImmutableRefSchema.nullable().default(null)
363
+ }).strict();
364
+ var LearnedRewardSourceSchema = z7.object({
365
+ kind: z7.literal("learned_reward"),
366
+ rewardModelVersion: ModelProjectImmutableRefSchema,
367
+ qualificationReport: ModelProjectImmutableRefSchema.nullable().default(null),
368
+ evaluationReferences: z7.array(ModelProjectImmutableRefSchema).max(1e3).default([]),
369
+ scorerArtifact: z7.object({
370
+ artifactRef: z7.string().trim().min(1).max(2e3),
371
+ contentHash: HashSchema,
372
+ executionReceipt: ModelProjectImmutableRefSchema
373
+ }).strict(),
374
+ processorRelease: ModelProjectImmutableRefSchema,
375
+ rewardComposerRelease: ModelProjectImmutableRefSchema
376
+ }).strict();
377
+ var TrainingQualificationBaseModelSchema = ModelProjectBaseModelSchema.extend({
378
+ revision: z7.string().regex(/^[a-f0-9]{40,64}$/),
379
+ tokenizerRevision: z7.string().regex(/^[a-f0-9]{40,64}$/),
380
+ chatTemplateHash: HashSchema
381
+ }).strict();
382
+ var PolicyOptimizationRequestSchema = z7.object({
383
+ kind: z7.literal("policy_optimize"),
384
+ /** Collect and grade one original-learner group without optimizer work. */
385
+ executionMode: z7.literal("qualification").optional(),
386
+ baseModel: ModelProjectBaseModelSchema,
387
+ recipe: ModelProjectRecipeDocumentSchema,
388
+ rewardSource: z7.discriminatedUnion("kind", [
389
+ DeterministicRewardSourceSchema,
390
+ LearnedRewardSourceSchema
391
+ ]),
392
+ resumeFrom: ModelProjectImmutableRefSchema.nullable().default(null)
393
+ }).strict().superRefine((job, context) => {
394
+ if (job.recipe.method !== "sft") return;
395
+ const recipe = SftRecipeSchema.safeParse(job.recipe);
396
+ if (!recipe.success) {
397
+ context.addIssue({
398
+ code: "custom",
399
+ path: ["recipe"],
400
+ message: "The SFT recipe is incomplete or invalid."
401
+ });
402
+ return;
403
+ }
404
+ if (job.executionMode || job.resumeFrom || "continuation" in job.recipe)
405
+ context.addIssue({
406
+ code: "custom",
407
+ message: "Initial managed SFT requires a fresh supervised run without rollout qualification or continuation."
408
+ });
409
+ if (recipe.data.baseModel.id !== job.baseModel.modelId || recipe.data.baseModel.revision !== job.baseModel.revision || recipe.data.baseModel.tokenizerRevision !== job.baseModel.tokenizerRevision || recipe.data.baseModel.chatTemplateHash !== job.baseModel.chatTemplateHash)
410
+ context.addIssue({
411
+ code: "custom",
412
+ path: ["baseModel"],
413
+ message: "The SFT recipe must pin the exact submitted base and tokenizer."
414
+ });
415
+ });
416
+ var TrainingJobRequestSchema = z7.discriminatedUnion("kind", [
417
+ RewardModelTrainingRequestSchema,
418
+ PolicyOptimizationRequestSchema
419
+ ]);
420
+ var TrainingJobApprovalSchema = z7.object({
421
+ approvalHash: HashSchema,
422
+ approvedAt: TimestampSchema,
423
+ exportApproved: z7.boolean(),
424
+ maximumSpendUsd: z7.number().nonnegative(),
425
+ retentionDays: z7.number().int().nonnegative().nullable(),
426
+ region: z7.string().trim().min(1).max(200).nullable().default(null)
427
+ }).strict();
428
+ var TrainingJobSubmissionSchema = z7.object({
429
+ schemaVersion: z7.literal("openpond.trainingJobSubmission.v2"),
430
+ idempotencyKey: z7.string().trim().min(1).max(500),
431
+ name: z7.string().trim().min(1).max(200),
432
+ source: TrainingJobSourceSchema,
433
+ job: TrainingJobRequestSchema,
434
+ requestedCapabilities: z7.array(TrainingCapabilityRequirementSchema).max(1e3),
435
+ placementObjective: z7.enum(["fast", "balanced", "economical"]),
436
+ gpuSelection: TrainingGpuSelectionSchema.optional(),
437
+ physicalPlacement: TrainingPhysicalPlacementSchema.optional(),
438
+ budget: z7.object({
439
+ maximumSpendUsd: z7.number().nonnegative(),
440
+ maximumWallSeconds: z7.number().int().positive()
441
+ }).strict(),
442
+ approval: TrainingJobApprovalSchema,
443
+ contentHash: HashSchema
444
+ }).strict().superRefine((submission, context) => {
445
+ const distributed = (submission.gpuSelection?.gpuCount ?? 1) === 2;
446
+ const distributedRequirement = submission.requestedCapabilities.some((requirement) => requirement.id === "managed_rl.policy.data_parallel" && requirement.version === "1" && requirement.required);
447
+ if (distributed !== distributedRequirement) {
448
+ context.addIssue({ code: "custom", path: ["requestedCapabilities"], message: "Two-GPU training must require managed_rl.policy.data_parallel@1 and bind gpuSelection.gpuCount to 2." });
449
+ }
450
+ if (distributed && (submission.job.kind !== "policy_optimize" || submission.job.executionMode || submission.job.recipe.method !== "grpo" || submission.physicalPlacement)) {
451
+ context.addIssue({ code: "custom", path: ["gpuSelection"], message: "Two-GPU execution requires exclusive GRPO policy training." });
452
+ }
453
+ if (submission.physicalPlacement && (submission.job.kind !== "policy_optimize" || submission.job.resumeFrom || submission.job.executionMode || submission.job.recipe.continuation !== void 0)) {
454
+ context.addIssue({ code: "custom", path: ["physicalPlacement"], message: "Reuse-only placement requires fresh-base policy training without continuation." });
455
+ }
456
+ if (submission.job.kind === "policy_optimize" && submission.job.executionMode === "qualification") {
457
+ const job = submission.job;
458
+ if (!TrainingQualificationBaseModelSchema.safeParse(job.baseModel).success) {
459
+ context.addIssue({ code: "custom", path: ["job", "baseModel"], message: "Qualification requires immutable model and tokenizer revisions and a SHA-256 chat-template pin." });
460
+ }
461
+ if (job.resumeFrom || job.recipe.continuation !== void 0 || job.rewardSource.kind !== "deterministic" || job.recipe.method !== "grpo") {
462
+ context.addIssue({
463
+ code: "custom",
464
+ path: ["job"],
465
+ message: "Qualification requires the original GRPO learner, deterministic reward, and no resume or continuation."
466
+ });
467
+ }
468
+ if (!submission.requestedCapabilities.some((requirement) => requirement.required && requirement.id === "managed_rl.policy.qualification" && requirement.version === "1")) {
469
+ context.addIssue({
470
+ code: "custom",
471
+ path: ["requestedCapabilities"],
472
+ message: "Qualification must require managed_rl.policy.qualification@1."
473
+ });
474
+ }
475
+ }
476
+ if (submission.approval.maximumSpendUsd !== submission.budget.maximumSpendUsd) {
477
+ context.addIssue({
478
+ code: "custom",
479
+ path: ["approval", "maximumSpendUsd"],
480
+ message: "Approved spend must equal the immutable Job budget."
481
+ });
482
+ }
483
+ });
484
+ async function trainingJobSubmissionHash(submission) {
485
+ const { contentHash: _contentHash, ...content } = submission;
486
+ return canonicalSha256(content);
487
+ }
488
+ async function parseAndVerifyTrainingJobSubmission(value) {
489
+ assertCanonicalPayloadSize(value, TRAINING_JOB_SUBMISSION_MAX_BYTES, "Training Job submission");
490
+ const parsed = TrainingJobSubmissionSchema.parse(value);
491
+ const expectedHash = await trainingJobSubmissionHash(parsed);
492
+ if (parsed.contentHash !== expectedHash) {
493
+ throw new OpenPondProtocolError(
494
+ "content_hash_mismatch",
495
+ `Training Job contentHash ${parsed.contentHash} does not match ${expectedHash}.`
496
+ );
497
+ }
498
+ return parsed;
499
+ }
500
+ var TrainingJobRecoverySchema = z7.object({
501
+ resourceApproval: TrainingCheckpointRecoveryResourceApprovalSchema.optional(),
502
+ mode: z7.literal("evaluation_only").optional(),
503
+ trainingWorkloadComplete: z7.boolean().optional(),
504
+ sourceJobId: IdSchema,
505
+ checkpointId: IdSchema,
506
+ policyVersion: z7.number().int().positive(),
507
+ completedGroups: z7.number().int().positive(),
508
+ optimizerMode: z7.literal("continue")
509
+ }).strict();
510
+ var TrainingJobSchema = z7.object({
511
+ schemaVersion: z7.literal("openpond.trainingJob.v2"),
512
+ id: IdSchema,
513
+ teamId: IdSchema,
514
+ kind: TrainingJobKindSchema,
515
+ executionMode: z7.literal("qualification").optional(),
516
+ recovery: TrainingJobRecoverySchema.optional(),
517
+ modelProjectId: IdSchema,
518
+ portableProjectId: IdSchema,
519
+ sourceProjectRevision: z7.number().int().positive(),
520
+ submissionHash: HashSchema,
521
+ state: TrainingJobStateSchema,
522
+ queue: TrainingQueueStatusSchema.optional(),
523
+ phase: z7.string().trim().min(1).max(200),
524
+ version: z7.number().int().nonnegative(),
525
+ progress: z7.number().min(0).max(1),
526
+ rolloutProgress: z7.object({
527
+ groupsCompleted: z7.number().int().nonnegative(),
528
+ groupsTarget: z7.number().int().nonnegative(),
529
+ optimizerUpdatesApplied: z7.number().int().nonnegative(),
530
+ optimizerUpdatesSkipped: z7.number().int().nonnegative()
531
+ }).strict(),
532
+ accruedSpendUsd: z7.number().nonnegative(),
533
+ usage: TrainingUsageSnapshotSchema.optional(),
534
+ terminalReason: z7.string().trim().min(1).max(5e3).nullable(),
535
+ createdAt: TimestampSchema,
536
+ updatedAt: TimestampSchema,
537
+ completedAt: TimestampSchema.nullable()
538
+ }).strict();
539
+ var TrainingJobPageSchema = z7.object({
540
+ schemaVersion: z7.literal("openpond.trainingJobPage.v2"),
541
+ jobs: z7.array(TrainingJobSchema).max(1e3),
542
+ nextCursor: z7.string().trim().min(1).max(2e3).nullable()
543
+ }).strict();
544
+ var TrainingJobEventSchema = z7.object({
545
+ schemaVersion: z7.literal("openpond.trainingJobEvent.v2"),
546
+ id: IdSchema,
547
+ jobId: IdSchema,
548
+ sequence: z7.number().int().nonnegative(),
549
+ type: IdSchema,
550
+ phase: z7.string().trim().min(1).max(200),
551
+ message: z7.string().trim().min(1).max(5e3).nullable(),
552
+ data: z7.record(z7.string(), z7.unknown()).default({}),
553
+ createdAt: TimestampSchema
554
+ }).strict();
555
+ var TrainingJobLogSchema = z7.object({
556
+ schemaVersion: z7.literal("openpond.trainingJobLog.v2"),
557
+ jobId: IdSchema,
558
+ sequence: z7.number().int().nonnegative(),
559
+ level: z7.enum(["debug", "info", "warning", "error"]),
560
+ message: z7.string().max(2e4),
561
+ createdAt: TimestampSchema
562
+ }).strict();
563
+ var TrainingJobControlRequestSchema = z7.object({ expectedVersion: z7.number().int().nonnegative() }).strict();
564
+ var TrainingJobOutputSchema = z7.object({
565
+ schemaVersion: z7.literal("openpond.trainingJobOutput.v2"),
566
+ id: IdSchema,
567
+ jobId: IdSchema,
568
+ kind: z7.enum(["checkpoint", "adapter", "scorer", "metrics", "evaluation", "trace", "receipt"]),
569
+ artifactRef: z7.string().trim().min(1).max(2e3),
570
+ contentHash: HashSchema,
571
+ sizeBytes: z7.number().int().nonnegative(),
572
+ metadata: z7.record(z7.string(), z7.unknown()).default({}),
573
+ createdAt: TimestampSchema
574
+ }).strict();
575
+ var TrainingQualificationEvidenceSchema = z7.object({
576
+ schemaVersion: z7.literal("openpond.trainingQualificationEvidence.v1"),
577
+ baseModel: TrainingQualificationBaseModelSchema,
578
+ group: ModelProjectImmutableRefSchema,
579
+ rolloutReceipts: z7.array(ModelProjectImmutableRefSchema).min(1).max(1e3),
580
+ rewardEvidenceHash: HashSchema,
581
+ groupsCompleted: z7.literal(1),
582
+ optimizerUpdatesApplied: z7.literal(0),
583
+ optimizerUpdatesSkipped: z7.literal(0),
584
+ trainingStepsCreated: z7.literal(0),
585
+ checkpointsCreated: z7.literal(0),
586
+ artifactsCreated: z7.literal(0)
587
+ }).strict().superRefine((evidence, context) => {
588
+ if (new Set(evidence.rolloutReceipts.map((receipt) => receipt.id)).size !== evidence.rolloutReceipts.length) {
589
+ context.addIssue({ code: "custom", path: ["rolloutReceipts"], message: "Qualification rollout receipt identities must be unique." });
590
+ }
591
+ });
592
+ var TrainingExecutionReceiptSchema = z7.object({
593
+ schemaVersion: z7.literal("openpond.trainingExecutionReceipt.v2"),
594
+ id: IdSchema,
595
+ teamId: IdSchema,
596
+ jobId: IdSchema,
597
+ submissionHash: HashSchema,
598
+ manifestHash: HashSchema,
599
+ recipeHash: HashSchema,
600
+ capabilityHash: HashSchema,
601
+ runtimeRelease: ModelProjectImmutableRefSchema,
602
+ inputs: z7.array(ModelProjectImmutableRefSchema).max(1e4),
603
+ outputs: z7.array(ModelProjectImmutableRefSchema).max(1e4),
604
+ spendUsd: z7.number().nonnegative(),
605
+ durationSeconds: z7.number().nonnegative(),
606
+ cleanupComplete: z7.boolean(),
607
+ qualification: TrainingQualificationEvidenceSchema.optional(),
608
+ issuer: IdSchema,
609
+ issuedAt: TimestampSchema,
610
+ signature: z7.string().trim().min(1).max(1e4).nullable()
611
+ }).strict();
612
+ async function trainingExecutionReceiptHash(receipt) {
613
+ return canonicalSha256(TrainingExecutionReceiptSchema.parse(receipt));
614
+ }
615
+ async function parseAndVerifyTrainingExecutionReceipt(value, expected) {
616
+ const receipt = TrainingExecutionReceiptSchema.parse(value);
617
+ const expectedId = IdSchema.parse(expected.id);
618
+ const expectedHash = HashSchema.parse(expected.contentHash);
619
+ const actualHash = await trainingExecutionReceiptHash(receipt);
620
+ if (receipt.id !== expectedId || actualHash !== expectedHash) {
621
+ throw new OpenPondProtocolError(
622
+ "execution_receipt_mismatch",
623
+ "The execution receipt identity or canonical content hash did not match."
624
+ );
625
+ }
626
+ if (expected.teamId !== void 0 && receipt.teamId !== IdSchema.parse(expected.teamId)) {
627
+ throw new OpenPondProtocolError(
628
+ "execution_receipt_team_mismatch",
629
+ "The execution receipt belongs to a different team."
630
+ );
631
+ }
632
+ if (expected.jobId !== void 0 && receipt.jobId !== IdSchema.parse(expected.jobId)) {
633
+ throw new OpenPondProtocolError(
634
+ "execution_receipt_job_mismatch",
635
+ "The execution receipt belongs to a different Training Job."
636
+ );
637
+ }
638
+ if ((expected.requireCleanup ?? true) && !receipt.cleanupComplete) {
639
+ throw new OpenPondProtocolError(
640
+ "execution_cleanup_incomplete",
641
+ "The execution receipt does not attest complete terminal cleanup."
642
+ );
643
+ }
644
+ if (expected.qualificationSubmission) {
645
+ const submission = await parseAndVerifyTrainingJobSubmission(expected.qualificationSubmission);
646
+ if (submission.job.kind !== "policy_optimize" || submission.job.executionMode !== "qualification") {
647
+ throw new OpenPondProtocolError("qualification_submission_required", "Expected an immutable qualification submission.");
648
+ }
649
+ await assertTrainingQualificationReceipt(receipt, { submissionHash: submission.contentHash, baseModel: submission.job.baseModel, outputs: expected.outputs });
650
+ }
651
+ return receipt;
652
+ }
653
+ async function assertTrainingQualificationReceipt(receipt, expected) {
654
+ const evidence = TrainingQualificationEvidenceSchema.parse(receipt.qualification);
655
+ if (receipt.submissionHash !== expected.submissionHash || !receipt.cleanupComplete) {
656
+ throw new OpenPondProtocolError("qualification_receipt_mismatch", "Qualification must attest the expected submission and complete cleanup.");
657
+ }
658
+ if (expected.baseModel && await canonicalSha256(evidence.baseModel) !== await canonicalSha256(expected.baseModel)) {
659
+ throw new OpenPondProtocolError("qualification_learner_mismatch", "Qualification used a different original learner or tokenizer.");
660
+ }
661
+ if (expected.outputs?.some((output) => ["checkpoint", "adapter", "scorer"].includes(output.kind))) {
662
+ throw new OpenPondProtocolError("qualification_updated_artifact", "Qualification must not publish trained artifacts or checkpoints.");
663
+ }
664
+ }
665
+ var TrainingJobOutputsSchema = z7.object({
666
+ schemaVersion: z7.literal("openpond.trainingJobOutputs.v2"),
667
+ outputs: z7.array(TrainingJobOutputSchema).max(1e4),
668
+ receipt: TrainingExecutionReceiptSchema.nullable()
669
+ }).strict();
670
+ var TrainingPolicyLoraCapabilitiesSchema = z7.object({
671
+ workerImageDigest: z7.string().regex(/^sha256:[a-f0-9]{64}$/),
672
+ envelopeRank: z7.number().int().positive().max(256),
673
+ supportedRanks: z7.array(z7.number().int().positive().max(256)).max(256),
674
+ qualification: z7.object({ evidenceRef: z7.string().min(1), evidenceSha256: HashSchema }).strict().nullable(),
675
+ continuation: z7.object({
676
+ sharedRequiresSameRank: z7.literal(true),
677
+ mergedRequiresSameRank: z7.literal(true),
678
+ residualAppendRequiresFreeCapacity: z7.literal(true),
679
+ stageOptimizer: z7.literal("reset"),
680
+ interruptedRecoveryOptimizer: z7.literal("restore")
681
+ }).strict()
682
+ }).strict().superRefine((value, context) => {
683
+ if (new Set(value.supportedRanks).size !== value.supportedRanks.length || value.supportedRanks.some((rank) => rank > value.envelopeRank))
684
+ context.addIssue({ code: "custom", path: ["supportedRanks"], message: "Supported ranks must be unique and fit the physical adapter envelope." });
685
+ if (value.supportedRanks.length && !value.qualification)
686
+ context.addIssue({ code: "custom", path: ["qualification"], message: "Advertised ranks require immutable image qualification evidence." });
687
+ });
688
+ function supportsTrainingPolicyLoraRank(capabilities, rank, continuation) {
689
+ if (!capabilities.supportedRanks.includes(rank)) return false;
690
+ if (!continuation) return true;
691
+ return continuation.mode === "residual_append" ? continuation.parentEnabledRank + rank <= capabilities.envelopeRank : continuation.parentEnabledRank === rank;
692
+ }
693
+ var TrainingCapabilitiesSchema = z7.object({
694
+ schemaVersion: z7.literal("openpond.trainingCapabilities.v2"),
695
+ capabilityHash: HashSchema,
696
+ jobKinds: z7.array(TrainingJobKindSchema),
697
+ methods: z7.array(z7.string().trim().min(1).max(200)),
698
+ billingModes: TrainingBillingModesSchema.optional(),
699
+ executionModes: z7.array(z7.enum(["training", "qualification"])).optional(),
700
+ policyLora: TrainingPolicyLoraCapabilitiesSchema.optional(),
701
+ policyDataParallel: z7.object({
702
+ capability: z7.literal("managed_rl.policy.data_parallel"),
703
+ version: z7.literal("1"),
704
+ gpuCount: z7.literal(2),
705
+ worldSize: z7.literal(2),
706
+ backend: z7.literal("nccl"),
707
+ allocationMode: z7.literal("exclusive"),
708
+ workerImageDigest: z7.string().regex(/^sha256:[a-f0-9]{64}$/)
709
+ }).strict().optional(),
710
+ structuredOutputs: z7.object({
711
+ capability: z7.literal("work.structured-output.v1"),
712
+ harnessRuntimeHash: HashSchema,
713
+ workHarnessHash: HashSchema,
714
+ schemaHash: HashSchema,
715
+ artifactHash: HashSchema,
716
+ invalidDataRejected: z7.literal(true),
717
+ invalidBytesRejected: z7.literal(true)
718
+ }).strict().optional(),
719
+ placements: z7.array(z7.enum(["local", "remote", "colocated", "provider_native"])),
720
+ controls: z7.object({
721
+ cancel: z7.boolean(),
722
+ stopAfterGroup: z7.boolean(),
723
+ resumeFromCheckpoint: z7.boolean()
724
+ }).strict(),
725
+ estimates: z7.object({ schemaVersion: z7.literal("openpond.trainingEstimate.v1") }).strict().optional(),
726
+ limits: z7.object({
727
+ maximumSpendUsd: z7.number().nonnegative(),
728
+ maximumWallSeconds: z7.number().int().positive(),
729
+ maximumArtifactBytes: z7.number().int().positive()
730
+ }).strict(),
731
+ checkedAt: TimestampSchema,
732
+ expiresAt: TimestampSchema
733
+ }).strict();
734
+
735
+ // src/training-grading-plan.ts
736
+ import { z as z8 } from "zod";
737
+ import { compileBoundGraders, RewardBindingSchema, RewardReleaseSchema } from "@openpond/evals/rewards";
738
+ var GradersSchema = z8.array(z8.object({ id: z8.string().trim().min(1) }).catchall(z8.unknown())).min(1).max(1e3);
739
+ var RewardExecutionSchema = z8.object({
740
+ binding: RewardBindingSchema,
741
+ rewards: z8.array(RewardReleaseSchema).min(1).max(100)
742
+ }).strict();
743
+ async function deterministicTrainingRewardSource(input) {
744
+ const execution = input.rewardExecution ? RewardExecutionSchema.parse(input.rewardExecution) : null;
745
+ const graders = GradersSchema.parse(execution ? compileBoundGraders(execution.binding, execution.rewards) : input.graders);
746
+ if (new Set(graders.map((grader) => grader.id)).size !== graders.length) {
747
+ throw new Error("Training grader identities must be unique.");
748
+ }
749
+ const hash2 = await canonicalSha256({ schemaVersion: "openpond.trainingGraderSet.v1", graders });
750
+ return {
751
+ kind: "deterministic",
752
+ grader: { id: `training-graders-${hash2.slice(0, 32)}`, contentHash: hash2 },
753
+ composer: execution ? { id: execution.binding.id, contentHash: execution.binding.contentHash } : null
754
+ };
755
+ }
756
+
757
+ // src/training-evaluation-source.ts
758
+ import { z as z9 } from "zod";
759
+ var TRAINING_EVALUATION_SOURCE_PATH = "evaluation-source.json";
760
+ var TaskIdentitySchema = z9.object({
761
+ id: z9.string().trim().min(1),
762
+ clusterKey: z9.string().trim().min(1),
763
+ split: z9.enum(["train", "validation", "frozen_eval"])
764
+ }).passthrough();
765
+ var TrainingEvaluationSourceSchema = z9.object({
766
+ schemaVersion: z9.literal("openpond.trainingEvaluationSource.v1"),
767
+ taskset: ModelProjectVersionedRefSchema,
768
+ tasks: z9.array(TaskIdentitySchema).min(1).max(1e4),
769
+ assets: z9.array(z9.object({
770
+ path: z9.string().trim().min(1).max(2e3),
771
+ sha256: z9.string().regex(/^[a-f0-9]{64}$/),
772
+ sizeBytes: z9.number().int().nonnegative(),
773
+ encoding: z9.literal("base64"),
774
+ content: z9.string().max(32 * 1024 * 1024)
775
+ }).strict()).max(1e4)
776
+ }).strict().superRefine((source, context) => {
777
+ const ids = /* @__PURE__ */ new Set();
778
+ source.tasks.forEach((task, index) => {
779
+ if (task.split === "train") context.addIssue({ code: "custom", path: ["tasks", index, "split"], message: "Evaluation sources require held-out tasks." });
780
+ if (ids.has(task.id)) context.addIssue({ code: "custom", path: ["tasks", index, "id"], message: "Evaluation task identities must be unique." });
781
+ ids.add(task.id);
782
+ });
783
+ });
784
+ function assertTrainingEvaluationIsolation(trainingTasks, evaluationTasks) {
785
+ const training = z9.array(TaskIdentitySchema).min(1).max(1e4).parse(trainingTasks);
786
+ const evaluation = z9.array(TaskIdentitySchema).min(1).max(1e4).parse(evaluationTasks);
787
+ const trainIds = /* @__PURE__ */ new Set();
788
+ const trainFamilies = /* @__PURE__ */ new Set();
789
+ for (const task of training) {
790
+ if (task.split !== "train") throw new Error("The training population contains a held-out task.");
791
+ if (trainIds.has(task.id)) throw new Error("Training task identities must be unique.");
792
+ trainIds.add(task.id);
793
+ trainFamilies.add(task.clusterKey);
794
+ }
795
+ const evaluationIds = /* @__PURE__ */ new Set();
796
+ for (const task of evaluation) {
797
+ if (task.split === "train") throw new Error("The evaluation population contains a training task.");
798
+ if (evaluationIds.has(task.id)) throw new Error("Evaluation task identities must be unique.");
799
+ if (trainIds.has(task.id) || trainFamilies.has(task.clusterKey)) {
800
+ throw new Error("Training and evaluation tasks or families overlap.");
801
+ }
802
+ evaluationIds.add(task.id);
803
+ }
804
+ }
805
+ async function trainingEvaluationSourceRef(input) {
806
+ const source = TrainingEvaluationSourceSchema.parse(input);
807
+ const hash2 = await canonicalSha256(source);
808
+ return { taskset: source.taskset, dataset: { id: `training-evaluation-${hash2.slice(0, 32)}`, contentHash: hash2 } };
809
+ }
810
+
811
+ export {
812
+ ComputeAppliedPriceSchema,
813
+ ManagedModificationPriceSchema,
814
+ canonicalComputeSpendCap,
815
+ assertManagedModificationPricing,
816
+ managedModificationPriceApprovalMatches,
817
+ TrainingBillingModesSchema,
818
+ TrainingUsageFundingRequestSchema,
819
+ TrainingUsageQuoteContentSchema,
820
+ TrainingUsageQuoteSchema,
821
+ verifyTrainingUsageQuote,
822
+ TrainingCheckpointRecoveryResourceApprovalSchema,
823
+ createTrainingCheckpointRecoveryResourceApproval,
824
+ TrainingCheckpointRecoveryRequestSchema,
825
+ TrainingPhysicalPlacementSchema,
826
+ TrainingQueueStatusSchema,
827
+ TrainingUsageSnapshotSchema,
828
+ TrainingInputArtifactUploadSchema,
829
+ TrainingInputArtifactSchema,
830
+ trainingInputArtifactUploadHash,
831
+ parseAndVerifyTrainingInputArtifactUpload,
832
+ TrainingJobKindSchema,
833
+ TrainingJobStateSchema,
834
+ TrainingCapabilityRequirementSchema,
835
+ TrainingJobSourceSchema,
836
+ RewardModelTrainingRequestSchema,
837
+ TrainingQualificationBaseModelSchema,
838
+ PolicyOptimizationRequestSchema,
839
+ TrainingJobRequestSchema,
840
+ TrainingJobApprovalSchema,
841
+ TrainingJobSubmissionSchema,
842
+ trainingJobSubmissionHash,
843
+ parseAndVerifyTrainingJobSubmission,
844
+ TrainingJobRecoverySchema,
845
+ TrainingJobSchema,
846
+ TrainingJobPageSchema,
847
+ TrainingJobEventSchema,
848
+ TrainingJobLogSchema,
849
+ TrainingJobControlRequestSchema,
850
+ TrainingJobOutputSchema,
851
+ TrainingQualificationEvidenceSchema,
852
+ TrainingExecutionReceiptSchema,
853
+ trainingExecutionReceiptHash,
854
+ parseAndVerifyTrainingExecutionReceipt,
855
+ assertTrainingQualificationReceipt,
856
+ TrainingJobOutputsSchema,
857
+ TrainingPolicyLoraCapabilitiesSchema,
858
+ supportsTrainingPolicyLoraRank,
859
+ TrainingCapabilitiesSchema,
860
+ deterministicTrainingRewardSource,
861
+ TRAINING_EVALUATION_SOURCE_PATH,
862
+ TrainingEvaluationSourceSchema,
863
+ assertTrainingEvaluationIsolation,
864
+ trainingEvaluationSourceRef
865
+ };
866
+ //# sourceMappingURL=chunk-EBB36D5X.js.map