openpond-sdk 0.5.0 → 0.5.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.
Files changed (37) hide show
  1. package/TRAINING_PROTOCOL.md +38 -0
  2. package/dist/{chunk-65D4C7HP.js → chunk-4IDTRFW2.js} +2 -2
  3. package/dist/{chunk-747CMU2Y.js → chunk-6QWV5TEJ.js} +3 -3
  4. package/dist/{chunk-AVW35YOH.js → chunk-OJERFIEJ.js} +214 -127
  5. package/dist/chunk-OJERFIEJ.js.map +7 -0
  6. package/dist/{chunk-6LGGLXAM.js → chunk-PXB6YY36.js} +3 -3
  7. package/dist/{chunk-EPJM7VEV.js → chunk-SQCACAC7.js} +2 -2
  8. package/dist/{chunk-5PRP457R.js → chunk-ZNFOVV7B.js} +2 -1
  9. package/dist/chunk-ZNFOVV7B.js.map +7 -0
  10. package/dist/model-projects.js +1 -1
  11. package/dist/model-starter-attempts.js +2 -2
  12. package/dist/model-starter-catalog.js +3 -3
  13. package/dist/model-starters.js +3 -3
  14. package/dist/model-taskset-runs.js +2 -2
  15. package/dist/taskset-drafts.js +4 -4
  16. package/dist/taskset-packages.js +4 -4
  17. package/dist/training.js +12 -2
  18. package/dist/types/packages/sdk/src/model-projects.d.ts +60 -0
  19. package/dist/types/packages/sdk/src/model-projects.d.ts.map +1 -1
  20. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +5 -0
  21. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts.map +1 -1
  22. package/dist/types/packages/sdk/src/taskset-package-client.d.ts +15 -0
  23. package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
  24. package/dist/types/packages/sdk/src/training-evaluation-source.d.ts +41 -0
  25. package/dist/types/packages/sdk/src/training-evaluation-source.d.ts.map +1 -0
  26. package/dist/types/packages/sdk/src/training-grading-plan.d.ts +21 -0
  27. package/dist/types/packages/sdk/src/training-grading-plan.d.ts.map +1 -0
  28. package/dist/types/packages/sdk/src/training.d.ts +24 -0
  29. package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
  30. package/fixtures/training/v2/policy-optimize.valid.json +13 -2
  31. package/package.json +1 -1
  32. package/dist/chunk-5PRP457R.js.map +0 -7
  33. package/dist/chunk-AVW35YOH.js.map +0 -7
  34. /package/dist/{chunk-65D4C7HP.js.map → chunk-4IDTRFW2.js.map} +0 -0
  35. /package/dist/{chunk-747CMU2Y.js.map → chunk-6QWV5TEJ.js.map} +0 -0
  36. /package/dist/{chunk-6LGGLXAM.js.map → chunk-PXB6YY36.js.map} +0 -0
  37. /package/dist/{chunk-EPJM7VEV.js.map → chunk-SQCACAC7.js.map} +0 -0
@@ -78,6 +78,44 @@ checkpoint inventory or qualification metrics, when the portable client needs
78
78
  that evidence to validate the artifact. This metadata is immutable output
79
79
  evidence, not private worker-control, lease, or provider state.
80
80
 
81
+ ## Deterministic grading identity
82
+
83
+ For portable training bundles, derive `job.rewardSource` with
84
+ `deterministicTrainingRewardSource({ graders, rewardExecution })` from the
85
+ verified bundle's `graders.json` and optional `reward-binding.json`. The grader
86
+ reference identifies the entire ordered set, including configuration, using the
87
+ canonical hash of `{ schemaVersion: "openpond.trainingGraderSet.v1", graders }`.
88
+ Its ID is `training-graders-` followed by the first 32 hash characters.
89
+
90
+ When a Reward binding exists, the helper compiles its verified releases to the
91
+ executed grader set and uses the binding's immutable ID/hash as `composer`.
92
+ This pins role, normalization, membership, weights, required sources and hard
93
+ gates even when those changes leave grader code unchanged. An unbound plan has
94
+ a null composer. Providers must recompute both references from the admitted
95
+ bundle before provisioning and retain both in receipt inputs when non-null.
96
+ Identity validation does not establish that a provider can execute a grader;
97
+ providers must also reject unsupported execution configurations at admission.
98
+
99
+ ## Held-out evaluation source
100
+
101
+ Managed policy training carries `evaluation-source.json` inside the verified
102
+ resolved bundle. `TrainingEvaluationSourceSchema` describes its exact Taskset
103
+ revision, complete held-out task records and evaluator-only asset bytes.
104
+ `assertTrainingEvaluationIsolation` rejects train/held-out split violations,
105
+ duplicate task IDs and shared training/evaluation families. The data remains
106
+ private to evaluation and must not become policy-visible context.
107
+
108
+ `trainingEvaluationSourceRef` derives `source.evaluation`: the original Taskset
109
+ reference and the canonical evaluation dataset hash. Providers compare these
110
+ references with the admitted bundle before provisioning and retain both in
111
+ receipt inputs. Changing private answers or assets changes the bundle and
112
+ evaluation dataset identity. Model configuration may select a separate immutable
113
+ `evaluationTasksetRef`; a train-only batch does not need a Comparison Series.
114
+
115
+ The nullable wire field preserves historical records. A provider that requires
116
+ pinned evaluation must reject new policy submissions without it. Artifact
117
+ admission alone does not establish model execution or learning quality.
118
+
81
119
  ## Conformance
