openpond-sdk 0.1.11 → 0.1.12
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/MODEL_STARTERS.md +12 -0
- package/dist/model-starter-attempts.js +422 -0
- package/dist/model-starter-attempts.js.map +7 -0
- package/dist/model-starter-catalog.js +13 -0
- package/dist/model-starter-catalog.js.map +3 -3
- package/dist/model-starters.js +23 -1
- package/dist/model-starters.js.map +3 -3
- package/dist/types/packages/sdk/src/model-starter-attempts.d.ts +692 -0
- package/dist/types/packages/sdk/src/model-starter-attempts.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/model-starter-execution.d.ts +63 -0
- package/dist/types/packages/sdk/src/model-starter-execution.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starters.d.ts +1 -1
- package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -1
- package/package.json +5 -1
package/MODEL_STARTERS.md
CHANGED
|
@@ -36,3 +36,15 @@ Prepare the request on final confirmation and retain it for transport retries. T
|
|
|
36
36
|
Evidence references are nullable pointers to actual verifier, baseline, training and evaluation results. Publication and package integrity do not qualify a starter or imply improvement. Continuous learning is a separate model workflow mode; it is not a starter category or comparison-run type.
|
|
37
37
|
|
|
38
38
|
The repository's invoice-extraction example authors 80 original synthetic text tasks and executes its verifier fixtures. Its baseline, training, evaluation and full product qualification remain pending. The local server includes preparation, atomic persistence and file-materialization adapters; catalog publication, route wiring and Desktop Get Started integration are separate delivery steps.
|
|
39
|
+
|
|
40
|
+
## Hosted starter attempts
|
|
41
|
+
|
|
42
|
+
The `openpond-sdk/model-starter-attempts` subpath defines a durable, workspace-scoped attempt API. Create requests select an attached Model Project, exact Taskset release, task, environment seed and explicit policy. They never carry replacement task input, private state, verifier source or evaluator context. Reuse the same `operationId` for a transport retry; use a new identity for a new evaluation.
|
|
43
|
+
|
|
44
|
+
A `hosted_chat` policy selects a registered hosted chat model explicitly. Its snapshot records the provider configuration used for the attempt; it does not claim that a mutable provider alias identifies immutable weights or that the model is the project's starting model. A `fixture` policy selects an immutable authored script and has no model identity or provider requests. These are separate result kinds, and fixture success is not model qualification.
|
|
45
|
+
|
|
46
|
+
`OpenPondModelStarterAttemptsClient` exposes `create`, `list`, `get`, `cancel` and `result` at `/v1/model-starter-attempts`. Cancellation is a request: poll until the owner reports terminal status and cleanup. Inventory is a summary; result reads contain only policy-facing messages, output, Reward composition and execution hashes. Private world snapshots remain with the execution owner. The client checks workspace/request identities and the returned result hash.
|
|
47
|
+
|
|
48
|
+
`verifyModelStarterEnvironmentAttempt` validates the bounded runtime artifact hash, task input, seed and JavaScript release. The host must separately establish who recorded those bytes and bind them to its admitted attempt before using private state for grading. The shared schema also replaces Desktop's private copy of the environment-attempt envelope.
|
|
49
|
+
|
|
50
|
+
`choices` reads a paginated list of task IDs, input previews and authored fixture IDs for one exact attached Taskset, plus available hosted model choices. It does not return private state or expected outputs. Unsupported execution contracts remain explicit in this read response. Execution admission revalidates every selection; a choices response does not itself authorize a model call.
|
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
// src/model-starter-attempts.ts
|
|
2
|
+
import { z as z2 } from "zod";
|
|
3
|
+
import { RewardCompositionSchema } from "@openpond/evals/rewards";
|
|
4
|
+
|
|
5
|
+
// src/model-projects.ts
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { assertBoundedTaskJson } from "@openpond/evals/task-schema";
|
|
8
|
+
|
|
9
|
+
// src/protocol.ts
|
|
10
|
+
var OpenPondProtocolError = class extends Error {
|
|
11
|
+
code;
|
|
12
|
+
constructor(code, message) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.name = "OpenPondProtocolError";
|
|
15
|
+
this.code = code;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
function canonicalJson(value) {
|
|
19
|
+
return JSON.stringify(normalizeCanonicalJson(value));
|
|
20
|
+
}
|
|
21
|
+
async function canonicalSha256(value) {
|
|
22
|
+
const bytes = new TextEncoder().encode(canonicalJson(value));
|
|
23
|
+
const digest = await globalThis.crypto.subtle.digest("SHA-256", bytes);
|
|
24
|
+
return Array.from(
|
|
25
|
+
new Uint8Array(digest),
|
|
26
|
+
(byte) => byte.toString(16).padStart(2, "0")
|
|
27
|
+
).join("");
|
|
28
|
+
}
|
|
29
|
+
function normalizeCanonicalJson(value) {
|
|
30
|
+
if (value === null || typeof value === "string" || typeof value === "boolean") {
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
if (typeof value === "number") {
|
|
34
|
+
if (!Number.isFinite(value)) {
|
|
35
|
+
throw new OpenPondProtocolError(
|
|
36
|
+
"non_json_value",
|
|
37
|
+
"Canonical JSON cannot contain a non-finite number."
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
return Object.is(value, -0) ? 0 : value;
|
|
41
|
+
}
|
|
42
|
+
if (Array.isArray(value)) {
|
|
43
|
+
return value.map((entry) => normalizeCanonicalJson(entry));
|
|
44
|
+
}
|
|
45
|
+
if (typeof value === "object") {
|
|
46
|
+
const prototype = Object.getPrototypeOf(value);
|
|
47
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
48
|
+
throw new OpenPondProtocolError(
|
|
49
|
+
"non_json_value",
|
|
50
|
+
"Canonical JSON accepts only plain objects."
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
const result = {};
|
|
54
|
+
for (const key of Object.keys(value).sort()) {
|
|
55
|
+
const entry = value[key];
|
|
56
|
+
if (entry === void 0 || typeof entry === "function" || typeof entry === "symbol") {
|
|
57
|
+
throw new OpenPondProtocolError(
|
|
58
|
+
"non_json_value",
|
|
59
|
+
`Canonical JSON cannot contain ${typeof entry} at ${key}.`
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
result[key] = normalizeCanonicalJson(entry);
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
throw new OpenPondProtocolError(
|
|
67
|
+
"non_json_value",
|
|
68
|
+
`Canonical JSON cannot contain ${typeof value}.`
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// src/model-projects.ts
|
|
73
|
+
var IdSchema = z.string().trim().min(1).max(500);
|
|
74
|
+
var HashSchema = z.string().regex(/^[a-f0-9]{64}$/);
|
|
75
|
+
var TimestampSchema = z.string().datetime({ offset: true });
|
|
76
|
+
var ModelProjectImmutableRefSchema = z.object({
|
|
77
|
+
id: IdSchema,
|
|
78
|
+
contentHash: HashSchema
|
|
79
|
+
}).strict();
|
|
80
|
+
var ModelProjectVersionedRefSchema = ModelProjectImmutableRefSchema.extend({
|
|
81
|
+
revision: z.number().int().positive()
|
|
82
|
+
}).strict();
|
|
83
|
+
var ModelProjectBaseModelSchema = z.object({
|
|
84
|
+
schemaVersion: z.literal("openpond.baseModelPreference.v1"),
|
|
85
|
+
modelId: IdSchema,
|
|
86
|
+
revision: z.string().trim().min(1).max(256).nullable(),
|
|
87
|
+
tokenizerRevision: z.string().trim().min(1).max(256).nullable(),
|
|
88
|
+
chatTemplateHash: z.string().trim().min(8).max(256).nullable(),
|
|
89
|
+
modelAssetId: IdSchema.nullable(),
|
|
90
|
+
source: z.enum(["managed", "local", "builtin"])
|
|
91
|
+
}).strict();
|
|
92
|
+
var ModelProjectTrainingMethodSchema = z.enum([
|
|
93
|
+
"sft",
|
|
94
|
+
"dpo",
|
|
95
|
+
"grpo",
|
|
96
|
+
"ppo",
|
|
97
|
+
"sdft",
|
|
98
|
+
"opd",
|
|
99
|
+
"opsd",
|
|
100
|
+
"sdpo"
|
|
101
|
+
]);
|
|
102
|
+
var ModelProjectRecipeDocumentSchema = z.object({
|
|
103
|
+
schemaVersion: z.string().regex(/^openpond\.[A-Za-z0-9]+Recipe\.v\d+$/),
|
|
104
|
+
method: ModelProjectTrainingMethodSchema,
|
|
105
|
+
parameterization: z.enum(["lora", "full"])
|
|
106
|
+
}).catchall(z.unknown());
|
|
107
|
+
var ModelProjectTrainingSetupSchema = z.object({
|
|
108
|
+
tasksetRef: ModelProjectVersionedRefSchema.nullable().default(null),
|
|
109
|
+
rewardBindingRef: ModelProjectVersionedRefSchema.nullable().optional(),
|
|
110
|
+
tasksetRelease: ModelProjectImmutableRefSchema.nullable().default(null),
|
|
111
|
+
harnessRelease: ModelProjectImmutableRefSchema.nullable().default(null),
|
|
112
|
+
baseModel: ModelProjectBaseModelSchema.nullable().default(null),
|
|
113
|
+
method: ModelProjectTrainingMethodSchema.nullable().default(null),
|
|
114
|
+
destinationId: IdSchema.nullable().default(null),
|
|
115
|
+
managedRolloutPlacement: z.enum(["local", "remote"]).default("remote"),
|
|
116
|
+
managedGpuPlacementObjective: z.enum(["fast", "balanced", "economical"]).default("balanced"),
|
|
117
|
+
managedGpuRequirement: z.enum(["any", "h100_hbm3"]).default("any"),
|
|
118
|
+
runPreset: z.enum(["small", "standard", "custom", "small_experiment"]).nullable().default(null),
|
|
119
|
+
recipe: ModelProjectRecipeDocumentSchema.nullable().default(null),
|
|
120
|
+
preferredMaximumSpendUsd: z.number().nonnegative().nullable().default(null),
|
|
121
|
+
preferredRetentionDays: z.number().int().nonnegative().nullable().default(null)
|
|
122
|
+
}).strict();
|
|
123
|
+
var HostedModelProjectTrainingSetupSchema = ModelProjectTrainingSetupSchema.omit({ managedGpuRequirement: true });
|
|
124
|
+
var HostedModelProjectLinkSchema = z.object({
|
|
125
|
+
schemaVersion: z.literal("openpond.hostedModelProjectLink.v1"),
|
|
126
|
+
teamId: IdSchema,
|
|
127
|
+
projectId: IdSchema,
|
|
128
|
+
portableProjectId: IdSchema,
|
|
129
|
+
revision: z.number().int().positive(),
|
|
130
|
+
etag: HashSchema,
|
|
131
|
+
syncedSourceRevision: z.number().int().positive(),
|
|
132
|
+
syncedAt: TimestampSchema,
|
|
133
|
+
tasksets: z.array(
|
|
134
|
+
z.object({
|
|
135
|
+
localTasksetId: IdSchema,
|
|
136
|
+
releaseId: IdSchema,
|
|
137
|
+
releaseRevision: z.number().int().positive(),
|
|
138
|
+
releaseHash: HashSchema,
|
|
139
|
+
hostedTasksetId: IdSchema,
|
|
140
|
+
syncedAt: TimestampSchema
|
|
141
|
+
}).strict()
|
|
142
|
+
).max(1e4).default([])
|
|
143
|
+
}).strict();
|
|
144
|
+
var ModelProjectTasksetSyncSchema = z.object({
|
|
145
|
+
localTasksetId: IdSchema,
|
|
146
|
+
releaseId: IdSchema,
|
|
147
|
+
releaseRevision: z.number().int().positive(),
|
|
148
|
+
releaseHash: HashSchema,
|
|
149
|
+
state: z.enum(["syncing", "synced", "sync_failed"]),
|
|
150
|
+
hostedTasksetId: IdSchema.nullable().default(null),
|
|
151
|
+
lastAttemptAt: TimestampSchema,
|
|
152
|
+
syncedAt: TimestampSchema.nullable().default(null),
|
|
153
|
+
lastError: z.string().trim().min(1).max(5e3).nullable().default(null)
|
|
154
|
+
}).strict();
|
|
155
|
+
var ModelProjectSchema = z.object({
|
|
156
|
+
schemaVersion: z.literal("openpond.modelProject.v2"),
|
|
157
|
+
id: IdSchema,
|
|
158
|
+
profileId: IdSchema,
|
|
159
|
+
revision: z.number().int().positive().default(1),
|
|
160
|
+
name: z.string().trim().min(1).max(200),
|
|
161
|
+
objective: z.string().trim().max(5e3).nullable(),
|
|
162
|
+
defaultBaseModel: ModelProjectBaseModelSchema.nullable(),
|
|
163
|
+
defaultDestinationId: IdSchema.nullable(),
|
|
164
|
+
trainingSetup: ModelProjectTrainingSetupSchema,
|
|
165
|
+
hosted: HostedModelProjectLinkSchema.nullable().default(null),
|
|
166
|
+
tasksetSyncs: z.array(ModelProjectTasksetSyncSchema).max(1e4).default([]),
|
|
167
|
+
createdAt: TimestampSchema,
|
|
168
|
+
updatedAt: TimestampSchema
|
|
169
|
+
}).strict();
|
|
170
|
+
var ModelProjectEditableSchema = ModelProjectSchema.pick({
|
|
171
|
+
id: true,
|
|
172
|
+
profileId: true,
|
|
173
|
+
name: true,
|
|
174
|
+
objective: true,
|
|
175
|
+
defaultBaseModel: true,
|
|
176
|
+
defaultDestinationId: true,
|
|
177
|
+
trainingSetup: true
|
|
178
|
+
});
|
|
179
|
+
var ModelProjectSaveRequestSchema = z.object({
|
|
180
|
+
schemaVersion: z.literal("openpond.modelProjectSave.v1"),
|
|
181
|
+
operationId: IdSchema,
|
|
182
|
+
expectedRevision: z.number().int().nonnegative(),
|
|
183
|
+
project: ModelProjectEditableSchema
|
|
184
|
+
}).strict();
|
|
185
|
+
var ModelProjectConfigurationCheckSchema = z.object({
|
|
186
|
+
schemaVersion: z.literal("openpond.modelProjectConfigurationCheck.v1"),
|
|
187
|
+
configurationHash: HashSchema,
|
|
188
|
+
projectId: IdSchema,
|
|
189
|
+
expectedRevision: z.number().int().nonnegative(),
|
|
190
|
+
checkedAt: TimestampSchema,
|
|
191
|
+
canSave: z.boolean(),
|
|
192
|
+
deferred: z.array(z.enum(["base_model", "taskset"])).max(2),
|
|
193
|
+
findings: z.array(z.object({
|
|
194
|
+
code: IdSchema,
|
|
195
|
+
severity: z.enum(["error", "warning"]),
|
|
196
|
+
message: z.string().min(1).max(5e3),
|
|
197
|
+
field: z.string().min(1).max(500).nullable()
|
|
198
|
+
}).strict()).max(100)
|
|
199
|
+
}).strict();
|
|
200
|
+
var ModelProjectBaseModelCandidateSchema = z.object({
|
|
201
|
+
id: IdSchema,
|
|
202
|
+
name: z.string().min(1).max(500),
|
|
203
|
+
available: z.boolean(),
|
|
204
|
+
preference: ModelProjectBaseModelSchema
|
|
205
|
+
}).strict();
|
|
206
|
+
var HostedModelProjectSyncSchema = z.object({
|
|
207
|
+
schemaVersion: z.literal("openpond.hostedModelProjectSync.v2"),
|
|
208
|
+
portableProjectId: IdSchema,
|
|
209
|
+
name: z.string().trim().min(1).max(200),
|
|
210
|
+
objective: z.string().trim().max(5e3).nullable(),
|
|
211
|
+
defaultBaseModel: ModelProjectBaseModelSchema.nullable(),
|
|
212
|
+
defaultDestinationId: IdSchema.nullable(),
|
|
213
|
+
trainingSetup: HostedModelProjectTrainingSetupSchema,
|
|
214
|
+
sourceRevision: z.number().int().positive(),
|
|
215
|
+
sourceUpdatedAt: TimestampSchema,
|
|
216
|
+
expectedEtag: HashSchema.nullable().default(null)
|
|
217
|
+
}).strict();
|
|
218
|
+
var HostedModelProjectSummarySchema = z.object({
|
|
219
|
+
id: IdSchema,
|
|
220
|
+
teamId: IdSchema,
|
|
221
|
+
portableProjectId: IdSchema,
|
|
222
|
+
name: z.string().trim().min(1).max(200),
|
|
223
|
+
objective: z.string().trim().max(5e3).nullable(),
|
|
224
|
+
defaultBaseModel: ModelProjectBaseModelSchema.nullable(),
|
|
225
|
+
defaultDestinationId: IdSchema.nullable(),
|
|
226
|
+
trainingSetup: HostedModelProjectTrainingSetupSchema,
|
|
227
|
+
sourceRevision: z.number().int().positive(),
|
|
228
|
+
sourceUpdatedAt: TimestampSchema,
|
|
229
|
+
revision: z.number().int().positive(),
|
|
230
|
+
etag: HashSchema,
|
|
231
|
+
createdAt: TimestampSchema,
|
|
232
|
+
updatedAt: TimestampSchema
|
|
233
|
+
}).strict();
|
|
234
|
+
var ModelProjectResourceSummarySchema = z.object({
|
|
235
|
+
kind: z.enum([
|
|
236
|
+
"taskset_release",
|
|
237
|
+
"harness_release",
|
|
238
|
+
"dataset_release",
|
|
239
|
+
"evidence_set",
|
|
240
|
+
"model_version",
|
|
241
|
+
"reward_model_version",
|
|
242
|
+
"evaluation_receipt"
|
|
243
|
+
]),
|
|
244
|
+
ref: ModelProjectImmutableRefSchema,
|
|
245
|
+
role: z.string().trim().min(1).max(200).nullable().default(null),
|
|
246
|
+
updatedAt: TimestampSchema
|
|
247
|
+
}).strict();
|
|
248
|
+
var HostedModelProjectDetailSchema = z.object({
|
|
249
|
+
project: HostedModelProjectSummarySchema,
|
|
250
|
+
resources: z.array(ModelProjectResourceSummarySchema).max(1e4),
|
|
251
|
+
jobCount: z.number().int().nonnegative(),
|
|
252
|
+
latestJobIds: z.array(IdSchema).max(100)
|
|
253
|
+
}).strict();
|
|
254
|
+
var ModelProjectApiErrorSchema = z.object({
|
|
255
|
+
schemaVersion: z.literal("openpond.modelProjectApiError.v2"),
|
|
256
|
+
code: z.string().trim().min(1).max(200),
|
|
257
|
+
message: z.string().trim().min(1).max(5e3),
|
|
258
|
+
retryable: z.boolean().default(false),
|
|
259
|
+
requestId: z.string().trim().min(1).max(500).nullable().default(null),
|
|
260
|
+
details: z.record(z.string(), z.unknown()).default({})
|
|
261
|
+
}).strict();
|
|
262
|
+
|
|
263
|
+
// src/model-starter-attempts.ts
|
|
264
|
+
var IdSchema2 = z2.string().trim().min(1).max(200);
|
|
265
|
+
var HashSchema2 = z2.string().regex(/^[a-f0-9]{64}$/);
|
|
266
|
+
var ModelStarterAttemptPolicySchema = z2.discriminatedUnion("kind", [
|
|
267
|
+
z2.object({ kind: z2.literal("hosted_chat"), modelId: IdSchema2, maxOutputTokens: z2.number().int().min(1).max(4096).default(1024), temperature: z2.number().min(0).max(2).default(0), topP: z2.number().gt(0).max(1).default(1) }).strict(),
|
|
268
|
+
z2.object({ kind: z2.literal("fixture"), fixtureId: IdSchema2 }).strict()
|
|
269
|
+
]);
|
|
270
|
+
var ModelStarterAttemptRequestSchema = z2.object({
|
|
271
|
+
schemaVersion: z2.literal("openpond.modelStarterAttemptRequest.v1"),
|
|
272
|
+
operationId: IdSchema2,
|
|
273
|
+
teamId: IdSchema2,
|
|
274
|
+
modelProjectId: IdSchema2,
|
|
275
|
+
taskset: ModelProjectVersionedRefSchema,
|
|
276
|
+
taskId: IdSchema2,
|
|
277
|
+
environmentSeed: z2.number().int().min(0).max(2147483647).default(0),
|
|
278
|
+
policy: ModelStarterAttemptPolicySchema
|
|
279
|
+
}).strict();
|
|
280
|
+
var ModelStarterAttemptChoicesQuerySchema = z2.object({ modelProjectId: IdSchema2, taskset: ModelProjectVersionedRefSchema, afterTaskId: IdSchema2.optional(), limit: z2.number().int().min(1).max(100).default(25) }).strict();
|
|
281
|
+
var ModelStarterAttemptChoicesSchema = z2.object({
|
|
282
|
+
modelProjectId: IdSchema2,
|
|
283
|
+
taskset: ModelProjectVersionedRefSchema,
|
|
284
|
+
available: z2.boolean(),
|
|
285
|
+
unavailableReason: z2.string().max(1e3).nullable(),
|
|
286
|
+
models: z2.array(z2.object({ id: IdSchema2, name: z2.string().max(500) }).strict()).max(200),
|
|
287
|
+
tasks: z2.array(z2.object({ id: IdSchema2, split: z2.enum(["train", "validation", "frozen_eval"]), inputPreview: z2.string().max(500), fixtures: z2.array(z2.object({ id: IdSchema2, label: z2.string().max(200) }).strict()).max(1e3) }).strict()).max(100),
|
|
288
|
+
nextCursor: IdSchema2.nullable()
|
|
289
|
+
}).strict();
|
|
290
|
+
var ModelStarterAttemptSummarySchema = z2.object({
|
|
291
|
+
schemaVersion: z2.literal("openpond.modelStarterAttemptSummary.v1"),
|
|
292
|
+
id: IdSchema2,
|
|
293
|
+
revision: z2.number().int().positive(),
|
|
294
|
+
request: ModelStarterAttemptRequestSchema,
|
|
295
|
+
status: z2.enum(["queued", "running", "cancelling", "completed", "failed", "cancelled"]),
|
|
296
|
+
policySnapshot: z2.object({ modelId: IdSchema2, provider: IdSchema2, upstreamModelId: z2.string().min(1).max(500), configurationHash: HashSchema2 }).strict().nullable(),
|
|
297
|
+
createdAt: z2.iso.datetime(),
|
|
298
|
+
startedAt: z2.iso.datetime().nullable(),
|
|
299
|
+
completedAt: z2.iso.datetime().nullable(),
|
|
300
|
+
cleanupComplete: z2.boolean(),
|
|
301
|
+
resultAvailable: z2.boolean(),
|
|
302
|
+
score: z2.number().min(0).max(1).nullable(),
|
|
303
|
+
gradingStatus: z2.enum(["not_started", "scored", "unscorable", "not_configured"]).default("not_started"),
|
|
304
|
+
passed: z2.boolean().nullable(),
|
|
305
|
+
outputPreview: z2.string().max(500).nullable(),
|
|
306
|
+
error: z2.object({ code: IdSchema2, message: z2.string().max(2e3) }).strict().nullable()
|
|
307
|
+
}).strict().superRefine((value, context) => {
|
|
308
|
+
if (value.request.policy.kind === "fixture" !== (value.policySnapshot === null)) context.addIssue({ code: "custom", path: ["policySnapshot"], message: "Fixture execution must not claim a model identity." });
|
|
309
|
+
if (value.status === "completed" && (!value.cleanupComplete || !value.resultAvailable || !value.completedAt)) context.addIssue({ code: "custom", message: "Completed attempts require retained results and confirmed cleanup." });
|
|
310
|
+
});
|
|
311
|
+
var ModelStarterAttemptListQuerySchema = z2.object({ modelProjectId: IdSchema2, afterId: IdSchema2.optional(), limit: z2.number().int().min(1).max(100).default(25) }).strict();
|
|
312
|
+
var ModelStarterAttemptPageSchema = z2.object({ items: z2.array(ModelStarterAttemptSummarySchema).max(100), nextCursor: IdSchema2.nullable() }).strict();
|
|
313
|
+
var ModelStarterAttemptResultSchema = z2.object({
|
|
314
|
+
schemaVersion: z2.literal("openpond.modelStarterAttemptResult.v1"),
|
|
315
|
+
attempt: ModelStarterAttemptSummarySchema,
|
|
316
|
+
output: z2.string().max(1048576).nullable(),
|
|
317
|
+
// Only model-facing messages, never the private environment snapshot.
|
|
318
|
+
messages: z2.array(z2.record(z2.string(), z2.unknown())).max(4002),
|
|
319
|
+
composition: RewardCompositionSchema.nullable(),
|
|
320
|
+
environment: z2.object({ status: z2.enum(["completed", "budget_exhausted", "cancelled", "timed_out", "policy_failure", "environment_failure"]), collected: z2.boolean(), definition: ModelProjectVersionedRefSchema, initialStateHash: HashSchema2.nullable(), finalStateHash: HashSchema2.nullable(), attemptHash: HashSchema2 }).strict(),
|
|
321
|
+
providerRequestIds: z2.array(IdSchema2).max(1001),
|
|
322
|
+
contentHash: HashSchema2
|
|
323
|
+
}).strict();
|
|
324
|
+
var OpenPondModelStarterAttemptError = class extends Error {
|
|
325
|
+
constructor(status, code, message) {
|
|
326
|
+
super(message);
|
|
327
|
+
this.status = status;
|
|
328
|
+
this.code = code;
|
|
329
|
+
this.name = "OpenPondModelStarterAttemptError";
|
|
330
|
+
}
|
|
331
|
+
status;
|
|
332
|
+
code;
|
|
333
|
+
};
|
|
334
|
+
var OpenPondModelStarterAttemptsClient = class {
|
|
335
|
+
#options;
|
|
336
|
+
constructor(options) {
|
|
337
|
+
const url = new URL(options.baseUrl);
|
|
338
|
+
if (!options.apiKey.trim() || !options.teamId.trim() || !["https:", "http:"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error("Starter attempts require an HTTP(S) endpoint and workspace credentials.");
|
|
339
|
+
this.#options = { ...options, baseUrl: url.toString().replace(/\/+$/, "") };
|
|
340
|
+
}
|
|
341
|
+
async create(value, options = {}) {
|
|
342
|
+
const request = ModelStarterAttemptRequestSchema.parse(value);
|
|
343
|
+
if (request.teamId !== this.#options.teamId) throw new Error("Attempt belongs to another workspace.");
|
|
344
|
+
const result = this.#summary(await this.#request("", "POST", request, options.signal));
|
|
345
|
+
if (canonicalJson(result.request) !== canonicalJson(request)) throw new OpenPondModelStarterAttemptError(502, "attempt_request_mismatch", "Attempt receipt differs from the submitted request.");
|
|
346
|
+
return result;
|
|
347
|
+
}
|
|
348
|
+
async get(id, options = {}) {
|
|
349
|
+
return this.#summary(await this.#request(`/${encodeURIComponent(IdSchema2.parse(id))}`, "GET", void 0, options.signal), id);
|
|
350
|
+
}
|
|
351
|
+
async choices(value, options = {}) {
|
|
352
|
+
const query = ModelStarterAttemptChoicesQuerySchema.parse(value);
|
|
353
|
+
const params = new URLSearchParams({ modelProjectId: query.modelProjectId, tasksetId: query.taskset.id, revision: String(query.taskset.revision), contentHash: query.taskset.contentHash, limit: String(query.limit) });
|
|
354
|
+
if (query.afterTaskId) params.set("afterTaskId", query.afterTaskId);
|
|
355
|
+
const result = ModelStarterAttemptChoicesSchema.parse(await this.#request(`/choices?${params}`, "GET", void 0, options.signal));
|
|
356
|
+
if (result.modelProjectId !== query.modelProjectId || canonicalJson(result.taskset) !== canonicalJson(query.taskset) || result.tasks.length > query.limit || new Set(result.tasks.map((task) => task.id)).size !== result.tasks.length) throw new OpenPondModelStarterAttemptError(502, "attempt_choices_mismatch", "Attempt choices differ from the selected model or Taskset.");
|
|
357
|
+
return result;
|
|
358
|
+
}
|
|
359
|
+
async cancel(id, options = {}) {
|
|
360
|
+
return this.#summary(await this.#request(`/${encodeURIComponent(IdSchema2.parse(id))}/cancel`, "POST", void 0, options.signal), id);
|
|
361
|
+
}
|
|
362
|
+
async result(id, options = {}) {
|
|
363
|
+
const value = ModelStarterAttemptResultSchema.parse(await this.#request(`/${encodeURIComponent(IdSchema2.parse(id))}/result`, "GET", void 0, options.signal));
|
|
364
|
+
this.#summary(value.attempt, id);
|
|
365
|
+
const { contentHash, ...content } = value;
|
|
366
|
+
if (!value.attempt.resultAvailable || await canonicalSha256(content) !== contentHash) throw new OpenPondModelStarterAttemptError(502, "attempt_result_integrity", "Attempt result integrity failed.");
|
|
367
|
+
return value;
|
|
368
|
+
}
|
|
369
|
+
async list(value, options = {}) {
|
|
370
|
+
const query = ModelStarterAttemptListQuerySchema.parse(value);
|
|
371
|
+
const params = new URLSearchParams({ modelProjectId: query.modelProjectId, limit: String(query.limit) });
|
|
372
|
+
if (query.afterId) params.set("afterId", query.afterId);
|
|
373
|
+
const page = ModelStarterAttemptPageSchema.parse(await this.#request(`?${params}`, "GET", void 0, options.signal));
|
|
374
|
+
if (page.items.length > query.limit || new Set(page.items.map((item) => item.id)).size !== page.items.length || page.items.some((item) => this.#summary(item).request.modelProjectId !== query.modelProjectId)) throw new OpenPondModelStarterAttemptError(502, "attempt_page_mismatch", "Attempt page differs from the selected model.");
|
|
375
|
+
return page;
|
|
376
|
+
}
|
|
377
|
+
#summary(value, id) {
|
|
378
|
+
const result = ModelStarterAttemptSummarySchema.parse(value);
|
|
379
|
+
if (result.request.teamId !== this.#options.teamId || id && result.id !== id) throw new OpenPondModelStarterAttemptError(502, "attempt_identity_mismatch", "Attempt receipt belongs to another identity or workspace.");
|
|
380
|
+
return result;
|
|
381
|
+
}
|
|
382
|
+
async #request(path, method, body, signal) {
|
|
383
|
+
const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/model-starter-attempts${path}`, { method, headers: { Authorization: `Bearer ${this.#options.apiKey}`, "X-OpenPond-Team-Id": this.#options.teamId, "Content-Type": "application/json", Accept: "application/json" }, ...body === void 0 ? {} : { body: JSON.stringify(body) }, signal, redirect: "error" });
|
|
384
|
+
const reader = response.body?.getReader();
|
|
385
|
+
if (!reader) throw new OpenPondModelStarterAttemptError(response.status, "attempt_empty_response", "Attempt response was empty.");
|
|
386
|
+
let bytes = 0;
|
|
387
|
+
let text = "";
|
|
388
|
+
const decoder = new TextDecoder();
|
|
389
|
+
try {
|
|
390
|
+
while (true) {
|
|
391
|
+
const chunk = await reader.read();
|
|
392
|
+
if (chunk.done) break;
|
|
393
|
+
bytes += chunk.value.byteLength;
|
|
394
|
+
if (bytes > 16777216) throw new OpenPondModelStarterAttemptError(502, "attempt_response_too_large", "Attempt response exceeded its byte limit.");
|
|
395
|
+
text += decoder.decode(chunk.value, { stream: true });
|
|
396
|
+
}
|
|
397
|
+
text += decoder.decode();
|
|
398
|
+
} finally {
|
|
399
|
+
await reader.cancel();
|
|
400
|
+
reader.releaseLock();
|
|
401
|
+
}
|
|
402
|
+
const value = JSON.parse(text);
|
|
403
|
+
if (!response.ok) {
|
|
404
|
+
const error = z2.object({ code: IdSchema2, message: z2.string().max(2e3) }).safeParse(value);
|
|
405
|
+
throw new OpenPondModelStarterAttemptError(response.status, error.success ? error.data.code : "attempt_request_failed", error.success ? error.data.message : "Attempt request failed.");
|
|
406
|
+
}
|
|
407
|
+
return value;
|
|
408
|
+
}
|
|
409
|
+
};
|
|
410
|
+
export {
|
|
411
|
+
ModelStarterAttemptChoicesQuerySchema,
|
|
412
|
+
ModelStarterAttemptChoicesSchema,
|
|
413
|
+
ModelStarterAttemptListQuerySchema,
|
|
414
|
+
ModelStarterAttemptPageSchema,
|
|
415
|
+
ModelStarterAttemptPolicySchema,
|
|
416
|
+
ModelStarterAttemptRequestSchema,
|
|
417
|
+
ModelStarterAttemptResultSchema,
|
|
418
|
+
ModelStarterAttemptSummarySchema,
|
|
419
|
+
OpenPondModelStarterAttemptError,
|
|
420
|
+
OpenPondModelStarterAttemptsClient
|
|
421
|
+
};
|
|
422
|
+
//# sourceMappingURL=model-starter-attempts.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/model-starter-attempts.ts", "../src/model-projects.ts", "../src/protocol.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\nimport { RewardCompositionSchema } from \"@openpond/evals/rewards\";\nimport { ModelProjectVersionedRefSchema } from \"./model-projects.js\";\nimport { canonicalJson, canonicalSha256 } from \"./protocol.js\";\n\nconst IdSchema = z.string().trim().min(1).max(200);\nconst HashSchema = z.string().regex(/^[a-f0-9]{64}$/);\nexport const ModelStarterAttemptPolicySchema = z.discriminatedUnion(\"kind\", [\n z.object({ kind: z.literal(\"hosted_chat\"), modelId: IdSchema, maxOutputTokens: z.number().int().min(1).max(4_096).default(1_024), temperature: z.number().min(0).max(2).default(0), topP: z.number().gt(0).max(1).default(1) }).strict(),\n z.object({ kind: z.literal(\"fixture\"), fixtureId: IdSchema }).strict(),\n]);\n/** The server resolves task input, private state, verifier and fixture script.\n * A caller can select releases, but cannot submit replacement execution bytes. */\nexport const ModelStarterAttemptRequestSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelStarterAttemptRequest.v1\"),\n operationId: IdSchema, teamId: IdSchema, modelProjectId: IdSchema,\n taskset: ModelProjectVersionedRefSchema, taskId: IdSchema,\n environmentSeed: z.number().int().min(0).max(2_147_483_647).default(0),\n policy: ModelStarterAttemptPolicySchema,\n}).strict();\nexport type ModelStarterAttemptRequest = z.infer<typeof ModelStarterAttemptRequestSchema>;\nexport const ModelStarterAttemptChoicesQuerySchema = z.object({ modelProjectId: IdSchema, taskset: ModelProjectVersionedRefSchema, afterTaskId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();\nexport const ModelStarterAttemptChoicesSchema = z.object({\n modelProjectId: IdSchema, taskset: ModelProjectVersionedRefSchema, available: z.boolean(), unavailableReason: z.string().max(1_000).nullable(),\n models: z.array(z.object({ id: IdSchema, name: z.string().max(500) }).strict()).max(200),\n tasks: z.array(z.object({ id: IdSchema, split: z.enum([\"train\", \"validation\", \"frozen_eval\"]), inputPreview: z.string().max(500), fixtures: z.array(z.object({ id: IdSchema, label: z.string().max(200) }).strict()).max(1_000) }).strict()).max(100),\n nextCursor: IdSchema.nullable(),\n}).strict();\nexport const ModelStarterAttemptSummarySchema = z.object({\n schemaVersion: z.literal(\"openpond.modelStarterAttemptSummary.v1\"),\n id: IdSchema, revision: z.number().int().positive(), request: ModelStarterAttemptRequestSchema,\n status: z.enum([\"queued\", \"running\", \"cancelling\", \"completed\", \"failed\", \"cancelled\"]),\n policySnapshot: z.object({ modelId: IdSchema, provider: IdSchema, upstreamModelId: z.string().min(1).max(500), configurationHash: HashSchema }).strict().nullable(),\n createdAt: z.iso.datetime(), startedAt: z.iso.datetime().nullable(), completedAt: z.iso.datetime().nullable(),\n cleanupComplete: z.boolean(), resultAvailable: z.boolean(), score: z.number().min(0).max(1).nullable(),\n gradingStatus: z.enum([\"not_started\", \"scored\", \"unscorable\", \"not_configured\"]).default(\"not_started\"),\n passed: z.boolean().nullable(), outputPreview: z.string().max(500).nullable(),\n error: z.object({ code: IdSchema, message: z.string().max(2_000) }).strict().nullable(),\n}).strict().superRefine((value, context) => {\n if ((value.request.policy.kind === \"fixture\") !== (value.policySnapshot === null)) context.addIssue({ code: \"custom\", path: [\"policySnapshot\"], message: \"Fixture execution must not claim a model identity.\" });\n if (value.status === \"completed\" && (!value.cleanupComplete || !value.resultAvailable || !value.completedAt)) context.addIssue({ code: \"custom\", message: \"Completed attempts require retained results and confirmed cleanup.\" });\n});\nexport type ModelStarterAttemptSummary = z.infer<typeof ModelStarterAttemptSummarySchema>;\nexport const ModelStarterAttemptListQuerySchema = z.object({ modelProjectId: IdSchema, afterId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();\nexport const ModelStarterAttemptPageSchema = z.object({ items: z.array(ModelStarterAttemptSummarySchema).max(100), nextCursor: IdSchema.nullable() }).strict();\nexport const ModelStarterAttemptResultSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelStarterAttemptResult.v1\"),\n attempt: ModelStarterAttemptSummarySchema,\n output: z.string().max(1_048_576).nullable(),\n // Only model-facing messages, never the private environment snapshot.\n messages: z.array(z.record(z.string(), z.unknown())).max(4_002),\n composition: RewardCompositionSchema.nullable(),\n environment: z.object({ status: z.enum([\"completed\", \"budget_exhausted\", \"cancelled\", \"timed_out\", \"policy_failure\", \"environment_failure\"]), collected: z.boolean(), definition: ModelProjectVersionedRefSchema, initialStateHash: HashSchema.nullable(), finalStateHash: HashSchema.nullable(), attemptHash: HashSchema }).strict(),\n providerRequestIds: z.array(IdSchema).max(1_001),\n contentHash: HashSchema,\n}).strict();\nexport type ModelStarterAttemptResult = z.infer<typeof ModelStarterAttemptResultSchema>;\n\nexport class OpenPondModelStarterAttemptError extends Error {\n constructor(readonly status: number, readonly code: string, message: string) { super(message); this.name = \"OpenPondModelStarterAttemptError\"; }\n}\n\nexport class OpenPondModelStarterAttemptsClient {\n readonly #options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof globalThis.fetch };\n constructor(options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof globalThis.fetch }) {\n const url = new URL(options.baseUrl);\n if (!options.apiKey.trim() || !options.teamId.trim() || ![\"https:\", \"http:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error(\"Starter attempts require an HTTP(S) endpoint and workspace credentials.\");\n this.#options = { ...options, baseUrl: url.toString().replace(/\\/+$/, \"\") };\n }\n async create(value: z.input<typeof ModelStarterAttemptRequestSchema>, options: { signal?: AbortSignal } = {}) {\n const request = ModelStarterAttemptRequestSchema.parse(value);\n if (request.teamId !== this.#options.teamId) throw new Error(\"Attempt belongs to another workspace.\");\n const result = this.#summary(await this.#request(\"\", \"POST\", request, options.signal));\n if (canonicalJson(result.request) !== canonicalJson(request)) throw new OpenPondModelStarterAttemptError(502, \"attempt_request_mismatch\", \"Attempt receipt differs from the submitted request.\");\n return result;\n }\n async get(id: string, options: { signal?: AbortSignal } = {}) { return this.#summary(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}`, \"GET\", undefined, options.signal), id); }\n async choices(value: z.input<typeof ModelStarterAttemptChoicesQuerySchema>, options: { signal?: AbortSignal } = {}) {\n const query = ModelStarterAttemptChoicesQuerySchema.parse(value);\n const params = new URLSearchParams({ modelProjectId: query.modelProjectId, tasksetId: query.taskset.id, revision: String(query.taskset.revision), contentHash: query.taskset.contentHash, limit: String(query.limit) });\n if (query.afterTaskId) params.set(\"afterTaskId\", query.afterTaskId);\n const result = ModelStarterAttemptChoicesSchema.parse(await this.#request(`/choices?${params}`, \"GET\", undefined, options.signal));\n if (result.modelProjectId !== query.modelProjectId || canonicalJson(result.taskset) !== canonicalJson(query.taskset) || result.tasks.length > query.limit || new Set(result.tasks.map(task => task.id)).size !== result.tasks.length) throw new OpenPondModelStarterAttemptError(502, \"attempt_choices_mismatch\", \"Attempt choices differ from the selected model or Taskset.\");\n return result;\n }\n async cancel(id: string, options: { signal?: AbortSignal } = {}) { return this.#summary(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}/cancel`, \"POST\", undefined, options.signal), id); }\n async result(id: string, options: { signal?: AbortSignal } = {}) {\n const value = ModelStarterAttemptResultSchema.parse(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}/result`, \"GET\", undefined, options.signal));\n this.#summary(value.attempt, id);\n const { contentHash, ...content } = value;\n if (!value.attempt.resultAvailable || await canonicalSha256(content) !== contentHash) throw new OpenPondModelStarterAttemptError(502, \"attempt_result_integrity\", \"Attempt result integrity failed.\");\n return value;\n }\n async list(value: z.input<typeof ModelStarterAttemptListQuerySchema>, options: { signal?: AbortSignal } = {}) {\n const query = ModelStarterAttemptListQuerySchema.parse(value);\n const params = new URLSearchParams({ modelProjectId: query.modelProjectId, limit: String(query.limit) });\n if (query.afterId) params.set(\"afterId\", query.afterId);\n const page = ModelStarterAttemptPageSchema.parse(await this.#request(`?${params}`, \"GET\", undefined, options.signal));\n if (page.items.length > query.limit || new Set(page.items.map(item => item.id)).size !== page.items.length || page.items.some(item => this.#summary(item).request.modelProjectId !== query.modelProjectId)) throw new OpenPondModelStarterAttemptError(502, \"attempt_page_mismatch\", \"Attempt page differs from the selected model.\");\n return page;\n }\n #summary(value: unknown, id?: string): ModelStarterAttemptSummary {\n const result = ModelStarterAttemptSummarySchema.parse(value);\n if (result.request.teamId !== this.#options.teamId || (id && result.id !== id)) throw new OpenPondModelStarterAttemptError(502, \"attempt_identity_mismatch\", \"Attempt receipt belongs to another identity or workspace.\");\n return result;\n }\n async #request(path: string, method: string, body: unknown, signal?: AbortSignal): Promise<unknown> {\n const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/model-starter-attempts${path}`, { method, headers: { Authorization: `Bearer ${this.#options.apiKey}`, \"X-OpenPond-Team-Id\": this.#options.teamId, \"Content-Type\": \"application/json\", Accept: \"application/json\" }, ...(body === undefined ? {} : { body: JSON.stringify(body) }), signal, redirect: \"error\" });\n const reader = response.body?.getReader();\n if (!reader) throw new OpenPondModelStarterAttemptError(response.status, \"attempt_empty_response\", \"Attempt response was empty.\");\n let bytes = 0; let text = \"\"; const decoder = new TextDecoder();\n try {\n while (true) {\n const chunk = await reader.read(); if (chunk.done) break;\n bytes += chunk.value.byteLength;\n if (bytes > 16_777_216) throw new OpenPondModelStarterAttemptError(502, \"attempt_response_too_large\", \"Attempt response exceeded its byte limit.\");\n text += decoder.decode(chunk.value, { stream: true });\n }\n text += decoder.decode();\n } finally { await reader.cancel(); reader.releaseLock(); }\n const value: unknown = JSON.parse(text);\n if (!response.ok) {\n const error = z.object({ code: IdSchema, message: z.string().max(2_000) }).safeParse(value);\n throw new OpenPondModelStarterAttemptError(response.status, error.success ? error.data.code : \"attempt_request_failed\", error.success ? error.data.message : \"Attempt request failed.\");\n }\n return value;\n }\n}\n", "import { z } from \"zod\";\nimport { assertBoundedTaskJson } from \"@openpond/evals/task-schema\";\n\nimport {\n MODEL_PROJECT_API_RESPONSE_MAX_BYTES,\n MODEL_PROJECT_SYNC_MAX_BYTES,\n OPENPOND_MODEL_PROJECT_MEDIA_TYPE,\n OpenPondProtocolError,\n assertCanonicalPayloadSize,\n canonicalSha256,\n parseBoundedJson,\n} from \"./protocol.js\";\n\nexport {\n MODEL_PROJECT_API_RESPONSE_MAX_BYTES,\n MODEL_PROJECT_SYNC_MAX_BYTES,\n OPENPOND_MODEL_PROJECT_MEDIA_TYPE,\n} from \"./protocol.js\";\n\nconst IdSchema = z.string().trim().min(1).max(500);\nconst HashSchema = z.string().regex(/^[a-f0-9]{64}$/);\nconst TimestampSchema = z.string().datetime({ offset: true });\n\nexport const ModelProjectImmutableRefSchema = z\n .object({\n id: IdSchema,\n contentHash: HashSchema,\n })\n .strict();\n\nexport const ModelProjectVersionedRefSchema =\n ModelProjectImmutableRefSchema.extend({\n revision: z.number().int().positive(),\n }).strict();\n\nexport const ModelProjectBaseModelSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.baseModelPreference.v1\"),\n modelId: IdSchema,\n revision: z.string().trim().min(1).max(256).nullable(),\n tokenizerRevision: z.string().trim().min(1).max(256).nullable(),\n chatTemplateHash: z.string().trim().min(8).max(256).nullable(),\n modelAssetId: IdSchema.nullable(),\n source: z.enum([\"managed\", \"local\", \"builtin\"]),\n })\n .strict();\n\nexport const ModelProjectTrainingMethodSchema = z.enum([\n \"sft\",\n \"dpo\",\n \"grpo\",\n \"ppo\",\n \"sdft\",\n \"opd\",\n \"opsd\",\n \"sdpo\",\n]);\n\n/**\n * A versioned recipe document stored while a Project is still mutable.\n * The training endpoint validates the selected recipe version in full before\n * accepting an immutable Job; Project sync preserves newer recipe fields.\n */\nexport const ModelProjectRecipeDocumentSchema = z\n .object({\n schemaVersion: z.string().regex(/^openpond\\.[A-Za-z0-9]+Recipe\\.v\\d+$/),\n method: ModelProjectTrainingMethodSchema,\n parameterization: z.enum([\"lora\", \"full\"]),\n })\n .catchall(z.unknown());\n\nexport const ModelProjectTrainingSetupSchema = z\n .object({\n tasksetRef: ModelProjectVersionedRefSchema.nullable().default(null),\n rewardBindingRef: ModelProjectVersionedRefSchema.nullable().optional(),\n tasksetRelease: ModelProjectImmutableRefSchema.nullable().default(null),\n harnessRelease: ModelProjectImmutableRefSchema.nullable().default(null),\n baseModel: ModelProjectBaseModelSchema.nullable().default(null),\n method: ModelProjectTrainingMethodSchema.nullable().default(null),\n destinationId: IdSchema.nullable().default(null),\n managedRolloutPlacement: z\n .enum([\"local\", \"remote\"])\n .default(\"remote\"),\n managedGpuPlacementObjective: z\n .enum([\"fast\", \"balanced\", \"economical\"])\n .default(\"balanced\"),\n managedGpuRequirement: z\n .enum([\"any\", \"h100_hbm3\"])\n .default(\"any\"),\n runPreset: z\n .enum([\"small\", \"standard\", \"custom\", \"small_experiment\"])\n .nullable()\n .default(null),\n recipe: ModelProjectRecipeDocumentSchema.nullable().default(null),\n preferredMaximumSpendUsd: z.number().nonnegative().nullable().default(null),\n preferredRetentionDays: z\n .number()\n .int()\n .nonnegative()\n .nullable()\n .default(null),\n })\n .strict();\n\nexport const HostedModelProjectTrainingSetupSchema =\n ModelProjectTrainingSetupSchema.omit({ managedGpuRequirement: true });\n\nexport const HostedModelProjectLinkSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.hostedModelProjectLink.v1\"),\n teamId: IdSchema,\n projectId: IdSchema,\n portableProjectId: IdSchema,\n revision: z.number().int().positive(),\n etag: HashSchema,\n syncedSourceRevision: z.number().int().positive(),\n syncedAt: TimestampSchema,\n tasksets: z\n .array(\n z\n .object({\n localTasksetId: IdSchema,\n releaseId: IdSchema,\n releaseRevision: z.number().int().positive(),\n releaseHash: HashSchema,\n hostedTasksetId: IdSchema,\n syncedAt: TimestampSchema,\n })\n .strict(),\n )\n .max(10_000)\n .default([]),\n })\n .strict();\n\nexport const ModelProjectTasksetSyncSchema = z\n .object({\n localTasksetId: IdSchema,\n releaseId: IdSchema,\n releaseRevision: z.number().int().positive(),\n releaseHash: HashSchema,\n state: z.enum([\"syncing\", \"synced\", \"sync_failed\"]),\n hostedTasksetId: IdSchema.nullable().default(null),\n lastAttemptAt: TimestampSchema,\n syncedAt: TimestampSchema.nullable().default(null),\n lastError: z.string().trim().min(1).max(5_000).nullable().default(null),\n })\n .strict();\n\nexport const ModelProjectSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.modelProject.v2\"),\n id: IdSchema,\n profileId: IdSchema,\n revision: z.number().int().positive().default(1),\n name: z.string().trim().min(1).max(200),\n objective: z.string().trim().max(5_000).nullable(),\n defaultBaseModel: ModelProjectBaseModelSchema.nullable(),\n defaultDestinationId: IdSchema.nullable(),\n trainingSetup: ModelProjectTrainingSetupSchema,\n hosted: HostedModelProjectLinkSchema.nullable().default(null),\n tasksetSyncs: z\n .array(ModelProjectTasksetSyncSchema)\n .max(10_000)\n .default([]),\n createdAt: TimestampSchema,\n updatedAt: TimestampSchema,\n })\n .strict();\n\n/** User-editable configuration. Execution and hosting receipts are server-owned. */\nexport const ModelProjectEditableSchema = ModelProjectSchema.pick({\n id: true,\n profileId: true,\n name: true,\n objective: true,\n defaultBaseModel: true,\n defaultDestinationId: true,\n trainingSetup: true,\n});\n\n/** Zero creates a new Model; a positive revision updates that exact revision. */\nexport const ModelProjectSaveRequestSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelProjectSave.v1\"),\n operationId: IdSchema,\n expectedRevision: z.number().int().nonnegative(),\n project: ModelProjectEditableSchema,\n}).strict();\n\nexport type ModelProjectSaveRequest = z.infer<typeof ModelProjectSaveRequestSchema>;\n\n/** A read-only configuration check; it does not establish training or grader quality. */\nexport const ModelProjectConfigurationCheckSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelProjectConfigurationCheck.v1\"),\n configurationHash: HashSchema,\n projectId: IdSchema,\n expectedRevision: z.number().int().nonnegative(),\n checkedAt: TimestampSchema,\n canSave: z.boolean(),\n deferred: z.array(z.enum([\"base_model\", \"taskset\"])).max(2),\n findings: z.array(z.object({\n code: IdSchema,\n severity: z.enum([\"error\", \"warning\"]),\n message: z.string().min(1).max(5000),\n field: z.string().min(1).max(500).nullable(),\n }).strict()).max(100),\n}).strict();\n\nexport type ModelProjectConfigurationCheck = z.infer<typeof ModelProjectConfigurationCheckSchema>;\n\nexport const ModelProjectBaseModelCandidateSchema = z.object({\n id: IdSchema, name: z.string().min(1).max(500), available: z.boolean(), preference: ModelProjectBaseModelSchema,\n}).strict();\n\nexport async function modelProjectConfigurationHash(request: ModelProjectSaveRequest): Promise<string> {\n const parsed = parseModelProjectSaveRequest(request);\n return canonicalSha256({ project: parsed.project, expectedRevision: parsed.expectedRevision });\n}\n\nexport function parseModelProjectSaveRequest(value: unknown): ModelProjectSaveRequest {\n try {\n assertBoundedTaskJson(value, MODEL_PROJECT_SYNC_MAX_BYTES);\n } catch {\n throw new OpenPondModelProjectApiError(400, {\n schemaVersion: \"openpond.modelProjectApiError.v2\", code: \"model_configuration_json_invalid\",\n message: \"Model configuration must be bounded JSON data.\", retryable: false, requestId: null, details: {},\n });\n }\n return ModelProjectSaveRequestSchema.parse(value);\n}\n\n/** Stable across transport retries; excludes server-owned revision/timestamps. */\nexport async function createModelProjectSaveRequest(\n project: z.input<typeof ModelProjectEditableSchema>,\n expectedRevision: number,\n): Promise<ModelProjectSaveRequest> {\n assertBoundedTaskJson(project, MODEL_PROJECT_SYNC_MAX_BYTES);\n const editable = ModelProjectEditableSchema.parse(project);\n assertCanonicalPayloadSize(editable, MODEL_PROJECT_SYNC_MAX_BYTES, \"Model configuration\");\n const hash = await canonicalSha256({ project: editable, expectedRevision });\n return parseModelProjectSaveRequest({\n schemaVersion: \"openpond.modelProjectSave.v1\",\n operationId: `model-save:${hash}`,\n expectedRevision,\n project: editable,\n });\n}\n\nexport const HostedModelProjectSyncSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.hostedModelProjectSync.v2\"),\n portableProjectId: IdSchema,\n name: z.string().trim().min(1).max(200),\n objective: z.string().trim().max(5_000).nullable(),\n defaultBaseModel: ModelProjectBaseModelSchema.nullable(),\n defaultDestinationId: IdSchema.nullable(),\n trainingSetup: HostedModelProjectTrainingSetupSchema,\n sourceRevision: z.number().int().positive(),\n sourceUpdatedAt: TimestampSchema,\n expectedEtag: HashSchema.nullable().default(null),\n })\n .strict();\n\nexport const HostedModelProjectSummarySchema = z\n .object({\n id: IdSchema,\n teamId: IdSchema,\n portableProjectId: IdSchema,\n name: z.string().trim().min(1).max(200),\n objective: z.string().trim().max(5_000).nullable(),\n defaultBaseModel: ModelProjectBaseModelSchema.nullable(),\n defaultDestinationId: IdSchema.nullable(),\n trainingSetup: HostedModelProjectTrainingSetupSchema,\n sourceRevision: z.number().int().positive(),\n sourceUpdatedAt: TimestampSchema,\n revision: z.number().int().positive(),\n etag: HashSchema,\n createdAt: TimestampSchema,\n updatedAt: TimestampSchema,\n })\n .strict();\n\nexport const ModelProjectResourceSummarySchema = z\n .object({\n kind: z.enum([\n \"taskset_release\",\n \"harness_release\",\n \"dataset_release\",\n \"evidence_set\",\n \"model_version\",\n \"reward_model_version\",\n \"evaluation_receipt\",\n ]),\n ref: ModelProjectImmutableRefSchema,\n role: z.string().trim().min(1).max(200).nullable().default(null),\n updatedAt: TimestampSchema,\n })\n .strict();\n\nexport const HostedModelProjectDetailSchema = z\n .object({\n project: HostedModelProjectSummarySchema,\n resources: z.array(ModelProjectResourceSummarySchema).max(10_000),\n jobCount: z.number().int().nonnegative(),\n latestJobIds: z.array(IdSchema).max(100),\n })\n .strict();\n\nexport const ModelProjectApiErrorSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.modelProjectApiError.v2\"),\n code: z.string().trim().min(1).max(200),\n message: z.string().trim().min(1).max(5_000),\n retryable: z.boolean().default(false),\n requestId: z.string().trim().min(1).max(500).nullable().default(null),\n details: z.record(z.string(), z.unknown()).default({}),\n })\n .strict();\n\nexport class OpenPondModelProjectApiError extends Error {\n readonly status: number;\n readonly code: string;\n readonly retryable: boolean;\n readonly requestId: string | null;\n readonly details: Record<string, unknown>;\n\n constructor(status: number, error: z.infer<typeof ModelProjectApiErrorSchema>) {\n super(error.message);\n this.name = \"OpenPondModelProjectApiError\";\n this.status = status;\n this.code = error.code;\n this.retryable = error.retryable;\n this.requestId = error.requestId;\n this.details = error.details;\n }\n}\n\nexport type ModelProject = z.infer<typeof ModelProjectSchema>;\nexport type ModelProjectTrainingSetup = z.infer<\n typeof ModelProjectTrainingSetupSchema\n>;\nexport type HostedModelProjectSync = z.infer<\n typeof HostedModelProjectSyncSchema\n>;\nexport type HostedModelProjectSummary = z.infer<\n typeof HostedModelProjectSummarySchema\n>;\nexport type HostedModelProjectDetail = z.infer<\n typeof HostedModelProjectDetailSchema\n>;\n\ntype ModelProjectsFetch = typeof fetch;\n\nfunction headersRecord(headers: HeadersInit | undefined): Record<string, string> {\n const result: Record<string, string> = {};\n new Headers(headers).forEach((value, key) => {\n result[key] = value;\n });\n return result;\n}\n\nexport function createModelProjectsClient(input: {\n baseUrl: string;\n fetch?: ModelProjectsFetch;\n headers?: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);\n}) {\n const fetchImpl = input.fetch ?? fetch;\n const baseUrl = input.baseUrl.replace(/\\/$/, \"\");\n\n async function request(pathname: string, init?: RequestInit): Promise<unknown> {\n const configuredHeaders =\n typeof input.headers === \"function\"\n ? await input.headers()\n : (input.headers ?? {});\n const response = await fetchImpl(`${baseUrl}${pathname}`, {\n ...init,\n headers: {\n accept: OPENPOND_MODEL_PROJECT_MEDIA_TYPE,\n ...(init?.body\n ? { \"content-type\": OPENPOND_MODEL_PROJECT_MEDIA_TYPE }\n : {}),\n ...headersRecord(configuredHeaders),\n ...headersRecord(init?.headers),\n },\n });\n const body = parseBoundedJson(\n await response.text(),\n MODEL_PROJECT_API_RESPONSE_MAX_BYTES,\n \"Model Project API response\",\n );\n if (!response.ok) {\n const parsed = ModelProjectApiErrorSchema.safeParse(body);\n if (parsed.success) {\n throw new OpenPondModelProjectApiError(response.status, parsed.data);\n }\n throw new OpenPondProtocolError(\n \"invalid_error_response\",\n `Model Project request failed with HTTP ${response.status} and an invalid error envelope.`,\n );\n }\n return body;\n }\n\n return {\n async configurationCandidates() {\n return z.object({ candidates: z.array(ModelProjectBaseModelCandidateSchema).max(1000) }).strict().parse(\n await request(\"/v1/model-projects/configuration/candidates\", { headers: { accept: \"application/json\" } }),\n ).candidates;\n },\n async checkConfiguration(value: ModelProjectSaveRequest) {\n const parsed = parseModelProjectSaveRequest(value);\n return ModelProjectConfigurationCheckSchema.parse(await request(\"/v1/model-projects/configuration/check\", {\n method: \"POST\", headers: { accept: \"application/json\", \"content-type\": \"application/json\" }, body: JSON.stringify(parsed),\n }));\n },\n async saveConfiguration(value: ModelProjectSaveRequest) {\n const parsed = parseModelProjectSaveRequest(value);\n return HostedModelProjectSummarySchema.parse(await request(\"/v1/model-projects/configuration/save\", {\n method: \"POST\", headers: { accept: \"application/json\", \"content-type\": \"application/json\" }, body: JSON.stringify(parsed),\n }));\n },\n async upsert(project: HostedModelProjectSync) {\n assertCanonicalPayloadSize(\n project,\n MODEL_PROJECT_SYNC_MAX_BYTES,\n \"Model Project sync\",\n );\n const parsed = HostedModelProjectSyncSchema.parse(project);\n const body = await request(\n `/v1/model-projects/${encodeURIComponent(parsed.portableProjectId)}`,\n { method: \"PUT\", body: JSON.stringify(parsed) },\n );\n return HostedModelProjectSummarySchema.parse(\n unwrapObject(body, \"project\"),\n );\n },\n async list() {\n const body = await request(\"/v1/model-projects\");\n return z\n .array(HostedModelProjectSummarySchema)\n .parse(unwrapObject(body, \"projects\"));\n },\n async get(projectId: string) {\n const body = await request(\n `/v1/model-projects/${encodeURIComponent(IdSchema.parse(projectId))}`,\n );\n return HostedModelProjectDetailSchema.parse(body);\n },\n };\n}\n\nfunction unwrapObject(value: unknown, key: string): unknown {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return value;\n return key in value ? (value as Record<string, unknown>)[key] : value;\n}\n", "export type CanonicalJsonValue =\n | null\n | boolean\n | number\n | string\n | CanonicalJsonValue[]\n | { [key: string]: CanonicalJsonValue };\n\nexport const OPENPOND_TRAINING_PROTOCOL_MAJOR = 2 as const;\nexport const OPENPOND_TRAINING_MEDIA_TYPE =\n \"application/vnd.openpond.training+json;version=2\" as const;\nexport const OPENPOND_MODEL_PROJECT_MEDIA_TYPE =\n \"application/vnd.openpond.model-project+json;version=2\" as const;\n\nexport const TRAINING_JOB_SUBMISSION_MAX_BYTES = 1_048_576;\nexport const TRAINING_INPUT_ARTIFACT_MAX_BYTES = 67_108_864;\nexport const TRAINING_API_RESPONSE_MAX_BYTES = 8_388_608;\nexport const MODEL_PROJECT_SYNC_MAX_BYTES = 524_288;\nexport const MODEL_PROJECT_API_RESPONSE_MAX_BYTES = 8_388_608;\n\nexport class OpenPondProtocolError extends Error {\n readonly code: string;\n\n constructor(code: string, message: string) {\n super(message);\n this.name = \"OpenPondProtocolError\";\n this.code = code;\n }\n}\n\n/**\n * Deterministic JSON used for content-addressed OpenPond protocol objects.\n * Object keys are sorted by Unicode code point, arrays retain their authored\n * order, and non-JSON/non-finite values are rejected rather than coerced.\n */\nexport function canonicalJson(value: unknown): string {\n return JSON.stringify(normalizeCanonicalJson(value));\n}\n\nexport function canonicalJsonByteLength(value: unknown): number {\n return new TextEncoder().encode(canonicalJson(value)).byteLength;\n}\n\nexport async function canonicalSha256(value: unknown): Promise<string> {\n const bytes = new TextEncoder().encode(canonicalJson(value));\n const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", bytes);\n return Array.from(new Uint8Array(digest), (byte) =>\n byte.toString(16).padStart(2, \"0\"),\n ).join(\"\");\n}\n\nexport function assertCanonicalPayloadSize(\n value: unknown,\n maximumBytes: number,\n label: string,\n): void {\n const actualBytes = canonicalJsonByteLength(value);\n if (actualBytes > maximumBytes) {\n throw new OpenPondProtocolError(\n \"payload_too_large\",\n `${label} is ${actualBytes} bytes; the maximum is ${maximumBytes} bytes.`,\n );\n }\n}\n\nexport function parseBoundedJson(\n text: string,\n maximumBytes: number,\n label: string,\n): unknown {\n const actualBytes = new TextEncoder().encode(text).byteLength;\n if (actualBytes > maximumBytes) {\n throw new OpenPondProtocolError(\n \"response_too_large\",\n `${label} is ${actualBytes} bytes; the maximum is ${maximumBytes} bytes.`,\n );\n }\n try {\n return JSON.parse(text) as unknown;\n } catch {\n throw new OpenPondProtocolError(\n \"invalid_json\",\n `${label} was not valid JSON.`,\n );\n }\n}\n\nfunction normalizeCanonicalJson(value: unknown): CanonicalJsonValue {\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new OpenPondProtocolError(\n \"non_json_value\",\n \"Canonical JSON cannot contain a non-finite number.\",\n );\n }\n return Object.is(value, -0) ? 0 : value;\n }\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeCanonicalJson(entry));\n }\n if (typeof value === \"object\") {\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new OpenPondProtocolError(\n \"non_json_value\",\n \"Canonical JSON accepts only plain objects.\",\n );\n }\n const result: Record<string, CanonicalJsonValue> = {};\n for (const key of Object.keys(value as Record<string, unknown>).sort()) {\n const entry = (value as Record<string, unknown>)[key];\n if (entry === undefined || typeof entry === \"function\" || typeof entry === \"symbol\") {\n throw new OpenPondProtocolError(\n \"non_json_value\",\n `Canonical JSON cannot contain ${typeof entry} at ${key}.`,\n );\n }\n result[key] = normalizeCanonicalJson(entry);\n }\n return result;\n }\n throw new OpenPondProtocolError(\n \"non_json_value\",\n `Canonical JSON cannot contain ${typeof value}.`,\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["z", "IdSchema", "z", "HashSchema"]
|
|
7
|
+
}
|
|
@@ -207,6 +207,19 @@ import { EnvironmentReleaseSchema, VerifierSetReleaseSchema } from "@openpond/ev
|
|
|
207
207
|
import { JavaScriptEnvironmentDefinitionSchema, assertJavaScriptEnvironmentDefinition } from "@openpond/evals/javascript-environment";
|
|
208
208
|
import { createLearningTextAsset, learningRef, sealLearningContent, verifyLearningTextAsset } from "@openpond/evals/learning";
|
|
209
209
|
import { assertBoundedTaskJson as assertBoundedTaskJson2 } from "@openpond/evals/task-schema";
|
|
210
|
+
var HashSchema2 = z2.string().regex(/^[a-f0-9]{64}$/);
|
|
211
|
+
var ModelStarterEnvironmentAttemptSchema = z2.object({
|
|
212
|
+
schemaVersion: z2.literal("openpond.javascriptEnvironmentAttempt.v1"),
|
|
213
|
+
taskId: z2.string(),
|
|
214
|
+
status: z2.enum(["completed", "budget_exhausted", "cancelled", "timed_out", "policy_failure", "environment_failure"]),
|
|
215
|
+
output: z2.string().nullable(),
|
|
216
|
+
collected: z2.boolean(),
|
|
217
|
+
environmentCleanupComplete: z2.boolean(),
|
|
218
|
+
snapshot: z2.object({ definition: ModelProjectVersionedRefSchema, inputHash: HashSchema2, seed: z2.number().int(), initialStateHash: HashSchema2, finalStateHash: HashSchema2, state: z2.record(z2.string(), z2.unknown()), events: z2.array(z2.record(z2.string(), z2.unknown())) }).strict().nullable(),
|
|
219
|
+
messages: z2.array(z2.unknown()),
|
|
220
|
+
error: z2.string().nullable(),
|
|
221
|
+
contentHash: HashSchema2
|
|
222
|
+
}).strict();
|
|
210
223
|
var ModelStarterExecutionSchema = z2.object({
|
|
211
224
|
environment: EnvironmentReleaseSchema,
|
|
212
225
|
verifierSet: VerifierSetReleaseSchema,
|