openpond-sdk 0.1.6 → 0.1.8
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 +30 -0
- package/dist/model-starter-catalog.js +401 -0
- package/dist/model-starter-catalog.js.map +7 -0
- package/dist/model-starters.js +440 -0
- package/dist/model-starters.js.map +7 -0
- package/dist/types/packages/sdk/src/model-starter-catalog.d.ts +630 -0
- package/dist/types/packages/sdk/src/model-starter-catalog.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/model-starters.d.ts +1410 -0
- package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -0
- package/package.json +12 -3
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Model starter contracts
|
|
2
|
+
|
|
3
|
+
SDK 0.1.7 adds `openpond-sdk/model-starters` and `openpond-sdk/model-starter-catalog`.
|
|
4
|
+
|
|
5
|
+
A starter pins a Taskset, task definition, Reward binding, Reward releases and text assets by identity, revision and content hash. `validateResolvedModelStarter` checks the complete small-package graph, executable grader equivalence, task schemas, split isolation and preview selection. Reward source stays private to evaluation. Resolved small packages are limited to 16 MiB; large Tasksets require the manifest/shard path rather than increasing this limit.
|
|
6
|
+
|
|
7
|
+
`OpenPondModelStarterCatalogClient` lists metadata with `list({ limit, afterId })` and retrieves an exact package with `resolve({ id, revision, contentHash })`. It authenticates requests with an API key and workspace, rejects redirects, bounds streamed responses and checks returned identities. The hosted catalog endpoint must be deployed before these methods can be used against an environment.
|
|
8
|
+
|
|
9
|
+
`previewModelStarter(package)` projects only selected non-frozen inputs and policy-visible context, format schemas, metadata and split counts. It excludes expected outputs, private context and verifier bytes. Selection and preview perform no creation operation.
|
|
10
|
+
|
|
11
|
+
`createModelStarterCreationRequest(intent)` prepares the final configuration:
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { createModelStarterCreationRequest } from "openpond-sdk/model-starters";
|
|
15
|
+
|
|
16
|
+
const request = await createModelStarterCreationRequest({
|
|
17
|
+
profileId,
|
|
18
|
+
modelId,
|
|
19
|
+
name: "Invoice extractor",
|
|
20
|
+
starter: { id: starter.id, revision: starter.revision, contentHash: starter.contentHash },
|
|
21
|
+
startingModel: starter.startingModel,
|
|
22
|
+
method: starter.defaultMethod,
|
|
23
|
+
});
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Prepare the request on final confirmation and retain it for transport retries. The server must authorize the profile, resolve trusted catalog content, materialize immutable files and atomically save resources, model configuration and the original retry receipt. A stable operation ID alone does not implement server idempotency. Creation starts no model call or training job.
|
|
27
|
+
|
|
28
|
+
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.
|
|
29
|
+
|
|
30
|
+
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.
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
// src/model-starter-catalog.ts
|
|
2
|
+
import { z as z3 } from "zod";
|
|
3
|
+
|
|
4
|
+
// src/model-projects.ts
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { assertBoundedTaskJson } from "@openpond/evals/task-schema";
|
|
7
|
+
var IdSchema = z.string().trim().min(1).max(500);
|
|
8
|
+
var HashSchema = z.string().regex(/^[a-f0-9]{64}$/);
|
|
9
|
+
var TimestampSchema = z.string().datetime({ offset: true });
|
|
10
|
+
var ModelProjectImmutableRefSchema = z.object({
|
|
11
|
+
id: IdSchema,
|
|
12
|
+
contentHash: HashSchema
|
|
13
|
+
}).strict();
|
|
14
|
+
var ModelProjectVersionedRefSchema = ModelProjectImmutableRefSchema.extend({
|
|
15
|
+
revision: z.number().int().positive()
|
|
16
|
+
}).strict();
|
|
17
|
+
var ModelProjectBaseModelSchema = z.object({
|
|
18
|
+
schemaVersion: z.literal("openpond.baseModelPreference.v1"),
|
|
19
|
+
modelId: IdSchema,
|
|
20
|
+
revision: z.string().trim().min(1).max(256).nullable(),
|
|
21
|
+
tokenizerRevision: z.string().trim().min(1).max(256).nullable(),
|
|
22
|
+
chatTemplateHash: z.string().trim().min(8).max(256).nullable(),
|
|
23
|
+
modelAssetId: IdSchema.nullable(),
|
|
24
|
+
source: z.enum(["managed", "local", "builtin"])
|
|
25
|
+
}).strict();
|
|
26
|
+
var ModelProjectTrainingMethodSchema = z.enum([
|
|
27
|
+
"sft",
|
|
28
|
+
"dpo",
|
|
29
|
+
"grpo",
|
|
30
|
+
"ppo",
|
|
31
|
+
"sdft",
|
|
32
|
+
"opd",
|
|
33
|
+
"opsd",
|
|
34
|
+
"sdpo"
|
|
35
|
+
]);
|
|
36
|
+
var ModelProjectRecipeDocumentSchema = z.object({
|
|
37
|
+
schemaVersion: z.string().regex(/^openpond\.[A-Za-z0-9]+Recipe\.v\d+$/),
|
|
38
|
+
method: ModelProjectTrainingMethodSchema,
|
|
39
|
+
parameterization: z.enum(["lora", "full"])
|
|
40
|
+
}).catchall(z.unknown());
|
|
41
|
+
var ModelProjectTrainingSetupSchema = z.object({
|
|
42
|
+
tasksetRef: ModelProjectVersionedRefSchema.nullable().default(null),
|
|
43
|
+
rewardBindingRef: ModelProjectVersionedRefSchema.nullable().optional(),
|
|
44
|
+
tasksetRelease: ModelProjectImmutableRefSchema.nullable().default(null),
|
|
45
|
+
harnessRelease: ModelProjectImmutableRefSchema.nullable().default(null),
|
|
46
|
+
baseModel: ModelProjectBaseModelSchema.nullable().default(null),
|
|
47
|
+
method: ModelProjectTrainingMethodSchema.nullable().default(null),
|
|
48
|
+
destinationId: IdSchema.nullable().default(null),
|
|
49
|
+
managedRolloutPlacement: z.enum(["local", "remote"]).default("remote"),
|
|
50
|
+
managedGpuPlacementObjective: z.enum(["fast", "balanced", "economical"]).default("balanced"),
|
|
51
|
+
managedGpuRequirement: z.enum(["any", "h100_hbm3"]).default("any"),
|
|
52
|
+
runPreset: z.enum(["small", "standard", "custom", "small_experiment"]).nullable().default(null),
|
|
53
|
+
recipe: ModelProjectRecipeDocumentSchema.nullable().default(null),
|
|
54
|
+
preferredMaximumSpendUsd: z.number().nonnegative().nullable().default(null),
|
|
55
|
+
preferredRetentionDays: z.number().int().nonnegative().nullable().default(null)
|
|
56
|
+
}).strict();
|
|
57
|
+
var HostedModelProjectTrainingSetupSchema = ModelProjectTrainingSetupSchema.omit({ managedGpuRequirement: true });
|
|
58
|
+
var HostedModelProjectLinkSchema = z.object({
|
|
59
|
+
schemaVersion: z.literal("openpond.hostedModelProjectLink.v1"),
|
|
60
|
+
teamId: IdSchema,
|
|
61
|
+
projectId: IdSchema,
|
|
62
|
+
portableProjectId: IdSchema,
|
|
63
|
+
revision: z.number().int().positive(),
|
|
64
|
+
etag: HashSchema,
|
|
65
|
+
syncedSourceRevision: z.number().int().positive(),
|
|
66
|
+
syncedAt: TimestampSchema,
|
|
67
|
+
tasksets: z.array(
|
|
68
|
+
z.object({
|
|
69
|
+
localTasksetId: IdSchema,
|
|
70
|
+
releaseId: IdSchema,
|
|
71
|
+
releaseRevision: z.number().int().positive(),
|
|
72
|
+
releaseHash: HashSchema,
|
|
73
|
+
hostedTasksetId: IdSchema,
|
|
74
|
+
syncedAt: TimestampSchema
|
|
75
|
+
}).strict()
|
|
76
|
+
).max(1e4).default([])
|
|
77
|
+
}).strict();
|
|
78
|
+
var ModelProjectTasksetSyncSchema = z.object({
|
|
79
|
+
localTasksetId: IdSchema,
|
|
80
|
+
releaseId: IdSchema,
|
|
81
|
+
releaseRevision: z.number().int().positive(),
|
|
82
|
+
releaseHash: HashSchema,
|
|
83
|
+
state: z.enum(["syncing", "synced", "sync_failed"]),
|
|
84
|
+
hostedTasksetId: IdSchema.nullable().default(null),
|
|
85
|
+
lastAttemptAt: TimestampSchema,
|
|
86
|
+
syncedAt: TimestampSchema.nullable().default(null),
|
|
87
|
+
lastError: z.string().trim().min(1).max(5e3).nullable().default(null)
|
|
88
|
+
}).strict();
|
|
89
|
+
var ModelProjectSchema = z.object({
|
|
90
|
+
schemaVersion: z.literal("openpond.modelProject.v2"),
|
|
91
|
+
id: IdSchema,
|
|
92
|
+
profileId: IdSchema,
|
|
93
|
+
revision: z.number().int().positive().default(1),
|
|
94
|
+
name: z.string().trim().min(1).max(200),
|
|
95
|
+
objective: z.string().trim().max(5e3).nullable(),
|
|
96
|
+
defaultBaseModel: ModelProjectBaseModelSchema.nullable(),
|
|
97
|
+
defaultDestinationId: IdSchema.nullable(),
|
|
98
|
+
trainingSetup: ModelProjectTrainingSetupSchema,
|
|
99
|
+
hosted: HostedModelProjectLinkSchema.nullable().default(null),
|
|
100
|
+
tasksetSyncs: z.array(ModelProjectTasksetSyncSchema).max(1e4).default([]),
|
|
101
|
+
createdAt: TimestampSchema,
|
|
102
|
+
updatedAt: TimestampSchema
|
|
103
|
+
}).strict();
|
|
104
|
+
var ModelProjectEditableSchema = ModelProjectSchema.pick({
|
|
105
|
+
id: true,
|
|
106
|
+
profileId: true,
|
|
107
|
+
name: true,
|
|
108
|
+
objective: true,
|
|
109
|
+
defaultBaseModel: true,
|
|
110
|
+
defaultDestinationId: true,
|
|
111
|
+
trainingSetup: true
|
|
112
|
+
});
|
|
113
|
+
var ModelProjectSaveRequestSchema = z.object({
|
|
114
|
+
schemaVersion: z.literal("openpond.modelProjectSave.v1"),
|
|
115
|
+
operationId: IdSchema,
|
|
116
|
+
expectedRevision: z.number().int().nonnegative(),
|
|
117
|
+
project: ModelProjectEditableSchema
|
|
118
|
+
}).strict();
|
|
119
|
+
var ModelProjectConfigurationCheckSchema = z.object({
|
|
120
|
+
schemaVersion: z.literal("openpond.modelProjectConfigurationCheck.v1"),
|
|
121
|
+
configurationHash: HashSchema,
|
|
122
|
+
projectId: IdSchema,
|
|
123
|
+
expectedRevision: z.number().int().nonnegative(),
|
|
124
|
+
checkedAt: TimestampSchema,
|
|
125
|
+
canSave: z.boolean(),
|
|
126
|
+
deferred: z.array(z.enum(["base_model", "taskset"])).max(2),
|
|
127
|
+
findings: z.array(z.object({
|
|
128
|
+
code: IdSchema,
|
|
129
|
+
severity: z.enum(["error", "warning"]),
|
|
130
|
+
message: z.string().min(1).max(5e3),
|
|
131
|
+
field: z.string().min(1).max(500).nullable()
|
|
132
|
+
}).strict()).max(100)
|
|
133
|
+
}).strict();
|
|
134
|
+
var ModelProjectBaseModelCandidateSchema = z.object({
|
|
135
|
+
id: IdSchema,
|
|
136
|
+
name: z.string().min(1).max(500),
|
|
137
|
+
available: z.boolean(),
|
|
138
|
+
preference: ModelProjectBaseModelSchema
|
|
139
|
+
}).strict();
|
|
140
|
+
var HostedModelProjectSyncSchema = z.object({
|
|
141
|
+
schemaVersion: z.literal("openpond.hostedModelProjectSync.v2"),
|
|
142
|
+
portableProjectId: IdSchema,
|
|
143
|
+
name: z.string().trim().min(1).max(200),
|
|
144
|
+
objective: z.string().trim().max(5e3).nullable(),
|
|
145
|
+
defaultBaseModel: ModelProjectBaseModelSchema.nullable(),
|
|
146
|
+
defaultDestinationId: IdSchema.nullable(),
|
|
147
|
+
trainingSetup: HostedModelProjectTrainingSetupSchema,
|
|
148
|
+
sourceRevision: z.number().int().positive(),
|
|
149
|
+
sourceUpdatedAt: TimestampSchema,
|
|
150
|
+
expectedEtag: HashSchema.nullable().default(null)
|
|
151
|
+
}).strict();
|
|
152
|
+
var HostedModelProjectSummarySchema = z.object({
|
|
153
|
+
id: IdSchema,
|
|
154
|
+
teamId: IdSchema,
|
|
155
|
+
portableProjectId: IdSchema,
|
|
156
|
+
name: z.string().trim().min(1).max(200),
|
|
157
|
+
objective: z.string().trim().max(5e3).nullable(),
|
|
158
|
+
defaultBaseModel: ModelProjectBaseModelSchema.nullable(),
|
|
159
|
+
defaultDestinationId: IdSchema.nullable(),
|
|
160
|
+
trainingSetup: HostedModelProjectTrainingSetupSchema,
|
|
161
|
+
sourceRevision: z.number().int().positive(),
|
|
162
|
+
sourceUpdatedAt: TimestampSchema,
|
|
163
|
+
revision: z.number().int().positive(),
|
|
164
|
+
etag: HashSchema,
|
|
165
|
+
createdAt: TimestampSchema,
|
|
166
|
+
updatedAt: TimestampSchema
|
|
167
|
+
}).strict();
|
|
168
|
+
var ModelProjectResourceSummarySchema = z.object({
|
|
169
|
+
kind: z.enum([
|
|
170
|
+
"taskset_release",
|
|
171
|
+
"harness_release",
|
|
172
|
+
"dataset_release",
|
|
173
|
+
"evidence_set",
|
|
174
|
+
"model_version",
|
|
175
|
+
"reward_model_version",
|
|
176
|
+
"evaluation_receipt"
|
|
177
|
+
]),
|
|
178
|
+
ref: ModelProjectImmutableRefSchema,
|
|
179
|
+
role: z.string().trim().min(1).max(200).nullable().default(null),
|
|
180
|
+
updatedAt: TimestampSchema
|
|
181
|
+
}).strict();
|
|
182
|
+
var HostedModelProjectDetailSchema = z.object({
|
|
183
|
+
project: HostedModelProjectSummarySchema,
|
|
184
|
+
resources: z.array(ModelProjectResourceSummarySchema).max(1e4),
|
|
185
|
+
jobCount: z.number().int().nonnegative(),
|
|
186
|
+
latestJobIds: z.array(IdSchema).max(100)
|
|
187
|
+
}).strict();
|
|
188
|
+
var ModelProjectApiErrorSchema = z.object({
|
|
189
|
+
schemaVersion: z.literal("openpond.modelProjectApiError.v2"),
|
|
190
|
+
code: z.string().trim().min(1).max(200),
|
|
191
|
+
message: z.string().trim().min(1).max(5e3),
|
|
192
|
+
retryable: z.boolean().default(false),
|
|
193
|
+
requestId: z.string().trim().min(1).max(500).nullable().default(null),
|
|
194
|
+
details: z.record(z.string(), z.unknown()).default({})
|
|
195
|
+
}).strict();
|
|
196
|
+
|
|
197
|
+
// src/model-starters.ts
|
|
198
|
+
import { z as z2 } from "zod";
|
|
199
|
+
import { TasksetReleaseSchema, assertTasksetRelease } from "@openpond/evals/tasksets";
|
|
200
|
+
import { LearningTextAssetSchema, TaskDefinitionSchema, learningRef, sameLearningRef, sealLearningContent } from "@openpond/evals/learning";
|
|
201
|
+
import { RewardBindingSchema, RewardReleaseSchema, compileBoundGraders } from "@openpond/evals/rewards";
|
|
202
|
+
import { assertBoundedTaskJson as assertBoundedTaskJson2, validateTaskValue } from "@openpond/evals/task-schema";
|
|
203
|
+
var IdSchema2 = z2.string().trim().min(1).max(500);
|
|
204
|
+
var RefSchema = ModelProjectVersionedRefSchema;
|
|
205
|
+
var ModelStarterContentSchema = z2.object({
|
|
206
|
+
schemaVersion: z2.literal("openpond.modelStarter.v1"),
|
|
207
|
+
id: IdSchema2,
|
|
208
|
+
revision: z2.number().int().positive(),
|
|
209
|
+
name: z2.string().trim().min(1).max(200),
|
|
210
|
+
description: z2.string().trim().min(1).max(2e3),
|
|
211
|
+
category: z2.enum(["extraction", "support", "operations", "knowledge", "coding", "writing", "classification"]),
|
|
212
|
+
taskset: RefSchema,
|
|
213
|
+
taskDefinition: RefSchema,
|
|
214
|
+
rewardBinding: RefSchema,
|
|
215
|
+
rewards: z2.array(RefSchema).min(1).max(100),
|
|
216
|
+
assets: z2.array(RefSchema).max(1e3),
|
|
217
|
+
previewTaskIds: z2.array(IdSchema2).min(1).max(8),
|
|
218
|
+
startingModel: ModelProjectBaseModelSchema,
|
|
219
|
+
supportedMethods: z2.array(ModelProjectTrainingMethodSchema).min(1).max(8),
|
|
220
|
+
defaultMethod: ModelProjectTrainingMethodSchema,
|
|
221
|
+
provenance: z2.object({ author: z2.string().min(1).max(200), license: z2.string().min(1).max(200), sourceDescription: z2.string().min(1).max(2e3) }).strict(),
|
|
222
|
+
// These are references to real results. Package publication does not create
|
|
223
|
+
// evidence, qualify a starter, or enable continuous learning.
|
|
224
|
+
evidence: z2.object({ verifierFixtures: RefSchema.nullable(), baseline: RefSchema.nullable(), training: RefSchema.nullable(), evaluation: RefSchema.nullable() }).strict()
|
|
225
|
+
}).strict().superRefine((starter, context) => {
|
|
226
|
+
if (!starter.supportedMethods.includes(starter.defaultMethod)) context.addIssue({ code: "custom", path: ["defaultMethod"], message: "The default method must be supported by the package." });
|
|
227
|
+
for (const field of ["rewards", "assets"]) {
|
|
228
|
+
if (new Set(starter[field].map((ref) => ref.id)).size !== starter[field].length) context.addIssue({ code: "custom", path: [field], message: "Dependency identities must be unique." });
|
|
229
|
+
}
|
|
230
|
+
if (new Set(starter.previewTaskIds).size !== starter.previewTaskIds.length) context.addIssue({ code: "custom", path: ["previewTaskIds"], message: "Preview tasks must be unique." });
|
|
231
|
+
});
|
|
232
|
+
var ModelStarterSchema = ModelStarterContentSchema.safeExtend({ contentHash: z2.string().regex(/^[a-f0-9]{64}$/) });
|
|
233
|
+
var ResolvedModelStarterSchema = z2.object({
|
|
234
|
+
starter: ModelStarterSchema,
|
|
235
|
+
taskset: TasksetReleaseSchema,
|
|
236
|
+
taskDefinition: TaskDefinitionSchema,
|
|
237
|
+
rewardBinding: RewardBindingSchema,
|
|
238
|
+
rewards: z2.array(RewardReleaseSchema).min(1).max(100),
|
|
239
|
+
assets: z2.array(LearningTextAssetSchema).max(1e3)
|
|
240
|
+
}).strict();
|
|
241
|
+
var ModelStarterCreationIntentSchema = z2.object({
|
|
242
|
+
profileId: IdSchema2,
|
|
243
|
+
modelId: IdSchema2,
|
|
244
|
+
name: z2.string().trim().min(1).max(200),
|
|
245
|
+
starter: RefSchema,
|
|
246
|
+
startingModel: ModelProjectBaseModelSchema,
|
|
247
|
+
method: ModelProjectTrainingMethodSchema
|
|
248
|
+
}).strict();
|
|
249
|
+
var ModelStarterCreationRequestSchema = ModelStarterCreationIntentSchema.extend({
|
|
250
|
+
schemaVersion: z2.literal("openpond.modelStarterCreation.v1"),
|
|
251
|
+
operationId: IdSchema2
|
|
252
|
+
}).strict();
|
|
253
|
+
function validateResolvedModelStarter(value) {
|
|
254
|
+
assertBoundedTaskJson2(value, 16 * 1024 * 1024);
|
|
255
|
+
const resolved = ResolvedModelStarterSchema.parse(value);
|
|
256
|
+
const { starter, taskset, taskDefinition, rewardBinding, rewards, assets } = resolved;
|
|
257
|
+
const resources = [starter, taskset, taskDefinition, rewardBinding, ...rewards, ...assets];
|
|
258
|
+
for (const resource of resources) {
|
|
259
|
+
const { contentHash, ...content } = resource;
|
|
260
|
+
if (sealLearningContent(content).contentHash !== contentHash) throw new Error(`Starter resource integrity failed: ${resource.id}.`);
|
|
261
|
+
}
|
|
262
|
+
assertTasksetRelease(taskset);
|
|
263
|
+
function exact(expected, resource) {
|
|
264
|
+
if (!sameLearningRef(expected, learningRef(resource))) throw new Error(`Starter dependency mismatch: ${expected.id}.`);
|
|
265
|
+
}
|
|
266
|
+
exact(starter.taskset, taskset);
|
|
267
|
+
exact(starter.taskDefinition, taskDefinition);
|
|
268
|
+
exact(starter.rewardBinding, rewardBinding);
|
|
269
|
+
exact(taskDefinition.rewardBinding, rewardBinding);
|
|
270
|
+
if (rewardBinding.recipeRef) throw new Error("Starter binding recipes must be resolved into a standalone binding before publication.");
|
|
271
|
+
const { policy, environment, environmentRelease, tools, capabilities, verifierSetRelease } = taskset;
|
|
272
|
+
const execution = { policy, environment, ...environmentRelease ? { environmentRelease } : {}, tools, capabilities, ...verifierSetRelease ? { verifierSetRelease } : {} };
|
|
273
|
+
if (sealLearningContent(execution).contentHash !== sealLearningContent(taskDefinition.execution).contentHash) throw new Error("Starter execution context differs from its task format.");
|
|
274
|
+
if (sealLearningContent({ graders: taskset.graders }).contentHash !== sealLearningContent({ graders: compileBoundGraders(rewardBinding, rewards) }).contentHash) throw new Error("Starter executable graders differ from its Reward binding.");
|
|
275
|
+
for (const [references, values] of [[starter.rewards, rewards], [starter.assets, assets]]) {
|
|
276
|
+
if (references.length !== values.length || new Set(values.map((resource) => resource.id)).size !== values.length) throw new Error("Starter dependency inventory mismatch.");
|
|
277
|
+
for (const ref of references) {
|
|
278
|
+
const resource = values.find((value2) => value2.id === ref.id);
|
|
279
|
+
if (!resource) throw new Error(`Starter dependency is missing: ${ref.id}.`);
|
|
280
|
+
exact(ref, resource);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
for (const source of rewardBinding.sources) {
|
|
284
|
+
const reward = rewards.find((reward2) => reward2.id === source.reward.id);
|
|
285
|
+
if (!reward) throw new Error(`Starter Reward is missing: ${source.reward.id}.`);
|
|
286
|
+
exact(source.reward, reward);
|
|
287
|
+
}
|
|
288
|
+
for (const reward of rewards) {
|
|
289
|
+
const implementation = reward.implementation;
|
|
290
|
+
const references = [
|
|
291
|
+
...reward.assets,
|
|
292
|
+
..."verifierRef" in implementation ? [implementation.verifierRef] : [],
|
|
293
|
+
..."rubricRef" in implementation ? [implementation.rubricRef] : [],
|
|
294
|
+
..."inputContract" in implementation ? [implementation.inputContract] : []
|
|
295
|
+
];
|
|
296
|
+
for (const ref of references) {
|
|
297
|
+
const asset = assets.find((asset2) => asset2.id === ref.id);
|
|
298
|
+
if (!asset || sealLearningContent(asset.asset).contentHash !== sealLearningContent(ref).contentHash) throw new Error(`Starter Reward source is missing or changed: ${ref.id}.`);
|
|
299
|
+
if (ref.visibility === "policy") throw new Error(`Starter Reward source must remain private to its evaluator: ${ref.id}.`);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
if (new Set(taskset.tasks.map((task) => task.id)).size !== taskset.tasks.length) throw new Error("Starter task identities must be unique.");
|
|
303
|
+
const inputSplits = /* @__PURE__ */ new Map();
|
|
304
|
+
for (const task of taskset.tasks) {
|
|
305
|
+
if (task.policyVisibleContext.instructions !== taskDefinition.instructions) throw new Error(`Starter task does not carry its declared model instructions: ${task.id}.`);
|
|
306
|
+
const inputHash = sealLearningContent({ input: task.input, context: task.policyVisibleContext }).contentHash;
|
|
307
|
+
const priorSplit = inputSplits.get(inputHash);
|
|
308
|
+
if (priorSplit && priorSplit !== task.split) throw new Error("Starter policy input appears in multiple splits.");
|
|
309
|
+
inputSplits.set(inputHash, task.split);
|
|
310
|
+
if (!validateTaskValue(taskDefinition.inputSchema, task.input).valid) throw new Error(`Starter task input does not match its format: ${task.id}.`);
|
|
311
|
+
if (task.expectedOutput !== null && !validateTaskValue(taskDefinition.outputSchema, task.expectedOutput).valid) throw new Error(`Starter expected output does not match its format: ${task.id}.`);
|
|
312
|
+
}
|
|
313
|
+
for (const id of starter.previewTaskIds) {
|
|
314
|
+
const task = taskset.tasks.find((task2) => task2.id === id);
|
|
315
|
+
if (!task || task.split === "frozen_eval") throw new Error(`Starter preview task is unavailable: ${id}.`);
|
|
316
|
+
}
|
|
317
|
+
return resolved;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// src/model-starter-catalog.ts
|
|
321
|
+
var ModelStarterCatalogQuerySchema = z3.object({
|
|
322
|
+
afterId: z3.string().trim().min(1).max(500).optional(),
|
|
323
|
+
limit: z3.number().int().min(1).max(100).default(30)
|
|
324
|
+
}).strict();
|
|
325
|
+
var ModelStarterCatalogPageSchema = z3.object({
|
|
326
|
+
items: z3.array(ModelStarterSchema).max(100),
|
|
327
|
+
nextCursor: z3.string().min(1).max(500).nullable()
|
|
328
|
+
}).strict();
|
|
329
|
+
var ModelStarterCatalogErrorSchema = z3.object({ code: z3.string().min(1).max(200), message: z3.string().min(1).max(5e3) }).strict();
|
|
330
|
+
var OpenPondModelStarterCatalogError = class extends Error {
|
|
331
|
+
constructor(status, code, message) {
|
|
332
|
+
super(message);
|
|
333
|
+
this.status = status;
|
|
334
|
+
this.code = code;
|
|
335
|
+
this.name = "OpenPondModelStarterCatalogError";
|
|
336
|
+
}
|
|
337
|
+
status;
|
|
338
|
+
code;
|
|
339
|
+
};
|
|
340
|
+
var OpenPondModelStarterCatalogClient = class {
|
|
341
|
+
#options;
|
|
342
|
+
constructor(options) {
|
|
343
|
+
if (!options.apiKey.trim() || !options.teamId.trim()) throw new Error("Starter catalog credentials and workspace are required.");
|
|
344
|
+
const url = new URL(options.baseUrl);
|
|
345
|
+
if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error("Starter catalog base URL must be an HTTP(S) endpoint without credentials, query or fragment.");
|
|
346
|
+
this.#options = { ...options, baseUrl: url.toString().replace(/\/+$/, "") };
|
|
347
|
+
}
|
|
348
|
+
async list(query = {}, options = {}) {
|
|
349
|
+
const parsed = ModelStarterCatalogQuerySchema.parse(query);
|
|
350
|
+
const search = new URLSearchParams({ limit: String(parsed.limit) });
|
|
351
|
+
if (parsed.afterId) search.set("afterId", parsed.afterId);
|
|
352
|
+
const page = ModelStarterCatalogPageSchema.parse(await this.#request(`?${search}`, 4 * 1024 * 1024, options.signal));
|
|
353
|
+
if (page.items.length > parsed.limit || new Set(page.items.map((item) => item.id)).size !== page.items.length) throw new OpenPondModelStarterCatalogError(502, "starter_catalog_page_invalid", "Starter catalog returned an invalid page.");
|
|
354
|
+
return page;
|
|
355
|
+
}
|
|
356
|
+
async resolve(reference, options = {}) {
|
|
357
|
+
const ref = ModelProjectVersionedRefSchema.parse(reference);
|
|
358
|
+
const resolved = validateResolvedModelStarter(await this.#request(`/releases/${encodeURIComponent(ref.id)}/${ref.revision}/${ref.contentHash}`, 16 * 1024 * 1024, options.signal));
|
|
359
|
+
if (resolved.starter.id !== ref.id || resolved.starter.revision !== ref.revision || resolved.starter.contentHash !== ref.contentHash) throw new OpenPondModelStarterCatalogError(502, "starter_catalog_revision_mismatch", "Starter catalog returned a different package revision.");
|
|
360
|
+
return resolved;
|
|
361
|
+
}
|
|
362
|
+
async #request(path, maximumBytes, signal) {
|
|
363
|
+
const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/model-starter-catalog${path}`, {
|
|
364
|
+
headers: { Authorization: `Bearer ${this.#options.apiKey}`, "X-OpenPond-Team-Id": this.#options.teamId, Accept: "application/json" },
|
|
365
|
+
signal,
|
|
366
|
+
redirect: "error"
|
|
367
|
+
});
|
|
368
|
+
const reader = response.body?.getReader();
|
|
369
|
+
if (!reader) throw new OpenPondModelStarterCatalogError(response.status, "starter_catalog_empty_response", "Starter catalog returned no data.");
|
|
370
|
+
const decoder = new TextDecoder();
|
|
371
|
+
let size = 0;
|
|
372
|
+
let text = "";
|
|
373
|
+
try {
|
|
374
|
+
while (true) {
|
|
375
|
+
const chunk = await reader.read();
|
|
376
|
+
if (chunk.done) break;
|
|
377
|
+
size += chunk.value.byteLength;
|
|
378
|
+
if (size > maximumBytes) throw new OpenPondModelStarterCatalogError(response.status, "starter_catalog_response_too_large", "Starter catalog response exceeded its limit.");
|
|
379
|
+
text += decoder.decode(chunk.value, { stream: true });
|
|
380
|
+
}
|
|
381
|
+
text += decoder.decode();
|
|
382
|
+
} finally {
|
|
383
|
+
await reader.cancel();
|
|
384
|
+
reader.releaseLock();
|
|
385
|
+
}
|
|
386
|
+
const payload = JSON.parse(text);
|
|
387
|
+
if (!response.ok) {
|
|
388
|
+
const error = ModelStarterCatalogErrorSchema.safeParse(payload);
|
|
389
|
+
throw new OpenPondModelStarterCatalogError(response.status, error.success ? error.data.code : "starter_catalog_invalid_error", error.success ? error.data.message : "Starter catalog request failed.");
|
|
390
|
+
}
|
|
391
|
+
return payload;
|
|
392
|
+
}
|
|
393
|
+
};
|
|
394
|
+
export {
|
|
395
|
+
ModelStarterCatalogErrorSchema,
|
|
396
|
+
ModelStarterCatalogPageSchema,
|
|
397
|
+
ModelStarterCatalogQuerySchema,
|
|
398
|
+
OpenPondModelStarterCatalogClient,
|
|
399
|
+
OpenPondModelStarterCatalogError
|
|
400
|
+
};
|
|
401
|
+
//# sourceMappingURL=model-starter-catalog.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/model-starter-catalog.ts", "../src/model-projects.ts", "../src/model-starters.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\nimport { ModelProjectVersionedRefSchema } from \"./model-projects.js\";\nimport { ModelStarterSchema, validateResolvedModelStarter } from \"./model-starters.js\";\n\nexport const ModelStarterCatalogQuerySchema = z.object({\n afterId: z.string().trim().min(1).max(500).optional(),\n limit: z.number().int().min(1).max(100).default(30),\n}).strict();\nexport const ModelStarterCatalogPageSchema = z.object({\n items: z.array(ModelStarterSchema).max(100),\n nextCursor: z.string().min(1).max(500).nullable(),\n}).strict();\nexport const ModelStarterCatalogErrorSchema = z.object({ code: z.string().min(1).max(200), message: z.string().min(1).max(5_000) }).strict();\n\nexport class OpenPondModelStarterCatalogError extends Error {\n constructor(readonly status: number, readonly code: string, message: string) { super(message); this.name = \"OpenPondModelStarterCatalogError\"; }\n}\n\n/** One hosted catalog for both clients. Discovery never downloads task rows;\n * exact resolution obtains a bounded, integrity-checked package separately. */\nexport class OpenPondModelStarterCatalogClient {\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 if (!options.apiKey.trim() || !options.teamId.trim()) throw new Error(\"Starter catalog credentials and workspace are required.\");\n const url = new URL(options.baseUrl);\n if (![\"http:\", \"https:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error(\"Starter catalog base URL must be an HTTP(S) endpoint without credentials, query or fragment.\");\n this.#options = { ...options, baseUrl: url.toString().replace(/\\/+$/, \"\") };\n }\n\n async list(query: z.input<typeof ModelStarterCatalogQuerySchema> = {}, options: { signal?: AbortSignal } = {}) {\n const parsed = ModelStarterCatalogQuerySchema.parse(query);\n const search = new URLSearchParams({ limit: String(parsed.limit) });\n if (parsed.afterId) search.set(\"afterId\", parsed.afterId);\n const page = ModelStarterCatalogPageSchema.parse(await this.#request(`?${search}`, 4 * 1024 * 1024, options.signal));\n if (page.items.length > parsed.limit || new Set(page.items.map(item => item.id)).size !== page.items.length) throw new OpenPondModelStarterCatalogError(502, \"starter_catalog_page_invalid\", \"Starter catalog returned an invalid page.\");\n return page;\n }\n\n async resolve(reference: z.infer<typeof ModelProjectVersionedRefSchema>, options: { signal?: AbortSignal } = {}) {\n const ref = ModelProjectVersionedRefSchema.parse(reference);\n const resolved = validateResolvedModelStarter(await this.#request(`/releases/${encodeURIComponent(ref.id)}/${ref.revision}/${ref.contentHash}`, 16 * 1024 * 1024, options.signal));\n if (resolved.starter.id !== ref.id || resolved.starter.revision !== ref.revision || resolved.starter.contentHash !== ref.contentHash) throw new OpenPondModelStarterCatalogError(502, \"starter_catalog_revision_mismatch\", \"Starter catalog returned a different package revision.\");\n return resolved;\n }\n\n async #request(path: string, maximumBytes: number, signal?: AbortSignal): Promise<unknown> {\n const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/model-starter-catalog${path}`, {\n headers: { Authorization: `Bearer ${this.#options.apiKey}`, \"X-OpenPond-Team-Id\": this.#options.teamId, Accept: \"application/json\" }, signal, redirect: \"error\",\n });\n const reader = response.body?.getReader();\n if (!reader) throw new OpenPondModelStarterCatalogError(response.status, \"starter_catalog_empty_response\", \"Starter catalog returned no data.\");\n const decoder = new TextDecoder();\n let size = 0;\n let text = \"\";\n try {\n while (true) {\n const chunk = await reader.read();\n if (chunk.done) break;\n size += chunk.value.byteLength;\n if (size > maximumBytes) throw new OpenPondModelStarterCatalogError(response.status, \"starter_catalog_response_too_large\", \"Starter catalog response exceeded its limit.\");\n text += decoder.decode(chunk.value, { stream: true });\n }\n text += decoder.decode();\n } finally { await reader.cancel(); reader.releaseLock(); }\n const payload: unknown = JSON.parse(text);\n if (!response.ok) {\n const error = ModelStarterCatalogErrorSchema.safeParse(payload);\n throw new OpenPondModelStarterCatalogError(response.status, error.success ? error.data.code : \"starter_catalog_invalid_error\", error.success ? error.data.message : \"Starter catalog request failed.\");\n }\n return payload;\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", "import { z } from \"zod\";\nimport { TasksetReleaseSchema, assertTasksetRelease } from \"@openpond/evals/tasksets\";\nimport { LearningTextAssetSchema, TaskDefinitionSchema, learningRef, sameLearningRef, sealLearningContent } from \"@openpond/evals/learning\";\nimport { RewardBindingSchema, RewardReleaseSchema, compileBoundGraders } from \"@openpond/evals/rewards\";\nimport { assertBoundedTaskJson, validateTaskValue } from \"@openpond/evals/task-schema\";\n\nimport { ModelProjectBaseModelSchema, ModelProjectTrainingMethodSchema, ModelProjectVersionedRefSchema } from \"./model-projects.js\";\nimport { canonicalSha256 } from \"./protocol.js\";\n\nconst IdSchema = z.string().trim().min(1).max(500);\nconst RefSchema = ModelProjectVersionedRefSchema;\n\n/** Catalog records contain references and previews, never the private task rows. */\nexport const ModelStarterContentSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelStarter.v1\"),\n id: IdSchema,\n revision: z.number().int().positive(),\n name: z.string().trim().min(1).max(200),\n description: z.string().trim().min(1).max(2_000),\n category: z.enum([\"extraction\", \"support\", \"operations\", \"knowledge\", \"coding\", \"writing\", \"classification\"]),\n taskset: RefSchema,\n taskDefinition: RefSchema,\n rewardBinding: RefSchema,\n rewards: z.array(RefSchema).min(1).max(100),\n assets: z.array(RefSchema).max(1_000),\n previewTaskIds: z.array(IdSchema).min(1).max(8),\n startingModel: ModelProjectBaseModelSchema,\n supportedMethods: z.array(ModelProjectTrainingMethodSchema).min(1).max(8),\n defaultMethod: ModelProjectTrainingMethodSchema,\n provenance: z.object({ author: z.string().min(1).max(200), license: z.string().min(1).max(200), sourceDescription: z.string().min(1).max(2_000) }).strict(),\n // These are references to real results. Package publication does not create\n // evidence, qualify a starter, or enable continuous learning.\n evidence: z.object({ verifierFixtures: RefSchema.nullable(), baseline: RefSchema.nullable(), training: RefSchema.nullable(), evaluation: RefSchema.nullable() }).strict(),\n}).strict().superRefine((starter, context) => {\n if (!starter.supportedMethods.includes(starter.defaultMethod)) context.addIssue({ code: \"custom\", path: [\"defaultMethod\"], message: \"The default method must be supported by the package.\" });\n for (const field of [\"rewards\", \"assets\"] as const) {\n if (new Set(starter[field].map(ref => ref.id)).size !== starter[field].length) context.addIssue({ code: \"custom\", path: [field], message: \"Dependency identities must be unique.\" });\n }\n if (new Set(starter.previewTaskIds).size !== starter.previewTaskIds.length) context.addIssue({ code: \"custom\", path: [\"previewTaskIds\"], message: \"Preview tasks must be unique.\" });\n});\nexport const ModelStarterSchema = ModelStarterContentSchema.safeExtend({ contentHash: z.string().regex(/^[a-f0-9]{64}$/) });\nexport type ModelStarter = z.infer<typeof ModelStarterSchema>;\n\n/** A resolved small package, obtained separately from catalog discovery.\n * Large Tasksets remain manifest/shard resources; they are not list payloads. */\nexport const ResolvedModelStarterSchema = z.object({\n starter: ModelStarterSchema,\n taskset: TasksetReleaseSchema,\n taskDefinition: TaskDefinitionSchema,\n rewardBinding: RewardBindingSchema,\n rewards: z.array(RewardReleaseSchema).min(1).max(100),\n assets: z.array(LearningTextAssetSchema).max(1_000),\n}).strict();\nexport type ResolvedModelStarter = z.infer<typeof ResolvedModelStarterSchema>;\n\n/** Final creation intent. The server resolves package bytes from its catalog;\n * callers cannot supply executable resources or qualification receipts here. */\nexport const ModelStarterCreationIntentSchema = z.object({\n profileId: IdSchema,\n modelId: IdSchema,\n name: z.string().trim().min(1).max(200),\n starter: RefSchema,\n startingModel: ModelProjectBaseModelSchema,\n method: ModelProjectTrainingMethodSchema,\n}).strict();\nexport const ModelStarterCreationRequestSchema = ModelStarterCreationIntentSchema.extend({\n schemaVersion: z.literal(\"openpond.modelStarterCreation.v1\"),\n operationId: IdSchema,\n}).strict();\nexport type ModelStarterCreationRequest = z.infer<typeof ModelStarterCreationRequestSchema>;\n\nexport function parseModelStarterCreationRequest(value: unknown): ModelStarterCreationRequest {\n assertBoundedTaskJson(value, 64 * 1024);\n return ModelStarterCreationRequestSchema.parse(value);\n}\n\n/** Prepare once on final confirmation and retain across uncertain transport\n * outcomes. The server must bind operationId to the complete original intent\n * and atomically commit resources, model configuration and the retry receipt. */\nexport async function createModelStarterCreationRequest(\n value: z.input<typeof ModelStarterCreationIntentSchema>,\n): Promise<ModelStarterCreationRequest> {\n assertBoundedTaskJson(value, 64 * 1024);\n const intent = ModelStarterCreationIntentSchema.parse(value);\n return parseModelStarterCreationRequest({\n ...intent,\n schemaVersion: \"openpond.modelStarterCreation.v1\",\n operationId: `model-starter:${await canonicalSha256(intent)}`,\n });\n}\n\n/** Scope authorization belongs to the API. This validates the final intent\n * against the exact trusted package before any user resources are written. */\nexport function validateModelStarterCreation(value: unknown, packageValue: unknown) {\n const request = parseModelStarterCreationRequest(value);\n const resolved = validateResolvedModelStarter(packageValue);\n if (!sameLearningRef(request.starter, learningRef(resolved.starter))) throw new Error(\"Starter creation references a different package revision.\");\n if (!resolved.starter.supportedMethods.includes(request.method)) throw new Error(\"The selected training method is not supported by this starter.\");\n return { request, resolved };\n}\n\n/** Explicit projection keeps frozen examples, expected outputs, privileged\n * context and verifier source out of read-only model-facing previews. */\nexport function previewModelStarter(value: unknown) {\n const { starter, taskset, taskDefinition, rewardBinding, rewards } = validateResolvedModelStarter(value);\n return {\n starter,\n inputSchema: taskDefinition.inputSchema,\n outputSchema: taskDefinition.outputSchema,\n reward: {\n name: rewardBinding.name,\n description: rewardBinding.description,\n checks: rewardBinding.sources.map(source => {\n const reward = rewards.find(reward => sameLearningRef(source.reward, learningRef(reward)))!;\n return { name: reward.name, description: reward.description, kind: reward.implementation.kind, role: source.role, weight: source.weight, required: source.required, hardGate: source.hardGate };\n }),\n },\n tasks: starter.previewTaskIds.map(id => {\n const task = taskset.tasks.find(task => task.id === id)!;\n return { id: task.id, input: task.input, policyVisibleContext: task.policyVisibleContext };\n }),\n counts: {\n train: taskset.tasks.filter(task => task.split === \"train\").length,\n validation: taskset.tasks.filter(task => task.split === \"validation\").length,\n frozenEvaluation: taskset.tasks.filter(task => task.split === \"frozen_eval\").length,\n },\n };\n}\n\n/** Verify the dependency graph before creating user-owned configuration.\n * A matching outer hash alone cannot authorize substituted private graders. */\nexport function validateResolvedModelStarter(value: unknown): ResolvedModelStarter {\n assertBoundedTaskJson(value, 16 * 1024 * 1024);\n const resolved = ResolvedModelStarterSchema.parse(value);\n const { starter, taskset, taskDefinition, rewardBinding, rewards, assets } = resolved;\n const resources = [starter, taskset, taskDefinition, rewardBinding, ...rewards, ...assets];\n for (const resource of resources) {\n const { contentHash, ...content } = resource;\n if (sealLearningContent(content).contentHash !== contentHash) throw new Error(`Starter resource integrity failed: ${resource.id}.`);\n }\n assertTasksetRelease(taskset);\n function exact(expected: z.infer<typeof RefSchema>, resource: { id: string; revision: number; contentHash: string }) {\n if (!sameLearningRef(expected, learningRef(resource))) throw new Error(`Starter dependency mismatch: ${expected.id}.`);\n }\n exact(starter.taskset, taskset);\n exact(starter.taskDefinition, taskDefinition);\n exact(starter.rewardBinding, rewardBinding);\n exact(taskDefinition.rewardBinding, rewardBinding);\n if (rewardBinding.recipeRef) throw new Error(\"Starter binding recipes must be resolved into a standalone binding before publication.\");\n const { policy, environment, environmentRelease, tools, capabilities, verifierSetRelease } = taskset;\n const execution = { policy, environment, ...(environmentRelease ? { environmentRelease } : {}), tools, capabilities, ...(verifierSetRelease ? { verifierSetRelease } : {}) };\n if (sealLearningContent(execution).contentHash !== sealLearningContent(taskDefinition.execution).contentHash) throw new Error(\"Starter execution context differs from its task format.\");\n if (sealLearningContent({ graders: taskset.graders }).contentHash !== sealLearningContent({ graders: compileBoundGraders(rewardBinding, rewards) }).contentHash) throw new Error(\"Starter executable graders differ from its Reward binding.\");\n for (const [references, values] of [[starter.rewards, rewards], [starter.assets, assets]] as const) {\n if (references.length !== values.length || new Set(values.map(resource => resource.id)).size !== values.length) throw new Error(\"Starter dependency inventory mismatch.\");\n for (const ref of references) {\n const resource = values.find(value => value.id === ref.id);\n if (!resource) throw new Error(`Starter dependency is missing: ${ref.id}.`);\n exact(ref, resource);\n }\n }\n for (const source of rewardBinding.sources) {\n const reward = rewards.find(reward => reward.id === source.reward.id);\n if (!reward) throw new Error(`Starter Reward is missing: ${source.reward.id}.`);\n exact(source.reward, reward);\n }\n for (const reward of rewards) {\n const implementation = reward.implementation;\n const references = [...reward.assets,\n ...(\"verifierRef\" in implementation ? [implementation.verifierRef] : []),\n ...(\"rubricRef\" in implementation ? [implementation.rubricRef] : []),\n ...(\"inputContract\" in implementation ? [implementation.inputContract] : []),\n ];\n for (const ref of references) {\n const asset = assets.find(asset => asset.id === ref.id);\n if (!asset || sealLearningContent(asset.asset).contentHash !== sealLearningContent(ref).contentHash) throw new Error(`Starter Reward source is missing or changed: ${ref.id}.`);\n if (ref.visibility === \"policy\") throw new Error(`Starter Reward source must remain private to its evaluator: ${ref.id}.`);\n }\n }\n if (new Set(taskset.tasks.map(task => task.id)).size !== taskset.tasks.length) throw new Error(\"Starter task identities must be unique.\");\n const inputSplits = new Map<string, string>();\n for (const task of taskset.tasks) {\n if (task.policyVisibleContext.instructions !== taskDefinition.instructions) throw new Error(`Starter task does not carry its declared model instructions: ${task.id}.`);\n const inputHash = sealLearningContent({ input: task.input, context: task.policyVisibleContext }).contentHash;\n const priorSplit = inputSplits.get(inputHash);\n if (priorSplit && priorSplit !== task.split) throw new Error(\"Starter policy input appears in multiple splits.\");\n inputSplits.set(inputHash, task.split);\n if (!validateTaskValue(taskDefinition.inputSchema, task.input).valid) throw new Error(`Starter task input does not match its format: ${task.id}.`);\n if (task.expectedOutput !== null && !validateTaskValue(taskDefinition.outputSchema, task.expectedOutput).valid) throw new Error(`Starter expected output does not match its format: ${task.id}.`);\n }\n for (const id of starter.previewTaskIds) {\n const task = taskset.tasks.find(task => task.id === id);\n if (!task || task.split === \"frozen_eval\") throw new Error(`Starter preview task is unavailable: ${id}.`);\n }\n return resolved;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["z", "z", "assertBoundedTaskJson", "IdSchema", "z", "assertBoundedTaskJson", "value", "reward", "asset", "task", "z"]
|
|
7
|
+
}
|