82
120
 
83
121
  Published fixtures live in `fixtures/training/v2`. Providers should:
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ModelProjectVersionedRefSchema,
3
3
  canonicalJson
4
- } from "./chunk-5PRP457R.js";
4
+ } from "./chunk-ZNFOVV7B.js";
5
5
 
6
6
  // src/model-starter-execution.ts
7
7
  import { z } from "zod";
@@ -270,4 +270,4 @@ export {
270
270
  deriveModelTaskset,
271
271
  validateModelTasksetPackage
272
272
  };
273
- //# sourceMappingURL=chunk-65D4C7HP.js.map
273
+ //# sourceMappingURL=chunk-4IDTRFW2.js.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  ModelStarterExecutionSchema,
3
3
  validateModelStarterExecution
4
- } from "./chunk-65D4C7HP.js";
4
+ } from "./chunk-4IDTRFW2.js";
5
5
  import {
6
6
  ModelProjectBaseModelSchema,
7
7
  ModelProjectTrainingMethodSchema,
8
8
  ModelProjectVersionedRefSchema,
9
9
  canonicalSha256
10
- } from "./chunk-5PRP457R.js";
10
+ } from "./chunk-ZNFOVV7B.js";
11
11
 
12
12
  // src/model-starters.ts
13
13
  import { z } from "zod";
@@ -219,4 +219,4 @@ export {
219
219
  previewModelStarter,
220
220
  validateResolvedModelStarter
221
221
  };
222
- //# sourceMappingURL=chunk-747CMU2Y.js.map
222
+ //# sourceMappingURL=chunk-6QWV5TEJ.js.map
@@ -11,28 +11,106 @@ import {
11
11
  assertCanonicalPayloadSize,
12
12
  canonicalSha256,
13
13
  parseBoundedJson
14
- } from "./chunk-5PRP457R.js";
14
+ } from "./chunk-ZNFOVV7B.js";
15
15
 
16
16
  // src/training.ts
17
+ import { z as z3 } from "zod";
18
+
19
+ // src/training-grading-plan.ts
17
20
  import { z } from "zod";
