openpond-sdk 0.5.5 → 0.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/TRAINING_PROTOCOL.md +44 -0
- package/dist/chunk-ARUJ3FJT.js +447 -0
- package/dist/chunk-ARUJ3FJT.js.map +7 -0
- package/dist/{chunk-M6MM6IGG.js → chunk-F5JBFRAH.js} +300 -220
- package/dist/chunk-F5JBFRAH.js.map +7 -0
- package/dist/chunk-QFT2MCIC.js +1526 -0
- package/dist/chunk-QFT2MCIC.js.map +7 -0
- package/dist/{chunk-NF63YMOL.js → chunk-QUOW6URQ.js} +7 -9
- package/dist/{chunk-NF63YMOL.js.map → chunk-QUOW6URQ.js.map} +3 -3
- package/dist/{chunk-25TBEGXB.js → chunk-TKJU3BOW.js} +2 -2
- package/dist/chunk-UJZ3XEE3.js +902 -0
- package/dist/chunk-UJZ3XEE3.js.map +7 -0
- package/dist/{chunk-EV4PKJWN.js → chunk-UKVK7MRJ.js} +320 -208
- package/dist/chunk-UKVK7MRJ.js.map +7 -0
- package/dist/index.js +3 -3
- package/dist/learning.js +3 -3
- package/dist/model-taskset-runs.js +2 -2
- package/dist/refiner.js +1 -1
- package/dist/taskset-drafts.js +36 -34
- package/dist/taskset-drafts.js.map +1 -1
- package/dist/taskset-packages.js +52 -466
- package/dist/taskset-packages.js.map +4 -4
- package/dist/training-bundle.js +459 -0
- package/dist/training-bundle.js.map +7 -0
- package/dist/training.js +9 -1
- package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts +2 -2
- package/dist/types/packages/sdk/src/taskset-authored-files.d.ts +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-dataset-artifacts.d.ts +2 -2
- package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +1 -1
- package/dist/types/packages/sdk/src/training-bundle-contracts.d.ts +287 -0
- package/dist/types/packages/sdk/src/training-bundle-contracts.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-bundle.d.ts +48 -0
- package/dist/types/packages/sdk/src/training-bundle.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-candidate-decisions.d.ts +90 -0
- package/dist/types/packages/sdk/src/training-candidate-decisions.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-learning-batch.d.ts +719 -0
- package/dist/types/packages/sdk/src/training-learning-batch.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training.d.ts +8 -0
- package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
- package/package.json +6 -2
- package/dist/chunk-EV4PKJWN.js.map +0 -7
- package/dist/chunk-M6MM6IGG.js.map +0 -7
- package/dist/chunk-PXB6YY36.js +0 -2395
- package/dist/chunk-PXB6YY36.js.map +0 -7
- /package/dist/{chunk-25TBEGXB.js.map → chunk-TKJU3BOW.js.map} +0 -0
package/TRAINING_PROTOCOL.md
CHANGED
|
@@ -131,3 +131,47 @@ Published fixtures live in `fixtures/training/v2`. Providers should:
|
|
|
131
131
|
|
|
132
132
|
The package's `check` command validates schemas, fixtures, canonical hashes,
|
|
133
133
|
the built entry points, and a clean npm-style consumer install.
|
|
134
|
+
|
|
135
|
+
### Candidate review decisions
|
|
136
|
+
|
|
137
|
+
`training.recordCandidateDecision(request)` records an explicit `accepted` or
|
|
138
|
+
`rejected` review of one immutable adapter output. The request pins the team,
|
|
139
|
+
Job, adapter, retained candidate evaluation and terminal execution receipt, plus
|
|
140
|
+
a nonempty reason and idempotency key. `expectedDecision: null` means no prior
|
|
141
|
+
review; a later review supplies the prior decision's `{ id, contentHash }`.
|
|
142
|
+
The service must serialize this comparison with the write. The same idempotency
|
|
143
|
+
key and payload returns the same record; conflicting payloads or a stale prior
|
|
144
|
+
decision fail with a conflict rather than overwriting history.
|
|
145
|
+
|
|
146
|
+
`training.candidateDecision({ teamId, jobId, artifact })` reads the latest review
|
|
147
|
+
or null. Pass `{ decision: { id, contentHash } }` as the second argument to read
|
|
148
|
+
a specific historical entry, and follow `request.expectedDecision` to traverse
|
|
149
|
+
older reviews. Each result includes the authenticated actor, timestamp, revision
|
|
150
|
+
and content hash. The SDK verifies the requested owner/artifact and, for writes,
|
|
151
|
+
the entire submitted review. Hashes detect content changes; authorization comes
|
|
152
|
+
from the authenticated hosted resource, not a detached signature.
|
|
153
|
+
|
|
154
|
+
The endpoints are `GET` and `POST`
|
|
155
|
+
`/v1/training/jobs/:job/candidates/:artifact/decision`; historical GET uses
|
|
156
|
+
`?decisionId=...`. These contracts require candidate-decision service support.
|
|
157
|
+
Acceptance and rejection retain the original training/evaluation receipts. They
|
|
158
|
+
do not launch inference, change a serving binding, or bypass serving eligibility.
|
|
159
|
+
|
|
160
|
+
## Shared training bundle preparation
|
|
161
|
+
|
|
162
|
+
`openpond-sdk/training-bundle` exports `buildTasksetTrainingBundle` and the
|
|
163
|
+
runtime, compute, engine, run-manifest, and resolved-bundle schemas. Desktop and
|
|
164
|
+
hosted workers use this compiler with the same pinned Model, Taskset, Harness,
|
|
165
|
+
Reward, evaluation source, and asset bytes. It produces an immutable manifest
|
|
166
|
+
and an in-memory asset map without creating a training job or acquiring compute.
|
|
167
|
+
|
|
168
|
+
The compiler verifies selected release identities and private verifier bytes,
|
|
169
|
+
checks training/evaluation isolation, and rejects missing or unexpected Work
|
|
170
|
+
assets. Callers retain responsibility for authorizing the inputs and staging the
|
|
171
|
+
result through the training artifact API before job admission. Filesystem cache
|
|
172
|
+
materialization remains a Desktop concern.
|
|
173
|
+
|
|
174
|
+
The same entry point exports `materializeLearningBatchTaskset`. It verifies a
|
|
175
|
+
sealed learning batch and its evidence, admission decisions, Reward releases,
|
|
176
|
+
and verifier assets, then returns the authored Taskset, portable release, and
|
|
177
|
+
generated verifier files consumed by training preparation.
|
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
import {
|
|
2
|
+
GraderSpecSchema,
|
|
3
|
+
decodeTasksetPackageFile
|
|
4
|
+
} from "./chunk-QFT2MCIC.js";
|
|
5
|
+
import {
|
|
6
|
+
CapabilityRequirementSchema,
|
|
7
|
+
ToolDeclarationSchema
|
|
8
|
+
} from "./chunk-UKVK7MRJ.js";
|
|
9
|
+
import {
|
|
10
|
+
ImmutableAssetRefSchema,
|
|
11
|
+
contentHash,
|
|
12
|
+
sha256
|
|
13
|
+
} from "./chunk-QUOW6URQ.js";
|
|
14
|
+
|
|
15
|
+
// src/taskset-authored-portable-release.ts
|
|
16
|
+
import {
|
|
17
|
+
TaskRecordSchema,
|
|
18
|
+
GraderSpecSchema as PortableGraderSpecSchema,
|
|
19
|
+
TasksetReleaseContentSchema,
|
|
20
|
+
TasksetReleaseSchema,
|
|
21
|
+
bindTasksetExecutionReleases,
|
|
22
|
+
createEnvironmentRelease,
|
|
23
|
+
createVerifierSetRelease,
|
|
24
|
+
EnvironmentReleaseSchema,
|
|
25
|
+
VerifierSetReleaseSchema,
|
|
26
|
+
verifyEnvironmentRelease,
|
|
27
|
+
verifyVerifierSetRelease,
|
|
28
|
+
verifyPreferenceComparisonRelease
|
|
29
|
+
} from "@openpond/evals";
|
|
30
|
+
import { TaskBatchPackageMetadataSchema } from "@openpond/evals/learning";
|
|
31
|
+
import { compileBoundGraders, RewardBindingSchema, RewardReleaseSchema } from "@openpond/evals/rewards";
|
|
32
|
+
import { portableDeterministicCheck } from "@openpond/evals/graders";
|
|
33
|
+
function resolvePortableTasksetRewardExecution(taskset, supplied) {
|
|
34
|
+
const learning = taskset.metadata.learning === void 0 ? null : TaskBatchPackageMetadataSchema.parse(taskset.metadata.learning);
|
|
35
|
+
const embedded = taskset.metadata.rewardExecution;
|
|
36
|
+
const execution = supplied ?? (embedded ? {
|
|
37
|
+
binding: RewardBindingSchema.parse(embedded.binding),
|
|
38
|
+
rewards: RewardReleaseSchema.array().parse(embedded.rewards)
|
|
39
|
+
} : learning);
|
|
40
|
+
if (taskset.metadata.rewardBinding !== void 0) {
|
|
41
|
+
const reference = taskset.metadata.rewardBinding;
|
|
42
|
+
if (!execution || !reference || reference.id !== execution.binding.id || reference.revision !== execution.binding.revision || reference.contentHash !== execution.binding.contentHash) {
|
|
43
|
+
throw new Error("Portable Taskset requires its exact published Reward binding.");
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (execution) compileBoundGraders(execution.binding, execution.rewards);
|
|
47
|
+
return execution ? { binding: execution.binding, rewards: execution.rewards } : null;
|
|
48
|
+
}
|
|
49
|
+
function materializePortableTasksetRelease(input) {
|
|
50
|
+
const environment = portableEnvironment(input.taskset);
|
|
51
|
+
const tools = portableTools(input.taskset);
|
|
52
|
+
const learning = input.taskset.metadata.learning === void 0 ? null : TaskBatchPackageMetadataSchema.parse(input.taskset.metadata.learning);
|
|
53
|
+
const embedded = input.taskset.metadata.rewardExecution;
|
|
54
|
+
const rewardExecution = resolvePortableTasksetRewardExecution(input.taskset, input.rewardExecution);
|
|
55
|
+
const graders = rewardExecution ? compileBoundGraders(rewardExecution.binding, rewardExecution.rewards) : input.taskset.graders.map(portableGrader);
|
|
56
|
+
const tasks = input.selectedTasks?.length ? input.selectedTasks : input.taskset.tasks;
|
|
57
|
+
if (!tasks.length) throw new Error("A portable Taskset release requires at least one task.");
|
|
58
|
+
const pinned = input.taskset.environment.metadata.portableExecutionResources;
|
|
59
|
+
if (environment.entrypoint === "openpond.javascript-environment.v1" && !pinned) throw new Error("Tool Taskset publication requires its pinned execution resources.");
|
|
60
|
+
const environmentRelease = pinned ? EnvironmentReleaseSchema.parse(pinned.environment) : createEnvironmentRelease({
|
|
61
|
+
schemaVersion: "openpond.environmentRelease.v1",
|
|
62
|
+
id: `environment-release-${input.taskset.id}-r${input.taskset.revision}`,
|
|
63
|
+
revision: input.taskset.revision,
|
|
64
|
+
contract: environment,
|
|
65
|
+
actionSchemaRef: null,
|
|
66
|
+
observationSchemaRef: null,
|
|
67
|
+
stateSchemaRef: null,
|
|
68
|
+
artifactCollection: {
|
|
69
|
+
maxArtifacts: 1e5,
|
|
70
|
+
maxTotalBytes: 25e7
|
|
71
|
+
},
|
|
72
|
+
adapterConformanceHashes: {
|
|
73
|
+
[input.adapterId]: contentHash({ adapterId: input.adapterId, environment, tools })
|
|
74
|
+
},
|
|
75
|
+
metadata: {
|
|
76
|
+
sourceTasksetId: input.taskset.id,
|
|
77
|
+
sourcePackageHash: input.taskset.metadata.sourcePackageHash ?? null,
|
|
78
|
+
resources: input.taskset.environment.resources ?? []
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
const verifierSetRelease = pinned?.verifierSet !== void 0 ? VerifierSetReleaseSchema.parse(pinned.verifierSet) : createVerifierSetRelease({
|
|
82
|
+
schemaVersion: "openpond.verifierSetRelease.v1",
|
|
83
|
+
id: `verifier-set-release-${input.taskset.id}-r${input.taskset.revision}`,
|
|
84
|
+
revision: input.taskset.revision,
|
|
85
|
+
graders,
|
|
86
|
+
isolation: {
|
|
87
|
+
processBoundary: "isolated_process",
|
|
88
|
+
networkPolicy: "none",
|
|
89
|
+
defaultTimeoutMs: Math.min(input.taskset.environment.defaultTimeoutMs, 3e5)
|
|
90
|
+
},
|
|
91
|
+
calibrationReceiptRefs: [],
|
|
92
|
+
metadata: { sourceTasksetId: input.taskset.id }
|
|
93
|
+
});
|
|
94
|
+
if (!verifyEnvironmentRelease(environmentRelease) || !verifyVerifierSetRelease(verifierSetRelease) || contentHash(environmentRelease.contract) !== contentHash(environment) || contentHash(verifierSetRelease.graders) !== contentHash(graders)) {
|
|
95
|
+
throw new Error("Taskset execution resources differ from its declared environment or graders.");
|
|
96
|
+
}
|
|
97
|
+
const tasksetContent = TasksetReleaseContentSchema.parse({
|
|
98
|
+
schemaVersion: "openpond.tasksetRelease.v2",
|
|
99
|
+
id: input.taskset.metadata.derivedPortableMetadata === void 0 ? `taskset-release-${input.taskset.id}-r${input.taskset.revision}` : input.taskset.id,
|
|
100
|
+
revision: input.taskset.revision,
|
|
101
|
+
policy: {
|
|
102
|
+
policyVisibleFields: input.taskset.policy.policyVisibleFields,
|
|
103
|
+
privilegedFields: input.taskset.policy.privilegedFields,
|
|
104
|
+
hiddenGraderRefs: input.taskset.policy.hiddenGraderRefs,
|
|
105
|
+
connectedAppScopes: input.taskset.policy.connectedAppScopes
|
|
106
|
+
},
|
|
107
|
+
environment,
|
|
108
|
+
tools,
|
|
109
|
+
capabilities: portableCapabilities(input.taskset),
|
|
110
|
+
tasks: tasks.map(projectPortableTaskRecord),
|
|
111
|
+
graders,
|
|
112
|
+
...input.taskset.metrics ? { metrics: input.taskset.metrics } : {},
|
|
113
|
+
metadata: input.taskset.metadata.derivedPortableMetadata ?? {
|
|
114
|
+
sourceTasksetId: input.taskset.id,
|
|
115
|
+
sourceTasksetHash: input.taskset.contentHash,
|
|
116
|
+
sourcePackageHash: input.taskset.metadata.sourcePackageHash ?? null,
|
|
117
|
+
environmentResources: input.taskset.environment.resources ?? [],
|
|
118
|
+
ordinaryAuthoring: {
|
|
119
|
+
instructions: input.taskset.objective,
|
|
120
|
+
graderFixtures: input.taskset.graderFixtures,
|
|
121
|
+
judgeCalibrationFixtures: Object.fromEntries(input.taskset.graders.filter((grader) => grader.kind === "model_judge").map((grader) => [grader.id, grader.calibrationFixtureRefs]))
|
|
122
|
+
},
|
|
123
|
+
...learning ? { learning } : {},
|
|
124
|
+
// A sealed batch already pins these resources in learning metadata.
|
|
125
|
+
// Resolving that same binding at admission must not change its release.
|
|
126
|
+
...rewardExecution && !learning && (input.rewardExecution || embedded) ? { rewardExecution: { binding: rewardExecution.binding, rewards: rewardExecution.rewards } } : {}
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
const draft = input.admittedTasksetRelease ? TasksetReleaseSchema.parse(input.admittedTasksetRelease) : TasksetReleaseSchema.parse({
|
|
130
|
+
...tasksetContent,
|
|
131
|
+
contentHash: contentHash(tasksetContent)
|
|
132
|
+
});
|
|
133
|
+
const tasksetRelease = draft.environmentRelease ? assertReleaseBindings({ draft, environmentRelease, verifierSetRelease }) : bindTasksetExecutionReleases({
|
|
134
|
+
taskset: draft,
|
|
135
|
+
environment: environmentRelease,
|
|
136
|
+
verifierSet: verifierSetRelease
|
|
137
|
+
});
|
|
138
|
+
return { environmentRelease, verifierSetRelease, tasksetRelease };
|
|
139
|
+
}
|
|
140
|
+
function projectPreferenceComparisonRelease(input) {
|
|
141
|
+
if (!verifyPreferenceComparisonRelease(input.preferenceComparison)) {
|
|
142
|
+
throw new Error("Preference comparison release failed immutable content verification.");
|
|
143
|
+
}
|
|
144
|
+
const release = input.preferenceComparison;
|
|
145
|
+
if (release.tasksetRelease.id !== input.tasksetRelease.id || release.tasksetRelease.contentHash !== input.tasksetRelease.contentHash) {
|
|
146
|
+
throw new Error("Preference comparison release must reference the admitted portable Taskset release.");
|
|
147
|
+
}
|
|
148
|
+
return release;
|
|
149
|
+
}
|
|
150
|
+
function portableTasksetEnvironment(taskset) {
|
|
151
|
+
return portableEnvironment(taskset);
|
|
152
|
+
}
|
|
153
|
+
function portableTasksetTools(taskset) {
|
|
154
|
+
return portableTools(taskset);
|
|
155
|
+
}
|
|
156
|
+
function projectPortableTaskRecord(task) {
|
|
157
|
+
const admitted = task.metadata.portableTaskRecord;
|
|
158
|
+
if (admitted !== void 0) {
|
|
159
|
+
const original = TaskRecordSchema.parse(admitted);
|
|
160
|
+
const projected = TaskRecordSchema.parse({
|
|
161
|
+
...original,
|
|
162
|
+
id: task.id,
|
|
163
|
+
clusterKey: task.clusterKey,
|
|
164
|
+
split: task.split,
|
|
165
|
+
input: task.input,
|
|
166
|
+
expectedOutput: portableExpectedOutput(task),
|
|
167
|
+
policyVisibleContext: task.policyVisibleContext,
|
|
168
|
+
privilegedContextRef: task.privilegedContextRef,
|
|
169
|
+
tags: task.tags,
|
|
170
|
+
artifactRefs: task.assets === void 0 ? original.artifactRefs : task.assets.map((asset) => {
|
|
171
|
+
const previous = original.artifactRefs.find((item) => item.id === asset.id);
|
|
172
|
+
return {
|
|
173
|
+
id: asset.id,
|
|
174
|
+
path: previous?.path ?? `tasks/${segment(task.id)}/${segment(asset.fileName)}`,
|
|
175
|
+
contentHash: hash(asset.sha256),
|
|
176
|
+
sizeBytes: asset.sizeBytes,
|
|
177
|
+
mediaType: asset.mediaType,
|
|
178
|
+
visibility: previous?.visibility ?? "policy"
|
|
179
|
+
};
|
|
180
|
+
}),
|
|
181
|
+
requiredOutputs: task.requiredOutputs === void 0 ? original.requiredOutputs : task.requiredOutputs.map((output) => {
|
|
182
|
+
const previous = original.requiredOutputs?.find((item) => item.path === output.path);
|
|
183
|
+
return {
|
|
184
|
+
path: output.path,
|
|
185
|
+
mediaType: output.mediaType,
|
|
186
|
+
schemaRef: previous?.schemaRef && previous.schemaRef.id === output.schemaRef ? previous.schemaRef : null,
|
|
187
|
+
maxBytes: output.maxBytes ?? null,
|
|
188
|
+
metadata: {
|
|
189
|
+
...output.metadata,
|
|
190
|
+
...output.schemaRef && previous?.schemaRef?.id !== output.schemaRef ? { legacySchemaRef: output.schemaRef } : {}
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
})
|
|
194
|
+
});
|
|
195
|
+
if (projected.requiredOutputs === void 0) delete projected.requiredOutputs;
|
|
196
|
+
return projected;
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
id: task.id,
|
|
200
|
+
clusterKey: task.clusterKey,
|
|
201
|
+
split: task.split,
|
|
202
|
+
input: task.input,
|
|
203
|
+
expectedOutput: portableExpectedOutput(task),
|
|
204
|
+
policyVisibleContext: task.policyVisibleContext,
|
|
205
|
+
privilegedContextRef: task.privilegedContextRef,
|
|
206
|
+
artifactRefs: (task.assets ?? []).map((item) => ({
|
|
207
|
+
id: item.id,
|
|
208
|
+
path: `tasks/${segment(task.id)}/${segment(item.fileName)}`,
|
|
209
|
+
contentHash: hash(item.sha256),
|
|
210
|
+
sizeBytes: item.sizeBytes,
|
|
211
|
+
mediaType: item.mediaType,
|
|
212
|
+
visibility: "policy"
|
|
213
|
+
})),
|
|
214
|
+
requiredOutputs: (task.requiredOutputs ?? []).map((output) => ({
|
|
215
|
+
path: output.path,
|
|
216
|
+
mediaType: output.mediaType,
|
|
217
|
+
schemaRef: null,
|
|
218
|
+
maxBytes: output.maxBytes ?? null,
|
|
219
|
+
metadata: {
|
|
220
|
+
...output.metadata,
|
|
221
|
+
legacySchemaRef: output.schemaRef ?? null
|
|
222
|
+
}
|
|
223
|
+
})),
|
|
224
|
+
tags: task.tags
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
function portableExpectedOutput(task) {
|
|
228
|
+
if (!task.expectedOutput) return null;
|
|
229
|
+
if ("artifactRenderer" in task.expectedOutput) {
|
|
230
|
+
throw new Error(
|
|
231
|
+
`Task ${task.id} embeds an artifact renderer. Put shared renderer configuration in Environment resources and reference it from the Scenario.`
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
return task.expectedOutput;
|
|
235
|
+
}
|
|
236
|
+
function portableEnvironment(taskset) {
|
|
237
|
+
const kind = taskset.environment.kind === "chat" ? "text" : taskset.environment.kind === "work" ? "work" : taskset.environment.kind === "program" ? "custom_program" : "agent";
|
|
238
|
+
return {
|
|
239
|
+
protocolVersion: "openpond.environment.v1",
|
|
240
|
+
kind,
|
|
241
|
+
entrypoint: taskset.environment.entrypoint,
|
|
242
|
+
stateful: taskset.environment.stateful,
|
|
243
|
+
deterministicSeeds: taskset.environment.deterministicSeeds,
|
|
244
|
+
lifecycle: ["create", "reset", "step", "collect", "destroy"],
|
|
245
|
+
networkPolicy: taskset.environment.networkPolicy,
|
|
246
|
+
defaultTimeoutMs: taskset.environment.defaultTimeoutMs
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
function portableTools(taskset) {
|
|
250
|
+
const admitted = taskset.environment.metadata.portableTools;
|
|
251
|
+
if (admitted !== void 0) {
|
|
252
|
+
return ToolDeclarationSchema.array().max(200).parse(admitted);
|
|
253
|
+
}
|
|
254
|
+
const bindings = taskset.environment.actionBindings ?? [];
|
|
255
|
+
if (bindings.length) return bindings.map((binding) => ({
|
|
256
|
+
name: binding.modelToolName,
|
|
257
|
+
description: binding.description,
|
|
258
|
+
inputSchema: binding.inputSchema,
|
|
259
|
+
inputSchemaHash: hash(binding.actionSchemaHash),
|
|
260
|
+
sideEffect: binding.sideEffect,
|
|
261
|
+
timeoutMs: binding.timeoutMs
|
|
262
|
+
}));
|
|
263
|
+
return taskset.environment.toolNames.map((name) => ({
|
|
264
|
+
name,
|
|
265
|
+
description: `Host-provided ${name} tool.`,
|
|
266
|
+
inputSchema: {},
|
|
267
|
+
inputSchemaHash: contentHash({}),
|
|
268
|
+
sideEffect: "write",
|
|
269
|
+
timeoutMs: taskset.environment.defaultTimeoutMs
|
|
270
|
+
}));
|
|
271
|
+
}
|
|
272
|
+
function portableGrader(grader) {
|
|
273
|
+
const base = {
|
|
274
|
+
id: grader.id,
|
|
275
|
+
version: grader.version,
|
|
276
|
+
weight: grader.weight,
|
|
277
|
+
hardGate: grader.hardGate,
|
|
278
|
+
rewardEligible: grader.rewardEligible,
|
|
279
|
+
privileged: grader.privileged
|
|
280
|
+
};
|
|
281
|
+
if (grader.kind === "model_judge") return {
|
|
282
|
+
...base,
|
|
283
|
+
kind: "model_judge",
|
|
284
|
+
rubricRef: rubricAsset(grader),
|
|
285
|
+
model: modelJudgeRef(grader),
|
|
286
|
+
temperature: grader.temperature,
|
|
287
|
+
calibrationStatus: grader.calibrationStatus
|
|
288
|
+
};
|
|
289
|
+
if (grader.kind === "custom_verifier") {
|
|
290
|
+
if (grader.metadata.portableVerifierRef === void 0) {
|
|
291
|
+
throw new Error(`Custom verifier ${grader.id} requires its immutable executable asset before publication.`);
|
|
292
|
+
}
|
|
293
|
+
const imported = PortableGraderSpecSchema.safeParse(grader.metadata.portableGrader);
|
|
294
|
+
const preserveDefault = imported.success && imported.data.kind === "custom_verifier" && imported.data.exportName === void 0 && grader.exportName === "verify";
|
|
295
|
+
return {
|
|
296
|
+
...base,
|
|
297
|
+
kind: "custom_verifier",
|
|
298
|
+
verifierRef: ImmutableAssetRefSchema.parse(grader.metadata.portableVerifierRef),
|
|
299
|
+
timeoutMs: grader.timeoutMs,
|
|
300
|
+
...preserveDefault ? {} : { exportName: grader.exportName },
|
|
301
|
+
networkPolicy: "none"
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
if (grader.kind === "human") return {
|
|
305
|
+
...base,
|
|
306
|
+
kind: "human",
|
|
307
|
+
rubricRef: rubricAsset(grader),
|
|
308
|
+
reviewerRole: grader.reviewerRole
|
|
309
|
+
};
|
|
310
|
+
return {
|
|
311
|
+
...base,
|
|
312
|
+
...portableDeterministicCheck(grader)
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
function portableCapabilities(taskset) {
|
|
316
|
+
const admitted = taskset.metadata.portableCapabilities;
|
|
317
|
+
if (admitted !== void 0) {
|
|
318
|
+
return CapabilityRequirementSchema.array().max(200).parse(admitted);
|
|
319
|
+
}
|
|
320
|
+
return [
|
|
321
|
+
...taskset.capabilities.requiresTools ? [{ id: "tools", required: true, scopes: taskset.environment.toolNames }] : [],
|
|
322
|
+
...taskset.capabilities.requiresState ? [{ id: "local-state", required: true, scopes: [] }] : [],
|
|
323
|
+
...taskset.capabilities.requiresPrivilegedGrading ? [{ id: "private-verifier", required: true, scopes: taskset.policy.hiddenGraderRefs }] : [],
|
|
324
|
+
...taskset.policy.connectedAppScopes.map((scope) => ({
|
|
325
|
+
id: `connected-app-${segment(scope)}`,
|
|
326
|
+
required: true,
|
|
327
|
+
scopes: [scope]
|
|
328
|
+
}))
|
|
329
|
+
].map((requirement) => ({
|
|
330
|
+
...requirement,
|
|
331
|
+
portability: requirement.id === "local-state" ? "host_adapter" : "portable"
|
|
332
|
+
}));
|
|
333
|
+
}
|
|
334
|
+
function assertReleaseBindings(input) {
|
|
335
|
+
if (input.draft.environmentRelease?.id !== input.environmentRelease.id || input.draft.environmentRelease.contentHash !== input.environmentRelease.contentHash) {
|
|
336
|
+
throw new Error("Admitted Taskset Release binds a different Environment Release.");
|
|
337
|
+
}
|
|
338
|
+
if (input.draft.verifierSetRelease?.id !== input.verifierSetRelease.id || input.draft.verifierSetRelease.contentHash !== input.verifierSetRelease.contentHash) {
|
|
339
|
+
throw new Error("Admitted Taskset Release binds a different Verifier Set Release.");
|
|
340
|
+
}
|
|
341
|
+
if (contentHash(input.draft.environment) !== contentHash(input.environmentRelease.contract)) {
|
|
342
|
+
throw new Error("Admitted Taskset Environment differs from its bound Environment Release.");
|
|
343
|
+
}
|
|
344
|
+
if (contentHash(input.draft.graders) !== contentHash(input.verifierSetRelease.graders)) {
|
|
345
|
+
throw new Error("Admitted Taskset graders differ from its bound Verifier Set Release.");
|
|
346
|
+
}
|
|
347
|
+
return input.draft;
|
|
348
|
+
}
|
|
349
|
+
function modelJudgeRef(grader) {
|
|
350
|
+
const previous = grader.metadata.portableGrader === void 0 ? null : PortableGraderSpecSchema.parse(grader.metadata.portableGrader);
|
|
351
|
+
const revision = previous?.kind === "model_judge" && previous.model?.providerId === grader.judge.providerId && previous.model.modelId === grader.judge.modelId ? previous.model.revision : null;
|
|
352
|
+
return { ...grader.judge, revision };
|
|
353
|
+
}
|
|
354
|
+
function rubricAsset(grader) {
|
|
355
|
+
const contentHash2 = sha256(grader.rubric);
|
|
356
|
+
const sizeBytes = new TextEncoder().encode(grader.rubric).byteLength;
|
|
357
|
+
const reference = grader.metadata.portableRubricRef;
|
|
358
|
+
if (reference !== void 0) {
|
|
359
|
+
const asset = ImmutableAssetRefSchema.parse(reference);
|
|
360
|
+
if (asset.contentHash !== contentHash2 || asset.sizeBytes !== sizeBytes || asset.visibility === "policy") throw new Error("Taskset rubric differs from its published private source.");
|
|
361
|
+
return asset;
|
|
362
|
+
}
|
|
363
|
+
return { id: `rubric-${grader.id}`, path: `graders/${segment(grader.id)}/rubric.md`, contentHash: contentHash2, sizeBytes, mediaType: "text/markdown", visibility: "verifier" };
|
|
364
|
+
}
|
|
365
|
+
function hash(value) {
|
|
366
|
+
return /^[a-f0-9]{64}$/.test(value) ? value : contentHash(value);
|
|
367
|
+
}
|
|
368
|
+
function segment(value) {
|
|
369
|
+
const normalized = value.trim().replace(/[^a-zA-Z0-9._-]+/g, "-").replace(/^-+|-+$/g, "");
|
|
370
|
+
return normalized || "asset";
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// src/taskset-package-grader-projection.ts
|
|
374
|
+
import { compileBoundGraders as compileBoundGraders2, resolveBoundRewards } from "@openpond/evals/rewards";
|
|
375
|
+
import { learningRef, verifyLearningTextAsset } from "@openpond/evals/learning";
|
|
376
|
+
import { z } from "zod";
|
|
377
|
+
function importedPackageGraders(value) {
|
|
378
|
+
const authoring = value.taskset.metadata.ordinaryAuthoring;
|
|
379
|
+
const calibrationFixtures = z.record(z.string(), z.array(z.string().min(1)).max(1e5)).parse(authoring?.judgeCalibrationFixtures ?? {});
|
|
380
|
+
return value.taskset.graders.map((grader) => {
|
|
381
|
+
const base = { ...grader, label: grader.id, metadata: { portableGrader: grader } };
|
|
382
|
+
if (grader.kind === "custom_verifier") return GraderSpecSchema.parse({
|
|
383
|
+
...base,
|
|
384
|
+
module: learningVerifierModule(grader.verifierRef.contentHash),
|
|
385
|
+
exportName: grader.exportName ?? "verify",
|
|
386
|
+
metadata: { ...base.metadata, portableVerifierRef: grader.verifierRef }
|
|
387
|
+
});
|
|
388
|
+
if (grader.kind === "human" || grader.kind === "model_judge") {
|
|
389
|
+
const file = value.files.find((file2) => file2.asset.id === grader.rubricRef.id);
|
|
390
|
+
if (!file) throw new Error(`Imported rubric is missing: ${grader.id}.`);
|
|
391
|
+
const rubric = new TextDecoder("utf-8", { fatal: true }).decode(decodeTasksetPackageFile(file));
|
|
392
|
+
const metadata = { ...base.metadata, portableRubricRef: grader.rubricRef };
|
|
393
|
+
if (grader.kind === "human") return GraderSpecSchema.parse({ ...base, rubric, metadata });
|
|
394
|
+
if (!grader.model) throw new Error(`Imported judge ${grader.id} requires its declared model before local preparation.`);
|
|
395
|
+
return GraderSpecSchema.parse({
|
|
396
|
+
...base,
|
|
397
|
+
rubric,
|
|
398
|
+
metadata,
|
|
399
|
+
judge: grader.model,
|
|
400
|
+
temperature: grader.temperature ?? 0,
|
|
401
|
+
calibrationStatus: "pending",
|
|
402
|
+
calibrationFixtureRefs: calibrationFixtures[grader.id] ?? []
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
return GraderSpecSchema.parse({
|
|
406
|
+
...base,
|
|
407
|
+
kind: grader.kind === "artifact" ? "file" : grader.kind,
|
|
408
|
+
config: grader.kind === "artifact" ? { ...grader.config, ...grader.config.refIncludes === void 0 ? {} : { pathIncludes: grader.config.refIncludes } } : grader.config
|
|
409
|
+
});
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
function projectLearningBatchGraders(binding, rewards, assets = []) {
|
|
413
|
+
const resolved = resolveBoundRewards(binding, rewards);
|
|
414
|
+
return compileBoundGraders2(binding, rewards).map((grader) => {
|
|
415
|
+
const reward = resolved.find(({ source }) => source.graderId === grader.id).reward;
|
|
416
|
+
const base = { ...grader, label: reward.name, metadata: { rewardBinding: learningRef(binding) } };
|
|
417
|
+
if (grader.kind === "model_judge") throw new Error(`Reward ${grader.id} needs a calibrated model execution adapter before preparation.`);
|
|
418
|
+
if (grader.kind === "custom_verifier") return GraderSpecSchema.parse({
|
|
419
|
+
...base,
|
|
420
|
+
module: learningVerifierModule(grader.verifierRef.contentHash),
|
|
421
|
+
exportName: grader.exportName ?? "verify",
|
|
422
|
+
metadata: { ...base.metadata, portableVerifierRef: grader.verifierRef }
|
|
423
|
+
});
|
|
424
|
+
if (grader.kind === "human") {
|
|
425
|
+
const asset = assets.find((asset2) => asset2.id === grader.rubricRef.id);
|
|
426
|
+
if (!asset) throw new Error(`Reward ${grader.id} is missing its immutable rubric.`);
|
|
427
|
+
return GraderSpecSchema.parse({ ...base, rubric: verifyLearningTextAsset(asset, grader.rubricRef) });
|
|
428
|
+
}
|
|
429
|
+
return GraderSpecSchema.parse({ ...base, kind: grader.kind === "artifact" ? "file" : grader.kind });
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
function learningVerifierModule(hash2) {
|
|
433
|
+
return `graders/reward-${hash2}.js`;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
export {
|
|
437
|
+
resolvePortableTasksetRewardExecution,
|
|
438
|
+
materializePortableTasksetRelease,
|
|
439
|
+
projectPreferenceComparisonRelease,
|
|
440
|
+
portableTasksetEnvironment,
|
|
441
|
+
portableTasksetTools,
|
|
442
|
+
projectPortableTaskRecord,
|
|
443
|
+
importedPackageGraders,
|
|
444
|
+
projectLearningBatchGraders,
|
|
445
|
+
learningVerifierModule
|
|
446
|
+
};
|
|
447
|
+
//# sourceMappingURL=chunk-ARUJ3FJT.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/taskset-authored-portable-release.ts", "../src/taskset-package-grader-projection.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Taskset } from \"./taskset-authored-contracts.js\";\nimport type {\n GraderSpec,\n TaskDataRecord,\n} from \"./taskset-draft-core.js\";\nimport {\n TaskRecordSchema,\n GraderSpecSchema as PortableGraderSpecSchema,\n TasksetReleaseContentSchema,\n TasksetReleaseSchema,\n bindTasksetExecutionReleases,\n createEnvironmentRelease,\n createVerifierSetRelease,\n EnvironmentReleaseSchema,\n VerifierSetReleaseSchema,\n verifyEnvironmentRelease,\n verifyVerifierSetRelease,\n verifyPreferenceComparisonRelease,\n type EnvironmentContract,\n type GraderSpec as PortableGraderSpec,\n type PreferenceComparisonRelease,\n type TasksetRelease,\n} from \"@openpond/evals\";\nimport type {\n ImmutableAssetRef,\n ToolDeclaration,\n} from \"@openpond/harness\";\nimport {\n CapabilityRequirementSchema,\n ImmutableAssetRefSchema,\n ToolDeclarationSchema,\n} from \"@openpond/harness\";\n\nimport { contentHash, sha256 } from \"@openpond/harness\";\nimport { TaskBatchPackageMetadataSchema } from \"@openpond/evals/learning\";\nimport { compileBoundGraders, RewardBindingSchema, RewardReleaseSchema, type RewardBinding, type RewardRelease } from \"@openpond/evals/rewards\";\nimport { portableDeterministicCheck } from \"@openpond/evals/graders\";\n\nexport type TasksetRewardExecution = { binding: RewardBinding; rewards: RewardRelease[] };\n\nexport function resolvePortableTasksetRewardExecution(taskset: Taskset, supplied?: TasksetRewardExecution): TasksetRewardExecution | null {\n const learning = taskset.metadata.learning === undefined ? null : TaskBatchPackageMetadataSchema.parse(taskset.metadata.learning);\n const embedded = taskset.metadata.rewardExecution as { binding?: unknown; rewards?: unknown } | undefined;\n const execution = supplied ?? (embedded ? {\n binding: RewardBindingSchema.parse(embedded.binding),\n rewards: RewardReleaseSchema.array().parse(embedded.rewards),\n } : learning);\n if (taskset.metadata.rewardBinding !== undefined) {\n const reference = taskset.metadata.rewardBinding as Partial<RewardBinding> | null;\n if (!execution || !reference || reference.id !== execution.binding.id\n || reference.revision !== execution.binding.revision || reference.contentHash !== execution.binding.contentHash) {\n throw new Error(\"Portable Taskset requires its exact published Reward binding.\");\n }\n }\n if (execution) compileBoundGraders(execution.binding, execution.rewards);\n return execution ? { binding: execution.binding, rewards: execution.rewards } : null;\n}\n\nexport function materializePortableTasksetRelease(input: {\n taskset: Taskset;\n selectedTasks?: TaskDataRecord[];\n adapterId: string;\n admittedTasksetRelease?: TasksetRelease | null;\n rewardExecution?: TasksetRewardExecution;\n}): {\n environmentRelease: ReturnType<typeof createEnvironmentRelease>;\n verifierSetRelease: ReturnType<typeof createVerifierSetRelease>;\n tasksetRelease: TasksetRelease;\n} {\n const environment = portableEnvironment(input.taskset);\n const tools = portableTools(input.taskset);\n const learning = input.taskset.metadata.learning === undefined ? null : TaskBatchPackageMetadataSchema.parse(input.taskset.metadata.learning);\n const embedded = input.taskset.metadata.rewardExecution;\n const rewardExecution = resolvePortableTasksetRewardExecution(input.taskset, input.rewardExecution);\n const graders = rewardExecution ? compileBoundGraders(rewardExecution.binding, rewardExecution.rewards) : input.taskset.graders.map(portableGrader);\n const tasks = input.selectedTasks?.length\n ? input.selectedTasks\n : input.taskset.tasks;\n if (!tasks.length) throw new Error(\"A portable Taskset release requires at least one task.\");\n const pinned = input.taskset.environment.metadata.portableExecutionResources as { environment?: unknown; verifierSet?: unknown } | undefined;\n if (environment.entrypoint === \"openpond.javascript-environment.v1\" && !pinned) throw new Error(\"Tool Taskset publication requires its pinned execution resources.\");\n const environmentRelease = pinned ? EnvironmentReleaseSchema.parse(pinned.environment) : createEnvironmentRelease({\n schemaVersion: \"openpond.environmentRelease.v1\",\n id: `environment-release-${input.taskset.id}-r${input.taskset.revision}`,\n revision: input.taskset.revision,\n contract: environment,\n actionSchemaRef: null,\n observationSchemaRef: null,\n stateSchemaRef: null,\n artifactCollection: {\n maxArtifacts: 100_000,\n maxTotalBytes: 250_000_000,\n },\n adapterConformanceHashes: {\n [input.adapterId]: contentHash({ adapterId: input.adapterId, environment, tools }),\n },\n metadata: {\n sourceTasksetId: input.taskset.id,\n sourcePackageHash: input.taskset.metadata.sourcePackageHash ?? null,\n resources: input.taskset.environment.resources ?? [],\n },\n });\n const verifierSetRelease = pinned?.verifierSet !== undefined ? VerifierSetReleaseSchema.parse(pinned.verifierSet) : createVerifierSetRelease({\n schemaVersion: \"openpond.verifierSetRelease.v1\",\n id: `verifier-set-release-${input.taskset.id}-r${input.taskset.revision}`,\n revision: input.taskset.revision,\n graders,\n isolation: {\n processBoundary: \"isolated_process\",\n networkPolicy: \"none\",\n defaultTimeoutMs: Math.min(input.taskset.environment.defaultTimeoutMs, 300_000),\n },\n calibrationReceiptRefs: [],\n metadata: { sourceTasksetId: input.taskset.id },\n });\n if (!verifyEnvironmentRelease(environmentRelease) || !verifyVerifierSetRelease(verifierSetRelease) ||\n contentHash(environmentRelease.contract) !== contentHash(environment) || contentHash(verifierSetRelease.graders) !== contentHash(graders)) {\n throw new Error(\"Taskset execution resources differ from its declared environment or graders.\");\n }\n const tasksetContent = TasksetReleaseContentSchema.parse({\n schemaVersion: \"openpond.tasksetRelease.v2\",\n id: input.taskset.metadata.derivedPortableMetadata === undefined ? `taskset-release-${input.taskset.id}-r${input.taskset.revision}` : input.taskset.id,\n revision: input.taskset.revision,\n policy: {\n policyVisibleFields: input.taskset.policy.policyVisibleFields,\n privilegedFields: input.taskset.policy.privilegedFields,\n hiddenGraderRefs: input.taskset.policy.hiddenGraderRefs,\n connectedAppScopes: input.taskset.policy.connectedAppScopes,\n },\n environment,\n tools,\n capabilities: portableCapabilities(input.taskset),\n tasks: tasks.map(projectPortableTaskRecord),\n graders,\n ...(input.taskset.metrics ? { metrics: input.taskset.metrics } : {}),\n metadata: input.taskset.metadata.derivedPortableMetadata ?? {\n sourceTasksetId: input.taskset.id,\n sourceTasksetHash: input.taskset.contentHash,\n sourcePackageHash: input.taskset.metadata.sourcePackageHash ?? null,\n environmentResources: input.taskset.environment.resources ?? [],\n ordinaryAuthoring: {\n instructions: input.taskset.objective,\n graderFixtures: input.taskset.graderFixtures,\n judgeCalibrationFixtures: Object.fromEntries(input.taskset.graders\n .filter(grader => grader.kind === \"model_judge\")\n .map(grader => [grader.id, grader.calibrationFixtureRefs])),\n },\n ...(learning ? { learning } : {}),\n // A sealed batch already pins these resources in learning metadata.\n // Resolving that same binding at admission must not change its release.\n ...(rewardExecution && !learning && (input.rewardExecution || embedded) ? { rewardExecution: { binding: rewardExecution.binding, rewards: rewardExecution.rewards } } : {}),\n },\n });\n const draft = input.admittedTasksetRelease\n ? TasksetReleaseSchema.parse(input.admittedTasksetRelease)\n : TasksetReleaseSchema.parse({\n ...tasksetContent,\n contentHash: contentHash(tasksetContent),\n });\n const tasksetRelease = draft.environmentRelease\n ? assertReleaseBindings({ draft, environmentRelease, verifierSetRelease })\n : bindTasksetExecutionReleases({\n taskset: draft,\n environment: environmentRelease,\n verifierSet: verifierSetRelease,\n });\n return { environmentRelease, verifierSetRelease, tasksetRelease };\n}\n\n/**\n * Admits a published comparison policy against the exact portable Taskset\n * release it names. A comparison is deliberately not embedded in that release:\n * doing so would create a content-hash cycle between Taskset and comparison.\n */\nexport function projectPreferenceComparisonRelease(input: {\n tasksetRelease: TasksetRelease;\n preferenceComparison: PreferenceComparisonRelease;\n}): PreferenceComparisonRelease {\n if (!verifyPreferenceComparisonRelease(input.preferenceComparison)) {\n throw new Error(\"Preference comparison release failed immutable content verification.\");\n }\n const release = input.preferenceComparison;\n if (\n release.tasksetRelease.id !== input.tasksetRelease.id\n || release.tasksetRelease.contentHash !== input.tasksetRelease.contentHash\n ) {\n throw new Error(\"Preference comparison release must reference the admitted portable Taskset release.\");\n }\n return release;\n}\n\nexport function portableTasksetEnvironment(taskset: Taskset): EnvironmentContract {\n return portableEnvironment(taskset);\n}\n\nexport function portableTasksetTools(taskset: Taskset): ToolDeclaration[] {\n return portableTools(taskset);\n}\n\n/** Preserve immutable file/schema references while overlaying current edits. */\nexport function projectPortableTaskRecord(task: TaskDataRecord) {\n const admitted = task.metadata.portableTaskRecord;\n if (admitted !== undefined) {\n const original = TaskRecordSchema.parse(admitted);\n const projected = TaskRecordSchema.parse({\n ...original,\n id: task.id,\n clusterKey: task.clusterKey,\n split: task.split,\n input: task.input,\n expectedOutput: portableExpectedOutput(task),\n policyVisibleContext: task.policyVisibleContext,\n privilegedContextRef: task.privilegedContextRef,\n tags: task.tags,\n artifactRefs: task.assets === undefined ? original.artifactRefs : task.assets.map((asset) => {\n const previous = original.artifactRefs.find(item => item.id === asset.id);\n return {\n id: asset.id,\n path: previous?.path ?? `tasks/${segment(task.id)}/${segment(asset.fileName)}`,\n contentHash: hash(asset.sha256),\n sizeBytes: asset.sizeBytes,\n mediaType: asset.mediaType,\n visibility: previous?.visibility ?? \"policy\",\n };\n }),\n requiredOutputs: task.requiredOutputs === undefined ? original.requiredOutputs : task.requiredOutputs.map((output) => {\n const previous = original.requiredOutputs?.find(item => item.path === output.path);\n return {\n path: output.path,\n mediaType: output.mediaType,\n schemaRef: previous?.schemaRef && previous.schemaRef.id === output.schemaRef ? previous.schemaRef : null,\n maxBytes: output.maxBytes ?? null,\n metadata: {\n ...output.metadata,\n ...(output.schemaRef && previous?.schemaRef?.id !== output.schemaRef\n ? { legacySchemaRef: output.schemaRef }\n : {}),\n },\n };\n }),\n });\n if (projected.requiredOutputs === undefined) delete projected.requiredOutputs;\n return projected;\n }\n return {\n id: task.id,\n clusterKey: task.clusterKey,\n split: task.split,\n input: task.input,\n expectedOutput: portableExpectedOutput(task),\n policyVisibleContext: task.policyVisibleContext,\n privilegedContextRef: task.privilegedContextRef,\n artifactRefs: (task.assets ?? []).map((item) => ({\n id: item.id,\n path: `tasks/${segment(task.id)}/${segment(item.fileName)}`,\n contentHash: hash(item.sha256),\n sizeBytes: item.sizeBytes,\n mediaType: item.mediaType,\n visibility: \"policy\" as const,\n })),\n requiredOutputs: (task.requiredOutputs ?? []).map((output) => ({\n path: output.path,\n mediaType: output.mediaType,\n schemaRef: null,\n maxBytes: output.maxBytes ?? null,\n metadata: {\n ...output.metadata,\n legacySchemaRef: output.schemaRef ?? null,\n },\n })),\n tags: task.tags,\n };\n}\n\nfunction portableExpectedOutput(\n task: TaskDataRecord,\n): Record<string, unknown> | null {\n if (!task.expectedOutput) return null;\n if (\"artifactRenderer\" in task.expectedOutput) {\n throw new Error(\n `Task ${task.id} embeds an artifact renderer. Put shared renderer configuration in Environment resources and reference it from the Scenario.`,\n );\n }\n return task.expectedOutput;\n}\n\nfunction portableEnvironment(taskset: Taskset): EnvironmentContract {\n const kind: EnvironmentContract[\"kind\"] = taskset.environment.kind === \"chat\"\n ? \"text\"\n : taskset.environment.kind === \"work\" ? \"work\"\n : taskset.environment.kind === \"program\" ? \"custom_program\" : \"agent\";\n return {\n protocolVersion: \"openpond.environment.v1\",\n kind,\n entrypoint: taskset.environment.entrypoint,\n stateful: taskset.environment.stateful,\n deterministicSeeds: taskset.environment.deterministicSeeds,\n lifecycle: [\"create\", \"reset\", \"step\", \"collect\", \"destroy\"],\n networkPolicy: taskset.environment.networkPolicy,\n defaultTimeoutMs: taskset.environment.defaultTimeoutMs,\n };\n}\n\nfunction portableTools(taskset: Taskset): ToolDeclaration[] {\n const admitted = taskset.environment.metadata.portableTools;\n if (admitted !== undefined) {\n return ToolDeclarationSchema.array().max(200).parse(admitted);\n }\n const bindings = taskset.environment.actionBindings ?? [];\n if (bindings.length) return bindings.map((binding) => ({\n name: binding.modelToolName,\n description: binding.description,\n inputSchema: binding.inputSchema,\n inputSchemaHash: hash(binding.actionSchemaHash),\n sideEffect: binding.sideEffect,\n timeoutMs: binding.timeoutMs,\n }));\n return taskset.environment.toolNames.map((name) => ({\n name,\n description: `Host-provided ${name} tool.`,\n inputSchema: {},\n inputSchemaHash: contentHash({}),\n sideEffect: \"write\" as const,\n timeoutMs: taskset.environment.defaultTimeoutMs,\n }));\n}\n\nfunction portableGrader(grader: GraderSpec): PortableGraderSpec {\n const base = {\n id: grader.id,\n version: grader.version,\n weight: grader.weight,\n hardGate: grader.hardGate,\n rewardEligible: grader.rewardEligible,\n privileged: grader.privileged,\n };\n if (grader.kind === \"model_judge\") return {\n ...base,\n kind: \"model_judge\",\n rubricRef: rubricAsset(grader),\n model: modelJudgeRef(grader),\n temperature: grader.temperature,\n calibrationStatus: grader.calibrationStatus,\n };\n if (grader.kind === \"custom_verifier\") {\n if (grader.metadata.portableVerifierRef === undefined) {\n throw new Error(`Custom verifier ${grader.id} requires its immutable executable asset before publication.`);\n }\n const imported = PortableGraderSpecSchema.safeParse(grader.metadata.portableGrader);\n // An omitted portable export means \"verify\". Preserve that encoding on an\n // unchanged import so executing it does not silently replace its release.\n const preserveDefault = imported.success && imported.data.kind === \"custom_verifier\"\n && imported.data.exportName === undefined && grader.exportName === \"verify\";\n return {\n ...base,\n kind: \"custom_verifier\",\n verifierRef: ImmutableAssetRefSchema.parse(grader.metadata.portableVerifierRef),\n timeoutMs: grader.timeoutMs,\n ...(preserveDefault ? {} : { exportName: grader.exportName }),\n networkPolicy: \"none\",\n };\n }\n if (grader.kind === \"human\") return {\n ...base,\n kind: \"human\",\n rubricRef: rubricAsset(grader),\n reviewerRole: grader.reviewerRole,\n };\n return {\n ...base,\n ...portableDeterministicCheck(grader),\n };\n}\n\nfunction portableCapabilities(taskset: Taskset) {\n const admitted = taskset.metadata.portableCapabilities;\n if (admitted !== undefined) {\n return CapabilityRequirementSchema.array().max(200).parse(admitted);\n }\n return [\n ...(taskset.capabilities.requiresTools\n ? [{ id: \"tools\", required: true, scopes: taskset.environment.toolNames }]\n : []),\n ...(taskset.capabilities.requiresState\n ? [{ id: \"local-state\", required: true, scopes: [] }]\n : []),\n ...(taskset.capabilities.requiresPrivilegedGrading\n ? [{ id: \"private-verifier\", required: true, scopes: taskset.policy.hiddenGraderRefs }]\n : []),\n ...taskset.policy.connectedAppScopes.map((scope) => ({\n id: `connected-app-${segment(scope)}`,\n required: true,\n scopes: [scope],\n })),\n ].map((requirement) => ({\n ...requirement,\n portability: requirement.id === \"local-state\" ? \"host_adapter\" as const : \"portable\" as const,\n }));\n}\n\nfunction assertReleaseBindings(input: {\n draft: TasksetRelease;\n environmentRelease: ReturnType<typeof createEnvironmentRelease>;\n verifierSetRelease: ReturnType<typeof createVerifierSetRelease>;\n}): TasksetRelease {\n if (\n input.draft.environmentRelease?.id !== input.environmentRelease.id\n || input.draft.environmentRelease.contentHash !== input.environmentRelease.contentHash\n ) {\n throw new Error(\"Admitted Taskset Release binds a different Environment Release.\");\n }\n if (\n input.draft.verifierSetRelease?.id !== input.verifierSetRelease.id\n || input.draft.verifierSetRelease.contentHash !== input.verifierSetRelease.contentHash\n ) {\n throw new Error(\"Admitted Taskset Release binds a different Verifier Set Release.\");\n }\n if (contentHash(input.draft.environment) !== contentHash(input.environmentRelease.contract)) {\n throw new Error(\"Admitted Taskset Environment differs from its bound Environment Release.\");\n }\n if (contentHash(input.draft.graders) !== contentHash(input.verifierSetRelease.graders)) {\n throw new Error(\"Admitted Taskset graders differ from its bound Verifier Set Release.\");\n }\n return input.draft;\n}\n\nfunction modelJudgeRef(grader: Extract<GraderSpec, { kind: \"model_judge\" }>) {\n const previous = grader.metadata.portableGrader === undefined ? null : PortableGraderSpecSchema.parse(grader.metadata.portableGrader);\n const revision = previous?.kind === \"model_judge\" && previous.model?.providerId === grader.judge.providerId && previous.model.modelId === grader.judge.modelId ? previous.model.revision : null;\n return { ...grader.judge, revision };\n}\n\nfunction rubricAsset(grader: Extract<GraderSpec, { kind: \"human\" | \"model_judge\" }>): ImmutableAssetRef {\n const contentHash = sha256(grader.rubric);\n const sizeBytes = new TextEncoder().encode(grader.rubric).byteLength;\n const reference = grader.metadata.portableRubricRef;\n if (reference !== undefined) {\n const asset = ImmutableAssetRefSchema.parse(reference);\n if (asset.contentHash !== contentHash || asset.sizeBytes !== sizeBytes || asset.visibility === \"policy\") throw new Error(\"Taskset rubric differs from its published private source.\");\n return asset;\n }\n return { id: `rubric-${grader.id}`, path: `graders/${segment(grader.id)}/rubric.md`, contentHash, sizeBytes, mediaType: \"text/markdown\", visibility: \"verifier\" };\n}\n\nfunction hash(value: string): string {\n return /^[a-f0-9]{64}$/.test(value) ? value : contentHash(value);\n}\n\nfunction segment(value: string): string {\n const normalized = value.trim().replace(/[^a-zA-Z0-9._-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n return normalized || \"asset\";\n}\n", "import { compileBoundGraders, resolveBoundRewards, type RewardBinding, type RewardRelease } from \"@openpond/evals/rewards\";\nimport { learningRef, verifyLearningTextAsset, 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\") throw new Error(`Reward ${grader.id} needs a calibrated model execution adapter before preparation.`);\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 }\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": ["contentHash", "compileBoundGraders", "file", "compileBoundGraders", "asset", "hash"]
|
|
7
|
+
}
|