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.
- package/TRAINING_WORKFLOWS.md +497 -4
- package/dist/advanced-refiner-evaluations.js +7 -7
- package/dist/candidate-evaluations.js +6 -6
- package/dist/{chunk-TLSP5JKG.js → chunk-3BYFS4RO.js} +2 -2
- package/dist/{chunk-XRBM6PBD.js → chunk-3MDNVNBM.js} +5 -5
- package/dist/{chunk-CNREFTAV.js → chunk-3VUF5H3B.js} +2 -2
- package/dist/{chunk-LHHHJIDR.js → chunk-626JLH4D.js} +2 -2
- package/dist/{chunk-Q4TKI2MV.js → chunk-774OWTCD.js} +63 -80
- package/dist/chunk-774OWTCD.js.map +1 -0
- package/dist/{chunk-HAQPGTQ4.js → chunk-7F43U2NC.js} +2 -2
- package/dist/{chunk-ORYA2G7S.js → chunk-7G47YXQT.js} +3 -3
- package/dist/{chunk-XMVSQIK4.js → chunk-AG6UJ3DI.js} +2 -2
- package/dist/chunk-EBB36D5X.js +866 -0
- package/dist/chunk-EBB36D5X.js.map +1 -0
- package/dist/{chunk-JBYFD3QS.js → chunk-GBDBKGXW.js} +3 -3
- package/dist/{chunk-GHPCQXG5.js → chunk-GCUWJUUM.js} +2 -2
- package/dist/{chunk-C4W2MEFP.js → chunk-GS5HEE4M.js} +2 -2
- package/dist/{chunk-ATVQQCYN.js → chunk-GWXJSBWR.js} +2 -2
- package/dist/{chunk-RLW4Y5ZV.js → chunk-JMFYNIYZ.js} +4 -3
- package/dist/chunk-JMFYNIYZ.js.map +1 -0
- package/dist/{chunk-UOV2LEXS.js → chunk-MVAEE5EI.js} +60 -3
- package/dist/chunk-MVAEE5EI.js.map +1 -0
- package/dist/{chunk-KOJC3TH4.js → chunk-OBI2MQYU.js} +6 -6
- package/dist/chunk-PMVSO23F.js +65 -0
- package/dist/chunk-PMVSO23F.js.map +1 -0
- package/dist/{chunk-JDQVAG3R.js → chunk-Q4RGCEOI.js} +3 -3
- package/dist/{chunk-YIGFQWZV.js → chunk-QIGMNB6M.js} +3 -3
- package/dist/{chunk-O3NOGKMT.js → chunk-QNOCM5JX.js} +2 -2
- package/dist/{chunk-2LVR24GU.js → chunk-QOX57Y27.js} +6 -6
- package/dist/chunk-QTNYXOJW.js +27 -0
- package/dist/chunk-QTNYXOJW.js.map +1 -0
- package/dist/{chunk-UWY5PUHR.js → chunk-RN5MK7NH.js} +2 -2
- package/dist/{chunk-47I6LT4X.js → chunk-RT7SQHO4.js} +271 -7
- package/dist/chunk-RT7SQHO4.js.map +1 -0
- package/dist/chunk-UVQENVTW.js +85 -0
- package/dist/chunk-UVQENVTW.js.map +1 -0
- package/dist/{chunk-7BYLH47N.js → chunk-VPK3SM45.js} +15 -3
- package/dist/{chunk-7BYLH47N.js.map → chunk-VPK3SM45.js.map} +1 -1
- package/dist/{chunk-RN5G3DQN.js → chunk-WM3U4RPZ.js} +6 -6
- package/dist/{chunk-IFBCLRBM.js → chunk-ZQ6QTYRE.js} +2 -2
- package/dist/{chunk-IFBCLRBM.js.map → chunk-ZQ6QTYRE.js.map} +1 -1
- package/dist/{chunk-K54BDIKL.js → chunk-ZQFROKKS.js} +3 -3
- package/dist/{chunk-ZYDDHHZZ.js → chunk-ZRTNR4U7.js} +3 -3
- package/dist/connected-evidence.js +9 -17
- package/dist/dataset-workspaces.js +12 -17
- package/dist/dataset-workspaces.js.map +1 -1
- package/dist/errors.js +3 -3
- package/dist/experiment-evaluation-schedules.js +18 -21
- package/dist/experiment-improvements.js +9 -8
- package/dist/experiments.js +17 -20
- package/dist/index.js +25 -27
- package/dist/index.js.map +1 -1
- package/dist/model-projects.js +1 -1
- package/dist/model-starter-attempts.js +2 -2
- package/dist/model-starter-catalog.js +4 -12
- package/dist/model-starter-catalog.js.map +1 -1
- package/dist/model-starters.js +4 -12
- package/dist/model-taskset-runs.js +3 -3
- package/dist/post-training.js +6 -6
- package/dist/taskset-drafts.js +6 -15
- package/dist/taskset-drafts.js.map +1 -1
- package/dist/taskset-packages.js +28 -18
- package/dist/tool-learning-local-store.js +2 -1
- package/dist/tool-learning-local-store.js.map +1 -1
- package/dist/training-bundle.js +33 -32
- package/dist/training-bundle.js.map +1 -1
- package/dist/training.js +8483 -49
- package/dist/training.js.map +1 -1
- package/dist/types/packages/cloud/src/sandbox/types/billing.d.ts +87 -6
- package/dist/types/packages/cloud/src/sandbox/types/billing.d.ts.map +1 -1
- package/dist/types/packages/cloud/src/sandbox/types/io.d.ts +3 -0
- package/dist/types/packages/cloud/src/sandbox/types/io.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/activation-experiment-draft.d.ts +70 -0
- package/dist/types/packages/sdk/src/activation-experiment-draft.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/activation-form-compiler.d.ts +25 -0
- package/dist/types/packages/sdk/src/activation-form-compiler.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/activation-reference.d.ts +347 -0
- package/dist/types/packages/sdk/src/activation-reference.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/activation-result-comparison.d.ts +185 -0
- package/dist/types/packages/sdk/src/activation-result-comparison.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/alphaedit-artifact.d.ts +872 -0
- package/dist/types/packages/sdk/src/alphaedit-artifact.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/alphaedit-experiment-draft.d.ts +123 -0
- package/dist/types/packages/sdk/src/alphaedit-experiment-draft.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/alphaedit-model-serving.d.ts +3218 -0
- package/dist/types/packages/sdk/src/alphaedit-model-serving.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/alphaedit.d.ts +258 -0
- package/dist/types/packages/sdk/src/alphaedit.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/dataset-training-review-contracts.d.ts +181 -0
- package/dist/types/packages/sdk/src/dataset-training-review-contracts.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/dataset-training-review-files.d.ts +17 -0
- package/dist/types/packages/sdk/src/dataset-training-review-files.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/dataset-training-review-preparation.d.ts +541 -0
- package/dist/types/packages/sdk/src/dataset-training-review-preparation.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/dataset-training-review-source.d.ts +41 -0
- package/dist/types/packages/sdk/src/dataset-training-review-source.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/dataset-training-review.d.ts +79 -0
- package/dist/types/packages/sdk/src/dataset-training-review.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/decision-experiment-authoring.d.ts +11 -0
- package/dist/types/packages/sdk/src/decision-experiment-authoring.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/decision-experiment-draft.d.ts +150 -0
- package/dist/types/packages/sdk/src/decision-experiment-draft.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/decision-model-artifact.d.ts +541 -0
- package/dist/types/packages/sdk/src/decision-model-artifact.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/decision-model-data.d.ts +588 -0
- package/dist/types/packages/sdk/src/decision-model-data.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/decision-model-scoring.d.ts +1587 -0
- package/dist/types/packages/sdk/src/decision-model-scoring.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/decision-model-serving.d.ts +5328 -0
- package/dist/types/packages/sdk/src/decision-model-serving.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/decision-model-training.d.ts +871 -0
- package/dist/types/packages/sdk/src/decision-model-training.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/decision-model-version.d.ts +2971 -0
- package/dist/types/packages/sdk/src/decision-model-version.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/decision-model.d.ts +241 -0
- package/dist/types/packages/sdk/src/decision-model.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/engram-adapter.d.ts +788 -0
- package/dist/types/packages/sdk/src/engram-adapter.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/engram-experiment-authoring.d.ts +14 -0
- package/dist/types/packages/sdk/src/engram-experiment-authoring.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/engram-experiment-draft.d.ts +92 -0
- package/dist/types/packages/sdk/src/engram-experiment-draft.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/engram-inference.d.ts +180 -0
- package/dist/types/packages/sdk/src/engram-inference.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/engram-model-serving.d.ts +2183 -0
- package/dist/types/packages/sdk/src/engram-model-serving.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/engram-model-version.d.ts +1335 -0
- package/dist/types/packages/sdk/src/engram-model-version.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/evaluation-experiment-draft.d.ts +1009 -0
- package/dist/types/packages/sdk/src/evaluation-experiment-draft.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-client.d.ts +686 -686
- package/dist/types/packages/sdk/src/experiment-draft-storage.d.ts +11638 -0
- package/dist/types/packages/sdk/src/experiment-draft-storage.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-result-reference.d.ts +288 -0
- package/dist/types/packages/sdk/src/experiment-result-reference.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-run-details.d.ts +7 -7
- package/dist/types/packages/sdk/src/experiment-starting-model.d.ts +911 -0
- package/dist/types/packages/sdk/src/experiment-starting-model.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/hosted-evaluation-experiment-draft.d.ts +693 -0
- package/dist/types/packages/sdk/src/hosted-evaluation-experiment-draft.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/managed-alphaedit-executions.d.ts +3152 -0
- package/dist/types/packages/sdk/src/managed-alphaedit-executions.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/managed-compute-price.d.ts +50 -0
- package/dist/types/packages/sdk/src/managed-compute-price.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/managed-decision-executions.d.ts +6755 -0
- package/dist/types/packages/sdk/src/managed-decision-executions.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/managed-engram-executions.d.ts +2774 -0
- package/dist/types/packages/sdk/src/managed-engram-executions.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/managed-modification-compilation.d.ts +523 -0
- package/dist/types/packages/sdk/src/managed-modification-compilation.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/managed-modification-executions.d.ts +1470 -0
- package/dist/types/packages/sdk/src/managed-modification-executions.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/managed-neuron-training-executions.d.ts +3447 -0
- package/dist/types/packages/sdk/src/managed-neuron-training-executions.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/managed-serving-usage.d.ts +228 -0
- package/dist/types/packages/sdk/src/managed-serving-usage.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/managed-training-preparation.d.ts +26 -26
- package/dist/types/packages/sdk/src/managed-training-preparation.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-batch-review-contracts.d.ts +11 -0
- package/dist/types/packages/sdk/src/model-batch-review-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts +10 -0
- package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-batch-review.d.ts +21 -0
- package/dist/types/packages/sdk/src/model-batch-review.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-learning-policy.d.ts +9 -0
- package/dist/types/packages/sdk/src/model-learning-policy.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-modification-capabilities.d.ts +323 -0
- package/dist/types/packages/sdk/src/model-modification-capabilities.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/model-serving-pool.d.ts +28 -0
- package/dist/types/packages/sdk/src/model-serving-pool.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/model-starter-attempts.d.ts +22 -0
- package/dist/types/packages/sdk/src/model-starter-attempts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +216 -216
- package/dist/types/packages/sdk/src/modification-recordings.d.ts +1303 -0
- package/dist/types/packages/sdk/src/modification-recordings.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/neuron-calibration-records.d.ts +816 -0
- package/dist/types/packages/sdk/src/neuron-calibration-records.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/neuron-residual-calibration.d.ts +189 -0
- package/dist/types/packages/sdk/src/neuron-residual-calibration.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/neuron-steering.d.ts +260 -0
- package/dist/types/packages/sdk/src/neuron-steering.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/neuron-training-artifact.d.ts +517 -0
- package/dist/types/packages/sdk/src/neuron-training-artifact.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/neuron-training-experiment-draft.d.ts +172 -0
- package/dist/types/packages/sdk/src/neuron-training-experiment-draft.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/neuron-training-model-serving.d.ts +3502 -0
- package/dist/types/packages/sdk/src/neuron-training-model-serving.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/neuron-training-result.d.ts +590 -0
- package/dist/types/packages/sdk/src/neuron-training-result.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/neuron-training.d.ts +260 -0
- package/dist/types/packages/sdk/src/neuron-training.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/post-training.d.ts +21 -0
- package/dist/types/packages/sdk/src/post-training.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/profile-external-dataset-package.d.ts +10 -0
- package/dist/types/packages/sdk/src/profile-external-dataset-package.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/steering-experiment-authoring.d.ts +15 -0
- package/dist/types/packages/sdk/src/steering-experiment-authoring.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/steering-experiment-source-verification.d.ts +97 -0
- package/dist/types/packages/sdk/src/steering-experiment-source-verification.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/steering-experiment-source.d.ts +29 -0
- package/dist/types/packages/sdk/src/steering-experiment-source.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/steering-inference.d.ts +224 -0
- package/dist/types/packages/sdk/src/steering-inference.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/steering-model-selection.d.ts +15 -0
- package/dist/types/packages/sdk/src/steering-model-selection.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/steering-model-serving.d.ts +8759 -0
- package/dist/types/packages/sdk/src/steering-model-serving.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/steering-profile-publication.d.ts +7892 -0
- package/dist/types/packages/sdk/src/steering-profile-publication.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts +20 -0
- package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-client.d.ts +40 -0
- package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts +20 -0
- package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-learning.d.ts +20 -0
- package/dist/types/packages/sdk/src/taskset-package-learning.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +10 -0
- package/dist/types/packages/sdk/src/taskset-package-projection.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-packages.d.ts +4 -0
- package/dist/types/packages/sdk/src/taskset-packages.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/tool-learning-local-store.d.ts +2 -0
- package/dist/types/packages/sdk/src/tool-learning-local-store.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-compute-selection.d.ts +186 -1
- package/dist/types/packages/sdk/src/training-compute-selection.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-estimate-workload.d.ts +185 -0
- package/dist/types/packages/sdk/src/training-estimate-workload.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-estimates.d.ts +185 -0
- package/dist/types/packages/sdk/src/training-estimates.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-executions.d.ts +275 -0
- package/dist/types/packages/sdk/src/training-executions.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-experiment-setup.d.ts +5957 -0
- package/dist/types/packages/sdk/src/training-experiment-setup.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-funding.d.ts +153 -0
- package/dist/types/packages/sdk/src/training-funding.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-hardware-catalog.d.ts +155 -0
- package/dist/types/packages/sdk/src/training-hardware-catalog.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-job-contracts.d.ts +1535 -0
- package/dist/types/packages/sdk/src/training-job-contracts.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-learning-batch.d.ts +40 -40
- package/dist/types/packages/sdk/src/training-model-save.d.ts +2466 -0
- package/dist/types/packages/sdk/src/training-model-save.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-model-serving-control.d.ts +397 -0
- package/dist/types/packages/sdk/src/training-model-serving-control.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-model-serving.d.ts +2662 -0
- package/dist/types/packages/sdk/src/training-model-serving.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-preparations.d.ts +1001 -0
- package/dist/types/packages/sdk/src/training-preparations.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts +1 -1
- package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-result.d.ts +4577 -0
- package/dist/types/packages/sdk/src/training-result.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-usage-funding.d.ts +273 -0
- package/dist/types/packages/sdk/src/training-usage-funding.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-usage-status.d.ts +27 -0
- package/dist/types/packages/sdk/src/training-usage-status.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training.d.ts +18309 -3682
- package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/weight-experiment-authoring.d.ts +23 -0
- package/dist/types/packages/sdk/src/weight-experiment-authoring.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/weight-inference.d.ts +155 -0
- package/dist/types/packages/sdk/src/weight-inference.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/weight-model-versions.d.ts +4578 -0
- package/dist/types/packages/sdk/src/weight-model-versions.d.ts.map +1 -0
- package/fixtures/python-foundation/activation-reference-workflow.json +6403 -0
- package/fixtures/python-foundation/dataset-training-review-http-workflow.json +62 -0
- package/fixtures/python-foundation/operation-matrix.json +1410 -220
- package/fixtures/python-foundation/schemas.json +59491 -25928
- package/fixtures/python-foundation/training-estimate-http-workflow.json +100 -0
- package/fixtures/python-foundation/training-funding-http-workflow.json +61 -0
- package/fixtures/python-foundation/training-model-save-http-workflow.json +302 -0
- package/fixtures/python-foundation/training-model-serving-control-http-workflow.json +1633 -0
- package/fixtures/python-foundation/training-model-serving-http-workflow.json +1181 -0
- package/fixtures/python-foundation/training-result-http-workflow.json +230 -0
- package/package.json +3 -3
- package/dist/chunk-47I6LT4X.js.map +0 -1
- package/dist/chunk-GJRXJL6G.js +0 -1528
- package/dist/chunk-GJRXJL6G.js.map +0 -1
- package/dist/chunk-Q4TKI2MV.js.map +0 -1
- package/dist/chunk-RLW4Y5ZV.js.map +0 -1
- package/dist/chunk-UOV2LEXS.js.map +0 -1
- /package/dist/{chunk-TLSP5JKG.js.map → chunk-3BYFS4RO.js.map} +0 -0
- /package/dist/{chunk-XRBM6PBD.js.map → chunk-3MDNVNBM.js.map} +0 -0
- /package/dist/{chunk-CNREFTAV.js.map → chunk-3VUF5H3B.js.map} +0 -0
- /package/dist/{chunk-LHHHJIDR.js.map → chunk-626JLH4D.js.map} +0 -0
- /package/dist/{chunk-HAQPGTQ4.js.map → chunk-7F43U2NC.js.map} +0 -0
- /package/dist/{chunk-ORYA2G7S.js.map → chunk-7G47YXQT.js.map} +0 -0
- /package/dist/{chunk-XMVSQIK4.js.map → chunk-AG6UJ3DI.js.map} +0 -0
- /package/dist/{chunk-JBYFD3QS.js.map → chunk-GBDBKGXW.js.map} +0 -0
- /package/dist/{chunk-GHPCQXG5.js.map → chunk-GCUWJUUM.js.map} +0 -0
- /package/dist/{chunk-C4W2MEFP.js.map → chunk-GS5HEE4M.js.map} +0 -0
- /package/dist/{chunk-ATVQQCYN.js.map → chunk-GWXJSBWR.js.map} +0 -0
- /package/dist/{chunk-KOJC3TH4.js.map → chunk-OBI2MQYU.js.map} +0 -0
- /package/dist/{chunk-JDQVAG3R.js.map → chunk-Q4RGCEOI.js.map} +0 -0
- /package/dist/{chunk-YIGFQWZV.js.map → chunk-QIGMNB6M.js.map} +0 -0
- /package/dist/{chunk-O3NOGKMT.js.map → chunk-QNOCM5JX.js.map} +0 -0
- /package/dist/{chunk-2LVR24GU.js.map → chunk-QOX57Y27.js.map} +0 -0
- /package/dist/{chunk-UWY5PUHR.js.map → chunk-RN5MK7NH.js.map} +0 -0
- /package/dist/{chunk-RN5G3DQN.js.map → chunk-WM3U4RPZ.js.map} +0 -0
- /package/dist/{chunk-K54BDIKL.js.map → chunk-ZQFROKKS.js.map} +0 -0
- /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
|