openpond-sdk 0.5.4 → 0.5.6

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.
@@ -14,42 +14,117 @@ import {
14
14
  } from "./chunk-ZNFOVV7B.js";
15
15
 
16
16
  // src/training.ts
17
- import { z as z4 } from "zod";
17
+ import { z as z5 } from "zod";
18
18
 
19
- // src/training-evaluation-results.ts
19
+ // src/training-candidate-decisions.ts
20
20
  import { z } from "zod";
21
- var IdSchema = z.string().trim().min(1).max(500);
22
- var HashSchema = z.string().regex(/^[a-f0-9]{64}$/);
23
- var TrainingEvaluationTaskResultSchema = z.object({
24
- taskId: IdSchema,
25
- taskSha256: HashSchema,
26
- resultSha256: HashSchema,
27
- input: z.object({
28
- instruction: z.string().max(1e6),
29
- context: z.record(z.string(), z.unknown())
21
+ var IdSchema = /* @__PURE__ */ (() => z.string().trim().min(1).max(500))();
22
+ var HashSchema = /* @__PURE__ */ (() => z.string().regex(/^[a-f0-9]{64}$/))();
23
+ var TrainingCandidateDecisionRequestSchema = /* @__PURE__ */ (() => z.object({
24
+ schemaVersion: z.literal("openpond.trainingCandidateDecisionRequest.v1"),
25
+ teamId: IdSchema,
26
+ jobId: IdSchema,
27
+ artifact: ModelProjectImmutableRefSchema,
28
+ evaluation: ModelProjectImmutableRefSchema,
29
+ executionReceipt: ModelProjectImmutableRefSchema,
30
+ decision: z.enum(["accepted", "rejected"]),
31
+ reason: z.string().trim().min(1).max(5e3),
32
+ idempotencyKey: IdSchema,
33
+ expectedDecision: ModelProjectImmutableRefSchema.nullable()
34
+ }).strict())();
35
+ var TrainingCandidateDecisionSchema = /* @__PURE__ */ (() => z.object({
36
+ schemaVersion: z.literal("openpond.trainingCandidateDecision.v1"),
37
+ id: IdSchema,
38
+ request: TrainingCandidateDecisionRequestSchema,
39
+ revision: z.number().int().positive(),
40
+ actor: z.object({ userId: IdSchema, kind: z.enum(["user", "api_key", "agent_delegate"]), id: IdSchema }).strict(),
41
+ decidedAt: z.string().datetime({ offset: true }),
42
+ contentHash: HashSchema
43
+ }).strict().superRefine((value, context) => {
44
+ if (value.revision === 1 !== (value.request.expectedDecision === null)) {
45
+ context.addIssue({ code: "custom", path: ["revision"], message: "A first decision has no predecessor; later decisions must reference the prior decision." });
46
+ }
47
+ if (value.request.expectedDecision?.id === value.id) {
48
+ context.addIssue({ code: "custom", path: ["request", "expectedDecision"], message: "A decision cannot supersede itself." });
49
+ }
50
+ }))();
51
+ async function trainingCandidateDecisionHash(value) {
52
+ const { contentHash: _contentHash, ...content } = value;
53
+ return canonicalSha256(content);
54
+ }
55
+ async function parseAndVerifyTrainingCandidateDecision(value, expected) {
56
+ assertCanonicalPayloadSize(value, 32768, "Training candidate decision");
57
+ const parsed = TrainingCandidateDecisionSchema.parse(value);
58
+ if (parsed.contentHash !== await trainingCandidateDecisionHash(parsed)) {
59
+ throw new OpenPondProtocolError("content_hash_mismatch", "Training candidate decision content hash does not match.");
60
+ }
61
+ if (parsed.request.teamId !== expected.teamId || parsed.request.jobId !== expected.jobId || parsed.request.artifact.id !== expected.artifact.id || parsed.request.artifact.contentHash !== expected.artifact.contentHash) {
62
+ throw new OpenPondProtocolError("candidate_decision_identity_mismatch", "Training candidate decision belongs to a different team, Job or artifact.");
63
+ }
64
+ if (expected.request && await canonicalSha256(parsed.request) !== await canonicalSha256(TrainingCandidateDecisionRequestSchema.parse(expected.request))) {
65
+ throw new OpenPondProtocolError("candidate_decision_request_mismatch", "Training candidate decision does not match the submitted review.");
66
+ }
67
+ return parsed;
68
+ }
69
+ function createTrainingCandidateDecisionClient(request) {
70
+ function route(target) {
71
+ return `/v1/training/jobs/${encodeURIComponent(IdSchema.parse(target.jobId))}/candidates/${encodeURIComponent(ModelProjectImmutableRefSchema.parse(target.artifact).id)}/decision`;
72
+ }
73
+ return {
74
+ async candidateDecision(target, options = {}) {
75
+ IdSchema.parse(target.teamId);
76
+ const reference = options.decision ? ModelProjectImmutableRefSchema.parse(options.decision) : void 0;
77
+ const query = reference ? `?decisionId=${encodeURIComponent(reference.id)}` : "";
78
+ const response = z.object({ decision: z.unknown().nullable() }).strict().parse(await request(`${route(target)}${query}`));
79
+ if (response.decision === null && !reference) return null;
80
+ const decision = await parseAndVerifyTrainingCandidateDecision(response.decision, target);
81
+ if (reference && (decision.id !== reference.id || decision.contentHash !== reference.contentHash)) {
82
+ throw new OpenPondProtocolError("candidate_decision_identity_mismatch", "Training candidate decision does not match the requested history entry.");
83
+ }
84
+ return decision;
85
+ },
86
+ async recordCandidateDecision(input) {
87
+ const parsed = TrainingCandidateDecisionRequestSchema.parse(input);
88
+ const response = await request(route(parsed), { method: "POST", body: JSON.stringify(parsed) });
89
+ return parseAndVerifyTrainingCandidateDecision(response, { ...parsed, request: parsed });
90
+ }
91
+ };
92
+ }
93
+
94
+ // src/training-evaluation-results.ts
95
+ import { z as z2 } from "zod";
96
+ var IdSchema2 = /* @__PURE__ */ (() => z2.string().trim().min(1).max(500))();
97
+ var HashSchema2 = /* @__PURE__ */ (() => z2.string().regex(/^[a-f0-9]{64}$/))();
98
+ var TrainingEvaluationTaskResultSchema = /* @__PURE__ */ (() => z2.object({
99
+ taskId: IdSchema2,
100
+ taskSha256: HashSchema2,
101
+ resultSha256: HashSchema2,
102
+ input: z2.object({
103
+ instruction: z2.string().max(1e6),
104
+ context: z2.record(z2.string(), z2.unknown())
30
105
  }).strict(),
31
- output: z.string().max(1e6),
32
- outputSha256: HashSchema,
33
- score: z.number().finite().min(0).max(1),
34
- evidence: z.object({
35
- kind: z.enum(["worker_command", "hosted_trace", "local_trace"]),
36
- id: IdSchema
106
+ output: z2.string().max(1e6),
107
+ outputSha256: HashSchema2,
108
+ score: z2.number().finite().min(0).max(1),
109
+ evidence: z2.object({
110
+ kind: z2.enum(["worker_command", "hosted_trace", "local_trace"]),
111
+ id: IdSchema2
37
112
  }).strict()
38
- }).strict();
39
- var TrainingEvaluationTaskPageSchema = z.object({
40
- schemaVersion: z.literal("openpond.trainingEvaluationTaskPage.v1"),
41
- jobId: IdSchema,
42
- teamId: IdSchema,
113
+ }).strict())();
114
+ var TrainingEvaluationTaskPageSchema = /* @__PURE__ */ (() => z2.object({
115
+ schemaVersion: z2.literal("openpond.trainingEvaluationTaskPage.v1"),
116
+ jobId: IdSchema2,
117
+ teamId: IdSchema2,
43
118
  evaluation: ModelProjectImmutableRefSchema,
44
- kind: z.enum(["baseline", "candidate"]),
45
- policyVersion: z.number().int().nonnegative(),
119
+ kind: z2.enum(["baseline", "candidate"]),
120
+ policyVersion: z2.number().int().nonnegative(),
46
121
  taskset: ModelProjectVersionedRefSchema,
47
- panelSha256: HashSchema,
48
- offset: z.number().int().nonnegative(),
49
- total: z.number().int().min(1).max(1e4),
50
- tasks: z.array(TrainingEvaluationTaskResultSchema).min(1).max(100),
51
- nextCursor: z.string().regex(/^[1-9]\d*$/).nullable(),
52
- contentHash: HashSchema
122
+ panelSha256: HashSchema2,
123
+ offset: z2.number().int().nonnegative(),
124
+ total: z2.number().int().min(1).max(1e4),
125
+ tasks: z2.array(TrainingEvaluationTaskResultSchema).min(1).max(100),
126
+ nextCursor: z2.string().regex(/^[1-9]\d*$/).nullable(),
127
+ contentHash: HashSchema2
53
128
  }).strict().superRefine((page, context) => {
54
129
  const end = page.offset + page.tasks.length;
55
130
  const expectedCursor = end < page.total ? String(end) : null;
@@ -59,7 +134,7 @@ var TrainingEvaluationTaskPageSchema = z.object({
59
134
  if (new Set(page.tasks.map((task) => task.taskId)).size !== page.tasks.length) {
60
135
  context.addIssue({ code: "custom", path: ["tasks"], message: "Evaluation task identities must be unique." });
61
136
  }
62
- });
137
+ }))();
63
138
  async function trainingEvaluationTaskPageHash(value) {
64
139
  const { contentHash: _contentHash, ...content } = value;
65
140
  return canonicalSha256(content);
@@ -68,7 +143,7 @@ async function parseAndVerifyTrainingEvaluationTaskPage(value, expected) {
68
143
  assertCanonicalPayloadSize(value, TRAINING_API_RESPONSE_MAX_BYTES, "Training evaluation task page");
69
144
  const page = TrainingEvaluationTaskPageSchema.parse(value);
70
145
  const reference = ModelProjectImmutableRefSchema.parse(expected.evaluation);
71
- if (page.jobId !== IdSchema.parse(expected.jobId) || page.evaluation.id !== reference.id || page.evaluation.contentHash !== reference.contentHash || page.offset !== (expected.offset ?? 0) || expected.teamId !== void 0 && page.teamId !== IdSchema.parse(expected.teamId)) {
146
+ if (page.jobId !== IdSchema2.parse(expected.jobId) || page.evaluation.id !== reference.id || page.evaluation.contentHash !== reference.contentHash || page.offset !== (expected.offset ?? 0) || expected.teamId !== void 0 && page.teamId !== IdSchema2.parse(expected.teamId)) {
72
147
  throw new OpenPondProtocolError("evaluation_page_identity_mismatch", "Evaluation results differ from the requested Job, evaluation, or page.");
73
148
  }
74
149
  if (await trainingEvaluationTaskPageHash(page) !== page.contentHash) {
@@ -83,12 +158,12 @@ async function parseAndVerifyTrainingEvaluationTaskPage(value, expected) {
83
158
  }
84
159
 
85
160
  // src/training-grading-plan.ts
86
- import { z as z2 } from "zod";
161
+ import { z as z3 } from "zod";
87
162
  import { compileBoundGraders, RewardBindingSchema, RewardReleaseSchema } from "@openpond/evals/rewards";
88
- var GradersSchema = z2.array(z2.object({ id: z2.string().trim().min(1) }).catchall(z2.unknown())).min(1).max(1e3);
89
- var RewardExecutionSchema = z2.object({
163
+ var GradersSchema = z3.array(z3.object({ id: z3.string().trim().min(1) }).catchall(z3.unknown())).min(1).max(1e3);
164
+ var RewardExecutionSchema = z3.object({
90
165
  binding: RewardBindingSchema,
91
- rewards: z2.array(RewardReleaseSchema).min(1).max(100)
166
+ rewards: z3.array(RewardReleaseSchema).min(1).max(100)
92
167
  }).strict();
93
168
  async function deterministicTrainingRewardSource(input) {
94
169
  const execution = input.rewardExecution ? RewardExecutionSchema.parse(input.rewardExecution) : null;
@@ -105,23 +180,23 @@ async function deterministicTrainingRewardSource(input) {
105
180
  }
106
181
 
107
182
  // src/training-evaluation-source.ts
108
- import { z as z3 } from "zod";
183
+ import { z as z4 } from "zod";
109
184
  var TRAINING_EVALUATION_SOURCE_PATH = "evaluation-source.json";
110
- var TaskIdentitySchema = z3.object({
111
- id: z3.string().trim().min(1),
112
- clusterKey: z3.string().trim().min(1),
113
- split: z3.enum(["train", "validation", "frozen_eval"])
185
+ var TaskIdentitySchema = z4.object({
186
+ id: z4.string().trim().min(1),
187
+ clusterKey: z4.string().trim().min(1),
188
+ split: z4.enum(["train", "validation", "frozen_eval"])
114
189
  }).passthrough();
115
- var TrainingEvaluationSourceSchema = z3.object({
116
- schemaVersion: z3.literal("openpond.trainingEvaluationSource.v1"),
190
+ var TrainingEvaluationSourceSchema = z4.object({
191
+ schemaVersion: z4.literal("openpond.trainingEvaluationSource.v1"),
117
192
  taskset: ModelProjectVersionedRefSchema,
118
- tasks: z3.array(TaskIdentitySchema).min(1).max(1e4),
119
- assets: z3.array(z3.object({
120
- path: z3.string().trim().min(1).max(2e3),
121
- sha256: z3.string().regex(/^[a-f0-9]{64}$/),
122
- sizeBytes: z3.number().int().nonnegative(),
123
- encoding: z3.literal("base64"),
124
- content: z3.string().max(32 * 1024 * 1024)
193
+ tasks: z4.array(TaskIdentitySchema).min(1).max(1e4),
194
+ assets: z4.array(z4.object({
195
+ path: z4.string().trim().min(1).max(2e3),
196
+ sha256: z4.string().regex(/^[a-f0-9]{64}$/),
197
+ sizeBytes: z4.number().int().nonnegative(),
198
+ encoding: z4.literal("base64"),
199
+ content: z4.string().max(32 * 1024 * 1024)
125
200
  }).strict()).max(1e4)
126
201
  }).strict().superRefine((source, context) => {
127
202
  const ids = /* @__PURE__ */ new Set();
@@ -132,8 +207,8 @@ var TrainingEvaluationSourceSchema = z3.object({
132
207
  });
133
208
  });
134
209
  function assertTrainingEvaluationIsolation(trainingTasks, evaluationTasks) {
135
- const training = z3.array(TaskIdentitySchema).min(1).max(1e4).parse(trainingTasks);
136
- const evaluation = z3.array(TaskIdentitySchema).min(1).max(1e4).parse(evaluationTasks);
210
+ const training = z4.array(TaskIdentitySchema).min(1).max(1e4).parse(trainingTasks);
211
+ const evaluation = z4.array(TaskIdentitySchema).min(1).max(1e4).parse(evaluationTasks);
137
212
  const trainIds = /* @__PURE__ */ new Set();
138
213
  const trainFamilies = /* @__PURE__ */ new Set();
139
214
  for (const task of training) {
@@ -159,24 +234,24 @@ async function trainingEvaluationSourceRef(input) {
159
234
  }
160
235
 
161
236
  // src/training.ts
162
- var IdSchema2 = z4.string().trim().min(1).max(500);
163
- var HashSchema2 = z4.string().regex(/^[a-f0-9]{64}$/);
164
- var TimestampSchema = z4.string().datetime({ offset: true });
165
- var TrainingInputArtifactUploadSchema = z4.object({
166
- schemaVersion: z4.literal("openpond.trainingInputArtifactUpload.v2"),
167
- kind: z4.enum(["portable_training_bundle", "reward_model_dataset"]),
168
- idempotencyKey: z4.string().trim().min(1).max(500),
237
+ var IdSchema3 = z5.string().trim().min(1).max(500);
238
+ var HashSchema3 = z5.string().regex(/^[a-f0-9]{64}$/);
239
+ var TimestampSchema = z5.string().datetime({ offset: true });
240
+ var TrainingInputArtifactUploadSchema = z5.object({
241
+ schemaVersion: z5.literal("openpond.trainingInputArtifactUpload.v2"),
242
+ kind: z5.enum(["portable_training_bundle", "reward_model_dataset"]),
243
+ idempotencyKey: z5.string().trim().min(1).max(500),
169
244
  sourceManifest: ModelProjectImmutableRefSchema,
170
- payload: z4.unknown(),
171
- contentHash: HashSchema2
245
+ payload: z5.unknown(),
246
+ contentHash: HashSchema3
172
247
  }).strict();
173
- var TrainingInputArtifactSchema = z4.object({
174
- schemaVersion: z4.literal("openpond.trainingInputArtifact.v2"),
175
- kind: z4.enum(["portable_training_bundle", "reward_model_dataset"]),
248
+ var TrainingInputArtifactSchema = z5.object({
249
+ schemaVersion: z5.literal("openpond.trainingInputArtifact.v2"),
250
+ kind: z5.enum(["portable_training_bundle", "reward_model_dataset"]),
176
251
  sourceManifest: ModelProjectImmutableRefSchema,
177
- artifactRef: z4.string().trim().min(1).max(2e3),
178
- contentHash: HashSchema2,
179
- sizeBytes: z4.number().int().positive(),
252
+ artifactRef: z5.string().trim().min(1).max(2e3),
253
+ contentHash: HashSchema3,
254
+ sizeBytes: z5.number().int().positive(),
180
255
  createdAt: TimestampSchema
181
256
  }).strict();
182
257
  async function trainingInputArtifactUploadHash(upload) {
@@ -199,11 +274,11 @@ async function parseAndVerifyTrainingInputArtifactUpload(value) {
199
274
  }
200
275
  return parsed;
201
276
  }
202
- var TrainingJobKindSchema = z4.enum([
277
+ var TrainingJobKindSchema = z5.enum([
203
278
  "reward_model_train",
204
279
  "policy_optimize"
205
280
  ]);
206
- var TrainingJobStateSchema = z4.enum([
281
+ var TrainingJobStateSchema = z5.enum([
207
282
  "queued",
208
283
  "admitting",
209
284
  "provisioning",
@@ -214,94 +289,94 @@ var TrainingJobStateSchema = z4.enum([
214
289
  "failed",
215
290
  "cancelled"
216
291
  ]);
217
- var TrainingCapabilityRequirementSchema = z4.object({
218
- id: IdSchema2,
219
- version: z4.string().trim().min(1).max(200).nullable().default(null),
220
- required: z4.boolean().default(true)
292
+ var TrainingCapabilityRequirementSchema = z5.object({
293
+ id: IdSchema3,
294
+ version: z5.string().trim().min(1).max(200).nullable().default(null),
295
+ required: z5.boolean().default(true)
221
296
  }).strict();
222
- var TrainingJobSourceSchema = z4.object({
223
- modelProject: z4.object({
224
- id: IdSchema2,
225
- portableProjectId: IdSchema2,
226
- revision: z4.number().int().positive(),
227
- contentHash: HashSchema2
297
+ var TrainingJobSourceSchema = z5.object({
298
+ modelProject: z5.object({
299
+ id: IdSchema3,
300
+ portableProjectId: IdSchema3,
301
+ revision: z5.number().int().positive(),
302
+ contentHash: HashSchema3
228
303
  }).strict(),
229
304
  harnessRunManifest: ModelProjectImmutableRefSchema,
230
305
  harnessRelease: ModelProjectImmutableRefSchema,
231
306
  taskset: ModelProjectVersionedRefSchema,
232
307
  tasksetRelease: ModelProjectImmutableRefSchema,
233
- evaluation: z4.object({
308
+ evaluation: z5.object({
234
309
  taskset: ModelProjectVersionedRefSchema,
235
310
  dataset: ModelProjectImmutableRefSchema
236
311
  }).strict().nullable().optional(),
237
312
  dataset: ModelProjectImmutableRefSchema,
238
- evidenceSets: z4.array(ModelProjectImmutableRefSchema).max(1e4)
313
+ evidenceSets: z5.array(ModelProjectImmutableRefSchema).max(1e4)
239
314
  }).strict();
240
- var RewardModelTrainingRequestSchema = z4.object({
241
- kind: z4.literal("reward_model_train"),
315
+ var RewardModelTrainingRequestSchema = z5.object({
316
+ kind: z5.literal("reward_model_train"),
242
317
  baseModel: ModelProjectBaseModelSchema,
243
318
  preferenceDatasetRelease: ModelProjectImmutableRefSchema,
244
319
  processorRelease: ModelProjectImmutableRefSchema,
245
- recipe: z4.object({
246
- schemaVersion: z4.literal("openpond.rewardModelRecipe.v1"),
247
- method: z4.literal("reward_model"),
248
- parameterization: z4.literal("lora_with_scalar_head")
249
- }).catchall(z4.unknown())
320
+ recipe: z5.object({
321
+ schemaVersion: z5.literal("openpond.rewardModelRecipe.v1"),
322
+ method: z5.literal("reward_model"),
323
+ parameterization: z5.literal("lora_with_scalar_head")
324
+ }).catchall(z5.unknown())
250
325
  }).strict();
251
- var DeterministicRewardSourceSchema = z4.object({
252
- kind: z4.literal("deterministic"),
326
+ var DeterministicRewardSourceSchema = z5.object({
327
+ kind: z5.literal("deterministic"),
253
328
  grader: ModelProjectImmutableRefSchema,
254
329
  composer: ModelProjectImmutableRefSchema.nullable().default(null)
255
330
  }).strict();
256
- var LearnedRewardSourceSchema = z4.object({
257
- kind: z4.literal("learned_reward"),
331
+ var LearnedRewardSourceSchema = z5.object({
332
+ kind: z5.literal("learned_reward"),
258
333
  rewardModelVersion: ModelProjectImmutableRefSchema,
259
334
  qualificationReport: ModelProjectImmutableRefSchema.nullable().default(null),
260
- evaluationReferences: z4.array(ModelProjectImmutableRefSchema).max(1e3).default([]),
261
- scorerArtifact: z4.object({
262
- artifactRef: z4.string().trim().min(1).max(2e3),
263
- contentHash: HashSchema2,
335
+ evaluationReferences: z5.array(ModelProjectImmutableRefSchema).max(1e3).default([]),
336
+ scorerArtifact: z5.object({
337
+ artifactRef: z5.string().trim().min(1).max(2e3),
338
+ contentHash: HashSchema3,
264
339
  executionReceipt: ModelProjectImmutableRefSchema
265
340
  }).strict(),
266
341
  processorRelease: ModelProjectImmutableRefSchema,
267
342
  rewardComposerRelease: ModelProjectImmutableRefSchema
268
343
  }).strict();
269
- var PolicyOptimizationRequestSchema = z4.object({
270
- kind: z4.literal("policy_optimize"),
344
+ var PolicyOptimizationRequestSchema = z5.object({
345
+ kind: z5.literal("policy_optimize"),
271
346
  baseModel: ModelProjectBaseModelSchema,
272
347
  recipe: ModelProjectRecipeDocumentSchema,
273
- rewardSource: z4.discriminatedUnion("kind", [
348
+ rewardSource: z5.discriminatedUnion("kind", [
274
349
  DeterministicRewardSourceSchema,
275
350
  LearnedRewardSourceSchema
276
351
  ]),
277
352
  resumeFrom: ModelProjectImmutableRefSchema.nullable().default(null)
278
353
  }).strict();
279
- var TrainingJobRequestSchema = z4.discriminatedUnion("kind", [
354
+ var TrainingJobRequestSchema = z5.discriminatedUnion("kind", [
280
355
  RewardModelTrainingRequestSchema,
281
356
  PolicyOptimizationRequestSchema
282
357
  ]);
283
- var TrainingJobApprovalSchema = z4.object({
284
- approvalHash: HashSchema2,
358
+ var TrainingJobApprovalSchema = z5.object({
359
+ approvalHash: HashSchema3,
285
360
  approvedAt: TimestampSchema,
286
- exportApproved: z4.boolean(),
287
- maximumSpendUsd: z4.number().nonnegative(),
288
- retentionDays: z4.number().int().nonnegative().nullable(),
289
- region: z4.string().trim().min(1).max(200).nullable().default(null)
361
+ exportApproved: z5.boolean(),
362
+ maximumSpendUsd: z5.number().nonnegative(),
363
+ retentionDays: z5.number().int().nonnegative().nullable(),
364
+ region: z5.string().trim().min(1).max(200).nullable().default(null)
290
365
  }).strict();
291
- var TrainingJobSubmissionSchema = z4.object({
292
- schemaVersion: z4.literal("openpond.trainingJobSubmission.v2"),
293
- idempotencyKey: z4.string().trim().min(1).max(500),
294
- name: z4.string().trim().min(1).max(200),
366
+ var TrainingJobSubmissionSchema = z5.object({
367
+ schemaVersion: z5.literal("openpond.trainingJobSubmission.v2"),
368
+ idempotencyKey: z5.string().trim().min(1).max(500),
369
+ name: z5.string().trim().min(1).max(200),
295
370
  source: TrainingJobSourceSchema,
296
371
  job: TrainingJobRequestSchema,
297
- requestedCapabilities: z4.array(TrainingCapabilityRequirementSchema).max(1e3),
298
- placementObjective: z4.enum(["fast", "balanced", "economical"]),
299
- budget: z4.object({
300
- maximumSpendUsd: z4.number().nonnegative(),
301
- maximumWallSeconds: z4.number().int().positive()
372
+ requestedCapabilities: z5.array(TrainingCapabilityRequirementSchema).max(1e3),
373
+ placementObjective: z5.enum(["fast", "balanced", "economical"]),
374
+ budget: z5.object({
375
+ maximumSpendUsd: z5.number().nonnegative(),
376
+ maximumWallSeconds: z5.number().int().positive()
302
377
  }).strict(),
303
378
  approval: TrainingJobApprovalSchema,
304
- contentHash: HashSchema2
379
+ contentHash: HashSchema3
305
380
  }).strict().superRefine((submission, context) => {
306
381
  if (submission.approval.maximumSpendUsd !== submission.budget.maximumSpendUsd) {
307
382
  context.addIssue({
@@ -331,61 +406,61 @@ async function parseAndVerifyTrainingJobSubmission(value) {
331
406
  }
332
407
  return parsed;
333
408
  }
334
- var TrainingJobSchema = z4.object({
335
- schemaVersion: z4.literal("openpond.trainingJob.v2"),
336
- id: IdSchema2,
337
- teamId: IdSchema2,
409
+ var TrainingJobSchema = z5.object({
410
+ schemaVersion: z5.literal("openpond.trainingJob.v2"),
411
+ id: IdSchema3,
412
+ teamId: IdSchema3,
338
413
  kind: TrainingJobKindSchema,
339
- modelProjectId: IdSchema2,
340
- portableProjectId: IdSchema2,
341
- sourceProjectRevision: z4.number().int().positive(),
342
- submissionHash: HashSchema2,
414
+ modelProjectId: IdSchema3,
415
+ portableProjectId: IdSchema3,
416
+ sourceProjectRevision: z5.number().int().positive(),
417
+ submissionHash: HashSchema3,
343
418
  state: TrainingJobStateSchema,
344
- phase: z4.string().trim().min(1).max(200),
345
- version: z4.number().int().nonnegative(),
346
- progress: z4.number().min(0).max(1),
347
- rolloutProgress: z4.object({
348
- groupsCompleted: z4.number().int().nonnegative(),
349
- groupsTarget: z4.number().int().nonnegative(),
350
- optimizerUpdatesApplied: z4.number().int().nonnegative(),
351
- optimizerUpdatesSkipped: z4.number().int().nonnegative()
419
+ phase: z5.string().trim().min(1).max(200),
420
+ version: z5.number().int().nonnegative(),
421
+ progress: z5.number().min(0).max(1),
422
+ rolloutProgress: z5.object({
423
+ groupsCompleted: z5.number().int().nonnegative(),
424
+ groupsTarget: z5.number().int().nonnegative(),
425
+ optimizerUpdatesApplied: z5.number().int().nonnegative(),
426
+ optimizerUpdatesSkipped: z5.number().int().nonnegative()
352
427
  }).strict(),
353
- accruedSpendUsd: z4.number().nonnegative(),
354
- terminalReason: z4.string().trim().min(1).max(5e3).nullable(),
428
+ accruedSpendUsd: z5.number().nonnegative(),
429
+ terminalReason: z5.string().trim().min(1).max(5e3).nullable(),
355
430
  createdAt: TimestampSchema,
356
431
  updatedAt: TimestampSchema,
357
432
  completedAt: TimestampSchema.nullable()
358
433
  }).strict();
359
- var TrainingJobPageSchema = z4.object({
360
- schemaVersion: z4.literal("openpond.trainingJobPage.v2"),
361
- jobs: z4.array(TrainingJobSchema).max(1e3),
362
- nextCursor: z4.string().trim().min(1).max(2e3).nullable()
434
+ var TrainingJobPageSchema = z5.object({
435
+ schemaVersion: z5.literal("openpond.trainingJobPage.v2"),
436
+ jobs: z5.array(TrainingJobSchema).max(1e3),
437
+ nextCursor: z5.string().trim().min(1).max(2e3).nullable()
363
438
  }).strict();
364
- var TrainingJobEventSchema = z4.object({
365
- schemaVersion: z4.literal("openpond.trainingJobEvent.v2"),
366
- id: IdSchema2,
367
- jobId: IdSchema2,
368
- sequence: z4.number().int().nonnegative(),
369
- type: IdSchema2,
370
- phase: z4.string().trim().min(1).max(200),
371
- message: z4.string().trim().min(1).max(5e3).nullable(),
372
- data: z4.record(z4.string(), z4.unknown()).default({}),
439
+ var TrainingJobEventSchema = z5.object({
440
+ schemaVersion: z5.literal("openpond.trainingJobEvent.v2"),
441
+ id: IdSchema3,
442
+ jobId: IdSchema3,
443
+ sequence: z5.number().int().nonnegative(),
444
+ type: IdSchema3,
445
+ phase: z5.string().trim().min(1).max(200),
446
+ message: z5.string().trim().min(1).max(5e3).nullable(),
447
+ data: z5.record(z5.string(), z5.unknown()).default({}),
373
448
  createdAt: TimestampSchema
374
449
  }).strict();
375
- var TrainingJobLogSchema = z4.object({
376
- schemaVersion: z4.literal("openpond.trainingJobLog.v2"),
377
- jobId: IdSchema2,
378
- sequence: z4.number().int().nonnegative(),
379
- level: z4.enum(["debug", "info", "warning", "error"]),
380
- message: z4.string().max(2e4),
450
+ var TrainingJobLogSchema = z5.object({
451
+ schemaVersion: z5.literal("openpond.trainingJobLog.v2"),
452
+ jobId: IdSchema3,
453
+ sequence: z5.number().int().nonnegative(),
454
+ level: z5.enum(["debug", "info", "warning", "error"]),
455
+ message: z5.string().max(2e4),
381
456
  createdAt: TimestampSchema
382
457
  }).strict();
383
- var TrainingJobControlRequestSchema = z4.object({ expectedVersion: z4.number().int().nonnegative() }).strict();
384
- var TrainingJobOutputSchema = z4.object({
385
- schemaVersion: z4.literal("openpond.trainingJobOutput.v2"),
386
- id: IdSchema2,
387
- jobId: IdSchema2,
388
- kind: z4.enum([
458
+ var TrainingJobControlRequestSchema = z5.object({ expectedVersion: z5.number().int().nonnegative() }).strict();
459
+ var TrainingJobOutputSchema = z5.object({
460
+ schemaVersion: z5.literal("openpond.trainingJobOutput.v2"),
461
+ id: IdSchema3,
462
+ jobId: IdSchema3,
463
+ kind: z5.enum([
389
464
  "checkpoint",
390
465
  "adapter",
391
466
  "scorer",
@@ -394,38 +469,38 @@ var TrainingJobOutputSchema = z4.object({
394
469
  "trace",
395
470
  "receipt"
396
471
  ]),
397
- artifactRef: z4.string().trim().min(1).max(2e3),
398
- contentHash: HashSchema2,
399
- sizeBytes: z4.number().int().nonnegative(),
400
- metadata: z4.record(z4.string(), z4.unknown()).default({}),
472
+ artifactRef: z5.string().trim().min(1).max(2e3),
473
+ contentHash: HashSchema3,
474
+ sizeBytes: z5.number().int().nonnegative(),
475
+ metadata: z5.record(z5.string(), z5.unknown()).default({}),
401
476
  createdAt: TimestampSchema
402
477
  }).strict();
403
- var TrainingExecutionReceiptSchema = z4.object({
404
- schemaVersion: z4.literal("openpond.trainingExecutionReceipt.v2"),
405
- id: IdSchema2,
406
- teamId: IdSchema2,
407
- jobId: IdSchema2,
408
- submissionHash: HashSchema2,
409
- manifestHash: HashSchema2,
410
- recipeHash: HashSchema2,
411
- capabilityHash: HashSchema2,
478
+ var TrainingExecutionReceiptSchema = z5.object({
479
+ schemaVersion: z5.literal("openpond.trainingExecutionReceipt.v2"),
480
+ id: IdSchema3,
481
+ teamId: IdSchema3,
482
+ jobId: IdSchema3,
483
+ submissionHash: HashSchema3,
484
+ manifestHash: HashSchema3,
485
+ recipeHash: HashSchema3,
486
+ capabilityHash: HashSchema3,
412
487
  runtimeRelease: ModelProjectImmutableRefSchema,
413
- inputs: z4.array(ModelProjectImmutableRefSchema).max(1e4),
414
- outputs: z4.array(ModelProjectImmutableRefSchema).max(1e4),
415
- spendUsd: z4.number().nonnegative(),
416
- durationSeconds: z4.number().nonnegative(),
417
- cleanupComplete: z4.boolean(),
418
- issuer: IdSchema2,
488
+ inputs: z5.array(ModelProjectImmutableRefSchema).max(1e4),
489
+ outputs: z5.array(ModelProjectImmutableRefSchema).max(1e4),
490
+ spendUsd: z5.number().nonnegative(),
491
+ durationSeconds: z5.number().nonnegative(),
492
+ cleanupComplete: z5.boolean(),
493
+ issuer: IdSchema3,
419
494
  issuedAt: TimestampSchema,
420
- signature: z4.string().trim().min(1).max(1e4).nullable()
495
+ signature: z5.string().trim().min(1).max(1e4).nullable()
421
496
  }).strict();
422
497
  async function trainingExecutionReceiptHash(receipt) {
423
498
  return canonicalSha256(TrainingExecutionReceiptSchema.parse(receipt));
424
499
  }
425
500
  async function parseAndVerifyTrainingExecutionReceipt(value, expected) {
426
501
  const receipt = TrainingExecutionReceiptSchema.parse(value);
427
- const expectedId = IdSchema2.parse(expected.id);
428
- const expectedHash = HashSchema2.parse(expected.contentHash);
502
+ const expectedId = IdSchema3.parse(expected.id);
503
+ const expectedHash = HashSchema3.parse(expected.contentHash);
429
504
  const actualHash = await trainingExecutionReceiptHash(receipt);
430
505
  if (receipt.id !== expectedId || actualHash !== expectedHash) {
431
506
  throw new OpenPondProtocolError(
@@ -433,13 +508,13 @@ async function parseAndVerifyTrainingExecutionReceipt(value, expected) {
433
508
  "The execution receipt identity or canonical content hash did not match."
434
509
  );
435
510
  }
436
- if (expected.teamId !== void 0 && receipt.teamId !== IdSchema2.parse(expected.teamId)) {
511
+ if (expected.teamId !== void 0 && receipt.teamId !== IdSchema3.parse(expected.teamId)) {
437
512
  throw new OpenPondProtocolError(
438
513
  "execution_receipt_team_mismatch",
439
514
  "The execution receipt belongs to a different team."
440
515
  );
441
516
  }
442
- if (expected.jobId !== void 0 && receipt.jobId !== IdSchema2.parse(expected.jobId)) {
517
+ if (expected.jobId !== void 0 && receipt.jobId !== IdSchema3.parse(expected.jobId)) {
443
518
  throw new OpenPondProtocolError(
444
519
  "execution_receipt_job_mismatch",
445
520
  "The execution receipt belongs to a different Training Job."
@@ -453,18 +528,18 @@ async function parseAndVerifyTrainingExecutionReceipt(value, expected) {
453
528
  }
454
529
  return receipt;
455
530
  }
456
- var TrainingJobOutputsSchema = z4.object({
457
- schemaVersion: z4.literal("openpond.trainingJobOutputs.v2"),
458
- outputs: z4.array(TrainingJobOutputSchema).max(1e4),
531
+ var TrainingJobOutputsSchema = z5.object({
532
+ schemaVersion: z5.literal("openpond.trainingJobOutputs.v2"),
533
+ outputs: z5.array(TrainingJobOutputSchema).max(1e4),
459
534
  receipt: TrainingExecutionReceiptSchema.nullable()
460
535
  }).strict();
461
- var TrainingApiErrorSchema = z4.object({
462
- schemaVersion: z4.literal("openpond.trainingApiError.v2"),
463
- code: z4.string().trim().min(1).max(200),
464
- message: z4.string().trim().min(1).max(5e3),
465
- retryable: z4.boolean().default(false),
466
- requestId: z4.string().trim().min(1).max(500).nullable().default(null),
467
- details: z4.record(z4.string(), z4.unknown()).default({})
536
+ var TrainingApiErrorSchema = z5.object({
537
+ schemaVersion: z5.literal("openpond.trainingApiError.v2"),
538
+ code: z5.string().trim().min(1).max(200),
539
+ message: z5.string().trim().min(1).max(5e3),
540
+ retryable: z5.boolean().default(false),
541
+ requestId: z5.string().trim().min(1).max(500).nullable().default(null),
542
+ details: z5.record(z5.string(), z5.unknown()).default({})
468
543
  }).strict();
469
544
  var OpenPondTrainingApiError = class extends Error {
470
545
  status;
@@ -482,23 +557,23 @@ var OpenPondTrainingApiError = class extends Error {
482
557
  this.details = error.details;
483
558
  }
484
559
  };
485
- var TrainingCapabilitiesSchema = z4.object({
486
- schemaVersion: z4.literal("openpond.trainingCapabilities.v2"),
487
- capabilityHash: HashSchema2,
488
- jobKinds: z4.array(TrainingJobKindSchema),
489
- methods: z4.array(z4.string().trim().min(1).max(200)),
490
- placements: z4.array(
491
- z4.enum(["local", "remote", "colocated", "provider_native"])
560
+ var TrainingCapabilitiesSchema = z5.object({
561
+ schemaVersion: z5.literal("openpond.trainingCapabilities.v2"),
562
+ capabilityHash: HashSchema3,
563
+ jobKinds: z5.array(TrainingJobKindSchema),
564
+ methods: z5.array(z5.string().trim().min(1).max(200)),
565
+ placements: z5.array(
566
+ z5.enum(["local", "remote", "colocated", "provider_native"])
492
567
  ),
493
- controls: z4.object({
494
- cancel: z4.boolean(),
495
- stopAfterGroup: z4.boolean(),
496
- resumeFromCheckpoint: z4.boolean()
568
+ controls: z5.object({
569
+ cancel: z5.boolean(),
570
+ stopAfterGroup: z5.boolean(),
571
+ resumeFromCheckpoint: z5.boolean()
497
572
  }).strict(),
498
- limits: z4.object({
499
- maximumSpendUsd: z4.number().nonnegative(),
500
- maximumWallSeconds: z4.number().int().positive(),
501
- maximumArtifactBytes: z4.number().int().positive()
573
+ limits: z5.object({
574
+ maximumSpendUsd: z5.number().nonnegative(),
575
+ maximumWallSeconds: z5.number().int().positive(),
576
+ maximumArtifactBytes: z5.number().int().positive()
502
577
  }).strict(),
503
578
  checkedAt: TimestampSchema,
504
579
  expiresAt: TimestampSchema
@@ -554,6 +629,7 @@ function createTrainingClient(input) {
554
629
  );
555
630
  }
556
631
  return {
632
+ ...createTrainingCandidateDecisionClient(request),
557
633
  async capabilities() {
558
634
  return TrainingCapabilitiesSchema.parse(
559
635
  unwrapObject(await request("/v1/training/capabilities"), "capabilities")
@@ -586,15 +662,15 @@ function createTrainingClient(input) {
586
662
  async listJobs(options = {}) {
587
663
  const parameters = new URLSearchParams();
588
664
  if (options.modelProjectId) {
589
- parameters.set("modelProjectId", IdSchema2.parse(options.modelProjectId));
665
+ parameters.set("modelProjectId", IdSchema3.parse(options.modelProjectId));
590
666
  }
591
667
  if (options.cursor) {
592
- parameters.set("cursor", z4.string().trim().min(1).max(2e3).parse(options.cursor));
668
+ parameters.set("cursor", z5.string().trim().min(1).max(2e3).parse(options.cursor));
593
669
  }
594
670
  if (options.limit !== void 0) {
595
671
  parameters.set(
596
672
  "limit",
597
- String(z4.number().int().min(1).max(1e3).parse(options.limit))
673
+ String(z5.number().int().min(1).max(1e3).parse(options.limit))
598
674
  );
599
675
  }
600
676
  const query = parameters.size > 0 ? `?${parameters.toString()}` : "";
@@ -605,7 +681,7 @@ function createTrainingClient(input) {
605
681
  async getJob(jobId) {
606
682
  return TrainingJobSchema.parse(
607
683
  unwrapObject(
608
- await request(`/v1/training/jobs/${encodeURIComponent(IdSchema2.parse(jobId))}`),
684
+ await request(`/v1/training/jobs/${encodeURIComponent(IdSchema3.parse(jobId))}`),
609
685
  "job"
610
686
  )
611
687
  );
@@ -615,7 +691,7 @@ function createTrainingClient(input) {
615
691
  return TrainingJobSchema.parse(
616
692
  unwrapObject(
617
693
  await request(
618
- `/v1/training/jobs/${encodeURIComponent(IdSchema2.parse(jobId))}/cancel`,
694
+ `/v1/training/jobs/${encodeURIComponent(IdSchema3.parse(jobId))}/cancel`,
619
695
  { method: "POST", body: JSON.stringify(control) }
620
696
  ),
621
697
  "job"
@@ -627,7 +703,7 @@ function createTrainingClient(input) {
627
703
  return TrainingJobSchema.parse(
628
704
  unwrapObject(
629
705
  await request(
630
- `/v1/training/jobs/${encodeURIComponent(IdSchema2.parse(jobId))}/stop-after-group`,
706
+ `/v1/training/jobs/${encodeURIComponent(IdSchema3.parse(jobId))}/stop-after-group`,
631
707
  { method: "POST", body: JSON.stringify(control) }
632
708
  ),
633
709
  "job"
@@ -635,10 +711,10 @@ function createTrainingClient(input) {
635
711
  );
636
712
  },
637
713
  async events(jobId) {
638
- return z4.array(TrainingJobEventSchema).parse(
714
+ return z5.array(TrainingJobEventSchema).parse(
639
715
  unwrapObject(
640
716
  await request(
641
- `/v1/training/jobs/${encodeURIComponent(IdSchema2.parse(jobId))}/events`
717
+ `/v1/training/jobs/${encodeURIComponent(IdSchema3.parse(jobId))}/events`
642
718
  ),
643
719
  "events"
644
720
  )
@@ -647,18 +723,18 @@ function createTrainingClient(input) {
647
723
  async outputs(jobId) {
648
724
  return TrainingJobOutputsSchema.parse(
649
725
  await request(
650
- `/v1/training/jobs/${encodeURIComponent(IdSchema2.parse(jobId))}/outputs`
726
+ `/v1/training/jobs/${encodeURIComponent(IdSchema3.parse(jobId))}/outputs`
651
727
  )
652
728
  );
653
729
  },
654
730
  async evaluationTasks(jobId, evaluation, options = {}) {
655
- const id = IdSchema2.parse(jobId);
731
+ const id = IdSchema3.parse(jobId);
656
732
  const reference = ModelProjectImmutableRefSchema.parse(evaluation);
657
733
  const parameters = new URLSearchParams();
658
- const cursor = options.cursor === void 0 ? void 0 : z4.string().regex(/^[1-9]\d*$/).parse(options.cursor);
659
- const offset = cursor === void 0 ? 0 : z4.number().int().min(1).max(9999).parse(Number(cursor));
734
+ const cursor = options.cursor === void 0 ? void 0 : z5.string().regex(/^[1-9]\d*$/).parse(options.cursor);
735
+ const offset = cursor === void 0 ? 0 : z5.number().int().min(1).max(9999).parse(Number(cursor));
660
736
  if (cursor !== void 0) parameters.set("cursor", cursor);
661
- if (options.limit !== void 0) parameters.set("limit", String(z4.number().int().min(1).max(100).parse(options.limit)));
737
+ if (options.limit !== void 0) parameters.set("limit", String(z5.number().int().min(1).max(100).parse(options.limit)));
662
738
  const query = parameters.size ? `?${parameters.toString()}` : "";
663
739
  return parseAndVerifyTrainingEvaluationTaskPage(
664
740
  await request(`/v1/training/jobs/${encodeURIComponent(id)}/evaluations/${encodeURIComponent(reference.id)}/tasks${query}`),
@@ -666,10 +742,10 @@ function createTrainingClient(input) {
666
742
  );
667
743
  },
668
744
  async logs(jobId) {
669
- return z4.array(TrainingJobLogSchema).max(1e5).parse(
745
+ return z5.array(TrainingJobLogSchema).max(1e5).parse(
670
746
  unwrapObject(
671
747
  await request(
672
- `/v1/training/jobs/${encodeURIComponent(IdSchema2.parse(jobId))}/logs`
748
+ `/v1/training/jobs/${encodeURIComponent(IdSchema3.parse(jobId))}/logs`
673
749
  ),
674
750
  "logs"
675
751
  )
@@ -703,6 +779,10 @@ function trainingApiError(value, status) {
703
779
  }
704
780
 
705
781
  export {
782
+ TrainingCandidateDecisionRequestSchema,
783
+ TrainingCandidateDecisionSchema,
784
+ trainingCandidateDecisionHash,
785
+ parseAndVerifyTrainingCandidateDecision,
706
786
  TrainingEvaluationTaskResultSchema,
707
787
  TrainingEvaluationTaskPageSchema,
708
788
  trainingEvaluationTaskPageHash,
@@ -742,4 +822,4 @@ export {
742
822
  TrainingCapabilitiesSchema,
743
823
  createTrainingClient
744
824
  };
745
- //# sourceMappingURL=chunk-36A46YZX.js.map
825
+ //# sourceMappingURL=chunk-F5JBFRAH.js.map