18
- var IdSchema = z.string().trim().min(1).max(500);
19
- var HashSchema = z.string().regex(/^[a-f0-9]{64}$/);
20
- var TimestampSchema = z.string().datetime({ offset: true });
21
- var TrainingInputArtifactUploadSchema = z.object({
22
- schemaVersion: z.literal("openpond.trainingInputArtifactUpload.v2"),
23
- kind: z.enum(["portable_training_bundle", "reward_model_dataset"]),
24
- idempotencyKey: z.string().trim().min(1).max(500),
21
+ import { compileBoundGraders, RewardBindingSchema, RewardReleaseSchema } from "@openpond/evals/rewards";
22
+ var GradersSchema = z.array(z.object({ id: z.string().trim().min(1) }).catchall(z.unknown())).min(1).max(1e3);
23
+ var RewardExecutionSchema = z.object({
24
+ binding: RewardBindingSchema,
25
+ rewards: z.array(RewardReleaseSchema).min(1).max(100)
26
+ }).strict();
27
+ async function deterministicTrainingRewardSource(input) {
28
+ const execution = input.rewardExecution ? RewardExecutionSchema.parse(input.rewardExecution) : null;
29
+ const graders = GradersSchema.parse(execution ? compileBoundGraders(execution.binding, execution.rewards) : input.graders);
30
+ if (new Set(graders.map((grader) => grader.id)).size !== graders.length) {
31
+ throw new Error("Training grader identities must be unique.");
32
+ }
33
+ const hash = await canonicalSha256({ schemaVersion: "openpond.trainingGraderSet.v1", graders });
34
+ return {
35
+ kind: "deterministic",
36
+ grader: { id: `training-graders-${hash.slice(0, 32)}`, contentHash: hash },
37
+ composer: execution ? { id: execution.binding.id, contentHash: execution.binding.contentHash } : null
38
+ };
39
+ }
40
+
41
+ // src/training-evaluation-source.ts
42
+ import { z as z2 } from "zod";
43
+ var TRAINING_EVALUATION_SOURCE_PATH = "evaluation-source.json";
44
+ var TaskIdentitySchema = z2.object({
45
+ id: z2.string().trim().min(1),
46
+ clusterKey: z2.string().trim().min(1),
47
+ split: z2.enum(["train", "validation", "frozen_eval"])
48
+ }).passthrough();
49
+ var TrainingEvaluationSourceSchema = z2.object({
50
+ schemaVersion: z2.literal("openpond.trainingEvaluationSource.v1"),
51
+ taskset: ModelProjectVersionedRefSchema,
52
+ tasks: z2.array(TaskIdentitySchema).min(1).max(1e4),
53
+ assets: z2.array(z2.object({
54
+ path: z2.string().trim().min(1).max(2e3),
55
+ sha256: z2.string().regex(/^[a-f0-9]{64}$/),
56
+ sizeBytes: z2.number().int().nonnegative(),
57
+ encoding: z2.literal("base64"),
58
+ content: z2.string().max(32 * 1024 * 1024)
59
+ }).strict()).max(1e4)
60
+ }).strict().superRefine((source, context) => {
61
+ const ids = /* @__PURE__ */ new Set();
62
+ source.tasks.forEach((task, index) => {
63
+ if (task.split === "train") context.addIssue({ code: "custom", path: ["tasks", index, "split"], message: "Evaluation sources require held-out tasks." });
64
+ if (ids.has(task.id)) context.addIssue({ code: "custom", path: ["tasks", index, "id"], message: "Evaluation task identities must be unique." });
65
+ ids.add(task.id);
66
+ });
67
+ });
68
+ function assertTrainingEvaluationIsolation(trainingTasks, evaluationTasks) {
69
+ const training = z2.array(TaskIdentitySchema).min(1).max(1e4).parse(trainingTasks);
70
+ const evaluation = z2.array(TaskIdentitySchema).min(1).max(1e4).parse(evaluationTasks);
71
+ const trainIds = /* @__PURE__ */ new Set();
72
+ const trainFamilies = /* @__PURE__ */ new Set();
73
+ for (const task of training) {
74
+ if (task.split !== "train") throw new Error("The training population contains a held-out task.");
75
+ if (trainIds.has(task.id)) throw new Error("Training task identities must be unique.");
76
+ trainIds.add(task.id);
77
+ trainFamilies.add(task.clusterKey);
78
+ }
79
+ const evaluationIds = /* @__PURE__ */ new Set();
80
+ for (const task of evaluation) {
81
+ if (task.split === "train") throw new Error("The evaluation population contains a training task.");
82
+ if (evaluationIds.has(task.id)) throw new Error("Evaluation task identities must be unique.");
83
+ if (trainIds.has(task.id) || trainFamilies.has(task.clusterKey)) {
84
+ throw new Error("Training and evaluation tasks or families overlap.");
85
+ }
86
+ evaluationIds.add(task.id);
87
+ }
88
+ }
89
+ async function trainingEvaluationSourceRef(input) {
90
+ const source = TrainingEvaluationSourceSchema.parse(input);
91
+ const hash = await canonicalSha256(source);
92
+ return { taskset: source.taskset, dataset: { id: `training-evaluation-${hash.slice(0, 32)}`, contentHash: hash } };
93
+ }
94
+
95
+ // src/training.ts
96
+ var IdSchema = z3.string().trim().min(1).max(500);
97
+ var HashSchema = z3.string().regex(/^[a-f0-9]{64}$/);
98
+ var TimestampSchema = z3.string().datetime({ offset: true });
99
+ var TrainingInputArtifactUploadSchema = z3.object({
100
+ schemaVersion: z3.literal("openpond.trainingInputArtifactUpload.v2"),
101
+ kind: z3.enum(["portable_training_bundle", "reward_model_dataset"]),
102
+ idempotencyKey: z3.string().trim().min(1).max(500),
25
103
  sourceManifest: ModelProjectImmutableRefSchema,
26
- payload: z.unknown(),
104
+ payload: z3.unknown(),
27
105
  contentHash: HashSchema
28
106
  }).strict();
29
- var TrainingInputArtifactSchema = z.object({
30
- schemaVersion: z.literal("openpond.trainingInputArtifact.v2"),
31
- kind: z.enum(["portable_training_bundle", "reward_model_dataset"]),
107
+ var TrainingInputArtifactSchema = z3.object({
108
+ schemaVersion: z3.literal("openpond.trainingInputArtifact.v2"),
109
+ kind: z3.enum(["portable_training_bundle", "reward_model_dataset"]),
32
110
  sourceManifest: ModelProjectImmutableRefSchema,
33
- artifactRef: z.string().trim().min(1).max(2e3),
111
+ artifactRef: z3.string().trim().min(1).max(2e3),
34
112
  contentHash: HashSchema,
35
- sizeBytes: z.number().int().positive(),
113
+ sizeBytes: z3.number().int().positive(),
36
114
  createdAt: TimestampSchema
37
115
  }).strict();
38
116
  async function trainingInputArtifactUploadHash(upload) {
@@ -55,11 +133,11 @@ async function parseAndVerifyTrainingInputArtifactUpload(value) {
55
133
  }
56
134
  return parsed;
57
135
  }
58
- var TrainingJobKindSchema = z.enum([
136
+ var TrainingJobKindSchema = z3.enum([
59
137
  "reward_model_train",
60
138
  "policy_optimize"
61
139
  ]);
62
- var TrainingJobStateSchema = z.enum([
140
+ var TrainingJobStateSchema = z3.enum([
63
141
  "queued",
64
142
  "admitting",
65
143
  "provisioning",
@@ -70,87 +148,91 @@ var TrainingJobStateSchema = z.enum([
70
148
  "failed",
71
149
  "cancelled"
72
150
  ]);
73
- var TrainingCapabilityRequirementSchema = z.object({
151
+ var TrainingCapabilityRequirementSchema = z3.object({
74
152
  id: IdSchema,
75
- version: z.string().trim().min(1).max(200).nullable().default(null),
76
- required: z.boolean().default(true)
153
+ version: z3.string().trim().min(1).max(200).nullable().default(null),
154
+ required: z3.boolean().default(true)
77
155
  }).strict();
78
- var TrainingJobSourceSchema = z.object({
79
- modelProject: z.object({
156
+ var TrainingJobSourceSchema = z3.object({
157
+ modelProject: z3.object({
80
158
  id: IdSchema,
81
159
  portableProjectId: IdSchema,
82
- revision: z.number().int().positive(),
160
+ revision: z3.number().int().positive(),
83
161
  contentHash: HashSchema
84
162
  }).strict(),
85
163
  harnessRunManifest: ModelProjectImmutableRefSchema,
86
164
  harnessRelease: ModelProjectImmutableRefSchema,
87
165
  taskset: ModelProjectVersionedRefSchema,
88
166
  tasksetRelease: ModelProjectImmutableRefSchema,
167
+ evaluation: z3.object({
168
+ taskset: ModelProjectVersionedRefSchema,
169
+ dataset: ModelProjectImmutableRefSchema
170
+ }).strict().nullable().optional(),
89
171
  dataset: ModelProjectImmutableRefSchema,
90
- evidenceSets: z.array(ModelProjectImmutableRefSchema).max(1e4)
172
+ evidenceSets: z3.array(ModelProjectImmutableRefSchema).max(1e4)
91
173
  }).strict();
92
- var RewardModelTrainingRequestSchema = z.object({
93
- kind: z.literal("reward_model_train"),
174
+ var RewardModelTrainingRequestSchema = z3.object({
175
+ kind: z3.literal("reward_model_train"),
94
176
  baseModel: ModelProjectBaseModelSchema,
95
177
  preferenceDatasetRelease: ModelProjectImmutableRefSchema,
96
178
  processorRelease: ModelProjectImmutableRefSchema,
97
- recipe: z.object({
98
- schemaVersion: z.literal("openpond.rewardModelRecipe.v1"),
99
- method: z.literal("reward_model"),
100
- parameterization: z.literal("lora_with_scalar_head")
101
- }).catchall(z.unknown())
179
+ recipe: z3.object({
180
+ schemaVersion: z3.literal("openpond.rewardModelRecipe.v1"),
181
+ method: z3.literal("reward_model"),
182
+ parameterization: z3.literal("lora_with_scalar_head")
183
+ }).catchall(z3.unknown())
102
184
  }).strict();
103
- var DeterministicRewardSourceSchema = z.object({
104
- kind: z.literal("deterministic"),
185
+ var DeterministicRewardSourceSchema = z3.object({
186
+ kind: z3.literal("deterministic"),
105
187
  grader: ModelProjectImmutableRefSchema,
106
188
  composer: ModelProjectImmutableRefSchema.nullable().default(null)
107
189
  }).strict();
108
- var LearnedRewardSourceSchema = z.object({
109
- kind: z.literal("learned_reward"),
190
+ var LearnedRewardSourceSchema = z3.object({
191
+ kind: z3.literal("learned_reward"),
110
192
  rewardModelVersion: ModelProjectImmutableRefSchema,
111
193
  qualificationReport: ModelProjectImmutableRefSchema.nullable().default(null),
112
- evaluationReferences: z.array(ModelProjectImmutableRefSchema).max(1e3).default([]),
113
- scorerArtifact: z.object({
114
- artifactRef: z.string().trim().min(1).max(2e3),
194
+ evaluationReferences: z3.array(ModelProjectImmutableRefSchema).max(1e3).default([]),
195
+ scorerArtifact: z3.object({
196
+ artifactRef: z3.string().trim().min(1).max(2e3),
115
197
  contentHash: HashSchema,
116
198
  executionReceipt: ModelProjectImmutableRefSchema
117
199
  }).strict(),
118
200
  processorRelease: ModelProjectImmutableRefSchema,
119
201
  rewardComposerRelease: ModelProjectImmutableRefSchema
120
202
  }).strict();
121
- var PolicyOptimizationRequestSchema = z.object({
122
- kind: z.literal("policy_optimize"),
203
+ var PolicyOptimizationRequestSchema = z3.object({
204
+ kind: z3.literal("policy_optimize"),
123
205
  baseModel: ModelProjectBaseModelSchema,
124
206
  recipe: ModelProjectRecipeDocumentSchema,
125
- rewardSource: z.discriminatedUnion("kind", [
207
+ rewardSource: z3.discriminatedUnion("kind", [
126
208
  DeterministicRewardSourceSchema,
127
209
  LearnedRewardSourceSchema
128
210
  ]),
129
211
  resumeFrom: ModelProjectImmutableRefSchema.nullable().default(null)
130
212
  }).strict();
131
- var TrainingJobRequestSchema = z.discriminatedUnion("kind", [
213
+ var TrainingJobRequestSchema = z3.discriminatedUnion("kind", [
132
214
  RewardModelTrainingRequestSchema,
133
215
  PolicyOptimizationRequestSchema
134
216
  ]);
135
- var TrainingJobApprovalSchema = z.object({
217
+ var TrainingJobApprovalSchema = z3.object({
136
218
  approvalHash: HashSchema,
137
219
  approvedAt: TimestampSchema,
138
- exportApproved: z.boolean(),
139
- maximumSpendUsd: z.number().nonnegative(),
140
- retentionDays: z.number().int().nonnegative().nullable(),
141
- region: z.string().trim().min(1).max(200).nullable().default(null)
220
+ exportApproved: z3.boolean(),
221
+ maximumSpendUsd: z3.number().nonnegative(),
222
+ retentionDays: z3.number().int().nonnegative().nullable(),
223
+ region: z3.string().trim().min(1).max(200).nullable().default(null)
142
224
  }).strict();
143
- var TrainingJobSubmissionSchema = z.object({
144
- schemaVersion: z.literal("openpond.trainingJobSubmission.v2"),
145
- idempotencyKey: z.string().trim().min(1).max(500),
146
- name: z.string().trim().min(1).max(200),
225
+ var TrainingJobSubmissionSchema = z3.object({
226
+ schemaVersion: z3.literal("openpond.trainingJobSubmission.v2"),
227
+ idempotencyKey: z3.string().trim().min(1).max(500),
228
+ name: z3.string().trim().min(1).max(200),
147
229
  source: TrainingJobSourceSchema,
148
230
  job: TrainingJobRequestSchema,
149
- requestedCapabilities: z.array(TrainingCapabilityRequirementSchema).max(1e3),
150
- placementObjective: z.enum(["fast", "balanced", "economical"]),
151
- budget: z.object({
152
- maximumSpendUsd: z.number().nonnegative(),
153
- maximumWallSeconds: z.number().int().positive()
231
+ requestedCapabilities: z3.array(TrainingCapabilityRequirementSchema).max(1e3),
232
+ placementObjective: z3.enum(["fast", "balanced", "economical"]),
233
+ budget: z3.object({
234
+ maximumSpendUsd: z3.number().nonnegative(),
235
+ maximumWallSeconds: z3.number().int().positive()
154
236
  }).strict(),
155
237
  approval: TrainingJobApprovalSchema,
156
238
  contentHash: HashSchema
@@ -183,61 +265,61 @@ async function parseAndVerifyTrainingJobSubmission(value) {
183
265
  }
184
266
  return parsed;
185
267
  }
186
- var TrainingJobSchema = z.object({
187
- schemaVersion: z.literal("openpond.trainingJob.v2"),
268
+ var TrainingJobSchema = z3.object({
269
+ schemaVersion: z3.literal("openpond.trainingJob.v2"),
188
270
  id: IdSchema,
189
271
  teamId: IdSchema,
190
272
  kind: TrainingJobKindSchema,
191
273
  modelProjectId: IdSchema,
192
274
  portableProjectId: IdSchema,
193
- sourceProjectRevision: z.number().int().positive(),
275
+ sourceProjectRevision: z3.number().int().positive(),
194
276
  submissionHash: HashSchema,
195
277
  state: TrainingJobStateSchema,
196
- phase: z.string().trim().min(1).max(200),
197
- version: z.number().int().nonnegative(),
198
- progress: z.number().min(0).max(1),
199
- rolloutProgress: z.object({
200
- groupsCompleted: z.number().int().nonnegative(),
201
- groupsTarget: z.number().int().nonnegative(),
202
- optimizerUpdatesApplied: z.number().int().nonnegative(),
203
- optimizerUpdatesSkipped: z.number().int().nonnegative()
278
+ phase: z3.string().trim().min(1).max(200),
279
+ version: z3.number().int().nonnegative(),
280
+ progress: z3.number().min(0).max(1),
281
+ rolloutProgress: z3.object({
282
+ groupsCompleted: z3.number().int().nonnegative(),
283
+ groupsTarget: z3.number().int().nonnegative(),
284
+ optimizerUpdatesApplied: z3.number().int().nonnegative(),
285
+ optimizerUpdatesSkipped: z3.number().int().nonnegative()
204
286
  }).strict(),
205
- accruedSpendUsd: z.number().nonnegative(),
206
- terminalReason: z.string().trim().min(1).max(5e3).nullable(),
287
+ accruedSpendUsd: z3.number().nonnegative(),
288
+ terminalReason: z3.string().trim().min(1).max(5e3).nullable(),
207
289
  createdAt: TimestampSchema,
208
290
  updatedAt: TimestampSchema,
209
291
  completedAt: TimestampSchema.nullable()
210
292
  }).strict();
211
- var TrainingJobPageSchema = z.object({
212
- schemaVersion: z.literal("openpond.trainingJobPage.v2"),
213
- jobs: z.array(TrainingJobSchema).max(1e3),
214
- nextCursor: z.string().trim().min(1).max(2e3).nullable()
293
+ var TrainingJobPageSchema = z3.object({
294
+ schemaVersion: z3.literal("openpond.trainingJobPage.v2"),
295
+ jobs: z3.array(TrainingJobSchema).max(1e3),
296
+ nextCursor: z3.string().trim().min(1).max(2e3).nullable()
215
297
  }).strict();
216
- var TrainingJobEventSchema = z.object({
217
- schemaVersion: z.literal("openpond.trainingJobEvent.v2"),
298
+ var TrainingJobEventSchema = z3.object({
299
+ schemaVersion: z3.literal("openpond.trainingJobEvent.v2"),
218
300
  id: IdSchema,
219
301
  jobId: IdSchema,
220
- sequence: z.number().int().nonnegative(),
302
+ sequence: z3.number().int().nonnegative(),
221
303
  type: IdSchema,
222
- phase: z.string().trim().min(1).max(200),
223
- message: z.string().trim().min(1).max(5e3).nullable(),
224
- data: z.record(z.string(), z.unknown()).default({}),
304
+ phase: z3.string().trim().min(1).max(200),
305
+ message: z3.string().trim().min(1).max(5e3).nullable(),
306
+ data: z3.record(z3.string(), z3.unknown()).default({}),
225
307
  createdAt: TimestampSchema
226
308
  }).strict();
227
- var TrainingJobLogSchema = z.object({
228
- schemaVersion: z.literal("openpond.trainingJobLog.v2"),
309
+ var TrainingJobLogSchema = z3.object({
310
+ schemaVersion: z3.literal("openpond.trainingJobLog.v2"),
229
311
  jobId: IdSchema,
230
- sequence: z.number().int().nonnegative(),
231
- level: z.enum(["debug", "info", "warning", "error"]),
232
- message: z.string().max(2e4),
312
+ sequence: z3.number().int().nonnegative(),
313
+ level: z3.enum(["debug", "info", "warning", "error"]),
314
+ message: z3.string().max(2e4),
233
315
  createdAt: TimestampSchema
234
316
  }).strict();
235
- var TrainingJobControlRequestSchema = z.object({ expectedVersion: z.number().int().nonnegative() }).strict();
236
- var TrainingJobOutputSchema = z.object({
237
- schemaVersion: z.literal("openpond.trainingJobOutput.v2"),
317
+ var TrainingJobControlRequestSchema = z3.object({ expectedVersion: z3.number().int().nonnegative() }).strict();
318
+ var TrainingJobOutputSchema = z3.object({
319
+ schemaVersion: z3.literal("openpond.trainingJobOutput.v2"),
238
320
  id: IdSchema,
239
321
  jobId: IdSchema,
240
- kind: z.enum([
322
+ kind: z3.enum([
241
323
  "checkpoint",
242
324
  "adapter",
243
325
  "scorer",
@@ -246,14 +328,14 @@ var TrainingJobOutputSchema = z.object({
246
328
  "trace",
247
329
  "receipt"
248
330
  ]),
249
- artifactRef: z.string().trim().min(1).max(2e3),
331
+ artifactRef: z3.string().trim().min(1).max(2e3),
250
332
  contentHash: HashSchema,
251
- sizeBytes: z.number().int().nonnegative(),
252
- metadata: z.record(z.string(), z.unknown()).default({}),
333
+ sizeBytes: z3.number().int().nonnegative(),
334
+ metadata: z3.record(z3.string(), z3.unknown()).default({}),
253
335
  createdAt: TimestampSchema
254
336
  }).strict();
255
- var TrainingExecutionReceiptSchema = z.object({
256
- schemaVersion: z.literal("openpond.trainingExecutionReceipt.v2"),
337
+ var TrainingExecutionReceiptSchema = z3.object({
338
+ schemaVersion: z3.literal("openpond.trainingExecutionReceipt.v2"),
257
339
  id: IdSchema,
258
340
  teamId: IdSchema,
259
341
  jobId: IdSchema,
@@ -262,14 +344,14 @@ var TrainingExecutionReceiptSchema = z.object({
262
344
  recipeHash: HashSchema,
263
345
  capabilityHash: HashSchema,
264
346
  runtimeRelease: ModelProjectImmutableRefSchema,
265
- inputs: z.array(ModelProjectImmutableRefSchema).max(1e4),
266
- outputs: z.array(ModelProjectImmutableRefSchema).max(1e4),
267
- spendUsd: z.number().nonnegative(),
268
- durationSeconds: z.number().nonnegative(),
269
- cleanupComplete: z.boolean(),
347
+ inputs: z3.array(ModelProjectImmutableRefSchema).max(1e4),
348
+ outputs: z3.array(ModelProjectImmutableRefSchema).max(1e4),
349
+ spendUsd: z3.number().nonnegative(),
350
+ durationSeconds: z3.number().nonnegative(),
351
+ cleanupComplete: z3.boolean(),
270
352
  issuer: IdSchema,
271
353
  issuedAt: TimestampSchema,
272
- signature: z.string().trim().min(1).max(1e4).nullable()
354
+ signature: z3.string().trim().min(1).max(1e4).nullable()
273
355
  }).strict();
274
356
  async function trainingExecutionReceiptHash(receipt) {
275
357
  return canonicalSha256(TrainingExecutionReceiptSchema.parse(receipt));
@@ -305,18 +387,18 @@ async function parseAndVerifyTrainingExecutionReceipt(value, expected) {
305
387
  }
306
388
  return receipt;
307
389
  }
308
- var TrainingJobOutputsSchema = z.object({
309
- schemaVersion: z.literal("openpond.trainingJobOutputs.v2"),
310
- outputs: z.array(TrainingJobOutputSchema).max(1e4),
390
+ var TrainingJobOutputsSchema = z3.object({
391
+ schemaVersion: z3.literal("openpond.trainingJobOutputs.v2"),
392
+ outputs: z3.array(TrainingJobOutputSchema).max(1e4),
311
393
  receipt: TrainingExecutionReceiptSchema.nullable()
312
394
  }).strict();
313
- var TrainingApiErrorSchema = z.object({
314
- schemaVersion: z.literal("openpond.trainingApiError.v2"),
315
- code: z.string().trim().min(1).max(200),
316
- message: z.string().trim().min(1).max(5e3),
317
- retryable: z.boolean().default(false),
318
- requestId: z.string().trim().min(1).max(500).nullable().default(null),
319
- details: z.record(z.string(), z.unknown()).default({})
395
+ var TrainingApiErrorSchema = z3.object({
396
+ schemaVersion: z3.literal("openpond.trainingApiError.v2"),
397
+ code: z3.string().trim().min(1).max(200),
398
+ message: z3.string().trim().min(1).max(5e3),
399
+ retryable: z3.boolean().default(false),
400
+ requestId: z3.string().trim().min(1).max(500).nullable().default(null),
401
+ details: z3.record(z3.string(), z3.unknown()).default({})
320
402
  }).strict();
321
403
  var OpenPondTrainingApiError = class extends Error {
322
404
  status;
@@ -334,23 +416,23 @@ var OpenPondTrainingApiError = class extends Error {
334
416
  this.details = error.details;
335
417
  }
336
418
  };
337
- var TrainingCapabilitiesSchema = z.object({
338
- schemaVersion: z.literal("openpond.trainingCapabilities.v2"),
419
+ var TrainingCapabilitiesSchema = z3.object({
420
+ schemaVersion: z3.literal("openpond.trainingCapabilities.v2"),
339
421
  capabilityHash: HashSchema,
340
- jobKinds: z.array(TrainingJobKindSchema),
341
- methods: z.array(z.string().trim().min(1).max(200)),
342
- placements: z.array(
343
- z.enum(["local", "remote", "colocated", "provider_native"])
422
+ jobKinds: z3.array(TrainingJobKindSchema),
423
+ methods: z3.array(z3.string().trim().min(1).max(200)),
424
+ placements: z3.array(
425
+ z3.enum(["local", "remote", "colocated", "provider_native"])
344
426
  ),
345
- controls: z.object({
346
- cancel: z.boolean(),
347
- stopAfterGroup: z.boolean(),
348
- resumeFromCheckpoint: z.boolean()
427
+ controls: z3.object({
428
+ cancel: z3.boolean(),
429
+ stopAfterGroup: z3.boolean(),
430
+ resumeFromCheckpoint: z3.boolean()
349
431
  }).strict(),
350
- limits: z.object({
351
- maximumSpendUsd: z.number().nonnegative(),
352
- maximumWallSeconds: z.number().int().positive(),
353
- maximumArtifactBytes: z.number().int().positive()
432
+ limits: z3.object({
433
+ maximumSpendUsd: z3.number().nonnegative(),
434
+ maximumWallSeconds: z3.number().int().positive(),
435
+ maximumArtifactBytes: z3.number().int().positive()
354
436
  }).strict(),
355
437
  checkedAt: TimestampSchema,
356
438
  expiresAt: TimestampSchema
@@ -441,12 +523,12 @@ function createTrainingClient(input) {
441
523
  parameters.set("modelProjectId", IdSchema.parse(options.modelProjectId));
442
524
  }
443
525
  if (options.cursor) {
444
- parameters.set("cursor", z.string().trim().min(1).max(2e3).parse(options.cursor));
526
+ parameters.set("cursor", z3.string().trim().min(1).max(2e3).parse(options.cursor));
445
527
  }
446
528
  if (options.limit !== void 0) {
447
529
  parameters.set(
448
530
  "limit",
449
- String(z.number().int().min(1).max(1e3).parse(options.limit))
531
+ String(z3.number().int().min(1).max(1e3).parse(options.limit))
450
532
  );
451
533
  }
452
534
  const query = parameters.size > 0 ? `?${parameters.toString()}` : "";
@@ -487,7 +569,7 @@ function createTrainingClient(input) {
487
569
  );
488
570
  },
489
571
  async events(jobId) {
490
- return z.array(TrainingJobEventSchema).parse(
572
+ return z3.array(TrainingJobEventSchema).parse(
491
573
  unwrapObject(
492
574
  await request(
493
575
  `/v1/training/jobs/${encodeURIComponent(IdSchema.parse(jobId))}/events`
@@ -504,7 +586,7 @@ function createTrainingClient(input) {
504
586
  );
505
587
  },
506
588
  async logs(jobId) {
507
- return z.array(TrainingJobLogSchema).max(1e5).parse(
589
+ return z3.array(TrainingJobLogSchema).max(1e5).parse(
508
590
  unwrapObject(
509
591
  await request(
510
592
  `/v1/training/jobs/${encodeURIComponent(IdSchema.parse(jobId))}/logs`
@@ -541,6 +623,11 @@ function trainingApiError(value, status) {
541
623
  }
542
624
 
543
625
  export {
626
+ deterministicTrainingRewardSource,
627
+ TRAINING_EVALUATION_SOURCE_PATH,
628
+ TrainingEvaluationSourceSchema,
629
+ assertTrainingEvaluationIsolation,
630
+ trainingEvaluationSourceRef,
544
631
  TrainingInputArtifactUploadSchema,
545
632
  TrainingInputArtifactSchema,
546
633
  trainingInputArtifactUploadHash,
@@ -571,4 +658,4 @@ export {
571
658
  TrainingCapabilitiesSchema,
572
659
  createTrainingClient
573
660
  };
574
- //# sourceMappingURL=chunk-AVW35YOH.js.map
661
+ //# sourceMappingURL=chunk-OJERFIEJ.js.map