openpond-sdk 0.10.0 → 0.11.2
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/dist/advanced-refiner-evaluations.js +42 -0
- package/dist/advanced-refiner-evaluations.js.map +7 -0
- package/dist/candidate-evaluations.js +25 -0
- package/dist/candidate-evaluations.js.map +7 -0
- package/dist/{chunk-W5TXWVFS.js → chunk-2JKV5OJO.js} +88 -59
- package/dist/chunk-2JKV5OJO.js.map +7 -0
- package/dist/{chunk-2ZJRG3KL.js → chunk-2NSNBED7.js} +7 -3
- package/dist/chunk-2NSNBED7.js.map +7 -0
- package/dist/{chunk-Y4NGWGTA.js → chunk-4NZW4LFB.js} +268 -264
- package/dist/chunk-4NZW4LFB.js.map +7 -0
- package/dist/{chunk-DSGGM2ME.js → chunk-4SZKRRTO.js} +2 -2
- package/dist/chunk-6FQKRY5K.js +445 -0
- package/dist/chunk-6FQKRY5K.js.map +7 -0
- package/dist/chunk-7Q7I6FAT.js +139 -0
- package/dist/chunk-7Q7I6FAT.js.map +7 -0
- package/dist/chunk-CPEOFPPF.js +632 -0
- package/dist/chunk-CPEOFPPF.js.map +7 -0
- package/dist/chunk-G3FWDZMZ.js +267 -0
- package/dist/chunk-G3FWDZMZ.js.map +7 -0
- package/dist/chunk-GDJRGRHA.js +144 -0
- package/dist/chunk-GDJRGRHA.js.map +7 -0
- package/dist/chunk-HKAR3VPB.js +65 -0
- package/dist/chunk-HKAR3VPB.js.map +7 -0
- package/dist/{chunk-32H2EJRA.js → chunk-JEUHIQWF.js} +10 -7
- package/dist/chunk-JEUHIQWF.js.map +7 -0
- package/dist/chunk-KQWCXW3A.js +294 -0
- package/dist/chunk-KQWCXW3A.js.map +7 -0
- package/dist/chunk-LFH4EKWH.js +1408 -0
- package/dist/chunk-LFH4EKWH.js.map +7 -0
- package/dist/{chunk-DT7FRNIZ.js → chunk-MW2N3BX5.js} +4 -3
- package/dist/{chunk-DT7FRNIZ.js.map → chunk-MW2N3BX5.js.map} +2 -2
- package/dist/{chunk-I3TQTXKB.js → chunk-QVCMFQKA.js} +6 -6
- package/dist/{chunk-I3TQTXKB.js.map → chunk-QVCMFQKA.js.map} +1 -1
- package/dist/{chunk-I2YM3UY4.js → chunk-RIX56CJL.js} +9 -6
- package/dist/chunk-RIX56CJL.js.map +7 -0
- package/dist/{chunk-PJ2VLNJF.js → chunk-SGRYMU4C.js} +2 -2
- package/dist/chunk-SLS3GFPG.js +125 -0
- package/dist/chunk-SLS3GFPG.js.map +7 -0
- package/dist/chunk-SVU4RZ4K.js +70 -0
- package/dist/chunk-SVU4RZ4K.js.map +7 -0
- package/dist/chunk-SXTC2GT6.js +160 -0
- package/dist/chunk-SXTC2GT6.js.map +7 -0
- package/dist/chunk-T4APHDES.js +74 -0
- package/dist/chunk-T4APHDES.js.map +7 -0
- package/dist/chunk-UNMOEI2K.js +587 -0
- package/dist/chunk-UNMOEI2K.js.map +7 -0
- package/dist/chunk-VC5OV5AS.js +174 -0
- package/dist/chunk-VC5OV5AS.js.map +7 -0
- package/dist/{chunk-7B44TQZD.js → chunk-WX22WN33.js} +13 -7
- package/dist/chunk-WX22WN33.js.map +7 -0
- package/dist/{chunk-JCPLAIZL.js → chunk-XCH27NHJ.js} +106 -76
- package/dist/chunk-XCH27NHJ.js.map +7 -0
- package/dist/chunk-XEUOJ5WF.js +31 -0
- package/dist/chunk-XEUOJ5WF.js.map +7 -0
- package/dist/chunk-YCQVVFE5.js +37 -0
- package/dist/chunk-YCQVVFE5.js.map +7 -0
- package/dist/chunk-YTGRET2L.js +604 -0
- package/dist/chunk-YTGRET2L.js.map +7 -0
- package/dist/connected-evidence.js +97 -0
- package/dist/connected-evidence.js.map +7 -0
- package/dist/dataset-commerce.js +773 -0
- package/dist/dataset-commerce.js.map +7 -0
- package/dist/dataset-workspaces.js +45 -80
- package/dist/dataset-workspaces.js.map +4 -4
- package/dist/experiment-evaluation-schedules.js +48 -0
- package/dist/experiment-evaluation-schedules.js.map +7 -0
- package/dist/experiment-improvements.js +52 -0
- package/dist/experiment-improvements.js.map +7 -0
- package/dist/experiments.js +48 -90
- package/dist/experiments.js.map +3 -3
- package/dist/human-review.js +13 -0
- package/dist/human-review.js.map +7 -0
- package/dist/index.js +221 -14
- package/dist/index.js.map +2 -2
- package/dist/learning.js +1 -1
- package/dist/model-starter-attempts.js +2 -2
- package/dist/model-starter-catalog.js +9 -4
- package/dist/model-starter-catalog.js.map +1 -1
- package/dist/model-starters.js +9 -4
- package/dist/model-taskset-runs.js +3 -3
- package/dist/post-training.js +47 -0
- package/dist/post-training.js.map +7 -0
- package/dist/taskset-drafts.js +33 -21
- package/dist/taskset-drafts.js.map +2 -2
- package/dist/taskset-packages.js +28 -558
- package/dist/taskset-packages.js.map +4 -4
- package/dist/training-bundle.js +61 -20
- package/dist/training-bundle.js.map +2 -2
- package/dist/training-projects.js +1 -1
- package/dist/training.js +7 -2
- package/dist/types/packages/sdk/src/advanced-refiner-evaluations.d.ts +2682 -0
- package/dist/types/packages/sdk/src/advanced-refiner-evaluations.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/candidate-evaluation-client.d.ts +1079 -0
- package/dist/types/packages/sdk/src/candidate-evaluation-client.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/candidate-evaluations.d.ts +845 -0
- package/dist/types/packages/sdk/src/candidate-evaluations.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/claude-code-runtime.d.ts +51 -0
- package/dist/types/packages/sdk/src/claude-code-runtime.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/connected-collection-status.d.ts +47 -0
- package/dist/types/packages/sdk/src/connected-collection-status.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/connected-dataset-publication.d.ts +15 -0
- package/dist/types/packages/sdk/src/connected-dataset-publication.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/connected-dataset-source.d.ts +52 -0
- package/dist/types/packages/sdk/src/connected-dataset-source.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/connected-evidence-client.d.ts +2502 -0
- package/dist/types/packages/sdk/src/connected-evidence-client.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/connected-evidence-contracts.d.ts +235 -0
- package/dist/types/packages/sdk/src/connected-evidence-contracts.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/connected-evidence-http.d.ts +6 -0
- package/dist/types/packages/sdk/src/connected-evidence-http.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/connected-evidence.d.ts +8 -0
- package/dist/types/packages/sdk/src/connected-evidence.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/connected-recorded-execution.d.ts +690 -0
- package/dist/types/packages/sdk/src/connected-recorded-execution.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/connected-sync.d.ts +282 -0
- package/dist/types/packages/sdk/src/connected-sync.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/dataset-commerce-contracts.d.ts +230 -0
- package/dist/types/packages/sdk/src/dataset-commerce-contracts.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/dataset-commerce-files.d.ts +114 -0
- package/dist/types/packages/sdk/src/dataset-commerce-files.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/dataset-commerce-responses.d.ts +608 -0
- package/dist/types/packages/sdk/src/dataset-commerce-responses.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/dataset-commerce.d.ts +575 -0
- package/dist/types/packages/sdk/src/dataset-commerce.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts +772 -120
- package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts +293 -38
- package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/dataset-workspace-operations.d.ts +294 -40
- package/dist/types/packages/sdk/src/dataset-workspace-operations.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/evaluation-coordination-http.d.ts +17 -0
- package/dist/types/packages/sdk/src/evaluation-coordination-http.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-client.d.ts +3513 -52
- package/dist/types/packages/sdk/src/experiment-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiment-contracts.d.ts +1017 -1
- package/dist/types/packages/sdk/src/experiment-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiment-evaluation-schedules.d.ts +2780 -0
- package/dist/types/packages/sdk/src/experiment-evaluation-schedules.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-grading-contracts.d.ts +24 -0
- package/dist/types/packages/sdk/src/experiment-grading-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiment-improvement-client.d.ts +5724 -0
- package/dist/types/packages/sdk/src/experiment-improvement-client.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-improvement-contracts.d.ts +13024 -0
- package/dist/types/packages/sdk/src/experiment-improvement-contracts.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-improvement-hosted-adoption.d.ts +1361 -0
- package/dist/types/packages/sdk/src/experiment-improvement-hosted-adoption.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-improvements.d.ts +4 -0
- package/dist/types/packages/sdk/src/experiment-improvements.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-run-contracts.d.ts +262 -0
- package/dist/types/packages/sdk/src/experiment-run-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiment-run-details.d.ts +1388 -1
- package/dist/types/packages/sdk/src/experiment-run-details.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiment-scoring-contracts.d.ts +5 -2
- package/dist/types/packages/sdk/src/experiment-scoring-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiments.d.ts +3 -0
- package/dist/types/packages/sdk/src/experiments.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/grader-inspection.d.ts +307 -5
- package/dist/types/packages/sdk/src/grader-inspection.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/harness-experiment-policy.d.ts +238 -0
- package/dist/types/packages/sdk/src/harness-experiment-policy.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/human-review-client.d.ts +1267 -0
- package/dist/types/packages/sdk/src/human-review-client.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/human-review.d.ts +3 -0
- package/dist/types/packages/sdk/src/human-review.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/index.d.ts +10 -0
- package/dist/types/packages/sdk/src/index.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/managed-training-preparation.d.ts +181 -0
- 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 +63 -4
- 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 +90 -5
- 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 +55 -13
- 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 +370 -1
- package/dist/types/packages/sdk/src/model-learning-policy.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starter-attempts.d.ts +363 -19
- package/dist/types/packages/sdk/src/model-starter-attempts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starter-catalog.d.ts +234 -12
- package/dist/types/packages/sdk/src/model-starter-catalog.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starter-execution.d.ts +78 -1
- package/dist/types/packages/sdk/src/model-starter-execution.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starters.d.ts +466 -13
- package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts +312 -4
- package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-taskset-resources.d.ts +78 -1
- package/dist/types/packages/sdk/src/model-taskset-resources.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts +1282 -4
- package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +1285 -5
- package/dist/types/packages/sdk/src/model-taskset-runs.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/post-training.d.ts +3529 -0
- package/dist/types/packages/sdk/src/post-training.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/profile-evaluation-discovery.d.ts +1127 -0
- package/dist/types/packages/sdk/src/profile-evaluation-discovery.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/profile-external-dataset-package.d.ts +1398 -0
- package/dist/types/packages/sdk/src/profile-external-dataset-package.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts +157 -24
- package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-authored-files.d.ts +111 -18
- package/dist/types/packages/sdk/src/taskset-authored-files.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-authored-validation.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-calibration-fixtures.d.ts +438 -0
- package/dist/types/packages/sdk/src/taskset-calibration-fixtures.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts +292 -38
- package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-authoring.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +661 -103
- package/dist/types/packages/sdk/src/taskset-draft-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-core.d.ts +227 -20
- package/dist/types/packages/sdk/src/taskset-draft-core.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-dataset-artifacts.d.ts +14 -14
- package/dist/types/packages/sdk/src/taskset-draft-dataset-sources.d.ts +17 -17
- package/dist/types/packages/sdk/src/taskset-draft-document.d.ts +147 -20
- package/dist/types/packages/sdk/src/taskset-draft-document.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts +696 -42
- package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-source.d.ts +256 -36
- package/dist/types/packages/sdk/src/taskset-draft-source.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts +292 -38
- package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-drafts.d.ts +2 -0
- package/dist/types/packages/sdk/src/taskset-drafts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-client.d.ts +1494 -26
- 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 +746 -12
- package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-grader-projection.d.ts +77 -3
- package/dist/types/packages/sdk/src/taskset-package-grader-projection.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-learning.d.ts +101 -11
- 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 +459 -39
- package/dist/types/packages/sdk/src/taskset-package-projection.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-acceptance.d.ts +10 -10
- package/dist/types/packages/sdk/src/training-candidate-decisions.d.ts +2 -2
- package/dist/types/packages/sdk/src/training-evaluation-results.d.ts +1 -1
- package/dist/types/packages/sdk/src/training-learning-batch.d.ts +376 -42
- package/dist/types/packages/sdk/src/training-learning-batch.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-preparations.d.ts +3930 -0
- package/dist/types/packages/sdk/src/training-preparations.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-project-client.d.ts +776 -8
- package/dist/types/packages/sdk/src/training-project-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-project-contracts.d.ts +1161 -11
- package/dist/types/packages/sdk/src/training-project-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training.d.ts +2655 -24
- package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
- package/package.json +35 -3
- package/dist/chunk-2ZJRG3KL.js.map +0 -7
- package/dist/chunk-32H2EJRA.js.map +0 -7
- package/dist/chunk-7B44TQZD.js.map +0 -7
- package/dist/chunk-I2YM3UY4.js.map +0 -7
- package/dist/chunk-JA3KFK3U.js +0 -580
- package/dist/chunk-JA3KFK3U.js.map +0 -7
- package/dist/chunk-JCPLAIZL.js.map +0 -7
- package/dist/chunk-LGEF4S5I.js +0 -1229
- package/dist/chunk-LGEF4S5I.js.map +0 -7
- package/dist/chunk-PRRUBH2B.js +0 -314
- package/dist/chunk-PRRUBH2B.js.map +0 -7
- package/dist/chunk-W5TXWVFS.js.map +0 -7
- package/dist/chunk-Y4NGWGTA.js.map +0 -7
- /package/dist/{chunk-DSGGM2ME.js.map → chunk-4SZKRRTO.js.map} +0 -0
- /package/dist/{chunk-PJ2VLNJF.js.map → chunk-SGRYMU4C.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/model-taskset-authoring.ts", "../src/model-bound-taskset-authoring.ts", "../src/taskset-authored-files.ts", "../src/taskset-authored-tool-environment.ts", "../src/taskset-draft-package-compiler.ts"],
|
|
4
|
-
"sourcesContent": ["import { contentHash } from \"@openpond/harness\";\nimport { createVerifierSetRelease } from \"@openpond/evals\";\nimport { learningRef, sameLearningRef, sealLearningContent } from \"@openpond/evals/learning\";\nimport { TasksetReleaseSchema } from \"@openpond/evals/tasksets\";\nimport { ModelTasksetAuthoringOwnerSchema, ModelTasksetDraftPreparationSchema, ModelTasksetDraftRequestSchema, type ModelTasksetDraftPreparation, type ModelTasksetDraftRequest } from \"./model-taskset-authoring-contracts.js\";\nimport { assertModelTasksetAuthoring, modelAuthoredTasksetId } from \"./model-taskset-authoring-lineage.js\";\nimport { createTasksetPackage, validateTasksetPackage, type TasksetPackage } from \"./taskset-package-contracts.js\";\nimport { createTasksetPackageExecutionFile, resolveTasksetPackageExecution } from \"./taskset-package-execution.js\";\nimport { modelStarterExecutionAssetId } from \"./model-starter-execution.js\";\nimport { deriveModelTaskset } from \"./model-taskset-derivation.js\";\nimport { publishBoundModelTasksetDraftPackage } from \"./model-bound-taskset-authoring.js\";\n\nexport * from \"./model-taskset-authoring-contracts.js\";\n\n/** Resolve under an authorized Model CAS. The host retains requestHash and the\n * preparation so retrying cannot choose newer source bytes or another draft. */\nexport function prepareModelTasksetDraft(input: { request: ModelTasksetDraftRequest; owner: { scopeId: string; modelId: string }; source: TasksetPackage }): ModelTasksetDraftPreparation {\n const request = ModelTasksetDraftRequestSchema.parse(input.request);\n const owner = ModelTasksetAuthoringOwnerSchema.parse(input.owner);\n const source = validateTasksetPackage(input.source);\n if (source.learningResources) throw new Error(\"Reviewed Tasksets require their reviewed authoring workflow.\");\n if (source.contentHash !== request.sourcePackageHash) throw new Error(\"Taskset draft source package changed.\");\n if (source.modelResources) {\n const derived = deriveModelTaskset({ owner, source: { ...source.modelResources, taskset: source.taskset, executionResources: { environment: source.environment, verifierSet: source.verifierSet } },\n rewardBinding: source.modelResources.rewardBinding, rewards: source.modelResources.rewards, assets: source.modelResources.assets });\n const lineage = derived.taskset.metadata.modelTasksetDerivation as { owner: typeof owner; root: ReturnType<typeof learningRef>; parent: ReturnType<typeof learningRef> };\n return ModelTasksetDraftPreparationSchema.parse({ schemaVersion: \"openpond.modelTasksetDraftPreparation.v1\",\n draftId: `model-taskset-draft-${contentHash({ owner, operationId: request.operationId })}`, requestHash: contentHash(request),\n sourcePackageHash: source.contentHash, sourceTasksetRef: learningRef(source.taskset), tasksetId: derived.taskset.id,\n tasksetRevision: derived.taskset.revision, lineage: { ...lineage, schemaVersion: \"openpond.modelTasksetAuthoring.v1\" }, authoringGraph: \"bound\",\n });\n }\n const previous = assertModelTasksetAuthoring(source.taskset);\n const owned = previous && contentHash(previous.owner) === contentHash(owner);\n const root = owned ? previous.root : learningRef(source.taskset);\n const lineage = { schemaVersion: \"openpond.modelTasksetAuthoring.v1\" as const, owner, root, parent: learningRef(source.taskset) };\n return ModelTasksetDraftPreparationSchema.parse({\n schemaVersion: \"openpond.modelTasksetDraftPreparation.v1\",\n draftId: `model-taskset-draft-${contentHash({ owner, operationId: request.operationId })}`,\n requestHash: contentHash(request), sourcePackageHash: source.contentHash, sourceTasksetRef: learningRef(source.taskset),\n tasksetId: modelAuthoredTasksetId(lineage), tasksetRevision: owned ? source.taskset.revision + 1 : 1, lineage,\n });\n}\n\n/** The edited package already carries exact file bytes and execution releases.\n * Seal the owned revision without copying qualification for different bytes. */\nexport function publishModelTasksetDraftPackage(input: { preparation: ModelTasksetDraftPreparation; edited: TasksetPackage; source?: TasksetPackage }): TasksetPackage {\n const prepared = ModelTasksetDraftPreparationSchema.parse(input.preparation);\n if (!sameLearningRef(prepared.sourceTasksetRef, prepared.lineage.parent)) throw new Error(\"Taskset draft preparation differs from its source lineage.\");\n if (prepared.authoringGraph === \"bound\") {\n if (!input.source) throw new Error(\"Bound Taskset authoring requires its retained source package.\");\n return publishBoundModelTasksetDraftPackage({ preparation: prepared, source: input.source, edited: input.edited });\n }\n const edited = requireOrdinaryPackage(input.edited);\n const { contentHash: _verifierHash, ...verifierContent } = edited.verifierSet;\n const verifierSet = createVerifierSetRelease({ ...verifierContent, id: `${prepared.tasksetId}-verifiers`, revision: prepared.tasksetRevision,\n calibrationReceiptRefs: [], metadata: { sourceVerifierSet: learningRef(edited.verifierSet) } });\n const { contentHash: _hash, ...content } = edited.taskset;\n const taskset = TasksetReleaseSchema.parse(sealLearningContent({ ...content, id: prepared.tasksetId, revision: prepared.tasksetRevision,\n verifierSetRelease: { id: verifierSet.id, contentHash: verifierSet.contentHash },\n metadata: {\n modelTasksetAuthoring: prepared.lineage,\n ...(edited.taskset.metadata.environmentResources === undefined ? {} : { environmentResources: edited.taskset.metadata.environmentResources }),\n ...(edited.taskset.metadata.ordinaryAuthoring === undefined ? {} : { ordinaryAuthoring: edited.taskset.metadata.ordinaryAuthoring }),\n },\n }));\n const resolved = resolveTasksetPackageExecution(edited);\n const files = resolved ? [\n ...edited.files.filter(file => file.asset.id !== modelStarterExecutionAssetId(edited.taskset)),\n createTasksetPackageExecutionFile({ ...resolved.execution, verifierSet }),\n ] : edited.files;\n return createTasksetPackage({ schemaVersion: \"openpond.tasksetPackage.v1\", taskset, environment: edited.environment, verifierSet, files });\n}\n\nfunction requireOrdinaryPackage(value: unknown) {\n const result = validateTasksetPackage(value);\n if (result.modelResources || result.learningResources) throw new Error(\"This Taskset requires its bound or reviewed authoring workflow.\");\n return result;\n}\n", "import { contentHash } from \"@openpond/harness\";\nimport { LearningTextAssetSchema, TaskDefinitionSchema, learningRef, sameLearningRef, sealLearningContent } from \"@openpond/evals/learning\";\nimport { TasksetReleaseSchema } from \"@openpond/evals/tasksets\";\nimport { ModelTasksetDerivationSchema, compileModelTasksetReward } from \"./model-taskset-derivation.js\";\nimport type { ModelTasksetDraftPreparation } from \"./model-taskset-authoring-contracts.js\";\nimport { createTasksetPackage, decodeTasksetPackageFile, resolveTasksetPackageInstructions, validateTasksetPackage, type TasksetPackage } from \"./taskset-package-contracts.js\";\nimport { resolveTasksetPackageExecution } from \"./taskset-package-execution.js\";\n\n/** Task edits retain the exact saved Reward. Changing its implementation or\n * grading policy goes through Reward publication and Model selection. */\nexport function publishBoundModelTasksetDraftPackage(input: {\n preparation: ModelTasksetDraftPreparation; source: TasksetPackage; edited: TasksetPackage;\n}): TasksetPackage {\n const source = validateTasksetPackage(input.source);\n const edited = validateTasksetPackage(input.edited);\n const prepared = input.preparation;\n if (prepared.authoringGraph !== \"bound\" || !source.modelResources || source.learningResources || edited.modelResources || edited.learningResources) throw new Error(\"Bound task editing requires its source Reward and an ordinary edited workspace.\");\n if (source.contentHash !== prepared.sourcePackageHash || !sameLearningRef(learningRef(source.taskset), prepared.sourceTasksetRef)) throw new Error(\"Bound draft differs from its retained source package.\");\n const normalizedGraders = (value: TasksetPackage) => value.taskset.graders.map(grader => grader.kind === \"custom_verifier\" ? { ...grader, exportName: grader.exportName ?? \"verify\" } : grader);\n if (contentHash(normalizedGraders(source)) !== contentHash(normalizedGraders(edited))) throw new Error(\"Edit the saved Reward in Rewards before changing this Taskset's graders.\");\n const resources = source.modelResources;\n const assets = new Map(resources.assets.map(asset => [asset.id, asset]));\n const execution = resolveTasksetPackageExecution(edited);\n const sourceExecution = resolveTasksetPackageExecution(source);\n const environmentContent = (value: TasksetPackage[\"environment\"]) => {\n const { id: _id, revision: _revision, contentHash: _hash, metadata, ...contract } = value;\n const { javascriptEnvironment: _javascript, ...retained } = metadata;\n return { ...contract, metadata: { ...retained, resources: retained.resources ?? [] } };\n };\n const javascriptContent = (value: typeof execution) => {\n if (!value) return null;\n const { id: _id, revision: _revision, contentHash: _hash, ...contract } = value.execution.javascript;\n return contract;\n };\n const unchangedEnvironment = contentHash(environmentContent(source.environment)) === contentHash(environmentContent(edited.environment))\n && contentHash(javascriptContent(sourceExecution)) === contentHash(javascriptContent(execution));\n const selectedEnvironment = unchangedEnvironment ? source.environment : edited.environment;\n const selectedExecution = unchangedEnvironment ? sourceExecution : execution;\n const requiredIds = new Set([\n ...resources.assets.map(asset => asset.id),\n ...edited.taskset.tasks.flatMap(task => task.privilegedContextRef ? [task.privilegedContextRef] : []),\n ...[edited.environment.actionSchemaRef, edited.environment.observationSchemaRef, edited.environment.stateSchemaRef].flatMap(ref => ref ? [ref.id] : []),\n ...(execution?.assets.map(asset => asset.id) ?? []),\n ]);\n for (const id of requiredIds) {\n const file = edited.files.find(file => file.asset.id === id);\n if (!file) throw new Error(`Bound Taskset asset is missing: ${id}.`);\n const text = new TextDecoder(\"utf-8\", { fatal: true }).decode(decodeTasksetPackageFile(file));\n assets.set(id, LearningTextAssetSchema.parse(sealLearningContent({ schemaVersion: \"openpond.learningTextAsset.v1\", id, revision: 1, asset: file.asset, text })));\n }\n const instructions = resolveTasksetPackageInstructions(edited);\n const { contentHash: _definitionHash, ...definitionContent } = resources.taskDefinition;\n const { policy, environment, environmentRelease, tools, capabilities, verifierSetRelease } = edited.taskset;\n const taskDefinition = TaskDefinitionSchema.parse(sealLearningContent({ ...definitionContent, instructions,\n execution: { policy, environment, environmentRelease, tools, capabilities, verifierSetRelease },\n }));\n const { contentHash: _taskHash, ...taskContent } = edited.taskset;\n const taskset = TasksetReleaseSchema.parse(sealLearningContent({ ...taskContent, tasks: edited.taskset.tasks.map(task => resources.instructionMode === \"per_task\" ? task\n : { ...task, policyVisibleContext: { ...task.policyVisibleContext, instructions } }) }));\n const derived = compileModelTasksetReward({ owner: prepared.lineage.owner,\n source: { ...resources, taskset: source.taskset, executionResources: { environment: source.environment, verifierSet: source.verifierSet } },\n rewardBinding: resources.rewardBinding, rewards: resources.rewards, assets: [...assets.values()],\n edits: { taskset, taskDefinition, executionResources: { environment: selectedEnvironment, verifierSet: edited.verifierSet }, ...(selectedExecution ? { execution: selectedExecution.execution } : {}) },\n });\n const lineage = ModelTasksetDerivationSchema.parse(derived.taskset.metadata.modelTasksetDerivation);\n if (derived.taskset.id !== prepared.tasksetId || derived.taskset.revision !== prepared.tasksetRevision\n || contentHash({ ...lineage, schemaVersion: prepared.lineage.schemaVersion }) !== contentHash(prepared.lineage)) throw new Error(\"Bound draft differs from its retained ownership lineage.\");\n const { taskset: published, executionResources, ...modelResources } = derived;\n return createTasksetPackage({ schemaVersion: \"openpond.tasksetPackage.v1\", taskset: published, ...executionResources!, modelResources, files: edited.files });\n}\n", "import { z } from \"zod\";\nimport { contentHash, ImmutableAssetRefSchema, sha256, type ImmutableAssetRef } from \"@openpond/harness\";\nimport { TasksetSchema, type GeneratedTaskFile, type Taskset } from \"./taskset-authored-contracts.js\";\nimport { computeTasksetHash } from \"./taskset-authored-validation.js\";\nimport { projectPortableTaskRecord } from \"./taskset-authored-portable-release.js\";\nimport { TasksetDraftFilePathSchema } from \"./model-taskset-authoring-contracts.js\";\nimport { MAX_TASKSET_PACKAGE_BYTES } from \"./taskset-package-files.js\";\nimport { prepareAuthoredToolEnvironment } from \"./taskset-authored-tool-environment.js\";\n\nexport const AuthoredTasksetFileInventorySchema = z.array(z.object({\n asset: ImmutableAssetRefSchema, sourcePath: z.string().min(1),\n}).strict()).max(10_000);\n\nconst GENERATED_MANIFESTS = new Set([\"taskset.json\", \"capabilities.json\", \"data/tasks.jsonl\", \"graders/graders.json\", \"fixtures/grader-fixtures.json\", \"environment/taskset.ts\"]);\nexport function isGeneratedTasksetPublicationFilePath(path: string): boolean { return GENERATED_MANIFESTS.has(path); }\n\n/** Seal one captured file population; hosts own filesystem or object-store capture. */\nexport function prepareAuthoredTasksetSource(tasksetInput: Taskset, sourceFiles: ReadonlyMap<string, Uint8Array>, adapterId: string) {\n const taskset = TasksetSchema.parse(tasksetInput);\n if (taskset.metadata.taskDefinition !== undefined || taskset.metadata.rewardBinding !== undefined) return { taskset, generatedFiles: [] as GeneratedTaskFile[] };\n const bytes = new Map<string, Uint8Array>();\n let total = 0;\n for (const [name, data] of sourceFiles) {\n TasksetDraftFilePathSchema.parse(name);\n total += data.byteLength;\n if (bytes.size >= 10_000 || total > MAX_TASKSET_PACKAGE_BYTES * 3 / 4) throw new Error(\"Taskset source exceeds the package byte limit.\");\n bytes.set(name, data.slice());\n }\n const aggregator = taskset.metrics?.customAggregator;\n const aggregatorBytes = aggregator ? bytes.get(aggregator.module) : undefined;\n if (aggregator && !aggregatorBytes) throw new Error(\"Declared Taskset metric module is missing.\");\n const metrics = aggregator && aggregatorBytes ? { ...taskset.metrics!, customAggregator: { ...aggregator, contentHash: sha256(aggregatorBytes) } } : taskset.metrics;\n const inventory = new Map<string, { asset: ImmutableAssetRef; sourcePath: string }>();\n const declaredPaths = new Set<string>();\n const generatedFiles: GeneratedTaskFile[] = [];\n const ref = (id: string, sourcePath: string, mediaType: string, visibility: ImmutableAssetRef[\"visibility\"]): ImmutableAssetRef => {\n const source = bytes.get(sourcePath);\n if (!source) throw new Error(`Declared Taskset file is missing: ${sourcePath}.`);\n return { id, path: sourcePath, contentHash: sha256(source), sizeBytes: source.byteLength, mediaType, visibility };\n };\n const add = (asset: ImmutableAssetRef, sourcePath = asset.path) => {\n const previous = inventory.get(asset.id);\n if (previous && contentHash(previous) !== contentHash({ asset, sourcePath })) throw new Error(`Conflicting Taskset file identity: ${asset.id}.`);\n const source = bytes.get(sourcePath);\n if (!source || source.length !== asset.sizeBytes || sha256(source) !== asset.contentHash) throw new Error(`Taskset file differs from its declared bytes: ${asset.id}.`);\n inventory.set(asset.id, { asset, sourcePath });\n declaredPaths.add(sourcePath);\n };\n for (const task of taskset.tasks) {\n const portable = projectPortableTaskRecord(task);\n for (const asset of portable.artifactRefs) add(asset, task.assets?.find(candidate => candidate.id === asset.id)?.artifactRef ?? asset.path);\n for (const output of portable.requiredOutputs ?? []) if (output.schemaRef) add(output.schemaRef);\n }\n for (const resource of taskset.environment.resources ?? []) add(ref(resource.id, resource.path, resource.mediaType ?? \"application/octet-stream\", resource.visibility === \"policy_visible\" ? \"policy\" : \"host_private\"));\n const graders = taskset.graders.map(grader => {\n if (grader.kind === \"custom_verifier\") {\n let asset = ref(`verifier-${grader.id}`, grader.module, \"application/javascript\", \"host_private\");\n const previous = ImmutableAssetRefSchema.safeParse(grader.metadata.portableVerifierRef);\n if (previous.success && previous.data.contentHash === asset.contentHash && previous.data.sizeBytes === asset.sizeBytes) asset = previous.data;\n add(asset, grader.module);\n return { ...grader, metadata: { ...grader.metadata, portableVerifierRef: asset } };\n }\n if (grader.kind === \"human\" || grader.kind === \"model_judge\") {\n const content = new TextEncoder().encode(grader.rubric);\n const sourcePath = `graders/rubric-${sha256(content)}.md`;\n bytes.set(sourcePath, content);\n let asset = ref(`rubric-${grader.id}`, sourcePath, \"text/markdown\", \"verifier\");\n const previous = ImmutableAssetRefSchema.safeParse(grader.metadata.portableRubricRef);\n if (previous.success && previous.data.contentHash === asset.contentHash && previous.data.sizeBytes === asset.sizeBytes) {\n if (previous.data.visibility === \"policy\") throw new Error(\"A grader rubric cannot become policy-visible.\");\n asset = previous.data;\n }\n add(asset, sourcePath);\n generatedFiles.push({ path: sourcePath, role: \"verifier\", content: grader.rubric });\n return { ...grader, metadata: { ...grader.metadata, portableRubricRef: asset } };\n }\n return grader;\n });\n if (aggregator && ![...inventory.values()].some(file => file.asset.path === aggregator.module && file.sourcePath === aggregator.module && file.asset.visibility !== \"policy\")) {\n add(ref(`metric-${contentHash(aggregator.module)}`, aggregator.module, \"application/javascript\", \"host_private\"));\n }\n // Unreferenced source files are retained privately. Only explicit task or\n // environment declarations can make bytes visible to the policy.\n const previousInventory = AuthoredTasksetFileInventorySchema.parse(taskset.metadata.portableFileInventory ?? []);\n for (const name of [...bytes.keys()].sort()) if (!declaredPaths.has(name)) {\n const previous = previousInventory.find(file => file.sourcePath === name && !inventory.has(file.asset.id));\n add(previous\n ? { ...ref(previous.asset.id, name, previous.asset.mediaType, previous.asset.visibility), path: previous.asset.path }\n : ref(`taskset-file-${contentHash(name)}`, name, \"application/octet-stream\", \"host_private\"), name);\n }\n // Publication creates a new release; imported cache and execution identities\n // describe the source revision, not the newly edited graders.\n const { importedPackageHash, derivedPortableMetadata: _derived, ...metadata } = taskset.metadata;\n const environmentMetadata = { ...taskset.environment.metadata };\n if (environmentMetadata.portableExecutionResources !== undefined) {\n const resources = z.object({ environment: z.unknown(), verifierSet: z.unknown().optional() }).parse(environmentMetadata.portableExecutionResources);\n environmentMetadata.portableExecutionResources = { environment: resources.environment };\n }\n const prepared = TasksetSchema.parse({ ...taskset, graders, metrics,\n environment: { ...taskset.environment, metadata: environmentMetadata },\n metadata: { ...metadata, ...(importedPackageHash === undefined ? {} : { sourceImportedPackageHash: importedPackageHash }), portableFileInventory: AuthoredTasksetFileInventorySchema.parse([...inventory.values()].sort((left, right) => left.asset.id.localeCompare(right.asset.id))) } });\n const executable = prepareAuthoredToolEnvironment(prepared, bytes, [...inventory.values()], adapterId);\n return { taskset: TasksetSchema.parse({ ...executable.taskset, contentHash: computeTasksetHash(executable.taskset) }), generatedFiles: [...generatedFiles, ...executable.generatedFiles] };\n}\n", "import { TasksetSchema, type GeneratedTaskFile, type Taskset } from \"./taskset-authored-contracts.js\";\nimport { createEnvironmentRelease } from \"@openpond/evals\";\nimport { JavaScriptEnvironmentDefinitionSchema } from \"@openpond/evals/javascript-environment\";\nimport { learningRef, sealLearningContent } from \"@openpond/evals/learning\";\nimport { contentHash, type ImmutableAssetRef } from \"@openpond/harness\";\nimport { computeTasksetHash } from \"./taskset-authored-validation.js\";\nimport { materializePortableTasksetRelease, portableTasksetEnvironment } from \"./taskset-authored-portable-release.js\";\nimport { ModelStarterExecutionSchema } from \"./model-starter-execution.js\";\nimport { createTasksetPackageExecutionFile } from \"./taskset-package-execution.js\";\nimport { decodeTasksetPackageFile } from \"./taskset-package-files.js\";\n\ntype Inventory = Array<{ asset: ImmutableAssetRef; sourcePath: string }>;\n\n/** Source bytes change in the draft; publication owns all executable hashes.\n * The private declaration is regenerated with the newly compiled verifiers. */\nexport function prepareAuthoredToolEnvironment(taskset: Taskset, bytes: Map<string, Uint8Array>, inventory: Inventory, adapterId: string): { taskset: Taskset; inventory: Inventory; generatedFiles: GeneratedTaskFile[] } {\n if (taskset.environment.entrypoint !== \"openpond.javascript-environment.v1\") return { taskset, inventory, generatedFiles: [] };\n const declarationPath = \"environment/execution.json\";\n const declaration = bytes.get(declarationPath);\n if (!declaration || declaration.length > 524_288) throw new Error(\"Authored tool environment requires its bounded private execution declaration.\");\n const previous = ModelStarterExecutionSchema.parse(JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(declaration)));\n const repin = (ref: ImmutableAssetRef | null): ImmutableAssetRef | null => {\n if (!ref) return null;\n const file = inventory.find(file => file.asset.id === ref.id && file.asset.path === ref.path);\n if (!file) throw new Error(`Authored environment dependency is missing: ${ref.id}.`);\n return file.asset;\n };\n const { contentHash: _javascriptHash, ...javascriptContent } = previous.javascript;\n const javascript = JavaScriptEnvironmentDefinitionSchema.parse(sealLearningContent({ ...javascriptContent,\n id: `javascript-${taskset.id}`, revision: taskset.revision, module: repin(previous.javascript.module),\n }));\n if (contentHash(javascript.tools) !== contentHash(taskset.environment.metadata.portableTools)\n || contentHash(javascript.tools.map(tool => tool.name)) !== contentHash(taskset.environment.toolNames)) throw new Error(\"Authored environment tools differ from the Taskset's declared tools.\");\n const environment = createEnvironmentRelease({ schemaVersion: \"openpond.environmentRelease.v1\", id: `environment-${taskset.id}`, revision: taskset.revision,\n contract: portableTasksetEnvironment(taskset), actionSchemaRef: repin(previous.environment.actionSchemaRef), observationSchemaRef: repin(previous.environment.observationSchemaRef), stateSchemaRef: repin(previous.environment.stateSchemaRef),\n artifactCollection: previous.environment.artifactCollection, adapterConformanceHashes: {},\n metadata: { javascriptEnvironment: learningRef(javascript), resources: taskset.environment.resources ?? [] },\n });\n const prepared = TasksetSchema.parse({ ...taskset, environment: { ...taskset.environment,\n metadata: { ...taskset.environment.metadata, portableExecutionResources: { environment } },\n } });\n const releases = materializePortableTasksetRelease({ taskset: prepared, adapterId: adapterId });\n const file = createTasksetPackageExecutionFile({ javascript, environment, verifierSet: releases.verifierSetRelease });\n const nextInventory = [...inventory.filter(entry => entry.sourcePath !== declarationPath), { asset: file.asset, sourcePath: declarationPath }];\n const finalized = TasksetSchema.parse({ ...prepared, metadata: { ...prepared.metadata, portableFileInventory: nextInventory } });\n return { taskset: TasksetSchema.parse({ ...finalized, contentHash: computeTasksetHash(finalized) }), inventory: nextInventory,\n generatedFiles: [{ path: declarationPath, role: \"environment\", content: new TextDecoder().decode(decodeTasksetPackageFile(file)) }],\n };\n}\n", "import { contentHash } from \"@openpond/harness\";\nimport { ModelTasksetDraftPreparationSchema, type ModelTasksetDraftPreparation } from \"./model-taskset-authoring-contracts.js\";\nimport { publishModelTasksetDraftPackage } from \"./model-taskset-authoring.js\";\nimport { publishTasksetDraft } from \"./taskset-draft-publication.js\";\nimport { validateTasksetDraftWorkspace, decodeTasksetDraftWorkspaceFile, type TasksetDraftWorkspace } from \"./taskset-draft-workspace.js\";\nimport { renderTasksetDraftManifests } from \"./taskset-draft-manifests.js\";\nimport { AuthoredTasksetFileInventorySchema, isGeneratedTasksetPublicationFilePath, prepareAuthoredTasksetSource } from \"./taskset-authored-files.js\";\nimport { materializePortableTasksetRelease } from \"./taskset-authored-portable-release.js\";\nimport { createTasksetPackage, type TasksetPackage } from \"./taskset-package-contracts.js\";\n\n/** Use the same validation, file pinning and release projection as Desktop.\n * Compilation neither executes models/graders nor selects the resulting release.\n * The host supplies its retained preparation and later commits Model/draft CAS. */\nexport function compileTasksetDraftWorkspace(input: {\n workspace: TasksetDraftWorkspace;\n preparation: ModelTasksetDraftPreparation | null;\n adapterId: string;\n now: string;\n source?: TasksetPackage;\n}) {\n const workspace = validateTasksetDraftWorkspace(input.workspace);\n const preparation = input.preparation === null ? null : ModelTasksetDraftPreparationSchema.parse(input.preparation);\n if (preparation ? workspace.draft.id !== preparation.draftId || workspace.draft.modelScope?.modelId !== preparation.lineage.owner.modelId\n || workspace.draft.profileId !== preparation.lineage.owner.scopeId\n || contentHash(workspace.draft.modelScope?.source ?? null) !== contentHash(preparation)\n : workspace.draft.modelScope?.source !== undefined) throw new Error(\"Taskset draft differs from its retained source preparation.\");\n // Validation and publication may happen in different requests. Package\n // identity depends on saved bytes, including their timestamp, not wall time.\n const taskset = publishTasksetDraft({ draft: workspace.draft, now: workspace.draft.updatedAt, sourcePackageHash: workspace.contentHash });\n const files = new Map(workspace.files.map(file => [file.path, decodeTasksetDraftWorkspaceFile(file)]));\n for (const [path, source] of renderTasksetDraftManifests(workspace.draft)) if (!isGeneratedTasksetPublicationFilePath(path)) files.set(path, new TextEncoder().encode(source));\n const authored = prepareAuthoredTasksetSource(taskset, files, input.adapterId);\n for (const file of authored.generatedFiles) files.set(file.path, new TextEncoder().encode(file.content));\n const releases = materializePortableTasksetRelease({ taskset: authored.taskset, adapterId: input.adapterId });\n const inventory = AuthoredTasksetFileInventorySchema.parse(authored.taskset.metadata.portableFileInventory);\n const edited = createTasksetPackage({ schemaVersion: \"openpond.tasksetPackage.v1\", taskset: releases.tasksetRelease,\n environment: releases.environmentRelease, verifierSet: releases.verifierSetRelease,\n files: inventory.map(entry => {\n const bytes = files.get(entry.sourcePath);\n if (!bytes) throw new Error(`Captured Taskset file is missing: ${entry.sourcePath}.`);\n return { asset: entry.asset, base64: Buffer.from(bytes).toString(\"base64\") };\n }),\n });\n return preparation ? publishModelTasksetDraftPackage({ preparation, edited, source: input.source }) : edited;\n}\n\n/** Model-derived authoring retains its stronger owner/source contract. */\nexport function compileModelTasksetDraftWorkspace(input: Parameters<typeof compileTasksetDraftWorkspace>[0]) {\n if (!input.workspace.draft.modelScope) throw new Error(\"Taskset draft requires a Model owner.\");\n return compileTasksetDraftWorkspace(input);\n}\n"],
|
|
4
|
+
"sourcesContent": ["import { contentHash } from \"@openpond/harness\";\nimport { createVerifierSetRelease } from \"@openpond/evals\";\nimport { learningRef, sameLearningRef, sealLearningContent } from \"@openpond/evals/learning\";\nimport { TasksetReleaseSchema } from \"@openpond/evals/tasksets\";\nimport { ModelTasksetAuthoringOwnerSchema, ModelTasksetDraftPreparationSchema, ModelTasksetDraftRequestSchema, type ModelTasksetDraftPreparation, type ModelTasksetDraftRequest } from \"./model-taskset-authoring-contracts.js\";\nimport { assertModelTasksetAuthoring, modelAuthoredTasksetId } from \"./model-taskset-authoring-lineage.js\";\nimport { createTasksetPackage, validateTasksetPackage, type TasksetPackage } from \"./taskset-package-contracts.js\";\nimport { createTasksetPackageExecutionFile, resolveTasksetPackageExecution } from \"./taskset-package-execution.js\";\nimport { modelStarterExecutionAssetId } from \"./model-starter-execution.js\";\nimport { deriveModelTaskset } from \"./model-taskset-derivation.js\";\nimport { publishBoundModelTasksetDraftPackage } from \"./model-bound-taskset-authoring.js\";\n\nexport * from \"./model-taskset-authoring-contracts.js\";\n\n/** Resolve under an authorized Model CAS. The host retains requestHash and the\n * preparation so retrying cannot choose newer source bytes or another draft. */\nexport function prepareModelTasksetDraft(input: { request: ModelTasksetDraftRequest; owner: { scopeId: string; modelId: string }; source: TasksetPackage }): ModelTasksetDraftPreparation {\n const request = ModelTasksetDraftRequestSchema.parse(input.request);\n const owner = ModelTasksetAuthoringOwnerSchema.parse(input.owner);\n const source = validateTasksetPackage(input.source);\n if (source.learningResources) throw new Error(\"Reviewed Tasksets require their reviewed authoring workflow.\");\n if (source.contentHash !== request.sourcePackageHash) throw new Error(\"Taskset draft source package changed.\");\n if (source.modelResources) {\n const derived = deriveModelTaskset({ owner, source: { ...source.modelResources, taskset: source.taskset, executionResources: { environment: source.environment, verifierSet: source.verifierSet } },\n rewardBinding: source.modelResources.rewardBinding, rewards: source.modelResources.rewards, assets: source.modelResources.assets });\n const lineage = derived.taskset.metadata.modelTasksetDerivation as { owner: typeof owner; root: ReturnType<typeof learningRef>; parent: ReturnType<typeof learningRef> };\n return ModelTasksetDraftPreparationSchema.parse({ schemaVersion: \"openpond.modelTasksetDraftPreparation.v1\",\n draftId: `model-taskset-draft-${contentHash({ owner, operationId: request.operationId })}`, requestHash: contentHash(request),\n sourcePackageHash: source.contentHash, sourceTasksetRef: learningRef(source.taskset), tasksetId: derived.taskset.id,\n tasksetRevision: derived.taskset.revision, lineage: { ...lineage, schemaVersion: \"openpond.modelTasksetAuthoring.v1\" }, authoringGraph: \"bound\",\n });\n }\n const previous = assertModelTasksetAuthoring(source.taskset);\n const owned = previous && contentHash(previous.owner) === contentHash(owner);\n const root = owned ? previous.root : learningRef(source.taskset);\n const lineage = { schemaVersion: \"openpond.modelTasksetAuthoring.v1\" as const, owner, root, parent: learningRef(source.taskset) };\n return ModelTasksetDraftPreparationSchema.parse({\n schemaVersion: \"openpond.modelTasksetDraftPreparation.v1\",\n draftId: `model-taskset-draft-${contentHash({ owner, operationId: request.operationId })}`,\n requestHash: contentHash(request), sourcePackageHash: source.contentHash, sourceTasksetRef: learningRef(source.taskset),\n tasksetId: modelAuthoredTasksetId(lineage), tasksetRevision: owned ? source.taskset.revision + 1 : 1, lineage,\n });\n}\n\n/** The edited package already carries exact file bytes and execution releases.\n * Seal the owned revision without copying qualification for different bytes. */\nexport function publishModelTasksetDraftPackage(input: { preparation: ModelTasksetDraftPreparation; edited: TasksetPackage; source?: TasksetPackage }): TasksetPackage {\n const prepared = ModelTasksetDraftPreparationSchema.parse(input.preparation);\n if (!sameLearningRef(prepared.sourceTasksetRef, prepared.lineage.parent)) throw new Error(\"Taskset draft preparation differs from its source lineage.\");\n if (prepared.authoringGraph === \"bound\") {\n if (!input.source) throw new Error(\"Bound Taskset authoring requires its retained source package.\");\n return publishBoundModelTasksetDraftPackage({ preparation: prepared, source: input.source, edited: input.edited });\n }\n const edited = requireOrdinaryPackage(input.edited);\n const { contentHash: _verifierHash, ...verifierContent } = edited.verifierSet;\n const verifierSet = createVerifierSetRelease({ ...verifierContent, id: `${prepared.tasksetId}-verifiers`, revision: prepared.tasksetRevision,\n calibrationReceiptRefs: [], metadata: { sourceVerifierSet: learningRef(edited.verifierSet) } });\n const { contentHash: _hash, ...content } = edited.taskset;\n const taskset = TasksetReleaseSchema.parse(sealLearningContent({ ...content, id: prepared.tasksetId, revision: prepared.tasksetRevision,\n verifierSetRelease: { id: verifierSet.id, contentHash: verifierSet.contentHash },\n metadata: {\n modelTasksetAuthoring: prepared.lineage,\n ...(edited.taskset.metadata.environmentResources === undefined ? {} : { environmentResources: edited.taskset.metadata.environmentResources }),\n ...(edited.taskset.metadata.ordinaryAuthoring === undefined ? {} : { ordinaryAuthoring: edited.taskset.metadata.ordinaryAuthoring }),\n },\n }));\n const resolved = resolveTasksetPackageExecution(edited);\n const files = resolved ? [\n ...edited.files.filter(file => file.asset.id !== modelStarterExecutionAssetId(edited.taskset)),\n createTasksetPackageExecutionFile({ ...resolved.execution, verifierSet }),\n ] : edited.files;\n return createTasksetPackage({ schemaVersion: \"openpond.tasksetPackage.v1\", taskset, environment: edited.environment, verifierSet, files });\n}\n\nfunction requireOrdinaryPackage(value: unknown) {\n const result = validateTasksetPackage(value);\n if (result.modelResources || result.learningResources) throw new Error(\"This Taskset requires its bound or reviewed authoring workflow.\");\n return result;\n}\n", "import { contentHash } from \"@openpond/harness\";\nimport { LearningTextAssetSchema, TaskDefinitionSchema, learningRef, sameLearningRef, sealLearningContent } from \"@openpond/evals/learning\";\nimport { TasksetReleaseSchema } from \"@openpond/evals/tasksets\";\nimport { ModelTasksetDerivationSchema, compileModelTasksetReward } from \"./model-taskset-derivation.js\";\nimport type { ModelTasksetDraftPreparation } from \"./model-taskset-authoring-contracts.js\";\nimport { createTasksetPackage, decodeTasksetPackageFile, resolveTasksetPackageInstructions, validateTasksetPackage, type TasksetPackage } from \"./taskset-package-contracts.js\";\nimport { resolveTasksetPackageExecution } from \"./taskset-package-execution.js\";\n\n/** Task edits retain the exact saved Reward. Changing its implementation or\n * grading policy goes through Reward publication and Model selection. */\nexport function publishBoundModelTasksetDraftPackage(input: {\n preparation: ModelTasksetDraftPreparation; source: TasksetPackage; edited: TasksetPackage;\n}): TasksetPackage {\n const source = validateTasksetPackage(input.source);\n const edited = validateTasksetPackage(input.edited);\n const prepared = input.preparation;\n if (prepared.authoringGraph !== \"bound\" || !source.modelResources || source.learningResources || edited.modelResources || edited.learningResources) throw new Error(\"Bound task editing requires its source Reward and an ordinary edited workspace.\");\n if (source.contentHash !== prepared.sourcePackageHash || !sameLearningRef(learningRef(source.taskset), prepared.sourceTasksetRef)) throw new Error(\"Bound draft differs from its retained source package.\");\n const normalizedGraders = (value: TasksetPackage) => value.taskset.graders.map(grader => grader.kind === \"custom_verifier\" ? { ...grader, exportName: grader.exportName ?? \"verify\" } : grader);\n if (contentHash(normalizedGraders(source)) !== contentHash(normalizedGraders(edited))) throw new Error(\"Edit the saved Reward in Rewards before changing this Taskset's graders.\");\n const resources = source.modelResources;\n const assets = new Map(resources.assets.map(asset => [asset.id, asset]));\n const execution = resolveTasksetPackageExecution(edited);\n const sourceExecution = resolveTasksetPackageExecution(source);\n const environmentContent = (value: TasksetPackage[\"environment\"]) => {\n const { id: _id, revision: _revision, contentHash: _hash, metadata, ...contract } = value;\n const { javascriptEnvironment: _javascript, ...retained } = metadata;\n return { ...contract, metadata: { ...retained, resources: retained.resources ?? [] } };\n };\n const javascriptContent = (value: typeof execution) => {\n if (!value) return null;\n const { id: _id, revision: _revision, contentHash: _hash, ...contract } = value.execution.javascript;\n return contract;\n };\n const unchangedEnvironment = contentHash(environmentContent(source.environment)) === contentHash(environmentContent(edited.environment))\n && contentHash(javascriptContent(sourceExecution)) === contentHash(javascriptContent(execution));\n const selectedEnvironment = unchangedEnvironment ? source.environment : edited.environment;\n const selectedExecution = unchangedEnvironment ? sourceExecution : execution;\n const requiredIds = new Set([\n ...resources.assets.map(asset => asset.id),\n ...edited.taskset.tasks.flatMap(task => task.privilegedContextRef ? [task.privilegedContextRef] : []),\n ...[edited.environment.actionSchemaRef, edited.environment.observationSchemaRef, edited.environment.stateSchemaRef].flatMap(ref => ref ? [ref.id] : []),\n ...(execution?.assets.map(asset => asset.id) ?? []),\n ]);\n for (const id of requiredIds) {\n const file = edited.files.find(file => file.asset.id === id);\n if (!file) throw new Error(`Bound Taskset asset is missing: ${id}.`);\n const text = new TextDecoder(\"utf-8\", { fatal: true }).decode(decodeTasksetPackageFile(file));\n assets.set(id, LearningTextAssetSchema.parse(sealLearningContent({ schemaVersion: \"openpond.learningTextAsset.v1\", id, revision: 1, asset: file.asset, text })));\n }\n const instructions = resolveTasksetPackageInstructions(edited);\n const { contentHash: _definitionHash, ...definitionContent } = resources.taskDefinition;\n const { policy, environment, environmentRelease, tools, capabilities, verifierSetRelease } = edited.taskset;\n const taskDefinition = TaskDefinitionSchema.parse(sealLearningContent({ ...definitionContent, instructions,\n execution: { policy, environment, environmentRelease, tools, capabilities, verifierSetRelease },\n }));\n const { contentHash: _taskHash, ...taskContent } = edited.taskset;\n const taskset = TasksetReleaseSchema.parse(sealLearningContent({ ...taskContent, tasks: edited.taskset.tasks.map(task => resources.instructionMode === \"per_task\" ? task\n : { ...task, policyVisibleContext: { ...task.policyVisibleContext, instructions } }) }));\n const derived = compileModelTasksetReward({ owner: prepared.lineage.owner,\n source: { ...resources, taskset: source.taskset, executionResources: { environment: source.environment, verifierSet: source.verifierSet } },\n rewardBinding: resources.rewardBinding, rewards: resources.rewards, assets: [...assets.values()],\n edits: { taskset, taskDefinition, executionResources: { environment: selectedEnvironment, verifierSet: edited.verifierSet }, ...(selectedExecution ? { execution: selectedExecution.execution } : {}) },\n });\n const lineage = ModelTasksetDerivationSchema.parse(derived.taskset.metadata.modelTasksetDerivation);\n if (derived.taskset.id !== prepared.tasksetId || derived.taskset.revision !== prepared.tasksetRevision\n || contentHash({ ...lineage, schemaVersion: prepared.lineage.schemaVersion }) !== contentHash(prepared.lineage)) throw new Error(\"Bound draft differs from its retained ownership lineage.\");\n const { taskset: published, executionResources, ...modelResources } = derived;\n return createTasksetPackage({ schemaVersion: \"openpond.tasksetPackage.v1\", taskset: published, ...executionResources!, modelResources, files: edited.files });\n}\n", "import { z } from \"zod\";\nimport { contentHash, ImmutableAssetRefSchema, sha256, type ImmutableAssetRef } from \"@openpond/harness\";\nimport { TasksetSchema, type GeneratedTaskFile, type Taskset } from \"./taskset-authored-contracts.js\";\nimport { computeTasksetHash } from \"./taskset-authored-validation.js\";\nimport { projectPortableTaskRecord } from \"./taskset-authored-portable-release.js\";\nimport { TasksetDraftFilePathSchema } from \"./model-taskset-authoring-contracts.js\";\nimport { MAX_TASKSET_PACKAGE_BYTES } from \"./taskset-package-files.js\";\nimport { prepareAuthoredToolEnvironment } from \"./taskset-authored-tool-environment.js\";\n\nexport const AuthoredTasksetFileInventorySchema = z.array(z.object({\n asset: ImmutableAssetRefSchema, sourcePath: z.string().min(1),\n}).strict()).max(10_000);\n\nconst GENERATED_MANIFESTS = new Set([\"taskset.json\", \"capabilities.json\", \"data/tasks.jsonl\", \"graders/graders.json\", \"fixtures/grader-fixtures.json\", \"environment/taskset.ts\"]);\nexport function isGeneratedTasksetPublicationFilePath(path: string): boolean { return GENERATED_MANIFESTS.has(path); }\n\n/** Seal one captured file population; hosts own filesystem or object-store capture. */\nexport function prepareAuthoredTasksetSource(tasksetInput: Taskset, sourceFiles: ReadonlyMap<string, Uint8Array>, adapterId: string) {\n const taskset = TasksetSchema.parse(tasksetInput);\n if (taskset.metadata.taskDefinition !== undefined || taskset.metadata.rewardBinding !== undefined) return { taskset, generatedFiles: [] as GeneratedTaskFile[] };\n const bytes = new Map<string, Uint8Array>();\n let total = 0;\n for (const [name, data] of sourceFiles) {\n TasksetDraftFilePathSchema.parse(name);\n total += data.byteLength;\n if (bytes.size >= 10_000 || total > MAX_TASKSET_PACKAGE_BYTES * 3 / 4) throw new Error(\"Taskset source exceeds the package byte limit.\");\n bytes.set(name, data.slice());\n }\n const aggregator = taskset.metrics?.customAggregator;\n const aggregatorBytes = aggregator ? bytes.get(aggregator.module) : undefined;\n if (aggregator && !aggregatorBytes) throw new Error(\"Declared Taskset metric module is missing.\");\n const metrics = aggregator && aggregatorBytes ? { ...taskset.metrics!, customAggregator: { ...aggregator, contentHash: sha256(aggregatorBytes) } } : taskset.metrics;\n const inventory = new Map<string, { asset: ImmutableAssetRef; sourcePath: string }>();\n const declaredPaths = new Set<string>();\n const generatedFiles: GeneratedTaskFile[] = [];\n const ref = (id: string, sourcePath: string, mediaType: string, visibility: ImmutableAssetRef[\"visibility\"]): ImmutableAssetRef => {\n const source = bytes.get(sourcePath);\n if (!source) throw new Error(`Declared Taskset file is missing: ${sourcePath}.`);\n return { id, path: sourcePath, contentHash: sha256(source), sizeBytes: source.byteLength, mediaType, visibility };\n };\n const add = (asset: ImmutableAssetRef, sourcePath = asset.path) => {\n const previous = inventory.get(asset.id);\n if (previous && contentHash(previous) !== contentHash({ asset, sourcePath })) throw new Error(`Conflicting Taskset file identity: ${asset.id}.`);\n const source = bytes.get(sourcePath);\n if (!source || source.length !== asset.sizeBytes || sha256(source) !== asset.contentHash) throw new Error(`Taskset file differs from its declared bytes: ${asset.id}.`);\n inventory.set(asset.id, { asset, sourcePath });\n declaredPaths.add(sourcePath);\n };\n for (const task of taskset.tasks) {\n const portable = projectPortableTaskRecord(task);\n for (const asset of portable.artifactRefs) add(asset, task.assets?.find(candidate => candidate.id === asset.id)?.artifactRef ?? asset.path);\n for (const output of portable.requiredOutputs ?? []) if (output.schemaRef) add(output.schemaRef);\n }\n for (const resource of taskset.environment.resources ?? []) add(ref(resource.id, resource.path, resource.mediaType ?? \"application/octet-stream\", resource.visibility === \"policy_visible\" ? \"policy\" : \"host_private\"));\n const graders = taskset.graders.map(grader => {\n if (grader.kind === \"custom_verifier\") {\n let asset = ref(`verifier-${grader.id}`, grader.module, \"application/javascript\", \"host_private\");\n const previous = ImmutableAssetRefSchema.safeParse(grader.metadata.portableVerifierRef);\n if (previous.success && previous.data.contentHash === asset.contentHash && previous.data.sizeBytes === asset.sizeBytes) asset = previous.data;\n add(asset, grader.module);\n return { ...grader, metadata: { ...grader.metadata, portableVerifierRef: asset } };\n }\n if (grader.kind === \"human\" || grader.kind === \"model_judge\") {\n const content = new TextEncoder().encode(grader.rubric);\n const sourcePath = `graders/rubric-${sha256(content)}.md`;\n bytes.set(sourcePath, content);\n let asset = ref(`rubric-${grader.id}`, sourcePath, \"text/markdown\", \"verifier\");\n const previous = ImmutableAssetRefSchema.safeParse(grader.metadata.portableRubricRef);\n if (previous.success && previous.data.contentHash === asset.contentHash && previous.data.sizeBytes === asset.sizeBytes) {\n if (previous.data.visibility === \"policy\") throw new Error(\"A grader rubric cannot become policy-visible.\");\n asset = previous.data;\n }\n add(asset, sourcePath);\n generatedFiles.push({ path: sourcePath, role: \"verifier\", content: grader.rubric });\n return { ...grader, metadata: { ...grader.metadata, portableRubricRef: asset } };\n }\n return grader;\n });\n if (aggregator && ![...inventory.values()].some(file => file.asset.path === aggregator.module && file.sourcePath === aggregator.module && file.asset.visibility !== \"policy\")) {\n add(ref(`metric-${contentHash(aggregator.module)}`, aggregator.module, \"application/javascript\", \"host_private\"));\n }\n // Unreferenced source files are retained privately. Only explicit task or\n // environment declarations can make bytes visible to the policy.\n const previousInventory = AuthoredTasksetFileInventorySchema.parse(taskset.metadata.portableFileInventory ?? []);\n for (const name of [...bytes.keys()].sort()) if (!declaredPaths.has(name)) {\n const previous = previousInventory.find(file => file.sourcePath === name && !inventory.has(file.asset.id));\n add(previous\n ? { ...ref(previous.asset.id, name, previous.asset.mediaType, previous.asset.visibility), path: previous.asset.path }\n : ref(`taskset-file-${contentHash(name)}`, name, \"application/octet-stream\", \"host_private\"), name);\n }\n // Publication creates a new release; imported cache and execution identities\n // describe the source revision, not the newly edited graders.\n const { importedPackageHash, derivedPortableMetadata: _derived, ...metadata } = taskset.metadata;\n const environmentMetadata = { ...taskset.environment.metadata };\n if (environmentMetadata.portableExecutionResources !== undefined) {\n const resources = z.object({ environment: z.unknown(), verifierSet: z.unknown().optional() }).parse(environmentMetadata.portableExecutionResources);\n environmentMetadata.portableExecutionResources = { environment: resources.environment };\n }\n const prepared = TasksetSchema.parse({ ...taskset, graders, metrics,\n environment: { ...taskset.environment, metadata: environmentMetadata },\n metadata: { ...metadata, ...(importedPackageHash === undefined ? {} : { sourceImportedPackageHash: importedPackageHash }), portableFileInventory: AuthoredTasksetFileInventorySchema.parse([...inventory.values()].sort((left, right) => left.asset.id.localeCompare(right.asset.id))) } });\n const executable = prepareAuthoredToolEnvironment(prepared, bytes, [...inventory.values()], adapterId);\n return { taskset: TasksetSchema.parse({ ...executable.taskset, contentHash: computeTasksetHash(executable.taskset) }), generatedFiles: [...generatedFiles, ...executable.generatedFiles] };\n}\n", "import { TasksetSchema, type GeneratedTaskFile, type Taskset } from \"./taskset-authored-contracts.js\";\nimport { createEnvironmentRelease } from \"@openpond/evals\";\nimport { JavaScriptEnvironmentDefinitionSchema } from \"@openpond/evals/javascript-environment/contracts\";\nimport { learningRef, sealLearningContent } from \"@openpond/evals/learning\";\nimport { contentHash, type ImmutableAssetRef } from \"@openpond/harness\";\nimport { computeTasksetHash } from \"./taskset-authored-validation.js\";\nimport { materializePortableTasksetRelease, portableTasksetEnvironment } from \"./taskset-authored-portable-release.js\";\nimport { ModelStarterExecutionSchema } from \"./model-starter-execution.js\";\nimport { createTasksetPackageExecutionFile } from \"./taskset-package-execution.js\";\nimport { decodeTasksetPackageFile } from \"./taskset-package-files.js\";\n\ntype Inventory = Array<{ asset: ImmutableAssetRef; sourcePath: string }>;\n\n/** Source bytes change in the draft; publication owns all executable hashes.\n * The private declaration is regenerated with the newly compiled verifiers. */\nexport function prepareAuthoredToolEnvironment(taskset: Taskset, bytes: Map<string, Uint8Array>, inventory: Inventory, adapterId: string): { taskset: Taskset; inventory: Inventory; generatedFiles: GeneratedTaskFile[] } {\n if (taskset.environment.entrypoint !== \"openpond.javascript-environment.v1\") return { taskset, inventory, generatedFiles: [] };\n const declarationPath = \"environment/execution.json\";\n const declaration = bytes.get(declarationPath);\n if (!declaration || declaration.length > 524_288) throw new Error(\"Authored tool environment requires its bounded private execution declaration.\");\n const previous = ModelStarterExecutionSchema.parse(JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(declaration)));\n const repin = (ref: ImmutableAssetRef | null): ImmutableAssetRef | null => {\n if (!ref) return null;\n const file = inventory.find(file => file.asset.id === ref.id && file.asset.path === ref.path);\n if (!file) throw new Error(`Authored environment dependency is missing: ${ref.id}.`);\n return file.asset;\n };\n const { contentHash: _javascriptHash, ...javascriptContent } = previous.javascript;\n const javascript = JavaScriptEnvironmentDefinitionSchema.parse(sealLearningContent({ ...javascriptContent,\n id: `javascript-${taskset.id}`, revision: taskset.revision, module: repin(previous.javascript.module),\n }));\n if (contentHash(javascript.tools) !== contentHash(taskset.environment.metadata.portableTools)\n || contentHash(javascript.tools.map(tool => tool.name)) !== contentHash(taskset.environment.toolNames)) throw new Error(\"Authored environment tools differ from the Taskset's declared tools.\");\n const environment = createEnvironmentRelease({ schemaVersion: \"openpond.environmentRelease.v1\", id: `environment-${taskset.id}`, revision: taskset.revision,\n contract: portableTasksetEnvironment(taskset), actionSchemaRef: repin(previous.environment.actionSchemaRef), observationSchemaRef: repin(previous.environment.observationSchemaRef), stateSchemaRef: repin(previous.environment.stateSchemaRef),\n artifactCollection: previous.environment.artifactCollection, adapterConformanceHashes: {},\n metadata: { javascriptEnvironment: learningRef(javascript), resources: taskset.environment.resources ?? [] },\n });\n const prepared = TasksetSchema.parse({ ...taskset, environment: { ...taskset.environment,\n metadata: { ...taskset.environment.metadata, portableExecutionResources: { environment } },\n } });\n const releases = materializePortableTasksetRelease({ taskset: prepared, adapterId: adapterId });\n const file = createTasksetPackageExecutionFile({ javascript, environment, verifierSet: releases.verifierSetRelease });\n const nextInventory = [...inventory.filter(entry => entry.sourcePath !== declarationPath), { asset: file.asset, sourcePath: declarationPath }];\n const finalized = TasksetSchema.parse({ ...prepared, metadata: { ...prepared.metadata, portableFileInventory: nextInventory } });\n return { taskset: TasksetSchema.parse({ ...finalized, contentHash: computeTasksetHash(finalized) }), inventory: nextInventory,\n generatedFiles: [{ path: declarationPath, role: \"environment\", content: new TextDecoder().decode(decodeTasksetPackageFile(file)) }],\n };\n}\n", "import { contentHash } from \"@openpond/harness\";\nimport { ModelTasksetDraftPreparationSchema, type ModelTasksetDraftPreparation } from \"./model-taskset-authoring-contracts.js\";\nimport { publishModelTasksetDraftPackage } from \"./model-taskset-authoring.js\";\nimport { publishTasksetDraft } from \"./taskset-draft-publication.js\";\nimport { validateTasksetDraftWorkspace, decodeTasksetDraftWorkspaceFile, type TasksetDraftWorkspace } from \"./taskset-draft-workspace.js\";\nimport { renderTasksetDraftManifests } from \"./taskset-draft-manifests.js\";\nimport { AuthoredTasksetFileInventorySchema, isGeneratedTasksetPublicationFilePath, prepareAuthoredTasksetSource } from \"./taskset-authored-files.js\";\nimport { materializePortableTasksetRelease } from \"./taskset-authored-portable-release.js\";\nimport { createTasksetPackage, type TasksetPackage } from \"./taskset-package-contracts.js\";\n\n/** Use the same validation, file pinning and release projection as Desktop.\n * Compilation neither executes models/graders nor selects the resulting release.\n * The host supplies its retained preparation and later commits Model/draft CAS. */\nexport function compileTasksetDraftWorkspace(input: {\n workspace: TasksetDraftWorkspace;\n preparation: ModelTasksetDraftPreparation | null;\n adapterId: string;\n now: string;\n source?: TasksetPackage;\n}) {\n const workspace = validateTasksetDraftWorkspace(input.workspace);\n const preparation = input.preparation === null ? null : ModelTasksetDraftPreparationSchema.parse(input.preparation);\n if (preparation ? workspace.draft.id !== preparation.draftId || workspace.draft.modelScope?.modelId !== preparation.lineage.owner.modelId\n || workspace.draft.profileId !== preparation.lineage.owner.scopeId\n || contentHash(workspace.draft.modelScope?.source ?? null) !== contentHash(preparation)\n : workspace.draft.modelScope?.source !== undefined) throw new Error(\"Taskset draft differs from its retained source preparation.\");\n // Validation and publication may happen in different requests. Package\n // identity depends on saved bytes, including their timestamp, not wall time.\n const taskset = publishTasksetDraft({ draft: workspace.draft, now: workspace.draft.updatedAt, sourcePackageHash: workspace.contentHash });\n const files = new Map(workspace.files.map(file => [file.path, decodeTasksetDraftWorkspaceFile(file)]));\n for (const [path, source] of renderTasksetDraftManifests(workspace.draft)) if (!isGeneratedTasksetPublicationFilePath(path)) files.set(path, new TextEncoder().encode(source));\n const authored = prepareAuthoredTasksetSource(taskset, files, input.adapterId);\n for (const file of authored.generatedFiles) files.set(file.path, new TextEncoder().encode(file.content));\n const releases = materializePortableTasksetRelease({ taskset: authored.taskset, adapterId: input.adapterId });\n const inventory = AuthoredTasksetFileInventorySchema.parse(authored.taskset.metadata.portableFileInventory);\n const edited = createTasksetPackage({ schemaVersion: \"openpond.tasksetPackage.v1\", taskset: releases.tasksetRelease,\n environment: releases.environmentRelease, verifierSet: releases.verifierSetRelease,\n files: inventory.map(entry => {\n const bytes = files.get(entry.sourcePath);\n if (!bytes) throw new Error(`Captured Taskset file is missing: ${entry.sourcePath}.`);\n return { asset: entry.asset, base64: Buffer.from(bytes).toString(\"base64\") };\n }),\n });\n return preparation ? publishModelTasksetDraftPackage({ preparation, edited, source: input.source }) : edited;\n}\n\n/** Model-derived authoring retains its stronger owner/source contract. */\nexport function compileModelTasksetDraftWorkspace(input: Parameters<typeof compileTasksetDraftWorkspace>[0]) {\n if (!input.workspace.draft.modelScope) throw new Error(\"Taskset draft requires a Model owner.\");\n return compileTasksetDraftWorkspace(input);\n}\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["learningRef", "sameLearningRef", "sealLearningContent", "TasksetReleaseSchema", "file", "lineage", "learningRef", "sameLearningRef", "TasksetReleaseSchema", "sealLearningContent", "learningRef", "sealLearningContent", "file", "sealLearningContent", "learningRef"]
|
|
7
7
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
-
GraderSpecSchema
|
|
3
|
-
} from "./chunk-LGEF4S5I.js";
|
|
4
|
-
import {
|
|
2
|
+
GraderSpecSchema,
|
|
5
3
|
decodeTasksetPackageFile
|
|
6
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-LFH4EKWH.js";
|
|
7
5
|
|
|
8
6
|
// src/taskset-package-grader-projection.ts
|
|
9
7
|
import { compileBoundGraders, resolveBoundRewards } from "@openpond/evals/rewards";
|
|
@@ -63,6 +61,7 @@ function projectLearningBatchGraders(binding, rewards, assets = []) {
|
|
|
63
61
|
calibrationFixtureRefs: fields.map((fixture) => fixture.id),
|
|
64
62
|
metadata: {
|
|
65
63
|
...base.metadata,
|
|
64
|
+
portableGrader: grader,
|
|
66
65
|
portableRubricRef: grader.rubricRef,
|
|
67
66
|
calibrationEvidenceHash: reward.calibrationCheckRef.contentHash,
|
|
68
67
|
calibrationCheckRef: reward.calibrationCheckRef
|
|
@@ -78,7 +77,11 @@ function projectLearningBatchGraders(binding, rewards, assets = []) {
|
|
|
78
77
|
if (grader.kind === "human") {
|
|
79
78
|
const asset = assets.find((asset2) => asset2.id === grader.rubricRef.id);
|
|
80
79
|
if (!asset) throw new Error(`Reward ${grader.id} is missing its immutable rubric.`);
|
|
81
|
-
return GraderSpecSchema.parse({
|
|
80
|
+
return GraderSpecSchema.parse({
|
|
81
|
+
...base,
|
|
82
|
+
rubric: verifyLearningTextAsset(asset, grader.rubricRef),
|
|
83
|
+
metadata: { ...base.metadata, portableGrader: grader, portableRubricRef: grader.rubricRef }
|
|
84
|
+
});
|
|
82
85
|
}
|
|
83
86
|
return GraderSpecSchema.parse({ ...base, kind: grader.kind === "artifact" ? "file" : grader.kind });
|
|
84
87
|
});
|
|
@@ -92,4 +95,4 @@ export {
|
|
|
92
95
|
projectLearningBatchGraders,
|
|
93
96
|
learningVerifierModule
|
|
94
97
|
};
|
|
95
|
-
//# sourceMappingURL=chunk-
|
|
98
|
+
//# sourceMappingURL=chunk-RIX56CJL.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/taskset-package-grader-projection.ts"],
|
|
4
|
+
"sourcesContent": ["import { compileBoundGraders, resolveBoundRewards, type RewardBinding, type RewardRelease } from \"@openpond/evals/rewards\";\nimport { learningRef, verifyLearningTextAsset, RewardFixtureAuthoringFieldsSchema, type LearningTextAsset } from \"@openpond/evals/learning\";\nimport type { GraderSpec } from \"./taskset-draft-core.js\";\nimport { GraderSpecSchema } from \"./taskset-draft-core.js\";\nimport { decodeTasksetPackageFile, type TasksetPackage } from \"./taskset-package-contracts.js\";\nimport { z } from \"zod\";\n\n/** Project an ordinary portable package without inventing a Reward binding. */\nexport function importedPackageGraders(value: TasksetPackage) {\n const authoring = value.taskset.metadata.ordinaryAuthoring as { judgeCalibrationFixtures?: unknown } | undefined;\n const calibrationFixtures = z.record(z.string(), z.array(z.string().min(1)).max(100_000)).parse(authoring?.judgeCalibrationFixtures ?? {});\n return value.taskset.graders.map(grader => {\n const base = { ...grader, label: grader.id, metadata: { portableGrader: grader } };\n if (grader.kind === \"custom_verifier\") return GraderSpecSchema.parse({ ...base,\n module: learningVerifierModule(grader.verifierRef.contentHash), exportName: grader.exportName ?? \"verify\",\n metadata: { ...base.metadata, portableVerifierRef: grader.verifierRef } });\n if (grader.kind === \"human\" || grader.kind === \"model_judge\") {\n const file = value.files.find(file => file.asset.id === grader.rubricRef.id);\n if (!file) throw new Error(`Imported rubric is missing: ${grader.id}.`);\n const rubric = new TextDecoder(\"utf-8\", { fatal: true }).decode(decodeTasksetPackageFile(file));\n const metadata = { ...base.metadata, portableRubricRef: grader.rubricRef };\n if (grader.kind === \"human\") return GraderSpecSchema.parse({ ...base, rubric, metadata });\n if (!grader.model) throw new Error(`Imported judge ${grader.id} requires its declared model before local preparation.`);\n return GraderSpecSchema.parse({ ...base, rubric, metadata, judge: grader.model, temperature: grader.temperature ?? 0,\n calibrationStatus: \"pending\", calibrationFixtureRefs: calibrationFixtures[grader.id] ?? [] });\n }\n return GraderSpecSchema.parse({ ...base, kind: grader.kind === \"artifact\" ? \"file\" : grader.kind,\n config: grader.kind === \"artifact\" ? { ...grader.config, ...(grader.config.refIncludes === undefined ? {} : { pathIncludes: grader.config.refIncludes }) } : grader.config });\n });\n}\n\nexport function projectLearningBatchGraders(binding: RewardBinding, rewards: RewardRelease[], assets: LearningTextAsset[] = []): GraderSpec[] {\n const resolved = resolveBoundRewards(binding, rewards);\n return compileBoundGraders(binding, rewards).map((grader) => {\n const reward = resolved.find(({ source }) => source.graderId === grader.id)!.reward;\n const base = { ...grader, label: reward.name, metadata: { rewardBinding: learningRef(binding) } };\n if (grader.kind === \"model_judge\") {\n if (!grader.model || grader.calibrationStatus !== \"passed\" || !reward.calibrationCheckRef || !reward.fixtureSetRef) throw new Error(`Reward ${grader.id} needs a retained passing calibration check before preparation.`);\n const rubric = assets.find(asset => asset.id === grader.rubricRef.id);\n const fixtures = assets.find(asset => asset.id === reward.fixtureSetRef!.id);\n if (!rubric || !fixtures) throw new Error(`Reward ${grader.id} is missing its immutable rubric or calibration fixtures.`);\n const fields = RewardFixtureAuthoringFieldsSchema.array().min(1).max(50).parse(JSON.parse(verifyLearningTextAsset(fixtures, reward.fixtureSetRef)));\n return GraderSpecSchema.parse({ ...base, rubric: verifyLearningTextAsset(rubric, grader.rubricRef), judge: grader.model,\n temperature: grader.temperature ?? 0, calibrationFixtureRefs: fields.map(fixture => fixture.id),\n metadata: { ...base.metadata, portableGrader: grader, portableRubricRef: grader.rubricRef,\n calibrationEvidenceHash: reward.calibrationCheckRef.contentHash, calibrationCheckRef: reward.calibrationCheckRef },\n });\n }\n if (grader.kind === \"custom_verifier\") return GraderSpecSchema.parse({ ...base,\n module: learningVerifierModule(grader.verifierRef.contentHash), exportName: grader.exportName ?? \"verify\",\n metadata: { ...base.metadata, portableVerifierRef: grader.verifierRef },\n });\n if (grader.kind === \"human\") {\n const asset = assets.find((asset) => asset.id === grader.rubricRef.id);\n if (!asset) throw new Error(`Reward ${grader.id} is missing its immutable rubric.`);\n return GraderSpecSchema.parse({ ...base, rubric: verifyLearningTextAsset(asset, grader.rubricRef),\n metadata: { ...base.metadata, portableGrader: grader, portableRubricRef: grader.rubricRef },\n });\n }\n return GraderSpecSchema.parse({ ...base, kind: grader.kind === \"artifact\" ? \"file\" : grader.kind });\n });\n}\n\nexport function learningVerifierModule(hash: string) { return `graders/reward-${hash}.js`; }\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["file", "asset"]
|
|
7
|
+
}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
TasksetPackageSchema,
|
|
7
7
|
tasksetPackageRewardBinding,
|
|
8
8
|
validateTasksetPackage
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-LFH4EKWH.js";
|
|
10
10
|
import {
|
|
11
11
|
HostedModelProjectSummarySchema,
|
|
12
12
|
HostedModelProjectSyncSchema,
|
|
@@ -186,4 +186,4 @@ export {
|
|
|
186
186
|
OpenPondTasksetPackageError,
|
|
187
187
|
OpenPondTasksetPackageClient
|
|
188
188
|
};
|
|
189
|
-
//# sourceMappingURL=chunk-
|
|
189
|
+
//# sourceMappingURL=chunk-SGRYMU4C.js.map
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import {
|
|
2
|
+
contentHash
|
|
3
|
+
} from "./chunk-QUOW6URQ.js";
|
|
4
|
+
|
|
5
|
+
// src/human-review.ts
|
|
6
|
+
export * from "@openpond/evals/human-review";
|
|
7
|
+
|
|
8
|
+
// src/human-review-client.ts
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import { HumanReviewTransportSchema, HumanInspectionSchema, HumanEvidenceSchema, HumanFormSchema, HumanResultViewSchema, HumanReviewViewSchema, HumanInboxSchema } from "@openpond/evals/human-review";
|
|
11
|
+
var HumanReviewClientError = class extends Error {
|
|
12
|
+
constructor(status, code, message) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.status = status;
|
|
15
|
+
this.code = code;
|
|
16
|
+
this.name = "HumanReviewClientError";
|
|
17
|
+
}
|
|
18
|
+
status;
|
|
19
|
+
code;
|
|
20
|
+
};
|
|
21
|
+
var OpenPondHumanReviewClient = class {
|
|
22
|
+
options;
|
|
23
|
+
constructor(options) {
|
|
24
|
+
const url = new URL(options.baseUrl);
|
|
25
|
+
if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.hash || url.search || !options.apiKey.trim() || !options.scope.trim() || options.scope !== options.scope.trim() || /[\r\n]/.test(options.scope)) throw new Error("Use a scoped key and a plain HTTP(S) API endpoint.");
|
|
26
|
+
this.options = { ...options, baseUrl: url.toString().replace(/\/+$/, "") };
|
|
27
|
+
}
|
|
28
|
+
async command(command, signal) {
|
|
29
|
+
const result = HumanReviewViewSchema.parse(await this.request({ endpoint: "command", scope: this.options.scope, command }, signal));
|
|
30
|
+
const revisionMatches = command.action === "cancel" ? result.status === "cancelled" && result.revision >= command.expectedRevision + 1 : result.revision === command.expectedRevision + 1;
|
|
31
|
+
if (result.id !== command.id || result.scope !== this.options.scope || !revisionMatches) throw new HumanReviewClientError(502, "human_response_identity_mismatch", "Review response differs from the submitted operation.");
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
async get(id, revision, signal) {
|
|
35
|
+
const result = HumanReviewViewSchema.parse(await this.request({ endpoint: "get", scope: this.options.scope, id, ...revision ? { revision } : {} }, signal));
|
|
36
|
+
if (result.id !== id || result.scope !== this.options.scope || revision !== void 0 && result.revision !== revision) throw new HumanReviewClientError(502, "human_response_identity_mismatch", "Review response differs from the requested identity.");
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
async inbox(query, signal) {
|
|
40
|
+
const result = HumanInboxSchema.parse(await this.request({ ...query, endpoint: "inbox", scope: this.options.scope }, signal));
|
|
41
|
+
if (result.items.some((r) => r.scope !== this.options.scope || query.projectId && r.projectId !== query.projectId)) throw new HumanReviewClientError(502, "human_inbox_scope_mismatch", "Inbox response differs from the authorized scope.");
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
async snapshot(input, signal) {
|
|
45
|
+
return z.object({ evidence: HumanEvidenceSchema, form: HumanFormSchema }).strict().parse(await this.request({ ...input, endpoint: "snapshot", scope: this.options.scope }, signal));
|
|
46
|
+
}
|
|
47
|
+
async taskSnapshot(input, signal) {
|
|
48
|
+
return z.object({ evidence: HumanEvidenceSchema, form: HumanFormSchema }).strict().parse(await this.request({ ...input, endpoint: "snapshot_tasks", scope: this.options.scope }, signal));
|
|
49
|
+
}
|
|
50
|
+
async inspect(id, signal, options) {
|
|
51
|
+
const result = HumanInspectionSchema.parse(await this.request({ endpoint: "inspect", scope: this.options.scope, id, ...options }, signal));
|
|
52
|
+
if (result.some((row) => row.reviewId !== id)) throw new HumanReviewClientError(502, "human_inspection_identity_mismatch", "Inspection differs from selected review.");
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
async results(executionId, selection, signal) {
|
|
56
|
+
return HumanResultViewSchema.parse(await this.request({ endpoint: "results", scope: this.options.scope, executionId, ...selection ? { selection } : {} }, signal));
|
|
57
|
+
}
|
|
58
|
+
async members(signal) {
|
|
59
|
+
return z.array(z.object({ userId: z.string(), name: z.string().nullable(), email: z.string().nullable(), role: z.string() }).strict()).parse(await this.request({ endpoint: "members", scope: this.options.scope }, signal));
|
|
60
|
+
}
|
|
61
|
+
async request(raw, signal) {
|
|
62
|
+
const body = HumanReviewTransportSchema.parse(raw);
|
|
63
|
+
if (body.scope !== this.options.scope) throw new HumanReviewClientError(403, "human_scope_denied", "Request differs from the scoped client workspace.");
|
|
64
|
+
const serialized = JSON.stringify(body);
|
|
65
|
+
if (new TextEncoder().encode(serialized).byteLength > 1048576) throw new HumanReviewClientError(422, "human_request_too_large", "Review request exceeds its bounded transport.");
|
|
66
|
+
const response = await (this.options.fetch ?? globalThis.fetch)(`${this.options.baseUrl}/v1/human-review`, { method: "POST", headers: { authorization: `Bearer ${this.options.apiKey}`, "content-type": "application/json", "x-openpond-team-id": this.options.scope }, body: serialized, signal, redirect: "error" });
|
|
67
|
+
const reader = response.body?.getReader(), chunks = [];
|
|
68
|
+
let size = 0;
|
|
69
|
+
if (reader) {
|
|
70
|
+
try {
|
|
71
|
+
while (true) {
|
|
72
|
+
const part = await reader.read();
|
|
73
|
+
if (part.done) break;
|
|
74
|
+
size += part.value.byteLength;
|
|
75
|
+
if (size > 8388608) {
|
|
76
|
+
await reader.cancel();
|
|
77
|
+
throw new HumanReviewClientError(502, "human_response_too_large", "Review response exceeds its bounded transport.");
|
|
78
|
+
}
|
|
79
|
+
chunks.push(part.value);
|
|
80
|
+
}
|
|
81
|
+
} finally {
|
|
82
|
+
reader.releaseLock();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const bytes = new Uint8Array(size);
|
|
86
|
+
let offset = 0;
|
|
87
|
+
for (const chunk of chunks) {
|
|
88
|
+
bytes.set(chunk, offset);
|
|
89
|
+
offset += chunk.byteLength;
|
|
90
|
+
}
|
|
91
|
+
let data;
|
|
92
|
+
try {
|
|
93
|
+
data = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
|
|
94
|
+
} catch {
|
|
95
|
+
throw new HumanReviewClientError(502, "human_response_invalid", "Review response is not valid JSON.");
|
|
96
|
+
}
|
|
97
|
+
if (!response.ok) {
|
|
98
|
+
const failure = z.object({ code: z.string().optional(), error: z.string().optional() }).passthrough().safeParse(data);
|
|
99
|
+
throw new HumanReviewClientError(response.status, failure.success ? failure.data.code ?? "human_request_failed" : "human_request_failed", failure.success ? failure.data.error ?? "Review request failed." : "Review request failed.");
|
|
100
|
+
}
|
|
101
|
+
if (body.endpoint === "results") {
|
|
102
|
+
const result = HumanResultViewSchema.parse(data), { contentHash: hash, ...content } = result;
|
|
103
|
+
if (result.executionId !== body.executionId || contentHash(content) !== hash || body.selection !== void 0 && contentHash(result.selection) !== contentHash(body.selection)) throw new HumanReviewClientError(502, "human_result_identity_mismatch", "Human results differ from the exact retained execution or selected reviews.");
|
|
104
|
+
}
|
|
105
|
+
if (body.endpoint === "snapshot" || body.endpoint === "publish_evidence") {
|
|
106
|
+
const result = z.object({ evidence: HumanEvidenceSchema, form: HumanFormSchema }).strict().parse(data);
|
|
107
|
+
if (result.evidence.graderBinding.id !== body.graderId || result.evidence.attempts.length !== body.selections.length || result.evidence.attempts.some((a, i) => a.experimentId !== body.selections[i].executionId || a.attemptId !== body.selections[i].receiptId)) throw new HumanReviewClientError(502, "human_snapshot_identity_mismatch", "Review snapshot differs from selected retained evidence.");
|
|
108
|
+
}
|
|
109
|
+
if (body.endpoint === "publish_local") {
|
|
110
|
+
const result = z.object({ evidence: HumanEvidenceSchema, form: HumanFormSchema }).strict().parse(data);
|
|
111
|
+
if (!result.evidence.publication || result.evidence.attempts.length !== body.evidence.attempts.length || result.evidence.attempts.some((attempt, index) => attempt.localSource?.kind !== "owner_attested_local" || attempt.experimentId !== body.evidence.attempts[index].executionId || attempt.attemptId !== body.evidence.attempts[index].receiptId || attempt.localSource.retainedAttemptHash !== body.evidence.attempts[index].origin.retainedAttemptHash)) throw new HumanReviewClientError(502, "human_publication_identity_mismatch", "Published review differs from the exact local-origin export.");
|
|
112
|
+
}
|
|
113
|
+
if (body.endpoint === "snapshot_tasks") {
|
|
114
|
+
const result = z.object({ evidence: HumanEvidenceSchema, form: HumanFormSchema }).strict().parse(data);
|
|
115
|
+
if (result.evidence.graderBinding.id !== body.graderId || contentHash(result.evidence.dataset) !== contentHash(body.dataset) || (body.taskIds !== void 0 && contentHash(result.evidence.taskIds) !== contentHash(body.taskIds) || !result.evidence.taskIds?.length || new Set(result.evidence.taskIds).size !== result.evidence.taskIds.length)) throw new HumanReviewClientError(502, "human_snapshot_identity_mismatch", "Task snapshot differs from the selected exact tasks.");
|
|
116
|
+
}
|
|
117
|
+
return data;
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export {
|
|
122
|
+
HumanReviewClientError,
|
|
123
|
+
OpenPondHumanReviewClient
|
|
124
|
+
};
|
|
125
|
+
//# sourceMappingURL=chunk-SLS3GFPG.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/human-review.ts", "../src/human-review-client.ts"],
|
|
4
|
+
"sourcesContent": ["export * from \"@openpond/evals/human-review\";\nexport * from \"./human-review-client.js\";\n", "import {contentHash} from \"@openpond/harness\";\nimport { z } from \"zod\";\nimport { HumanReviewTransportSchema,HumanInspectionSchema,HumanEvidenceSchema,HumanFormSchema,HumanResultViewSchema, HumanReviewViewSchema, HumanInboxSchema, type HumanReviewCommand, type HumanReviewRequest, type HumanReviewTransportRequest } from \"@openpond/evals/human-review\";\nexport class HumanReviewClientError extends Error { constructor(readonly status: number, readonly code: string, message: string) { super(message); this.name = \"HumanReviewClientError\"; } }\nexport class OpenPondHumanReviewClient {\n readonly options: { baseUrl: string; apiKey: string; scope: string; fetch?: typeof globalThis.fetch };\n constructor(options: OpenPondHumanReviewClient[\"options\"]) {\n const url = new URL(options.baseUrl);\n if (![\"http:\", \"https:\"].includes(url.protocol) || url.username || url.password || url.hash || url.search || !options.apiKey.trim() || !options.scope.trim() || options.scope !== options.scope.trim() || /[\\r\\n]/.test(options.scope)) throw new Error(\"Use a scoped key and a plain HTTP(S) API endpoint.\");\n this.options = { ...options, baseUrl: url.toString().replace(/\\/+$/, \"\") };\n }\n async command(command: HumanReviewCommand, signal?: AbortSignal) {\n const result = HumanReviewViewSchema.parse(await this.request({ endpoint: \"command\", scope: this.options.scope, command }, signal));\n const revisionMatches = command.action === \"cancel\"\n ? result.status === \"cancelled\" && result.revision >= command.expectedRevision + 1\n : result.revision === command.expectedRevision + 1;\n if (result.id !== command.id || result.scope !== this.options.scope || !revisionMatches) throw new HumanReviewClientError(502, \"human_response_identity_mismatch\", \"Review response differs from the submitted operation.\");\n return result;\n }\n async get(id: string, revision?: number, signal?: AbortSignal) {\n const result = HumanReviewViewSchema.parse(await this.request({ endpoint: \"get\", scope: this.options.scope, id, ...(revision ? { revision } : {}) }, signal));\n if (result.id !== id || result.scope !== this.options.scope || revision !== undefined && result.revision !== revision) throw new HumanReviewClientError(502, \"human_response_identity_mismatch\", \"Review response differs from the requested identity.\");\n return result;\n }\n async inbox(query: Omit<Extract<HumanReviewRequest, { endpoint: \"inbox\" }>, \"endpoint\" | \"scope\">, signal?: AbortSignal) {\n const result = HumanInboxSchema.parse(await this.request({ ...query, endpoint: \"inbox\", scope: this.options.scope }, signal));\n if (result.items.some(r => r.scope !== this.options.scope || query.projectId && r.projectId !== query.projectId)) throw new HumanReviewClientError(502, \"human_inbox_scope_mismatch\", \"Inbox response differs from the authorized scope.\");\n return result;\n }\n async snapshot(input:Omit<Extract<HumanReviewTransportRequest,{endpoint:\"snapshot\"}>,\"endpoint\"|\"scope\">,signal?:AbortSignal) {return z.object({evidence:HumanEvidenceSchema,form:HumanFormSchema}).strict().parse(await this.request({...input,endpoint:\"snapshot\",scope:this.options.scope},signal));}\n async taskSnapshot(input:Omit<Extract<HumanReviewTransportRequest,{endpoint:\"snapshot_tasks\"}>,\"endpoint\"|\"scope\">,signal?:AbortSignal) {return z.object({evidence:HumanEvidenceSchema,form:HumanFormSchema}).strict().parse(await this.request({...input,endpoint:\"snapshot_tasks\",scope:this.options.scope},signal));}\n async inspect(id:string,signal?:AbortSignal,options?:{slot?:number;afterId?:string}) {const result=HumanInspectionSchema.parse(await this.request({endpoint:\"inspect\",scope:this.options.scope,id,...options},signal));if(result.some(row=>row.reviewId!==id))throw new HumanReviewClientError(502,\"human_inspection_identity_mismatch\",\"Inspection differs from selected review.\");return result;}\n async results(executionId:string,selection?:Extract<HumanReviewTransportRequest,{endpoint:\"results\"}>[\"selection\"],signal?:AbortSignal) {\n return HumanResultViewSchema.parse(await this.request({endpoint:\"results\",scope:this.options.scope,executionId,...(selection?{selection}:{})},signal));\n }\n async members(signal?:AbortSignal) {return z.array(z.object({userId:z.string(),name:z.string().nullable(),email:z.string().nullable(),role:z.string()}).strict()).parse(await this.request({endpoint:\"members\",scope:this.options.scope},signal));}\n async request(raw: HumanReviewTransportRequest, signal?: AbortSignal) {\n const body = HumanReviewTransportSchema.parse(raw);\n if(body.scope!==this.options.scope)throw new HumanReviewClientError(403,\"human_scope_denied\",\"Request differs from the scoped client workspace.\");\n const serialized=JSON.stringify(body);if(new TextEncoder().encode(serialized).byteLength>1048576)throw new HumanReviewClientError(422,\"human_request_too_large\",\"Review request exceeds its bounded transport.\");\n const response = await (this.options.fetch ?? globalThis.fetch)(`${this.options.baseUrl}/v1/human-review`, { method: \"POST\", headers: { authorization: `Bearer ${this.options.apiKey}`, \"content-type\": \"application/json\", \"x-openpond-team-id\": this.options.scope }, body: serialized, signal,redirect:\"error\" });\n const reader=response.body?.getReader(),chunks:Uint8Array[]=[];let size=0;\n if(reader){try{while(true){const part=await reader.read();if(part.done)break;size+=part.value.byteLength;if(size>8388608){await reader.cancel();throw new HumanReviewClientError(502,\"human_response_too_large\",\"Review response exceeds its bounded transport.\");}chunks.push(part.value);}}finally{reader.releaseLock();}}\n const bytes=new Uint8Array(size);let offset=0;for(const chunk of chunks){bytes.set(chunk,offset);offset+=chunk.byteLength;}\n let data:unknown;try{data=JSON.parse(new TextDecoder(\"utf-8\",{fatal:true}).decode(bytes));}catch{throw new HumanReviewClientError(502,\"human_response_invalid\",\"Review response is not valid JSON.\");}\n if (!response.ok) { const failure = z.object({ code: z.string().optional(), error: z.string().optional() }).passthrough().safeParse(data); throw new HumanReviewClientError(response.status, failure.success ? failure.data.code ?? \"human_request_failed\" : \"human_request_failed\", failure.success ? failure.data.error ?? \"Review request failed.\" : \"Review request failed.\"); }\n if(body.endpoint===\"results\"){\n const result=HumanResultViewSchema.parse(data),{contentHash:hash,...content}=result;\n if(result.executionId!==body.executionId||contentHash(content)!==hash||body.selection!==undefined&&contentHash(result.selection)!==contentHash(body.selection))throw new HumanReviewClientError(502,\"human_result_identity_mismatch\",\"Human results differ from the exact retained execution or selected reviews.\");\n }\n if(body.endpoint===\"snapshot\"||body.endpoint===\"publish_evidence\"){const result=z.object({evidence:HumanEvidenceSchema,form:HumanFormSchema}).strict().parse(data);if(result.evidence.graderBinding.id!==body.graderId||result.evidence.attempts.length!==body.selections.length||result.evidence.attempts.some((a,i)=>a.experimentId!==body.selections[i]!.executionId||a.attemptId!==body.selections[i]!.receiptId))throw new HumanReviewClientError(502,\"human_snapshot_identity_mismatch\",\"Review snapshot differs from selected retained evidence.\");}\n if(body.endpoint===\"publish_local\"){const result=z.object({evidence:HumanEvidenceSchema,form:HumanFormSchema}).strict().parse(data);if(!result.evidence.publication||result.evidence.attempts.length!==body.evidence.attempts.length||result.evidence.attempts.some((attempt,index)=>attempt.localSource?.kind!==\"owner_attested_local\"||attempt.experimentId!==body.evidence.attempts[index]!.executionId||attempt.attemptId!==body.evidence.attempts[index]!.receiptId||attempt.localSource.retainedAttemptHash!==body.evidence.attempts[index]!.origin.retainedAttemptHash))throw new HumanReviewClientError(502,\"human_publication_identity_mismatch\",\"Published review differs from the exact local-origin export.\");}\n if(body.endpoint===\"snapshot_tasks\"){const result=z.object({evidence:HumanEvidenceSchema,form:HumanFormSchema}).strict().parse(data);if(result.evidence.graderBinding.id!==body.graderId||contentHash(result.evidence.dataset)!==contentHash(body.dataset)||(body.taskIds!==undefined&&contentHash(result.evidence.taskIds)!==contentHash(body.taskIds)||!result.evidence.taskIds?.length||new Set(result.evidence.taskIds).size!==result.evidence.taskIds.length))throw new HumanReviewClientError(502,\"human_snapshot_identity_mismatch\",\"Task snapshot differs from the selected exact tasks.\");}\n return data;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ExperimentFieldMappingsSchema,
|
|
3
|
+
ExperimentGraderPinSchema
|
|
4
|
+
} from "./chunk-2NSNBED7.js";
|
|
5
|
+
import {
|
|
6
|
+
ImmutableReleaseRefSchema,
|
|
7
|
+
contentHash
|
|
8
|
+
} from "./chunk-QUOW6URQ.js";
|
|
9
|
+
|
|
10
|
+
// src/experiment-scoring-contracts.ts
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { RewardReleaseRefSchema } from "@openpond/evals/rewards";
|
|
13
|
+
var Id = z.string().trim().min(1).max(200);
|
|
14
|
+
var ExperimentScoringRequestSchema = z.object({
|
|
15
|
+
operationId: Id,
|
|
16
|
+
execution: ImmutableReleaseRefSchema,
|
|
17
|
+
/** Recorded executions retain observed evidence and never invoke a target. */
|
|
18
|
+
executionKind: z.literal("recorded_evidence").optional(),
|
|
19
|
+
graders: z.array(RewardReleaseRefSchema).min(1).max(100),
|
|
20
|
+
maximumCostUsd: z.number().finite().min(1e-6).max(1e4),
|
|
21
|
+
mappings: z.array(z.object({ graderId: Id, fields: ExperimentFieldMappingsSchema }).strict()).max(100).optional()
|
|
22
|
+
}).strict().superRefine((value, context) => {
|
|
23
|
+
if (new Set(value.graders.map((grader) => grader.id)).size !== value.graders.length)
|
|
24
|
+
context.addIssue({ code: "custom", path: ["graders"], message: "Select each grader once." });
|
|
25
|
+
if (value.mappings && (new Set(value.mappings.map((mapping) => mapping.graderId)).size !== value.mappings.length || value.mappings.some((mapping) => !value.graders.some((grader) => grader.id === mapping.graderId))))
|
|
26
|
+
context.addIssue({ code: "custom", path: ["mappings"], message: "Map each selected grader at most once." });
|
|
27
|
+
});
|
|
28
|
+
var ScoringPassContent = z.object({
|
|
29
|
+
schemaVersion: z.literal("openpond.experimentScoringPass.v1"),
|
|
30
|
+
id: Id,
|
|
31
|
+
teamId: Id,
|
|
32
|
+
revision: z.number().int().positive(),
|
|
33
|
+
request: ExperimentScoringRequestSchema,
|
|
34
|
+
graders: z.array(ExperimentGraderPinSchema).min(1).max(100),
|
|
35
|
+
status: z.enum(["queued", "running", "cancelling", "completed", "failed", "cancelled"]),
|
|
36
|
+
totalCount: z.number().int().min(1).max(1e4),
|
|
37
|
+
counts: z.object({
|
|
38
|
+
pending: z.number().int().nonnegative(),
|
|
39
|
+
running: z.number().int().nonnegative(),
|
|
40
|
+
scored: z.number().int().nonnegative(),
|
|
41
|
+
unavailable: z.number().int().nonnegative(),
|
|
42
|
+
failed: z.number().int().nonnegative(),
|
|
43
|
+
cancelled: z.number().int().nonnegative()
|
|
44
|
+
}).strict(),
|
|
45
|
+
resultAvailable: z.boolean(),
|
|
46
|
+
createdAt: z.iso.datetime(),
|
|
47
|
+
startedAt: z.iso.datetime().nullable(),
|
|
48
|
+
completedAt: z.iso.datetime().nullable(),
|
|
49
|
+
error: z.object({ code: Id, message: z.string().max(2e3) }).strict().nullable()
|
|
50
|
+
}).strict();
|
|
51
|
+
var ExperimentScoringPassSchema = ScoringPassContent.extend({ contentHash: z.string().regex(/^[a-f0-9]{64}$/) });
|
|
52
|
+
function verifyExperimentScoringPass(value) {
|
|
53
|
+
const pass = ExperimentScoringPassSchema.parse(value);
|
|
54
|
+
const { contentHash: actual, ...content } = pass;
|
|
55
|
+
if (contentHash(content) !== actual || Object.values(pass.counts).reduce((sum, count) => sum + count, 0) !== pass.totalCount)
|
|
56
|
+
throw new Error("Scoring pass integrity or population accounting failed.");
|
|
57
|
+
const terminal = ["completed", "failed", "cancelled"].includes(pass.status);
|
|
58
|
+
if (terminal && (!pass.completedAt || pass.counts.pending || pass.counts.running) || !terminal && (pass.completedAt !== null || pass.resultAvailable) || pass.status === "completed" && !pass.resultAvailable)
|
|
59
|
+
throw new Error("Scoring pass lifecycle differs from its retained result.");
|
|
60
|
+
if (pass.graders.length !== pass.request.graders.length || new Set(pass.graders.map((grader) => grader.feedbackKey)).size !== pass.graders.length || pass.graders.some((grader, index) => contentHash(grader.release) !== contentHash(pass.request.graders[index]) || contentHash(grader.mappings ?? []) !== contentHash(pass.request.mappings?.find((mapping) => mapping.graderId === grader.release?.id)?.fields ?? [])))
|
|
61
|
+
throw new Error("Scoring pass graders differ from their exact admission.");
|
|
62
|
+
return pass;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export {
|
|
66
|
+
ExperimentScoringRequestSchema,
|
|
67
|
+
ExperimentScoringPassSchema,
|
|
68
|
+
verifyExperimentScoringPass
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=chunk-SVU4RZ4K.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/experiment-scoring-contracts.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\nimport { contentHash, ImmutableReleaseRefSchema } from \"@openpond/harness\";\nimport { RewardReleaseRefSchema } from \"@openpond/evals/rewards\";\nimport { ExperimentGraderPinSchema } from \"./experiment-contracts.js\";\nimport { ExperimentFieldMappingsSchema } from \"./experiment-field-mappings.js\";\n\nconst Id = z.string().trim().min(1).max(200);\nexport const ExperimentScoringRequestSchema = z.object({\n operationId: Id,\n execution: ImmutableReleaseRefSchema,\n /** Recorded executions retain observed evidence and never invoke a target. */\n executionKind: z.literal(\"recorded_evidence\").optional(),\n graders: z.array(RewardReleaseRefSchema).min(1).max(100),\n maximumCostUsd: z.number().finite().min(0.000001).max(10_000),\n mappings: z.array(z.object({ graderId: Id, fields: ExperimentFieldMappingsSchema }).strict()).max(100).optional(),\n}).strict().superRefine((value, context) => {\n if (new Set(value.graders.map(grader => grader.id)).size !== value.graders.length)\n context.addIssue({ code: \"custom\", path: [\"graders\"], message: \"Select each grader once.\" });\n if (value.mappings && (new Set(value.mappings.map(mapping => mapping.graderId)).size !== value.mappings.length\n || value.mappings.some(mapping => !value.graders.some(grader => grader.id === mapping.graderId))))\n context.addIssue({ code: \"custom\", path: [\"mappings\"], message: \"Map each selected grader at most once.\" });\n});\nexport type ExperimentScoringRequest = z.infer<typeof ExperimentScoringRequestSchema>;\n\nconst ScoringPassContent = z.object({\n schemaVersion: z.literal(\"openpond.experimentScoringPass.v1\"),\n id: Id, teamId: Id, revision: z.number().int().positive(),\n request: ExperimentScoringRequestSchema,\n graders: z.array(ExperimentGraderPinSchema).min(1).max(100),\n status: z.enum([\"queued\", \"running\", \"cancelling\", \"completed\", \"failed\", \"cancelled\"]),\n totalCount: z.number().int().min(1).max(10_000),\n counts: z.object({ pending: z.number().int().nonnegative(), running: z.number().int().nonnegative(),\n scored: z.number().int().nonnegative(), unavailable: z.number().int().nonnegative(),\n failed: z.number().int().nonnegative(), cancelled: z.number().int().nonnegative() }).strict(),\n resultAvailable: z.boolean(), createdAt: z.iso.datetime(), startedAt: z.iso.datetime().nullable(),\n completedAt: z.iso.datetime().nullable(),\n error: z.object({ code: Id, message: z.string().max(2_000) }).strict().nullable(),\n}).strict();\nexport const ExperimentScoringPassSchema = ScoringPassContent.extend({ contentHash: z.string().regex(/^[a-f0-9]{64}$/) });\nexport type ExperimentScoringPass = z.infer<typeof ExperimentScoringPassSchema>;\n\n/** A pass grades owned output and carries no model-execution authority. */\nexport function verifyExperimentScoringPass(value: unknown) {\n const pass = ExperimentScoringPassSchema.parse(value);\n const { contentHash: actual, ...content } = pass;\n if (contentHash(content) !== actual || Object.values(pass.counts).reduce((sum, count) => sum + count, 0) !== pass.totalCount)\n throw new Error(\"Scoring pass integrity or population accounting failed.\");\n const terminal = [\"completed\", \"failed\", \"cancelled\"].includes(pass.status);\n if (terminal && (!pass.completedAt || pass.counts.pending || pass.counts.running)\n || !terminal && (pass.completedAt !== null || pass.resultAvailable)\n || pass.status === \"completed\" && !pass.resultAvailable)\n throw new Error(\"Scoring pass lifecycle differs from its retained result.\");\n if (pass.graders.length !== pass.request.graders.length || new Set(pass.graders.map(grader => grader.feedbackKey)).size !== pass.graders.length\n || pass.graders.some((grader, index) => contentHash(grader.release) !== contentHash(pass.request.graders[index]!)\n || contentHash(grader.mappings ?? []) !== contentHash(pass.request.mappings?.find(mapping => mapping.graderId === grader.release?.id)?.fields ?? [])))\n throw new Error(\"Scoring pass graders differ from their exact admission.\");\n return pass;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|