openpond-sdk 0.1.9 → 0.1.10
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 +4 -0
- package/dist/model-starter-catalog.js +92 -39
- package/dist/model-starter-catalog.js.map +4 -4
- package/dist/model-starters.js +86 -34
- package/dist/model-starters.js.map +4 -4
- package/dist/types/packages/sdk/src/model-starter-catalog.d.ts +159 -0
- package/dist/types/packages/sdk/src/model-starter-catalog.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starter-execution.d.ts +226 -0
- package/dist/types/packages/sdk/src/model-starter-execution.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/model-starters.d.ts +379 -0
- package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -1
- package/package.json +2 -2
package/MODEL_STARTERS.md
CHANGED
|
@@ -4,6 +4,10 @@ SDK 0.1.7 adds `openpond-sdk/model-starters` and `openpond-sdk/model-starter-cat
|
|
|
4
4
|
|
|
5
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
6
|
|
|
7
|
+
Tool packages using `openpond.javascript-environment.v1` also supply an `execution` object containing `environment`, `verifierSet`, and `javascript` releases. Taskset execution references pin the environment and verifier set; `environment.metadata.javascriptEnvironment` pins the JavaScript definition by identity, revision, and hash. The environment contract, tool declarations and compiled graders must agree exactly across these resources. Each task's `privilegedContextRef` identifies an inventoried `host_private` JSON text asset containing its initial state. Validation verifies the module asset, all referenced environment schema assets, and bounded object state before creation. These environments have no network or connected-app capabilities.
|
|
8
|
+
|
|
9
|
+
Execution resources are resolved package data and are excluded from previews. Hosts must persist the verified closure with the task resources and load it for their execution adapter; package validation alone does not implement a host adapter or create runtime evidence. Initial state belongs to the environment owner and must never be copied into model messages. Model-written claims about state cannot replace owner-collected results.
|
|
10
|
+
|
|
7
11
|
`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
12
|
|
|
9
13
|
`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.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/model-starter-catalog.ts
|
|
2
|
-
import { z as
|
|
2
|
+
import { z as z4 } from "zod";
|
|
3
3
|
|
|
4
4
|
// src/model-projects.ts
|
|
5
5
|
import { z } from "zod";
|
|
@@ -195,33 +195,84 @@ var ModelProjectApiErrorSchema = z.object({
|
|
|
195
195
|
}).strict();
|
|
196
196
|
|
|
197
197
|
// src/model-starters.ts
|
|
198
|
-
import { z as
|
|
198
|
+
import { z as z3 } from "zod";
|
|
199
199
|
import { TasksetReleaseSchema, assertTasksetRelease } from "@openpond/evals/tasksets";
|
|
200
|
-
import { LearningTextAssetSchema, TaskDefinitionSchema, learningRef, sameLearningRef, sealLearningContent } from "@openpond/evals/learning";
|
|
200
|
+
import { LearningTextAssetSchema, TaskDefinitionSchema, learningRef as learningRef2, sameLearningRef, sealLearningContent as sealLearningContent2 } from "@openpond/evals/learning";
|
|
201
201
|
import { RewardBindingSchema, RewardReleaseSchema, compileBoundGraders } from "@openpond/evals/rewards";
|
|
202
|
-
import { assertBoundedTaskJson as
|
|
203
|
-
|
|
202
|
+
import { assertBoundedTaskJson as assertBoundedTaskJson3, validateTaskValue } from "@openpond/evals/task-schema";
|
|
203
|
+
|
|
204
|
+
// src/model-starter-execution.ts
|
|
205
|
+
import { z as z2 } from "zod";
|
|
206
|
+
import { EnvironmentReleaseSchema, VerifierSetReleaseSchema } from "@openpond/evals";
|
|
207
|
+
import { JavaScriptEnvironmentDefinitionSchema, assertJavaScriptEnvironmentDefinition } from "@openpond/evals/javascript-environment";
|
|
208
|
+
import { learningRef, sealLearningContent, verifyLearningTextAsset } from "@openpond/evals/learning";
|
|
209
|
+
import { assertBoundedTaskJson as assertBoundedTaskJson2 } from "@openpond/evals/task-schema";
|
|
210
|
+
var ModelStarterExecutionSchema = z2.object({
|
|
211
|
+
environment: EnvironmentReleaseSchema,
|
|
212
|
+
verifierSet: VerifierSetReleaseSchema,
|
|
213
|
+
javascript: JavaScriptEnvironmentDefinitionSchema
|
|
214
|
+
}).strict();
|
|
215
|
+
function equal(left, right) {
|
|
216
|
+
return sealLearningContent({ value: left }).contentHash === sealLearningContent({ value: right }).contentHash;
|
|
217
|
+
}
|
|
218
|
+
function validateModelStarterExecution(execution, taskset, assets) {
|
|
219
|
+
if (!execution) {
|
|
220
|
+
if (taskset.environment.entrypoint === "openpond.javascript-environment.v1") throw new Error("Starter JavaScript execution resources are missing.");
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
const { environment, verifierSet, javascript } = execution;
|
|
224
|
+
assertJavaScriptEnvironmentDefinition(javascript);
|
|
225
|
+
for (const resource of [environment, verifierSet]) {
|
|
226
|
+
const { contentHash, ...content } = resource;
|
|
227
|
+
if (sealLearningContent(content).contentHash !== contentHash) throw new Error(`Starter execution resource integrity failed: ${resource.id}.`);
|
|
228
|
+
}
|
|
229
|
+
if (!equal(taskset.environmentRelease, { id: environment.id, contentHash: environment.contentHash }) || !equal(taskset.verifierSetRelease, { id: verifierSet.id, contentHash: verifierSet.contentHash }) || !equal(environment.contract, taskset.environment) || !equal(verifierSet.graders, taskset.graders) || !equal(taskset.tools, javascript.tools) || !equal(environment.metadata.javascriptEnvironment, learningRef(javascript))) {
|
|
230
|
+
throw new Error("Starter execution resources differ from its declared task context.");
|
|
231
|
+
}
|
|
232
|
+
const contract = environment.contract;
|
|
233
|
+
if (contract.entrypoint !== "openpond.javascript-environment.v1" || contract.kind !== "agent" || !contract.stateful || !contract.deterministicSeeds || contract.networkPolicy !== "none" || new Set(contract.lifecycle).size !== 5 || taskset.capabilities.length || taskset.policy.connectedAppScopes.length) {
|
|
234
|
+
throw new Error("Starter JavaScript environment declares unsupported host capabilities.");
|
|
235
|
+
}
|
|
236
|
+
for (const reference of [javascript.module, environment.actionSchemaRef, environment.observationSchemaRef, environment.stateSchemaRef]) {
|
|
237
|
+
if (!reference) continue;
|
|
238
|
+
const asset = assets.find((asset2) => asset2.id === reference.id);
|
|
239
|
+
if (!asset) throw new Error(`Starter environment asset is missing: ${reference.id}.`);
|
|
240
|
+
verifyLearningTextAsset(asset, reference);
|
|
241
|
+
}
|
|
242
|
+
for (const task of taskset.tasks) {
|
|
243
|
+
const asset = assets.find((asset2) => asset2.id === task.privilegedContextRef);
|
|
244
|
+
if (!asset || asset.asset.visibility !== "host_private" || asset.asset.mediaType !== "application/json") {
|
|
245
|
+
throw new Error(`Starter private initial state is missing: ${task.id}.`);
|
|
246
|
+
}
|
|
247
|
+
const state = JSON.parse(verifyLearningTextAsset(asset, asset.asset));
|
|
248
|
+
if (!state || typeof state !== "object" || Array.isArray(state)) throw new Error(`Starter initial state must be a JSON object: ${task.id}.`);
|
|
249
|
+
assertBoundedTaskJson2(state, javascript.maxStateBytes);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// src/model-starters.ts
|
|
254
|
+
var IdSchema2 = z3.string().trim().min(1).max(500);
|
|
204
255
|
var RefSchema = ModelProjectVersionedRefSchema;
|
|
205
|
-
var ModelStarterContentSchema =
|
|
206
|
-
schemaVersion:
|
|
256
|
+
var ModelStarterContentSchema = z3.object({
|
|
257
|
+
schemaVersion: z3.literal("openpond.modelStarter.v1"),
|
|
207
258
|
id: IdSchema2,
|
|
208
|
-
revision:
|
|
209
|
-
name:
|
|
210
|
-
description:
|
|
211
|
-
category:
|
|
259
|
+
revision: z3.number().int().positive(),
|
|
260
|
+
name: z3.string().trim().min(1).max(200),
|
|
261
|
+
description: z3.string().trim().min(1).max(2e3),
|
|
262
|
+
category: z3.enum(["extraction", "support", "operations", "knowledge", "coding", "writing", "classification"]),
|
|
212
263
|
taskset: RefSchema,
|
|
213
264
|
taskDefinition: RefSchema,
|
|
214
265
|
rewardBinding: RefSchema,
|
|
215
|
-
rewards:
|
|
216
|
-
assets:
|
|
217
|
-
previewTaskIds:
|
|
266
|
+
rewards: z3.array(RefSchema).min(1).max(100),
|
|
267
|
+
assets: z3.array(RefSchema).max(1e3),
|
|
268
|
+
previewTaskIds: z3.array(IdSchema2).min(1).max(8),
|
|
218
269
|
startingModel: ModelProjectBaseModelSchema,
|
|
219
|
-
supportedMethods:
|
|
270
|
+
supportedMethods: z3.array(ModelProjectTrainingMethodSchema).min(1).max(8),
|
|
220
271
|
defaultMethod: ModelProjectTrainingMethodSchema,
|
|
221
|
-
provenance:
|
|
272
|
+
provenance: z3.object({ author: z3.string().min(1).max(200), license: z3.string().min(1).max(200), sourceDescription: z3.string().min(1).max(2e3) }).strict(),
|
|
222
273
|
// These are references to real results. Package publication does not create
|
|
223
274
|
// evidence, qualify a starter, or enable continuous learning.
|
|
224
|
-
evidence:
|
|
275
|
+
evidence: z3.object({ verifierFixtures: RefSchema.nullable(), baseline: RefSchema.nullable(), training: RefSchema.nullable(), evaluation: RefSchema.nullable() }).strict()
|
|
225
276
|
}).strict().superRefine((starter, context) => {
|
|
226
277
|
if (!starter.supportedMethods.includes(starter.defaultMethod)) context.addIssue({ code: "custom", path: ["defaultMethod"], message: "The default method must be supported by the package." });
|
|
227
278
|
for (const field of ["rewards", "assets"]) {
|
|
@@ -229,40 +280,42 @@ var ModelStarterContentSchema = z2.object({
|
|
|
229
280
|
}
|
|
230
281
|
if (new Set(starter.previewTaskIds).size !== starter.previewTaskIds.length) context.addIssue({ code: "custom", path: ["previewTaskIds"], message: "Preview tasks must be unique." });
|
|
231
282
|
});
|
|
232
|
-
var ModelStarterSchema = ModelStarterContentSchema.safeExtend({ contentHash:
|
|
233
|
-
var ResolvedModelStarterSchema =
|
|
283
|
+
var ModelStarterSchema = ModelStarterContentSchema.safeExtend({ contentHash: z3.string().regex(/^[a-f0-9]{64}$/) });
|
|
284
|
+
var ResolvedModelStarterSchema = z3.object({
|
|
234
285
|
starter: ModelStarterSchema,
|
|
235
286
|
taskset: TasksetReleaseSchema,
|
|
236
287
|
taskDefinition: TaskDefinitionSchema,
|
|
237
288
|
rewardBinding: RewardBindingSchema,
|
|
238
|
-
rewards:
|
|
239
|
-
assets:
|
|
289
|
+
rewards: z3.array(RewardReleaseSchema).min(1).max(100),
|
|
290
|
+
assets: z3.array(LearningTextAssetSchema).max(1e3),
|
|
291
|
+
execution: ModelStarterExecutionSchema.optional()
|
|
240
292
|
}).strict();
|
|
241
|
-
var ModelStarterCreationIntentSchema =
|
|
293
|
+
var ModelStarterCreationIntentSchema = z3.object({
|
|
242
294
|
profileId: IdSchema2,
|
|
243
295
|
modelId: IdSchema2,
|
|
244
|
-
name:
|
|
296
|
+
name: z3.string().trim().min(1).max(200),
|
|
245
297
|
starter: RefSchema,
|
|
246
298
|
startingModel: ModelProjectBaseModelSchema,
|
|
247
299
|
method: ModelProjectTrainingMethodSchema,
|
|
248
300
|
rewardBindingRef: RefSchema.nullable().optional()
|
|
249
301
|
}).strict();
|
|
250
302
|
var ModelStarterCreationRequestSchema = ModelStarterCreationIntentSchema.extend({
|
|
251
|
-
schemaVersion:
|
|
303
|
+
schemaVersion: z3.literal("openpond.modelStarterCreation.v1"),
|
|
252
304
|
operationId: IdSchema2
|
|
253
305
|
}).strict();
|
|
254
306
|
function validateResolvedModelStarter(value) {
|
|
255
|
-
|
|
307
|
+
assertBoundedTaskJson3(value, 16 * 1024 * 1024);
|
|
256
308
|
const resolved = ResolvedModelStarterSchema.parse(value);
|
|
257
309
|
const { starter, taskset, taskDefinition, rewardBinding, rewards, assets } = resolved;
|
|
258
310
|
const resources = [starter, taskset, taskDefinition, rewardBinding, ...rewards, ...assets];
|
|
259
311
|
for (const resource of resources) {
|
|
260
312
|
const { contentHash, ...content } = resource;
|
|
261
|
-
if (
|
|
313
|
+
if (sealLearningContent2(content).contentHash !== contentHash) throw new Error(`Starter resource integrity failed: ${resource.id}.`);
|
|
262
314
|
}
|
|
263
315
|
assertTasksetRelease(taskset);
|
|
316
|
+
validateModelStarterExecution(resolved.execution, taskset, assets);
|
|
264
317
|
function exact(expected, resource) {
|
|
265
|
-
if (!sameLearningRef(expected,
|
|
318
|
+
if (!sameLearningRef(expected, learningRef2(resource))) throw new Error(`Starter dependency mismatch: ${expected.id}.`);
|
|
266
319
|
}
|
|
267
320
|
exact(starter.taskset, taskset);
|
|
268
321
|
exact(starter.taskDefinition, taskDefinition);
|
|
@@ -271,8 +324,8 @@ function validateResolvedModelStarter(value) {
|
|
|
271
324
|
if (rewardBinding.recipeRef) throw new Error("Starter binding recipes must be resolved into a standalone binding before publication.");
|
|
272
325
|
const { policy, environment, environmentRelease, tools, capabilities, verifierSetRelease } = taskset;
|
|
273
326
|
const execution = { policy, environment, ...environmentRelease ? { environmentRelease } : {}, tools, capabilities, ...verifierSetRelease ? { verifierSetRelease } : {} };
|
|
274
|
-
if (
|
|
275
|
-
if (
|
|
327
|
+
if (sealLearningContent2(execution).contentHash !== sealLearningContent2(taskDefinition.execution).contentHash) throw new Error("Starter execution context differs from its task format.");
|
|
328
|
+
if (sealLearningContent2({ graders: taskset.graders }).contentHash !== sealLearningContent2({ graders: compileBoundGraders(rewardBinding, rewards) }).contentHash) throw new Error("Starter executable graders differ from its Reward binding.");
|
|
276
329
|
for (const [references, values] of [[starter.rewards, rewards], [starter.assets, assets]]) {
|
|
277
330
|
if (references.length !== values.length || new Set(values.map((resource) => resource.id)).size !== values.length) throw new Error("Starter dependency inventory mismatch.");
|
|
278
331
|
for (const ref of references) {
|
|
@@ -296,7 +349,7 @@ function validateResolvedModelStarter(value) {
|
|
|
296
349
|
];
|
|
297
350
|
for (const ref of references) {
|
|
298
351
|
const asset = assets.find((asset2) => asset2.id === ref.id);
|
|
299
|
-
if (!asset ||
|
|
352
|
+
if (!asset || sealLearningContent2(asset.asset).contentHash !== sealLearningContent2(ref).contentHash) throw new Error(`Starter Reward source is missing or changed: ${ref.id}.`);
|
|
300
353
|
if (ref.visibility === "policy") throw new Error(`Starter Reward source must remain private to its evaluator: ${ref.id}.`);
|
|
301
354
|
}
|
|
302
355
|
}
|
|
@@ -304,7 +357,7 @@ function validateResolvedModelStarter(value) {
|
|
|
304
357
|
const inputSplits = /* @__PURE__ */ new Map();
|
|
305
358
|
for (const task of taskset.tasks) {
|
|
306
359
|
if (task.policyVisibleContext.instructions !== taskDefinition.instructions) throw new Error(`Starter task does not carry its declared model instructions: ${task.id}.`);
|
|
307
|
-
const inputHash =
|
|
360
|
+
const inputHash = sealLearningContent2({ input: task.input, context: task.policyVisibleContext }).contentHash;
|
|
308
361
|
const priorSplit = inputSplits.get(inputHash);
|
|
309
362
|
if (priorSplit && priorSplit !== task.split) throw new Error("Starter policy input appears in multiple splits.");
|
|
310
363
|
inputSplits.set(inputHash, task.split);
|
|
@@ -319,18 +372,18 @@ function validateResolvedModelStarter(value) {
|
|
|
319
372
|
}
|
|
320
373
|
|
|
321
374
|
// src/model-starter-catalog.ts
|
|
322
|
-
var ModelStarterCatalogQuerySchema =
|
|
323
|
-
afterId:
|
|
324
|
-
limit:
|
|
375
|
+
var ModelStarterCatalogQuerySchema = z4.object({
|
|
376
|
+
afterId: z4.string().trim().min(1).max(500).optional(),
|
|
377
|
+
limit: z4.number().int().min(1).max(100).default(30)
|
|
325
378
|
}).strict();
|
|
326
379
|
var ModelStarterCatalogItemSchema = ModelStarterSchema.extend({
|
|
327
|
-
rewardSummary:
|
|
380
|
+
rewardSummary: z4.array(z4.object({ name: z4.string().min(1).max(500), kind: z4.enum(["custom_verifier", "model_judge", "human", "learned_model", "content", "schema", "artifact", "runtime_event", "state"]) }).strict()).max(100).optional()
|
|
328
381
|
});
|
|
329
|
-
var ModelStarterCatalogPageSchema =
|
|
330
|
-
items:
|
|
331
|
-
nextCursor:
|
|
382
|
+
var ModelStarterCatalogPageSchema = z4.object({
|
|
383
|
+
items: z4.array(ModelStarterCatalogItemSchema).max(100),
|
|
384
|
+
nextCursor: z4.string().min(1).max(500).nullable()
|
|
332
385
|
}).strict();
|
|
333
|
-
var ModelStarterCatalogErrorSchema =
|
|
386
|
+
var ModelStarterCatalogErrorSchema = z4.object({ code: z4.string().min(1).max(200), message: z4.string().min(1).max(5e3) }).strict();
|
|
334
387
|
var OpenPondModelStarterCatalogError = class extends Error {
|
|
335
388
|
constructor(status, code, message) {
|
|
336
389
|
super(message);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
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 ModelStarterCatalogItemSchema = ModelStarterSchema.extend({\n rewardSummary: z.array(z.object({ name: z.string().min(1).max(500), kind: z.enum([\"custom_verifier\", \"model_judge\", \"human\", \"learned_model\", \"content\", \"schema\", \"artifact\", \"runtime_event\", \"state\"]) }).strict()).max(100).optional(),\n});\nexport type ModelStarterCatalogItem = z.infer<typeof ModelStarterCatalogItemSchema>;\nexport const ModelStarterCatalogPageSchema = z.object({\n items: z.array(ModelStarterCatalogItemSchema).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 rewardBindingRef: RefSchema.nullable().optional(),\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"]
|
|
3
|
+
"sources": ["../src/model-starter-catalog.ts", "../src/model-projects.ts", "../src/model-starters.ts", "../src/model-starter-execution.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 ModelStarterCatalogItemSchema = ModelStarterSchema.extend({\n rewardSummary: z.array(z.object({ name: z.string().min(1).max(500), kind: z.enum([\"custom_verifier\", \"model_judge\", \"human\", \"learned_model\", \"content\", \"schema\", \"artifact\", \"runtime_event\", \"state\"]) }).strict()).max(100).optional(),\n});\nexport type ModelStarterCatalogItem = z.infer<typeof ModelStarterCatalogItemSchema>;\nexport const ModelStarterCatalogPageSchema = z.object({\n items: z.array(ModelStarterCatalogItemSchema).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\";\nimport { ModelStarterExecutionSchema, validateModelStarterExecution } from \"./model-starter-execution.js\";\n\nexport { ModelStarterExecutionSchema, type ModelStarterExecution } from \"./model-starter-execution.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 execution: ModelStarterExecutionSchema.optional(),\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 rewardBindingRef: RefSchema.nullable().optional(),\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 validateModelStarterExecution(resolved.execution, taskset, assets);\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", "import { z } from \"zod\";\nimport { EnvironmentReleaseSchema, VerifierSetReleaseSchema } from \"@openpond/evals\";\nimport { JavaScriptEnvironmentDefinitionSchema, assertJavaScriptEnvironmentDefinition } from \"@openpond/evals/javascript-environment\";\nimport { learningRef, sealLearningContent, verifyLearningTextAsset, type LearningTextAsset } from \"@openpond/evals/learning\";\nimport { assertBoundedTaskJson } from \"@openpond/evals/task-schema\";\nimport type { TasksetRelease } from \"@openpond/evals/tasksets\";\n\nexport const ModelStarterExecutionSchema = z.object({\n environment: EnvironmentReleaseSchema,\n verifierSet: VerifierSetReleaseSchema,\n javascript: JavaScriptEnvironmentDefinitionSchema,\n}).strict();\nexport type ModelStarterExecution = z.infer<typeof ModelStarterExecutionSchema>;\n\nfunction equal(left: unknown, right: unknown): boolean {\n return sealLearningContent({ value: left }).contentHash === sealLearningContent({ value: right }).contentHash;\n}\n\n/** Close executable dependencies before a host persists or runs a package. */\nexport function validateModelStarterExecution(\n execution: ModelStarterExecution | undefined,\n taskset: TasksetRelease,\n assets: LearningTextAsset[],\n): void {\n if (!execution) {\n if (taskset.environment.entrypoint === \"openpond.javascript-environment.v1\") throw new Error(\"Starter JavaScript execution resources are missing.\");\n return;\n }\n const { environment, verifierSet, javascript } = execution;\n assertJavaScriptEnvironmentDefinition(javascript);\n for (const resource of [environment, verifierSet]) {\n const { contentHash, ...content } = resource;\n if (sealLearningContent(content).contentHash !== contentHash) throw new Error(`Starter execution resource integrity failed: ${resource.id}.`);\n }\n if (!equal(taskset.environmentRelease, { id: environment.id, contentHash: environment.contentHash }) ||\n !equal(taskset.verifierSetRelease, { id: verifierSet.id, contentHash: verifierSet.contentHash }) ||\n !equal(environment.contract, taskset.environment) || !equal(verifierSet.graders, taskset.graders) ||\n !equal(taskset.tools, javascript.tools) || !equal(environment.metadata.javascriptEnvironment, learningRef(javascript))) {\n throw new Error(\"Starter execution resources differ from its declared task context.\");\n }\n const contract = environment.contract;\n if (contract.entrypoint !== \"openpond.javascript-environment.v1\" || contract.kind !== \"agent\" ||\n !contract.stateful || !contract.deterministicSeeds || contract.networkPolicy !== \"none\" ||\n new Set(contract.lifecycle).size !== 5 || taskset.capabilities.length || taskset.policy.connectedAppScopes.length) {\n throw new Error(\"Starter JavaScript environment declares unsupported host capabilities.\");\n }\n for (const reference of [javascript.module, environment.actionSchemaRef, environment.observationSchemaRef, environment.stateSchemaRef]) {\n if (!reference) continue;\n const asset = assets.find(asset => asset.id === reference.id);\n if (!asset) throw new Error(`Starter environment asset is missing: ${reference.id}.`);\n verifyLearningTextAsset(asset, reference);\n }\n for (const task of taskset.tasks) {\n const asset = assets.find(asset => asset.id === task.privilegedContextRef);\n if (!asset || asset.asset.visibility !== \"host_private\" || asset.asset.mediaType !== \"application/json\") {\n throw new Error(`Starter private initial state is missing: ${task.id}.`);\n }\n const state: unknown = JSON.parse(verifyLearningTextAsset(asset, asset.asset));\n if (!state || typeof state !== \"object\" || Array.isArray(state)) throw new Error(`Starter initial state must be a JSON object: ${task.id}.`);\n assertBoundedTaskJson(state, javascript.maxStateBytes);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["z", "z", "learningRef", "sealLearningContent", "assertBoundedTaskJson", "z", "assertBoundedTaskJson", "asset", "IdSchema", "z", "assertBoundedTaskJson", "sealLearningContent", "learningRef", "value", "reward", "asset", "task", "z"]
|
|
7
7
|
}
|