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.
- package/TRAINING_PROTOCOL.md +38 -0
- package/dist/{chunk-65D4C7HP.js → chunk-4IDTRFW2.js} +2 -2
- package/dist/{chunk-747CMU2Y.js → chunk-6QWV5TEJ.js} +3 -3
- package/dist/{chunk-AVW35YOH.js → chunk-OJERFIEJ.js} +214 -127
- package/dist/chunk-OJERFIEJ.js.map +7 -0
- package/dist/{chunk-6LGGLXAM.js → chunk-PXB6YY36.js} +3 -3
- package/dist/{chunk-EPJM7VEV.js → chunk-SQCACAC7.js} +2 -2
- package/dist/{chunk-5PRP457R.js → chunk-ZNFOVV7B.js} +2 -1
- package/dist/chunk-ZNFOVV7B.js.map +7 -0
- package/dist/model-projects.js +1 -1
- package/dist/model-starter-attempts.js +2 -2
- package/dist/model-starter-catalog.js +3 -3
- package/dist/model-starters.js +3 -3
- package/dist/model-taskset-runs.js +2 -2
- package/dist/taskset-drafts.js +4 -4
- package/dist/taskset-packages.js +4 -4
- package/dist/training.js +12 -2
- package/dist/types/packages/sdk/src/model-projects.d.ts +60 -0
- package/dist/types/packages/sdk/src/model-projects.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +5 -0
- package/dist/types/packages/sdk/src/taskset-draft-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-client.d.ts +15 -0
- package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-evaluation-source.d.ts +41 -0
- package/dist/types/packages/sdk/src/training-evaluation-source.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-grading-plan.d.ts +21 -0
- package/dist/types/packages/sdk/src/training-grading-plan.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training.d.ts +24 -0
- package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
- package/fixtures/training/v2/policy-optimize.valid.json +13 -2
- package/package.json +1 -1
- package/dist/chunk-5PRP457R.js.map +0 -7
- package/dist/chunk-AVW35YOH.js.map +0 -7
- /package/dist/{chunk-65D4C7HP.js.map → chunk-4IDTRFW2.js.map} +0 -0
- /package/dist/{chunk-747CMU2Y.js.map → chunk-6QWV5TEJ.js.map} +0 -0
- /package/dist/{chunk-6LGGLXAM.js.map → chunk-PXB6YY36.js.map} +0 -0
- /package/dist/{chunk-EPJM7VEV.js.map → chunk-SQCACAC7.js.map} +0 -0
package/TRAINING_PROTOCOL.md
CHANGED
|
@@ -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-
|
|
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-
|
|
273
|
+
//# sourceMappingURL=chunk-4IDTRFW2.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ModelStarterExecutionSchema,
|
|
3
3
|
validateModelStarterExecution
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4IDTRFW2.js";
|
|
5
5
|
import {
|
|
6
6
|
ModelProjectBaseModelSchema,
|
|
7
7
|
ModelProjectTrainingMethodSchema,
|
|
8
8
|
ModelProjectVersionedRefSchema,
|
|
9
9
|
canonicalSha256
|
|
10
|
-
} from "./chunk-
|
|
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-
|
|
222
|
+
//# sourceMappingURL=chunk-6QWV5TEJ.js.map
|
|
@@ -11,28 +11,106 @@ import {
|
|
|
11
11
|
assertCanonicalPayloadSize,
|
|
12
12
|
canonicalSha256,
|
|
13
13
|
parseBoundedJson
|
|
14
|
-
} from "./chunk-
|
|
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
|
-
|
|
19
|
-
var
|
|
20
|
-
var
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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:
|
|
104
|
+
payload: z3.unknown(),
|
|
27
105
|
contentHash: HashSchema
|
|
28
106
|
}).strict();
|
|
29
|
-
var TrainingInputArtifactSchema =
|
|
30
|
-
schemaVersion:
|
|
31
|
-
kind:
|
|
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:
|
|
111
|
+
artifactRef: z3.string().trim().min(1).max(2e3),
|
|
34
112
|
contentHash: HashSchema,
|
|
35
|
-
sizeBytes:
|
|
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 =
|
|
136
|
+
var TrainingJobKindSchema = z3.enum([
|
|
59
137
|
"reward_model_train",
|
|
60
138
|
"policy_optimize"
|
|
61
139
|
]);
|
|
62
|
-
var TrainingJobStateSchema =
|
|
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 =
|
|
151
|
+
var TrainingCapabilityRequirementSchema = z3.object({
|
|
74
152
|
id: IdSchema,
|
|
75
|
-
version:
|
|
76
|
-
required:
|
|
153
|
+
version: z3.string().trim().min(1).max(200).nullable().default(null),
|
|
154
|
+
required: z3.boolean().default(true)
|
|
77
155
|
}).strict();
|
|
78
|
-
var TrainingJobSourceSchema =
|
|
79
|
-
modelProject:
|
|
156
|
+
var TrainingJobSourceSchema = z3.object({
|
|
157
|
+
modelProject: z3.object({
|
|
80
158
|
id: IdSchema,
|
|
81
159
|
portableProjectId: IdSchema,
|
|
82
|
-
revision:
|
|
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:
|
|
172
|
+
evidenceSets: z3.array(ModelProjectImmutableRefSchema).max(1e4)
|
|
91
173
|
}).strict();
|
|
92
|
-
var RewardModelTrainingRequestSchema =
|
|
93
|
-
kind:
|
|
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:
|
|
98
|
-
schemaVersion:
|
|
99
|
-
method:
|
|
100
|
-
parameterization:
|
|
101
|
-
}).catchall(
|
|
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 =
|
|
104
|
-
kind:
|
|
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 =
|
|
109
|
-
kind:
|
|
190
|
+
var LearnedRewardSourceSchema = z3.object({
|
|
191
|
+
kind: z3.literal("learned_reward"),
|
|
110
192
|
rewardModelVersion: ModelProjectImmutableRefSchema,
|
|
111
193
|
qualificationReport: ModelProjectImmutableRefSchema.nullable().default(null),
|
|
112
|
-
evaluationReferences:
|
|
113
|
-
scorerArtifact:
|
|
114
|
-
artifactRef:
|
|
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 =
|
|
122
|
-
kind:
|
|
203
|
+
var PolicyOptimizationRequestSchema = z3.object({
|
|
204
|
+
kind: z3.literal("policy_optimize"),
|
|
123
205
|
baseModel: ModelProjectBaseModelSchema,
|
|
124
206
|
recipe: ModelProjectRecipeDocumentSchema,
|
|
125
|
-
rewardSource:
|
|
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 =
|
|
213
|
+
var TrainingJobRequestSchema = z3.discriminatedUnion("kind", [
|
|
132
214
|
RewardModelTrainingRequestSchema,
|
|
133
215
|
PolicyOptimizationRequestSchema
|
|
134
216
|
]);
|
|
135
|
-
var TrainingJobApprovalSchema =
|
|
217
|
+
var TrainingJobApprovalSchema = z3.object({
|
|
136
218
|
approvalHash: HashSchema,
|
|
137
219
|
approvedAt: TimestampSchema,
|
|
138
|
-
exportApproved:
|
|
139
|
-
maximumSpendUsd:
|
|
140
|
-
retentionDays:
|
|
141
|
-
region:
|
|
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 =
|
|
144
|
-
schemaVersion:
|
|
145
|
-
idempotencyKey:
|
|
146
|
-
name:
|
|
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:
|
|
150
|
-
placementObjective:
|
|
151
|
-
budget:
|
|
152
|
-
maximumSpendUsd:
|
|
153
|
-
maximumWallSeconds:
|
|
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 =
|
|
187
|
-
schemaVersion:
|
|
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:
|
|
275
|
+
sourceProjectRevision: z3.number().int().positive(),
|
|
194
276
|
submissionHash: HashSchema,
|
|
195
277
|
state: TrainingJobStateSchema,
|
|
196
|
-
phase:
|
|
197
|
-
version:
|
|
198
|
-
progress:
|
|
199
|
-
rolloutProgress:
|
|
200
|
-
groupsCompleted:
|
|
201
|
-
groupsTarget:
|
|
202
|
-
optimizerUpdatesApplied:
|
|
203
|
-
optimizerUpdatesSkipped:
|
|
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:
|
|
206
|
-
terminalReason:
|
|
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 =
|
|
212
|
-
schemaVersion:
|
|
213
|
-
jobs:
|
|
214
|
-
nextCursor:
|
|
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 =
|
|
217
|
-
schemaVersion:
|
|
298
|
+
var TrainingJobEventSchema = z3.object({
|
|
299
|
+
schemaVersion: z3.literal("openpond.trainingJobEvent.v2"),
|
|
218
300
|
id: IdSchema,
|
|
219
301
|
jobId: IdSchema,
|
|
220
|
-
sequence:
|
|
302
|
+
sequence: z3.number().int().nonnegative(),
|
|
221
303
|
type: IdSchema,
|
|
222
|
-
phase:
|
|
223
|
-
message:
|
|
224
|
-
data:
|
|
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 =
|
|
228
|
-
schemaVersion:
|
|
309
|
+
var TrainingJobLogSchema = z3.object({
|
|
310
|
+
schemaVersion: z3.literal("openpond.trainingJobLog.v2"),
|
|
229
311
|
jobId: IdSchema,
|
|
230
|
-
sequence:
|
|
231
|
-
level:
|
|
232
|
-
message:
|
|
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 =
|
|
236
|
-
var TrainingJobOutputSchema =
|
|
237
|
-
schemaVersion:
|
|
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:
|
|
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:
|
|
331
|
+
artifactRef: z3.string().trim().min(1).max(2e3),
|
|
250
332
|
contentHash: HashSchema,
|
|
251
|
-
sizeBytes:
|
|
252
|
-
metadata:
|
|
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 =
|
|
256
|
-
schemaVersion:
|
|
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:
|
|
266
|
-
outputs:
|
|
267
|
-
spendUsd:
|
|
268
|
-
durationSeconds:
|
|
269
|
-
cleanupComplete:
|
|
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:
|
|
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 =
|
|
309
|
-
schemaVersion:
|
|
310
|
-
outputs:
|
|
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 =
|
|
314
|
-
schemaVersion:
|
|
315
|
-
code:
|
|
316
|
-
message:
|
|
317
|
-
retryable:
|
|
318
|
-
requestId:
|
|
319
|
-
details:
|
|
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 =
|
|
338
|
-
schemaVersion:
|
|
419
|
+
var TrainingCapabilitiesSchema = z3.object({
|
|
420
|
+
schemaVersion: z3.literal("openpond.trainingCapabilities.v2"),
|
|
339
421
|
capabilityHash: HashSchema,
|
|
340
|
-
jobKinds:
|
|
341
|
-
methods:
|
|
342
|
-
placements:
|
|
343
|
-
|
|
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:
|
|
346
|
-
cancel:
|
|
347
|
-
stopAfterGroup:
|
|
348
|
-
resumeFromCheckpoint:
|
|
427
|
+
controls: z3.object({
|
|
428
|
+
cancel: z3.boolean(),
|
|
429
|
+
stopAfterGroup: z3.boolean(),
|
|
430
|
+
resumeFromCheckpoint: z3.boolean()
|
|
349
431
|
}).strict(),
|
|
350
|
-
limits:
|
|
351
|
-
maximumSpendUsd:
|
|
352
|
-
maximumWallSeconds:
|
|
353
|
-
maximumArtifactBytes:
|
|
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",
|
|
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(
|
|
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
|
|
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
|
|
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-
|
|
661
|
+
//# sourceMappingURL=chunk-OJERFIEJ.js.map
|