openpond-sdk 0.5.3 → 0.5.4
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/README.md +10 -0
- package/dist/{chunk-OJERFIEJ.js → chunk-36A46YZX.js} +273 -189
- package/dist/chunk-36A46YZX.js.map +7 -0
- package/dist/taskset-drafts.js +1 -1
- package/dist/taskset-packages.js +1 -1
- package/dist/training.js +9 -1
- package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts +1 -1
- package/dist/types/packages/sdk/src/taskset-authored-files.d.ts +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts +2 -2
- package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +5 -5
- package/dist/types/packages/sdk/src/taskset-draft-core.d.ts +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-document.d.ts +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-source.d.ts +2 -2
- package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts +2 -2
- package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +1 -1
- package/dist/types/packages/sdk/src/training-evaluation-results.d.ts +80 -0
- package/dist/types/packages/sdk/src/training-evaluation-results.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training.d.ts +44 -0
- package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-OJERFIEJ.js.map +0 -7
|
@@ -14,15 +14,81 @@ import {
|
|
|
14
14
|
} from "./chunk-ZNFOVV7B.js";
|
|
15
15
|
|
|
16
16
|
// src/training.ts
|
|
17
|
-
import { z as
|
|
17
|
+
import { z as z4 } from "zod";
|
|
18
18
|
|
|
19
|
-
// src/training-
|
|
19
|
+
// src/training-evaluation-results.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())
|
|
30
|
+
}).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
|
|
37
|
+
}).strict()
|
|
38
|
+
}).strict();
|
|
39
|
+
var TrainingEvaluationTaskPageSchema = z.object({
|
|
40
|
+
schemaVersion: z.literal("openpond.trainingEvaluationTaskPage.v1"),
|
|
41
|
+
jobId: IdSchema,
|
|
42
|
+
teamId: IdSchema,
|
|
43
|
+
evaluation: ModelProjectImmutableRefSchema,
|
|
44
|
+
kind: z.enum(["baseline", "candidate"]),
|
|
45
|
+
policyVersion: z.number().int().nonnegative(),
|
|
46
|
+
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
|
|
53
|
+
}).strict().superRefine((page, context) => {
|
|
54
|
+
const end = page.offset + page.tasks.length;
|
|
55
|
+
const expectedCursor = end < page.total ? String(end) : null;
|
|
56
|
+
if (end > page.total || page.nextCursor !== expectedCursor) {
|
|
57
|
+
context.addIssue({ code: "custom", path: ["nextCursor"], message: "Evaluation pagination must cover consecutive task positions." });
|
|
58
|
+
}
|
|
59
|
+
if (new Set(page.tasks.map((task) => task.taskId)).size !== page.tasks.length) {
|
|
60
|
+
context.addIssue({ code: "custom", path: ["tasks"], message: "Evaluation task identities must be unique." });
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
async function trainingEvaluationTaskPageHash(value) {
|
|
64
|
+
const { contentHash: _contentHash, ...content } = value;
|
|
65
|
+
return canonicalSha256(content);
|
|
66
|
+
}
|
|
67
|
+
async function parseAndVerifyTrainingEvaluationTaskPage(value, expected) {
|
|
68
|
+
assertCanonicalPayloadSize(value, TRAINING_API_RESPONSE_MAX_BYTES, "Training evaluation task page");
|
|
69
|
+
const page = TrainingEvaluationTaskPageSchema.parse(value);
|
|
70
|
+
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)) {
|
|
72
|
+
throw new OpenPondProtocolError("evaluation_page_identity_mismatch", "Evaluation results differ from the requested Job, evaluation, or page.");
|
|
73
|
+
}
|
|
74
|
+
if (await trainingEvaluationTaskPageHash(page) !== page.contentHash) {
|
|
75
|
+
throw new OpenPondProtocolError("evaluation_page_hash_mismatch", "Evaluation task page content hash did not match.");
|
|
76
|
+
}
|
|
77
|
+
for (const task of page.tasks) {
|
|
78
|
+
if (await canonicalSha256(task.output) !== task.outputSha256) {
|
|
79
|
+
throw new OpenPondProtocolError("evaluation_output_hash_mismatch", "A retained evaluation output hash did not match.");
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return page;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// src/training-grading-plan.ts
|
|
86
|
+
import { z as z2 } from "zod";
|
|
21
87
|
import { compileBoundGraders, RewardBindingSchema, RewardReleaseSchema } from "@openpond/evals/rewards";
|
|
22
|
-
var GradersSchema =
|
|
23
|
-
var RewardExecutionSchema =
|
|
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({
|
|
24
90
|
binding: RewardBindingSchema,
|
|
25
|
-
rewards:
|
|
91
|
+
rewards: z2.array(RewardReleaseSchema).min(1).max(100)
|
|
26
92
|
}).strict();
|
|
27
93
|
async function deterministicTrainingRewardSource(input) {
|
|
28
94
|
const execution = input.rewardExecution ? RewardExecutionSchema.parse(input.rewardExecution) : null;
|
|
@@ -39,23 +105,23 @@ async function deterministicTrainingRewardSource(input) {
|
|
|
39
105
|
}
|
|
40
106
|
|
|
41
107
|
// src/training-evaluation-source.ts
|
|
42
|
-
import { z as
|
|
108
|
+
import { z as z3 } from "zod";
|
|
43
109
|
var TRAINING_EVALUATION_SOURCE_PATH = "evaluation-source.json";
|
|
44
|
-
var TaskIdentitySchema =
|
|
45
|
-
id:
|
|
46
|
-
clusterKey:
|
|
47
|
-
split:
|
|
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"])
|
|
48
114
|
}).passthrough();
|
|
49
|
-
var TrainingEvaluationSourceSchema =
|
|
50
|
-
schemaVersion:
|
|
115
|
+
var TrainingEvaluationSourceSchema = z3.object({
|
|
116
|
+
schemaVersion: z3.literal("openpond.trainingEvaluationSource.v1"),
|
|
51
117
|
taskset: ModelProjectVersionedRefSchema,
|
|
52
|
-
tasks:
|
|
53
|
-
assets:
|
|
54
|
-
path:
|
|
55
|
-
sha256:
|
|
56
|
-
sizeBytes:
|
|
57
|
-
encoding:
|
|
58
|
-
content:
|
|
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)
|
|
59
125
|
}).strict()).max(1e4)
|
|
60
126
|
}).strict().superRefine((source, context) => {
|
|
61
127
|
const ids = /* @__PURE__ */ new Set();
|
|
@@ -66,8 +132,8 @@ var TrainingEvaluationSourceSchema = z2.object({
|
|
|
66
132
|
});
|
|
67
133
|
});
|
|
68
134
|
function assertTrainingEvaluationIsolation(trainingTasks, evaluationTasks) {
|
|
69
|
-
const training =
|
|
70
|
-
const evaluation =
|
|
135
|
+
const training = z3.array(TaskIdentitySchema).min(1).max(1e4).parse(trainingTasks);
|
|
136
|
+
const evaluation = z3.array(TaskIdentitySchema).min(1).max(1e4).parse(evaluationTasks);
|
|
71
137
|
const trainIds = /* @__PURE__ */ new Set();
|
|
72
138
|
const trainFamilies = /* @__PURE__ */ new Set();
|
|
73
139
|
for (const task of training) {
|
|
@@ -93,24 +159,24 @@ async function trainingEvaluationSourceRef(input) {
|
|
|
93
159
|
}
|
|
94
160
|
|
|
95
161
|
// src/training.ts
|
|
96
|
-
var
|
|
97
|
-
var
|
|
98
|
-
var TimestampSchema =
|
|
99
|
-
var TrainingInputArtifactUploadSchema =
|
|
100
|
-
schemaVersion:
|
|
101
|
-
kind:
|
|
102
|
-
idempotencyKey:
|
|
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),
|
|
103
169
|
sourceManifest: ModelProjectImmutableRefSchema,
|
|
104
|
-
payload:
|
|
105
|
-
contentHash:
|
|
170
|
+
payload: z4.unknown(),
|
|
171
|
+
contentHash: HashSchema2
|
|
106
172
|
}).strict();
|
|
107
|
-
var TrainingInputArtifactSchema =
|
|
108
|
-
schemaVersion:
|
|
109
|
-
kind:
|
|
173
|
+
var TrainingInputArtifactSchema = z4.object({
|
|
174
|
+
schemaVersion: z4.literal("openpond.trainingInputArtifact.v2"),
|
|
175
|
+
kind: z4.enum(["portable_training_bundle", "reward_model_dataset"]),
|
|
110
176
|
sourceManifest: ModelProjectImmutableRefSchema,
|
|
111
|
-
artifactRef:
|
|
112
|
-
contentHash:
|
|
113
|
-
sizeBytes:
|
|
177
|
+
artifactRef: z4.string().trim().min(1).max(2e3),
|
|
178
|
+
contentHash: HashSchema2,
|
|
179
|
+
sizeBytes: z4.number().int().positive(),
|
|
114
180
|
createdAt: TimestampSchema
|
|
115
181
|
}).strict();
|
|
116
182
|
async function trainingInputArtifactUploadHash(upload) {
|
|
@@ -133,11 +199,11 @@ async function parseAndVerifyTrainingInputArtifactUpload(value) {
|
|
|
133
199
|
}
|
|
134
200
|
return parsed;
|
|
135
201
|
}
|
|
136
|
-
var TrainingJobKindSchema =
|
|
202
|
+
var TrainingJobKindSchema = z4.enum([
|
|
137
203
|
"reward_model_train",
|
|
138
204
|
"policy_optimize"
|
|
139
205
|
]);
|
|
140
|
-
var TrainingJobStateSchema =
|
|
206
|
+
var TrainingJobStateSchema = z4.enum([
|
|
141
207
|
"queued",
|
|
142
208
|
"admitting",
|
|
143
209
|
"provisioning",
|
|
@@ -148,94 +214,94 @@ var TrainingJobStateSchema = z3.enum([
|
|
|
148
214
|
"failed",
|
|
149
215
|
"cancelled"
|
|
150
216
|
]);
|
|
151
|
-
var TrainingCapabilityRequirementSchema =
|
|
152
|
-
id:
|
|
153
|
-
version:
|
|
154
|
-
required:
|
|
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)
|
|
155
221
|
}).strict();
|
|
156
|
-
var TrainingJobSourceSchema =
|
|
157
|
-
modelProject:
|
|
158
|
-
id:
|
|
159
|
-
portableProjectId:
|
|
160
|
-
revision:
|
|
161
|
-
contentHash:
|
|
222
|
+
var TrainingJobSourceSchema = z4.object({
|
|
223
|
+
modelProject: z4.object({
|
|
224
|
+
id: IdSchema2,
|
|
225
|
+
portableProjectId: IdSchema2,
|
|
226
|
+
revision: z4.number().int().positive(),
|
|
227
|
+
contentHash: HashSchema2
|
|
162
228
|
}).strict(),
|
|
163
229
|
harnessRunManifest: ModelProjectImmutableRefSchema,
|
|
164
230
|
harnessRelease: ModelProjectImmutableRefSchema,
|
|
165
231
|
taskset: ModelProjectVersionedRefSchema,
|
|
166
232
|
tasksetRelease: ModelProjectImmutableRefSchema,
|
|
167
|
-
evaluation:
|
|
233
|
+
evaluation: z4.object({
|
|
168
234
|
taskset: ModelProjectVersionedRefSchema,
|
|
169
235
|
dataset: ModelProjectImmutableRefSchema
|
|
170
236
|
}).strict().nullable().optional(),
|
|
171
237
|
dataset: ModelProjectImmutableRefSchema,
|
|
172
|
-
evidenceSets:
|
|
238
|
+
evidenceSets: z4.array(ModelProjectImmutableRefSchema).max(1e4)
|
|
173
239
|
}).strict();
|
|
174
|
-
var RewardModelTrainingRequestSchema =
|
|
175
|
-
kind:
|
|
240
|
+
var RewardModelTrainingRequestSchema = z4.object({
|
|
241
|
+
kind: z4.literal("reward_model_train"),
|
|
176
242
|
baseModel: ModelProjectBaseModelSchema,
|
|
177
243
|
preferenceDatasetRelease: ModelProjectImmutableRefSchema,
|
|
178
244
|
processorRelease: ModelProjectImmutableRefSchema,
|
|
179
|
-
recipe:
|
|
180
|
-
schemaVersion:
|
|
181
|
-
method:
|
|
182
|
-
parameterization:
|
|
183
|
-
}).catchall(
|
|
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())
|
|
184
250
|
}).strict();
|
|
185
|
-
var DeterministicRewardSourceSchema =
|
|
186
|
-
kind:
|
|
251
|
+
var DeterministicRewardSourceSchema = z4.object({
|
|
252
|
+
kind: z4.literal("deterministic"),
|
|
187
253
|
grader: ModelProjectImmutableRefSchema,
|
|
188
254
|
composer: ModelProjectImmutableRefSchema.nullable().default(null)
|
|
189
255
|
}).strict();
|
|
190
|
-
var LearnedRewardSourceSchema =
|
|
191
|
-
kind:
|
|
256
|
+
var LearnedRewardSourceSchema = z4.object({
|
|
257
|
+
kind: z4.literal("learned_reward"),
|
|
192
258
|
rewardModelVersion: ModelProjectImmutableRefSchema,
|
|
193
259
|
qualificationReport: ModelProjectImmutableRefSchema.nullable().default(null),
|
|
194
|
-
evaluationReferences:
|
|
195
|
-
scorerArtifact:
|
|
196
|
-
artifactRef:
|
|
197
|
-
contentHash:
|
|
260
|
+
evaluationReferences: z4.array(ModelProjectImmutableRefSchema).max(1e3).default([]),
|
|
261
|
+
scorerArtifact: z4.object({
|
|
262
|
+
artifactRef: z4.string().trim().min(1).max(2e3),
|
|
263
|
+
contentHash: HashSchema2,
|
|
198
264
|
executionReceipt: ModelProjectImmutableRefSchema
|
|
199
265
|
}).strict(),
|
|
200
266
|
processorRelease: ModelProjectImmutableRefSchema,
|
|
201
267
|
rewardComposerRelease: ModelProjectImmutableRefSchema
|
|
202
268
|
}).strict();
|
|
203
|
-
var PolicyOptimizationRequestSchema =
|
|
204
|
-
kind:
|
|
269
|
+
var PolicyOptimizationRequestSchema = z4.object({
|
|
270
|
+
kind: z4.literal("policy_optimize"),
|
|
205
271
|
baseModel: ModelProjectBaseModelSchema,
|
|
206
272
|
recipe: ModelProjectRecipeDocumentSchema,
|
|
207
|
-
rewardSource:
|
|
273
|
+
rewardSource: z4.discriminatedUnion("kind", [
|
|
208
274
|
DeterministicRewardSourceSchema,
|
|
209
275
|
LearnedRewardSourceSchema
|
|
210
276
|
]),
|
|
211
277
|
resumeFrom: ModelProjectImmutableRefSchema.nullable().default(null)
|
|
212
278
|
}).strict();
|
|
213
|
-
var TrainingJobRequestSchema =
|
|
279
|
+
var TrainingJobRequestSchema = z4.discriminatedUnion("kind", [
|
|
214
280
|
RewardModelTrainingRequestSchema,
|
|
215
281
|
PolicyOptimizationRequestSchema
|
|
216
282
|
]);
|
|
217
|
-
var TrainingJobApprovalSchema =
|
|
218
|
-
approvalHash:
|
|
283
|
+
var TrainingJobApprovalSchema = z4.object({
|
|
284
|
+
approvalHash: HashSchema2,
|
|
219
285
|
approvedAt: TimestampSchema,
|
|
220
|
-
exportApproved:
|
|
221
|
-
maximumSpendUsd:
|
|
222
|
-
retentionDays:
|
|
223
|
-
region:
|
|
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)
|
|
224
290
|
}).strict();
|
|
225
|
-
var TrainingJobSubmissionSchema =
|
|
226
|
-
schemaVersion:
|
|
227
|
-
idempotencyKey:
|
|
228
|
-
name:
|
|
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),
|
|
229
295
|
source: TrainingJobSourceSchema,
|
|
230
296
|
job: TrainingJobRequestSchema,
|
|
231
|
-
requestedCapabilities:
|
|
232
|
-
placementObjective:
|
|
233
|
-
budget:
|
|
234
|
-
maximumSpendUsd:
|
|
235
|
-
maximumWallSeconds:
|
|
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()
|
|
236
302
|
}).strict(),
|
|
237
303
|
approval: TrainingJobApprovalSchema,
|
|
238
|
-
contentHash:
|
|
304
|
+
contentHash: HashSchema2
|
|
239
305
|
}).strict().superRefine((submission, context) => {
|
|
240
306
|
if (submission.approval.maximumSpendUsd !== submission.budget.maximumSpendUsd) {
|
|
241
307
|
context.addIssue({
|
|
@@ -265,61 +331,61 @@ async function parseAndVerifyTrainingJobSubmission(value) {
|
|
|
265
331
|
}
|
|
266
332
|
return parsed;
|
|
267
333
|
}
|
|
268
|
-
var TrainingJobSchema =
|
|
269
|
-
schemaVersion:
|
|
270
|
-
id:
|
|
271
|
-
teamId:
|
|
334
|
+
var TrainingJobSchema = z4.object({
|
|
335
|
+
schemaVersion: z4.literal("openpond.trainingJob.v2"),
|
|
336
|
+
id: IdSchema2,
|
|
337
|
+
teamId: IdSchema2,
|
|
272
338
|
kind: TrainingJobKindSchema,
|
|
273
|
-
modelProjectId:
|
|
274
|
-
portableProjectId:
|
|
275
|
-
sourceProjectRevision:
|
|
276
|
-
submissionHash:
|
|
339
|
+
modelProjectId: IdSchema2,
|
|
340
|
+
portableProjectId: IdSchema2,
|
|
341
|
+
sourceProjectRevision: z4.number().int().positive(),
|
|
342
|
+
submissionHash: HashSchema2,
|
|
277
343
|
state: TrainingJobStateSchema,
|
|
278
|
-
phase:
|
|
279
|
-
version:
|
|
280
|
-
progress:
|
|
281
|
-
rolloutProgress:
|
|
282
|
-
groupsCompleted:
|
|
283
|
-
groupsTarget:
|
|
284
|
-
optimizerUpdatesApplied:
|
|
285
|
-
optimizerUpdatesSkipped:
|
|
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()
|
|
286
352
|
}).strict(),
|
|
287
|
-
accruedSpendUsd:
|
|
288
|
-
terminalReason:
|
|
353
|
+
accruedSpendUsd: z4.number().nonnegative(),
|
|
354
|
+
terminalReason: z4.string().trim().min(1).max(5e3).nullable(),
|
|
289
355
|
createdAt: TimestampSchema,
|
|
290
356
|
updatedAt: TimestampSchema,
|
|
291
357
|
completedAt: TimestampSchema.nullable()
|
|
292
358
|
}).strict();
|
|
293
|
-
var TrainingJobPageSchema =
|
|
294
|
-
schemaVersion:
|
|
295
|
-
jobs:
|
|
296
|
-
nextCursor:
|
|
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()
|
|
297
363
|
}).strict();
|
|
298
|
-
var TrainingJobEventSchema =
|
|
299
|
-
schemaVersion:
|
|
300
|
-
id:
|
|
301
|
-
jobId:
|
|
302
|
-
sequence:
|
|
303
|
-
type:
|
|
304
|
-
phase:
|
|
305
|
-
message:
|
|
306
|
-
data:
|
|
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({}),
|
|
307
373
|
createdAt: TimestampSchema
|
|
308
374
|
}).strict();
|
|
309
|
-
var TrainingJobLogSchema =
|
|
310
|
-
schemaVersion:
|
|
311
|
-
jobId:
|
|
312
|
-
sequence:
|
|
313
|
-
level:
|
|
314
|
-
message:
|
|
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),
|
|
315
381
|
createdAt: TimestampSchema
|
|
316
382
|
}).strict();
|
|
317
|
-
var TrainingJobControlRequestSchema =
|
|
318
|
-
var TrainingJobOutputSchema =
|
|
319
|
-
schemaVersion:
|
|
320
|
-
id:
|
|
321
|
-
jobId:
|
|
322
|
-
kind:
|
|
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([
|
|
323
389
|
"checkpoint",
|
|
324
390
|
"adapter",
|
|
325
391
|
"scorer",
|
|
@@ -328,38 +394,38 @@ var TrainingJobOutputSchema = z3.object({
|
|
|
328
394
|
"trace",
|
|
329
395
|
"receipt"
|
|
330
396
|
]),
|
|
331
|
-
artifactRef:
|
|
332
|
-
contentHash:
|
|
333
|
-
sizeBytes:
|
|
334
|
-
metadata:
|
|
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({}),
|
|
335
401
|
createdAt: TimestampSchema
|
|
336
402
|
}).strict();
|
|
337
|
-
var TrainingExecutionReceiptSchema =
|
|
338
|
-
schemaVersion:
|
|
339
|
-
id:
|
|
340
|
-
teamId:
|
|
341
|
-
jobId:
|
|
342
|
-
submissionHash:
|
|
343
|
-
manifestHash:
|
|
344
|
-
recipeHash:
|
|
345
|
-
capabilityHash:
|
|
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,
|
|
346
412
|
runtimeRelease: ModelProjectImmutableRefSchema,
|
|
347
|
-
inputs:
|
|
348
|
-
outputs:
|
|
349
|
-
spendUsd:
|
|
350
|
-
durationSeconds:
|
|
351
|
-
cleanupComplete:
|
|
352
|
-
issuer:
|
|
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,
|
|
353
419
|
issuedAt: TimestampSchema,
|
|
354
|
-
signature:
|
|
420
|
+
signature: z4.string().trim().min(1).max(1e4).nullable()
|
|
355
421
|
}).strict();
|
|
356
422
|
async function trainingExecutionReceiptHash(receipt) {
|
|
357
423
|
return canonicalSha256(TrainingExecutionReceiptSchema.parse(receipt));
|
|
358
424
|
}
|
|
359
425
|
async function parseAndVerifyTrainingExecutionReceipt(value, expected) {
|
|
360
426
|
const receipt = TrainingExecutionReceiptSchema.parse(value);
|
|
361
|
-
const expectedId =
|
|
362
|
-
const expectedHash =
|
|
427
|
+
const expectedId = IdSchema2.parse(expected.id);
|
|
428
|
+
const expectedHash = HashSchema2.parse(expected.contentHash);
|
|
363
429
|
const actualHash = await trainingExecutionReceiptHash(receipt);
|
|
364
430
|
if (receipt.id !== expectedId || actualHash !== expectedHash) {
|
|
365
431
|
throw new OpenPondProtocolError(
|
|
@@ -367,13 +433,13 @@ async function parseAndVerifyTrainingExecutionReceipt(value, expected) {
|
|
|
367
433
|
"The execution receipt identity or canonical content hash did not match."
|
|
368
434
|
);
|
|
369
435
|
}
|
|
370
|
-
if (expected.teamId !== void 0 && receipt.teamId !==
|
|
436
|
+
if (expected.teamId !== void 0 && receipt.teamId !== IdSchema2.parse(expected.teamId)) {
|
|
371
437
|
throw new OpenPondProtocolError(
|
|
372
438
|
"execution_receipt_team_mismatch",
|
|
373
439
|
"The execution receipt belongs to a different team."
|
|
374
440
|
);
|
|
375
441
|
}
|
|
376
|
-
if (expected.jobId !== void 0 && receipt.jobId !==
|
|
442
|
+
if (expected.jobId !== void 0 && receipt.jobId !== IdSchema2.parse(expected.jobId)) {
|
|
377
443
|
throw new OpenPondProtocolError(
|
|
378
444
|
"execution_receipt_job_mismatch",
|
|
379
445
|
"The execution receipt belongs to a different Training Job."
|
|
@@ -387,18 +453,18 @@ async function parseAndVerifyTrainingExecutionReceipt(value, expected) {
|
|
|
387
453
|
}
|
|
388
454
|
return receipt;
|
|
389
455
|
}
|
|
390
|
-
var TrainingJobOutputsSchema =
|
|
391
|
-
schemaVersion:
|
|
392
|
-
outputs:
|
|
456
|
+
var TrainingJobOutputsSchema = z4.object({
|
|
457
|
+
schemaVersion: z4.literal("openpond.trainingJobOutputs.v2"),
|
|
458
|
+
outputs: z4.array(TrainingJobOutputSchema).max(1e4),
|
|
393
459
|
receipt: TrainingExecutionReceiptSchema.nullable()
|
|
394
460
|
}).strict();
|
|
395
|
-
var TrainingApiErrorSchema =
|
|
396
|
-
schemaVersion:
|
|
397
|
-
code:
|
|
398
|
-
message:
|
|
399
|
-
retryable:
|
|
400
|
-
requestId:
|
|
401
|
-
details:
|
|
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({})
|
|
402
468
|
}).strict();
|
|
403
469
|
var OpenPondTrainingApiError = class extends Error {
|
|
404
470
|
status;
|
|
@@ -416,23 +482,23 @@ var OpenPondTrainingApiError = class extends Error {
|
|
|
416
482
|
this.details = error.details;
|
|
417
483
|
}
|
|
418
484
|
};
|
|
419
|
-
var TrainingCapabilitiesSchema =
|
|
420
|
-
schemaVersion:
|
|
421
|
-
capabilityHash:
|
|
422
|
-
jobKinds:
|
|
423
|
-
methods:
|
|
424
|
-
placements:
|
|
425
|
-
|
|
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"])
|
|
426
492
|
),
|
|
427
|
-
controls:
|
|
428
|
-
cancel:
|
|
429
|
-
stopAfterGroup:
|
|
430
|
-
resumeFromCheckpoint:
|
|
493
|
+
controls: z4.object({
|
|
494
|
+
cancel: z4.boolean(),
|
|
495
|
+
stopAfterGroup: z4.boolean(),
|
|
496
|
+
resumeFromCheckpoint: z4.boolean()
|
|
431
497
|
}).strict(),
|
|
432
|
-
limits:
|
|
433
|
-
maximumSpendUsd:
|
|
434
|
-
maximumWallSeconds:
|
|
435
|
-
maximumArtifactBytes:
|
|
498
|
+
limits: z4.object({
|
|
499
|
+
maximumSpendUsd: z4.number().nonnegative(),
|
|
500
|
+
maximumWallSeconds: z4.number().int().positive(),
|
|
501
|
+
maximumArtifactBytes: z4.number().int().positive()
|
|
436
502
|
}).strict(),
|
|
437
503
|
checkedAt: TimestampSchema,
|
|
438
504
|
expiresAt: TimestampSchema
|
|
@@ -520,15 +586,15 @@ function createTrainingClient(input) {
|
|
|
520
586
|
async listJobs(options = {}) {
|
|
521
587
|
const parameters = new URLSearchParams();
|
|
522
588
|
if (options.modelProjectId) {
|
|
523
|
-
parameters.set("modelProjectId",
|
|
589
|
+
parameters.set("modelProjectId", IdSchema2.parse(options.modelProjectId));
|
|
524
590
|
}
|
|
525
591
|
if (options.cursor) {
|
|
526
|
-
parameters.set("cursor",
|
|
592
|
+
parameters.set("cursor", z4.string().trim().min(1).max(2e3).parse(options.cursor));
|
|
527
593
|
}
|
|
528
594
|
if (options.limit !== void 0) {
|
|
529
595
|
parameters.set(
|
|
530
596
|
"limit",
|
|
531
|
-
String(
|
|
597
|
+
String(z4.number().int().min(1).max(1e3).parse(options.limit))
|
|
532
598
|
);
|
|
533
599
|
}
|
|
534
600
|
const query = parameters.size > 0 ? `?${parameters.toString()}` : "";
|
|
@@ -539,7 +605,7 @@ function createTrainingClient(input) {
|
|
|
539
605
|
async getJob(jobId) {
|
|
540
606
|
return TrainingJobSchema.parse(
|
|
541
607
|
unwrapObject(
|
|
542
|
-
await request(`/v1/training/jobs/${encodeURIComponent(
|
|
608
|
+
await request(`/v1/training/jobs/${encodeURIComponent(IdSchema2.parse(jobId))}`),
|
|
543
609
|
"job"
|
|
544
610
|
)
|
|
545
611
|
);
|
|
@@ -549,7 +615,7 @@ function createTrainingClient(input) {
|
|
|
549
615
|
return TrainingJobSchema.parse(
|
|
550
616
|
unwrapObject(
|
|
551
617
|
await request(
|
|
552
|
-
`/v1/training/jobs/${encodeURIComponent(
|
|
618
|
+
`/v1/training/jobs/${encodeURIComponent(IdSchema2.parse(jobId))}/cancel`,
|
|
553
619
|
{ method: "POST", body: JSON.stringify(control) }
|
|
554
620
|
),
|
|
555
621
|
"job"
|
|
@@ -561,7 +627,7 @@ function createTrainingClient(input) {
|
|
|
561
627
|
return TrainingJobSchema.parse(
|
|
562
628
|
unwrapObject(
|
|
563
629
|
await request(
|
|
564
|
-
`/v1/training/jobs/${encodeURIComponent(
|
|
630
|
+
`/v1/training/jobs/${encodeURIComponent(IdSchema2.parse(jobId))}/stop-after-group`,
|
|
565
631
|
{ method: "POST", body: JSON.stringify(control) }
|
|
566
632
|
),
|
|
567
633
|
"job"
|
|
@@ -569,10 +635,10 @@ function createTrainingClient(input) {
|
|
|
569
635
|
);
|
|
570
636
|
},
|
|
571
637
|
async events(jobId) {
|
|
572
|
-
return
|
|
638
|
+
return z4.array(TrainingJobEventSchema).parse(
|
|
573
639
|
unwrapObject(
|
|
574
640
|
await request(
|
|
575
|
-
`/v1/training/jobs/${encodeURIComponent(
|
|
641
|
+
`/v1/training/jobs/${encodeURIComponent(IdSchema2.parse(jobId))}/events`
|
|
576
642
|
),
|
|
577
643
|
"events"
|
|
578
644
|
)
|
|
@@ -581,15 +647,29 @@ function createTrainingClient(input) {
|
|
|
581
647
|
async outputs(jobId) {
|
|
582
648
|
return TrainingJobOutputsSchema.parse(
|
|
583
649
|
await request(
|
|
584
|
-
`/v1/training/jobs/${encodeURIComponent(
|
|
650
|
+
`/v1/training/jobs/${encodeURIComponent(IdSchema2.parse(jobId))}/outputs`
|
|
585
651
|
)
|
|
586
652
|
);
|
|
587
653
|
},
|
|
654
|
+
async evaluationTasks(jobId, evaluation, options = {}) {
|
|
655
|
+
const id = IdSchema2.parse(jobId);
|
|
656
|
+
const reference = ModelProjectImmutableRefSchema.parse(evaluation);
|
|
657
|
+
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));
|
|
660
|
+
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)));
|
|
662
|
+
const query = parameters.size ? `?${parameters.toString()}` : "";
|
|
663
|
+
return parseAndVerifyTrainingEvaluationTaskPage(
|
|
664
|
+
await request(`/v1/training/jobs/${encodeURIComponent(id)}/evaluations/${encodeURIComponent(reference.id)}/tasks${query}`),
|
|
665
|
+
{ jobId: id, evaluation: reference, offset }
|
|
666
|
+
);
|
|
667
|
+
},
|
|
588
668
|
async logs(jobId) {
|
|
589
|
-
return
|
|
669
|
+
return z4.array(TrainingJobLogSchema).max(1e5).parse(
|
|
590
670
|
unwrapObject(
|
|
591
671
|
await request(
|
|
592
|
-
`/v1/training/jobs/${encodeURIComponent(
|
|
672
|
+
`/v1/training/jobs/${encodeURIComponent(IdSchema2.parse(jobId))}/logs`
|
|
593
673
|
),
|
|
594
674
|
"logs"
|
|
595
675
|
)
|
|
@@ -623,6 +703,10 @@ function trainingApiError(value, status) {
|
|
|
623
703
|
}
|
|
624
704
|
|
|
625
705
|
export {
|
|
706
|
+
TrainingEvaluationTaskResultSchema,
|
|
707
|
+
TrainingEvaluationTaskPageSchema,
|
|
708
|
+
trainingEvaluationTaskPageHash,
|
|
709
|
+
parseAndVerifyTrainingEvaluationTaskPage,
|
|
626
710
|
deterministicTrainingRewardSource,
|
|
627
711
|
TRAINING_EVALUATION_SOURCE_PATH,
|
|
628
712
|
TrainingEvaluationSourceSchema,
|
|
@@ -658,4 +742,4 @@ export {
|
|
|
658
742
|
TrainingCapabilitiesSchema,
|
|
659
743
|
createTrainingClient
|
|
660
744
|
};
|
|
661
|
-
//# sourceMappingURL=chunk-
|
|
745
|
+
//# sourceMappingURL=chunk-36A46YZX.js.map
|