openpond-sdk 0.5.18 → 0.5.20
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/TASKSETS.md +9 -0
- package/dist/learning.js +2 -2
- package/dist/learning.js.map +2 -2
- package/dist/taskset-drafts.js +15 -0
- package/dist/taskset-drafts.js.map +2 -2
- package/dist/taskset-packages.js +5 -4
- package/dist/taskset-packages.js.map +2 -2
- package/dist/types/packages/sdk/src/learning-client.d.ts +34 -0
- package/dist/types/packages/sdk/src/learning-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts +8 -0
- package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +506 -1
- package/dist/types/packages/sdk/src/taskset-draft-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-evaluation-results.d.ts +1 -1
- package/dist/types/packages/sdk/src/training.d.ts +1 -1
- package/package.json +2 -2
package/TASKSETS.md
CHANGED
|
@@ -258,3 +258,12 @@ receipt includes `evaluation.taskset`, `evaluation.packageHash` and
|
|
|
258
258
|
The same configuration carries the saved recipe and limits. Publication does not
|
|
259
259
|
run training or prove evaluation isolation, grader quality or training readiness.
|
|
260
260
|
An attachment-only publication cannot change Model configuration.
|
|
261
|
+
|
|
262
|
+
For a new collection without a source release, call `client.create` with
|
|
263
|
+
`schemaVersion: "openpond.tasksetDraftCreate.v1"`, an operation ID, Model ID,
|
|
264
|
+
expected Model revision and name. Retain the operation ID across retries. The
|
|
265
|
+
host creates an empty owned draft using the same save, file, validation and
|
|
266
|
+
publication lifecycle. It must not add example tasks or a judge rubric.
|
|
267
|
+
`compileModelTasksetDraftWorkspace` accepts `preparation: null` only when the
|
|
268
|
+
owned draft has no source preparation. Compilation pins the saved timestamp so
|
|
269
|
+
validation and publication produce the same package hash.
|
package/dist/learning.js
CHANGED
|
@@ -48,8 +48,8 @@ function createHostedLearningPolicyContent(input) {
|
|
|
48
48
|
const applyModel = input.applyModelConfiguration || !previous;
|
|
49
49
|
const refs = applyModel ? hostedLearningPolicyReferences(project) : null;
|
|
50
50
|
const method = applyModel ? project.trainingSetup.recipe?.method : previous?.training.method;
|
|
51
|
-
if (settings.enabled &&
|
|
52
|
-
throw new LearningDomainError("learning_training_method_unsupported", 422, "Hosted continual learning currently supports
|
|
51
|
+
if (settings.enabled && method !== "grpo") {
|
|
52
|
+
throw new LearningDomainError("learning_training_method_unsupported", 422, "Hosted continual learning currently supports GRPO.");
|
|
53
53
|
}
|
|
54
54
|
return LearningPolicyContentSchema.parse({
|
|
55
55
|
schemaVersion: "openpond.learningPolicy.v1",
|
package/dist/learning.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/learning.ts", "../src/model-learning-policy.ts"],
|
|
4
|
-
"sourcesContent": ["export * from \"@openpond/evals/learning\";\nexport * from \"@openpond/evals/rewards\";\nexport * from \"./learning-credentials.js\";\nexport * from \"./learning-client.js\";\nexport * from \"./model-learning-policy.js\";\n", "import { LearningDomainError, LearningPolicyContentSchema, type LearningPolicy, type LearningRevisionRef } from \"@openpond/evals/learning\";\nimport { contentHash } from \"@openpond/harness\";\n\nimport type { HostedModelProjectSummary } from \"./model-projects.js\";\n\n/** Shared starting values for both Model clients. Existing policies retain\n * their exact limits; opening settings must never silently increase spending. */\nexport function hostedLearningPolicyDefaults(project: HostedModelProjectSummary, policy: LearningPolicy | null) {\n const maximumSpend = policy?.limits.maxIterationSpendUsd ?? project.trainingSetup.preferredMaximumSpendUsd ?? 1;\n return {\n enabled: policy?.enabled ?? false,\n scheduled: policy?.trigger.kind === \"schedule\",\n intervalSeconds: policy?.trigger.kind === \"schedule\" ? policy.trigger.intervalSeconds : 86_400,\n humanReviewRequired: policy?.admission.mode !== \"qualified_automatic\",\n minimumApprovedExamples: policy?.admission.minimumApprovedExamples ?? 8,\n maxBatchExamples: policy?.limits.maxBatchExamples ?? 8,\n maxIterationSpendUsd: maximumSpend,\n maxDailySpendUsd: policy?.limits.maxDailySpendUsd ?? maximumSpend,\n cooldownSeconds: policy?.limits.cooldownSeconds ?? 3_600,\n maxRetries: policy?.limits.maxRetries ?? 0,\n maxBacklogExamples: policy?.limits.maxBacklogExamples ?? 1_000,\n };\n}\n\nexport interface HostedLearningPolicySettings {\n enabled: boolean;\n scheduled: boolean;\n intervalSeconds: number;\n humanReviewRequired: boolean;\n minimumApprovedExamples: number;\n maxBatchExamples: number;\n maxIterationSpendUsd: number;\n maxDailySpendUsd: number;\n cooldownSeconds: number;\n maxRetries: number;\n maxBacklogExamples: number;\n}\n\n/** Compile reviewed settings without following mutable Model configuration\n * unless the caller explicitly chooses to apply it. Publication still owns\n * authorization, revision comparison and source/qualification validation. */\nexport function createHostedLearningPolicyContent(input: {\n project: HostedModelProjectSummary;\n previous: LearningPolicy | null;\n policyId: string;\n applyModelConfiguration: boolean;\n sources: LearningRevisionRef[];\n taskDefinition: LearningRevisionRef;\n settings: HostedLearningPolicySettings;\n}) {\n const { project, previous, settings } = input;\n if (previous && (previous.id !== input.policyId || previous.modelProjectId !== project.portableProjectId || previous.executionOwner !== \"hosted\")) {\n throw new LearningDomainError(\"learning_policy_model_mismatch\", 422, \"Learning settings must belong to this hosted Model.\");\n }\n const applyModel = input.applyModelConfiguration || !previous;\n const refs = applyModel ? hostedLearningPolicyReferences(project) : null;\n const method = applyModel ? project.trainingSetup.recipe?.method : previous?.training.method;\n if (settings.enabled &&
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA,cAAc;AACd,cAAc;;;ACDd,SAAS,qBAAqB,mCAAkF;AAOzG,SAAS,6BAA6B,SAAoC,QAA+B;AAC9G,QAAM,eAAe,QAAQ,OAAO,wBAAwB,QAAQ,cAAc,4BAA4B;AAC9G,SAAO;AAAA,IACL,SAAS,QAAQ,WAAW;AAAA,IAC5B,WAAW,QAAQ,QAAQ,SAAS;AAAA,IACpC,iBAAiB,QAAQ,QAAQ,SAAS,aAAa,OAAO,QAAQ,kBAAkB;AAAA,IACxF,qBAAqB,QAAQ,UAAU,SAAS;AAAA,IAChD,yBAAyB,QAAQ,UAAU,2BAA2B;AAAA,IACtE,kBAAkB,QAAQ,OAAO,oBAAoB;AAAA,IACrD,sBAAsB;AAAA,IACtB,kBAAkB,QAAQ,OAAO,oBAAoB;AAAA,IACrD,iBAAiB,QAAQ,OAAO,mBAAmB;AAAA,IACnD,YAAY,QAAQ,OAAO,cAAc;AAAA,IACzC,oBAAoB,QAAQ,OAAO,sBAAsB;AAAA,EAC3D;AACF;AAmBO,SAAS,kCAAkC,OAQ/C;AACD,QAAM,EAAE,SAAS,UAAU,SAAS,IAAI;AACxC,MAAI,aAAa,SAAS,OAAO,MAAM,YAAY,SAAS,mBAAmB,QAAQ,qBAAqB,SAAS,mBAAmB,WAAW;AACjJ,UAAM,IAAI,oBAAoB,kCAAkC,KAAK,qDAAqD;AAAA,EAC5H;AACA,QAAM,aAAa,MAAM,2BAA2B,CAAC;AACrD,QAAM,OAAO,aAAa,+BAA+B,OAAO,IAAI;AACpE,QAAM,SAAS,aAAa,QAAQ,cAAc,QAAQ,SAAS,UAAU,SAAS;AACtF,MAAI,SAAS,WAAW,
|
|
4
|
+
"sourcesContent": ["export * from \"@openpond/evals/learning\";\nexport * from \"@openpond/evals/rewards\";\nexport * from \"./learning-credentials.js\";\nexport * from \"./learning-client.js\";\nexport * from \"./model-learning-policy.js\";\n", "import { LearningDomainError, LearningPolicyContentSchema, type LearningPolicy, type LearningRevisionRef } from \"@openpond/evals/learning\";\nimport { contentHash } from \"@openpond/harness\";\n\nimport type { HostedModelProjectSummary } from \"./model-projects.js\";\n\n/** Shared starting values for both Model clients. Existing policies retain\n * their exact limits; opening settings must never silently increase spending. */\nexport function hostedLearningPolicyDefaults(project: HostedModelProjectSummary, policy: LearningPolicy | null) {\n const maximumSpend = policy?.limits.maxIterationSpendUsd ?? project.trainingSetup.preferredMaximumSpendUsd ?? 1;\n return {\n enabled: policy?.enabled ?? false,\n scheduled: policy?.trigger.kind === \"schedule\",\n intervalSeconds: policy?.trigger.kind === \"schedule\" ? policy.trigger.intervalSeconds : 86_400,\n humanReviewRequired: policy?.admission.mode !== \"qualified_automatic\",\n minimumApprovedExamples: policy?.admission.minimumApprovedExamples ?? 8,\n maxBatchExamples: policy?.limits.maxBatchExamples ?? 8,\n maxIterationSpendUsd: maximumSpend,\n maxDailySpendUsd: policy?.limits.maxDailySpendUsd ?? maximumSpend,\n cooldownSeconds: policy?.limits.cooldownSeconds ?? 3_600,\n maxRetries: policy?.limits.maxRetries ?? 0,\n maxBacklogExamples: policy?.limits.maxBacklogExamples ?? 1_000,\n };\n}\n\nexport interface HostedLearningPolicySettings {\n enabled: boolean;\n scheduled: boolean;\n intervalSeconds: number;\n humanReviewRequired: boolean;\n minimumApprovedExamples: number;\n maxBatchExamples: number;\n maxIterationSpendUsd: number;\n maxDailySpendUsd: number;\n cooldownSeconds: number;\n maxRetries: number;\n maxBacklogExamples: number;\n}\n\n/** Compile reviewed settings without following mutable Model configuration\n * unless the caller explicitly chooses to apply it. Publication still owns\n * authorization, revision comparison and source/qualification validation. */\nexport function createHostedLearningPolicyContent(input: {\n project: HostedModelProjectSummary;\n previous: LearningPolicy | null;\n policyId: string;\n applyModelConfiguration: boolean;\n sources: LearningRevisionRef[];\n taskDefinition: LearningRevisionRef;\n settings: HostedLearningPolicySettings;\n}) {\n const { project, previous, settings } = input;\n if (previous && (previous.id !== input.policyId || previous.modelProjectId !== project.portableProjectId || previous.executionOwner !== \"hosted\")) {\n throw new LearningDomainError(\"learning_policy_model_mismatch\", 422, \"Learning settings must belong to this hosted Model.\");\n }\n const applyModel = input.applyModelConfiguration || !previous;\n const refs = applyModel ? hostedLearningPolicyReferences(project) : null;\n const method = applyModel ? project.trainingSetup.recipe?.method : previous?.training.method;\n if (settings.enabled && method !== \"grpo\") {\n throw new LearningDomainError(\"learning_training_method_unsupported\", 422, \"Hosted continual learning currently supports GRPO.\");\n }\n return LearningPolicyContentSchema.parse({\n schemaVersion: \"openpond.learningPolicy.v1\", id: input.policyId, revision: (previous?.revision ?? 0) + 1,\n modelProjectId: project.portableProjectId, executionOwner: \"hosted\", enabled: settings.enabled,\n sources: input.sources, taskDefinition: input.taskDefinition,\n rewardBinding: applyModel ? project.trainingSetup.rewardBindingRef : previous?.rewardBinding,\n admission: { mode: settings.humanReviewRequired ? \"human\" : \"qualified_automatic\",\n qualification: settings.humanReviewRequired ? null : previous?.admission.qualification ?? null,\n minimumApprovedExamples: settings.minimumApprovedExamples },\n trigger: settings.scheduled ? { kind: \"schedule\", intervalSeconds: settings.intervalSeconds } : { kind: \"manual\" },\n trainingParent: refs?.trainingParent ?? previous?.trainingParent,\n teacher: previous?.teacher ?? null,\n training: { method, recipe: refs?.recipe ?? previous?.training.recipe,\n retentionEvaluation: refs?.retentionEvaluation ?? previous?.training.retentionEvaluation,\n replayBatches: previous?.training.replayBatches ?? [] },\n limits: { maxIterationSpendUsd: settings.maxIterationSpendUsd, maxDailySpendUsd: settings.maxDailySpendUsd,\n cooldownSeconds: settings.cooldownSeconds, maxRetries: settings.maxRetries,\n maxBatchExamples: settings.maxBatchExamples, maxBacklogExamples: settings.maxBacklogExamples },\n automation: { collect: false, train: settings.scheduled, accept: false, serve: false },\n acceptance: previous?.acceptance ?? { minimumScore: 0, maximumRetentionRegression: 0, requireImprovement: true, rollbackVersion: null },\n });\n}\n\n/** Bind a reviewed hosted Model configuration before asynchronous preparation.\n * Keep the established recipe identity: its id binds the whole Model revision,\n * including Harness and retention selections, while its hash binds the recipe.\n * Callers must obtain the summary from the authenticated Model API. */\nexport function hostedLearningPolicyReferences(project: HostedModelProjectSummary) {\n const setup = project.trainingSetup;\n const base = setup.baseModel ?? project.defaultBaseModel;\n if (!setup.recipe || !base || !setup.evaluationTasksetRef) {\n throw new LearningDomainError(\"learning_model_configuration_incomplete\", 422,\n \"Select a training recipe, starting model and retained evaluation before enabling hosted learning.\");\n }\n return {\n recipe: { id: `model-recipe-${project.etag}`, contentHash: contentHash(setup.recipe) },\n trainingParent: { id: base.modelId, contentHash: contentHash(base) },\n retentionEvaluation: { id: setup.evaluationTasksetRef.id, contentHash: setup.evaluationTasksetRef.contentHash },\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/taskset-drafts.js
CHANGED
|
@@ -125,6 +125,13 @@ var IdSchema = TasksetDraftSchema.shape.id;
|
|
|
125
125
|
var RevisionSchema = z.number().int().positive();
|
|
126
126
|
var HashSchema = z.string().regex(/^[a-f0-9]{64}$/);
|
|
127
127
|
var scope = { teamId: IdSchema, modelId: IdSchema };
|
|
128
|
+
var TasksetDraftCreateRequestSchema = z.object({
|
|
129
|
+
schemaVersion: z.literal("openpond.tasksetDraftCreate.v1"),
|
|
130
|
+
operationId: IdSchema,
|
|
131
|
+
modelId: IdSchema,
|
|
132
|
+
expectedModelRevision: RevisionSchema,
|
|
133
|
+
name: TasksetDraftSchema.shape.name
|
|
134
|
+
}).strict();
|
|
128
135
|
var TasksetDraftSourceDescriptorSchema = z.object({
|
|
129
136
|
schemaVersion: z.literal("openpond.tasksetDraftSourceDescriptor.v1"),
|
|
130
137
|
...scope,
|
|
@@ -232,6 +239,13 @@ var OpenPondTasksetDraftClient = class {
|
|
|
232
239
|
if (!source || source.requestHash !== contentHash(request) || source.sourcePackageHash !== request.sourcePackageHash || source.draftId !== response.draft.id || source.lineage.owner.scopeId !== this.#options.teamId || source.lineage.owner.modelId !== request.modelId) this.#mismatch();
|
|
233
240
|
return response;
|
|
234
241
|
}
|
|
242
|
+
async create(input, options = {}) {
|
|
243
|
+
const request = TasksetDraftCreateRequestSchema.parse(input);
|
|
244
|
+
const response = this.#draft(await this.#request(request.modelId, "", "POST", request, options.signal), request.modelId);
|
|
245
|
+
const expectedId = `model-taskset-draft-${contentHash({ owner: { scopeId: this.#options.teamId, modelId: request.modelId }, operationId: request.operationId })}`;
|
|
246
|
+
if (response.draft.id !== expectedId || response.draft.modelScope?.source !== void 0) this.#mismatch();
|
|
247
|
+
return response;
|
|
248
|
+
}
|
|
235
249
|
async list(modelId, options = {}) {
|
|
236
250
|
const model = IdSchema2.parse(modelId);
|
|
237
251
|
const query = new URLSearchParams();
|
|
@@ -405,6 +419,7 @@ export {
|
|
|
405
419
|
TaskRequiredOutputSchema,
|
|
406
420
|
TasksetBenchmarkBindingSchema,
|
|
407
421
|
TasksetCapabilityManifestSchema,
|
|
422
|
+
TasksetDraftCreateRequestSchema,
|
|
408
423
|
TasksetDraftDeletionSchema,
|
|
409
424
|
TasksetDraftFileListSchema,
|
|
410
425
|
TasksetDraftFileReadbackSchema,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/taskset-drafts.ts", "../src/taskset-draft-api-contracts.ts", "../src/taskset-draft-client.ts"],
|
|
4
|
-
"sourcesContent": ["export * from \"./taskset-draft-dataset-artifacts.js\";\nexport * from \"./taskset-draft-dataset-sources.js\";\nexport * from \"./taskset-draft-harness-actions.js\";\nexport * from \"./taskset-draft-core.js\";\nexport * from \"./taskset-draft-document.js\";\nexport { TasksetMetricPolicySchema, type TasksetMetricPolicy } from \"@openpond/evals/metrics\";\nexport * from \"./taskset-draft-authoring.js\";\nexport * from \"./taskset-draft-files.js\";\nexport * from \"./taskset-draft-workspace.js\";\nexport * from \"./taskset-authored-contracts.js\";\nexport * from \"./taskset-authored-validation.js\";\nexport * from \"./taskset-draft-publication.js\";\nexport * from \"./taskset-draft-manifests.js\";\nexport * from \"./taskset-draft-api-contracts.js\";\nexport { OpenPondTasksetDraftClient, OpenPondTasksetDraftError } from \"./taskset-draft-client.js\";\n", "import { z } from \"zod\";\nimport { LearningRevisionRefSchema } from \"@openpond/evals/learning\";\nimport { TasksetDraftSchema, TasksetDraftStatusSchema } from \"./taskset-draft-document.js\";\nimport { TasksetDraftFileSchema, TasksetDraftFileInfoSchema } from \"./model-taskset-authoring-contracts.js\";\n\nconst IdSchema = TasksetDraftSchema.shape.id;\nconst RevisionSchema = z.number().int().positive();\nconst HashSchema = z.string().regex(/^[a-f0-9]{64}$/);\nconst scope = { teamId: IdSchema, modelId: IdSchema };\n\nexport const TasksetDraftSourceDescriptorSchema = z.object({\n schemaVersion: z.literal(\"openpond.tasksetDraftSourceDescriptor.v1\"), ...scope,\n expectedModelRevision: RevisionSchema, sourcePackageHash: HashSchema,\n}).strict();\nexport const TasksetDraftReadbackSchema = z.object({\n schemaVersion: z.literal(\"openpond.tasksetDraftReadback.v1\"), ...scope,\n draft: TasksetDraftSchema, workspaceHash: HashSchema, projectEtag: HashSchema,\n}).strict().refine(value => value.draft.profileId === value.teamId && value.draft.modelScope?.modelId === value.modelId,\n \"The hosted draft must belong to its declared workspace and Model.\");\nexport const TasksetDraftSummarySchema = z.object({\n id: IdSchema, revision: RevisionSchema, name: TasksetDraftSchema.shape.name,\n status: TasksetDraftStatusSchema, updatedAt: TasksetDraftSchema.shape.updatedAt,\n sourceTasksetRef: LearningRevisionRefSchema.nullable(),\n}).strict();\nexport const TasksetDraftListSchema = z.object({\n schemaVersion: z.literal(\"openpond.tasksetDraftList.v1\"), ...scope,\n drafts: z.array(TasksetDraftSummarySchema).max(100), nextCursor: z.string().min(1).max(2_000).nullable(),\n}).strict();\nexport const TasksetDraftSaveRequestSchema = z.object({ expectedDraftRevision: RevisionSchema, draft: TasksetDraftSchema }).strict();\nexport const TasksetDraftRefreshRequestSchema = z.object({ expectedDraftRevision: RevisionSchema, expectedModelRevision: RevisionSchema }).strict();\nexport const TasksetDraftValidationRequestSchema = z.object({ expectedDraftRevision: RevisionSchema, expectedWorkspaceHash: HashSchema }).strict();\nexport const TasksetDraftValidationSchema = z.object({\n schemaVersion: z.literal(\"openpond.tasksetDraftValidation.v1\"), ...scope,\n draftId: IdSchema, draftRevision: RevisionSchema, workspaceHash: HashSchema,\n valid: z.boolean(), issues: z.array(z.object({ code: z.string().min(1), severity: z.enum([\"warning\", \"error\"]), message: z.string(), path: z.string().nullable() }).strict()),\n packageHash: HashSchema.nullable(), tasksetRef: LearningRevisionRefSchema.nullable(),\n}).strict().refine(value => value.valid\n ? value.packageHash !== null && value.tasksetRef !== null && value.issues.every(issue => issue.severity !== \"error\")\n : value.packageHash === null && value.tasksetRef === null && value.issues.some(issue => issue.severity === \"error\"), \"Validation must retain either a compiled package or publication errors.\");\nexport const TasksetDraftPublicationRequestSchema = TasksetDraftValidationRequestSchema.extend({\n operationId: IdSchema, expectedPackageHash: HashSchema, expectedTasksetRef: LearningRevisionRefSchema,\n}).strict();\nexport const TasksetDraftFileListSchema = z.object({\n schemaVersion: z.literal(\"openpond.tasksetDraftFileList.v1\"), ...scope,\n draftId: IdSchema, draftRevision: RevisionSchema, files: z.array(TasksetDraftFileInfoSchema).max(10_020),\n}).strict();\nexport const TasksetDraftFileReadbackSchema = z.object({\n schemaVersion: z.literal(\"openpond.tasksetDraftFileReadback.v1\"), ...scope,\n draftId: IdSchema, draftRevision: RevisionSchema, file: TasksetDraftFileSchema,\n}).strict();\nexport const TasksetDraftDeletionSchema = z.object({\n schemaVersion: z.literal(\"openpond.tasksetDraftDeletion.v1\"), ...scope,\n draftId: IdSchema, revision: RevisionSchema, deleted: z.literal(true),\n}).strict();\n\nexport type TasksetDraftSourceDescriptor = z.infer<typeof TasksetDraftSourceDescriptorSchema>;\nexport type TasksetDraftReadback = z.infer<typeof TasksetDraftReadbackSchema>;\nexport type TasksetDraftList = z.infer<typeof TasksetDraftListSchema>;\nexport type TasksetDraftSaveRequest = z.infer<typeof TasksetDraftSaveRequestSchema>;\nexport type TasksetDraftRefreshRequest = z.infer<typeof TasksetDraftRefreshRequestSchema>;\nexport type TasksetDraftValidationRequest = z.infer<typeof TasksetDraftValidationRequestSchema>;\nexport type TasksetDraftValidation = z.infer<typeof TasksetDraftValidationSchema>;\nexport type TasksetDraftPublicationRequest = z.infer<typeof TasksetDraftPublicationRequestSchema>;\nexport type TasksetDraftFileList = z.infer<typeof TasksetDraftFileListSchema>;\nexport type TasksetDraftFileReadback = z.infer<typeof TasksetDraftFileReadbackSchema>;\nexport type TasksetDraftDeletion = z.infer<typeof TasksetDraftDeletionSchema>;\n", "import { z } from \"zod\";\nimport { contentHash, sha256 } from \"@openpond/harness\";\nimport { sameLearningRef } from \"@openpond/evals/learning\";\nimport { ModelTasksetDraftRequestSchema, TasksetDraftFileMutationSchema, TasksetDraftFilePathSchema, type ModelTasksetDraftRequest, type TasksetDraftFileMutation } from \"./model-taskset-authoring-contracts.js\";\nimport { TasksetDraftSchema } from \"./taskset-draft-document.js\";\nimport { decodeTasksetDraftFileContent } from \"./taskset-draft-files.js\";\nimport { MAX_TASKSET_DRAFT_WORKSPACE_BYTES } from \"./taskset-draft-workspace.js\";\nimport { TasksetPackageReceiptSchema } from \"./taskset-package-client.js\";\nimport { TasksetDraftSourceDescriptorSchema, TasksetDraftReadbackSchema, TasksetDraftListSchema, TasksetDraftSaveRequestSchema, TasksetDraftRefreshRequestSchema,\n TasksetDraftValidationRequestSchema, TasksetDraftValidationSchema, TasksetDraftPublicationRequestSchema, TasksetDraftFileListSchema, TasksetDraftFileReadbackSchema, TasksetDraftDeletionSchema,\n type TasksetDraftSaveRequest, type TasksetDraftRefreshRequest, type TasksetDraftValidationRequest, type TasksetDraftPublicationRequest } from \"./taskset-draft-api-contracts.js\";\n\ntype Options = { signal?: AbortSignal };\nconst IdSchema = TasksetDraftSchema.shape.id;\nconst RevisionSchema = z.number().int().positive();\n\nexport class OpenPondTasksetDraftError extends Error {\n constructor(readonly status: number, readonly code: string, message: string) { super(message); this.name = \"OpenPondTasksetDraftError\"; }\n}\n\n/** Scoped mutable drafts use explicit CAS and never retry writes automatically. */\nexport class OpenPondTasksetDraftClient {\n readonly #options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof globalThis.fetch };\n constructor(options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof globalThis.fetch }) {\n const url = new URL(options.baseUrl);\n if (![\"http:\", \"https:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash || !options.apiKey.trim() || !options.teamId.trim()) throw new Error(\"Taskset draft client requires a clean HTTP(S) endpoint and workspace credentials.\");\n this.#options = { ...options, baseUrl: url.toString().replace(/\\/+$/, \"\") };\n }\n\n async inspectSource(modelId: string, expectedModelRevision: number, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const revision = RevisionSchema.parse(expectedModelRevision);\n const response = this.#scope(TasksetDraftSourceDescriptorSchema.parse(await this.#request(model, `/source?expectedModelRevision=${revision}`, \"GET\", undefined, options.signal)), model);\n if (response.expectedModelRevision !== revision) this.#mismatch();\n return response;\n }\n\n async initialize(input: ModelTasksetDraftRequest, options: Options = {}) {\n const request = ModelTasksetDraftRequestSchema.parse(input);\n const response = this.#draft(await this.#request(request.modelId, \"\", \"POST\", request, options.signal), request.modelId);\n const source = response.draft.modelScope?.source;\n if (!source || source.requestHash !== contentHash(request) || source.sourcePackageHash !== request.sourcePackageHash || source.draftId !== response.draft.id\n || source.lineage.owner.scopeId !== this.#options.teamId || source.lineage.owner.modelId !== request.modelId) this.#mismatch();\n return response;\n }\n\n async list(modelId: string, options: Options & { limit?: number; cursor?: string } = {}) {\n const model = IdSchema.parse(modelId);\n const query = new URLSearchParams();\n if (options.limit !== undefined) query.set(\"limit\", String(z.number().int().min(1).max(100).parse(options.limit)));\n if (options.cursor !== undefined) query.set(\"cursor\", z.string().min(1).max(2_000).parse(options.cursor));\n return this.#scope(TasksetDraftListSchema.parse(await this.#request(model, query.size ? `?${query}` : \"\", \"GET\", undefined, options.signal)), model);\n }\n\n async get(modelId: string, draftId: string, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const id = IdSchema.parse(draftId);\n return this.#draft(await this.#request(model, `/${encodeURIComponent(id)}`, \"GET\", undefined, options.signal), model, id);\n }\n\n async save(modelId: string, input: TasksetDraftSaveRequest, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const request = TasksetDraftSaveRequestSchema.parse(input);\n return this.#draft(await this.#request(model, `/${encodeURIComponent(request.draft.id)}`, \"PUT\", request, options.signal), model, request.draft.id, request.expectedDraftRevision + 1);\n }\n\n async refreshModel(modelId: string, draftId: string, input: TasksetDraftRefreshRequest, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const id = IdSchema.parse(draftId);\n const request = TasksetDraftRefreshRequestSchema.parse(input);\n const response = this.#draft(await this.#request(model, `/${encodeURIComponent(id)}/refresh-model`, \"POST\", request, options.signal), model, id, request.expectedDraftRevision + 1);\n if (response.draft.modelScope?.expectedModelRevision !== request.expectedModelRevision) this.#mismatch();\n return response;\n }\n\n async files(modelId: string, draftId: string, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const id = IdSchema.parse(draftId);\n const response = this.#scope(TasksetDraftFileListSchema.parse(await this.#request(model, `/${encodeURIComponent(id)}/files`, \"GET\", undefined, options.signal)), model);\n if (response.draftId !== id) this.#mismatch();\n return response;\n }\n\n async readFile(modelId: string, draftId: string, path: string, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const id = IdSchema.parse(draftId);\n const relative = TasksetDraftFilePathSchema.parse(path);\n const response = this.#scope(TasksetDraftFileReadbackSchema.parse(await this.#request(model, `/${encodeURIComponent(id)}/file?path=${encodeURIComponent(relative)}`, \"GET\", undefined, options.signal)), model);\n if (response.draftId !== id || response.file.path !== relative) this.#mismatch();\n const bytes = decodeTasksetDraftFileContent(response.file.content);\n if (bytes.byteLength !== response.file.sizeBytes || sha256(bytes) !== response.file.contentHash) this.#mismatch();\n return response;\n }\n\n async saveFile(modelId: string, input: TasksetDraftFileMutation, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const request = TasksetDraftFileMutationSchema.parse(input);\n if (request.content) decodeTasksetDraftFileContent(request.content);\n return this.#draft(await this.#request(model, `/${encodeURIComponent(request.draftId)}/file`, \"PUT\", request, options.signal), model, request.draftId, request.expectedDraftRevision + 1);\n }\n\n async validate(modelId: string, draftId: string, input: TasksetDraftValidationRequest, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const id = IdSchema.parse(draftId);\n const request = TasksetDraftValidationRequestSchema.parse(input);\n const response = this.#scope(TasksetDraftValidationSchema.parse(await this.#request(model, `/${encodeURIComponent(id)}/validate`, \"POST\", request, options.signal)), model);\n if (response.draftId !== id || response.draftRevision !== request.expectedDraftRevision || response.workspaceHash !== request.expectedWorkspaceHash) this.#mismatch();\n return response;\n }\n\n async publish(modelId: string, draftId: string, input: TasksetDraftPublicationRequest, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const id = IdSchema.parse(draftId);\n const request = TasksetDraftPublicationRequestSchema.parse(input);\n const response = TasksetPackageReceiptSchema.parse(await this.#request(model, `/${encodeURIComponent(id)}/publish`, \"POST\", request, options.signal));\n if (response.teamId !== this.#options.teamId || response.modelProjectId !== model || response.operationId !== request.operationId\n || response.packageHash !== request.expectedPackageHash || !sameLearningRef(response.taskset, request.expectedTasksetRef) || response.selection !== \"select\") this.#mismatch();\n return response;\n }\n\n async delete(modelId: string, draftId: string, expectedDraftRevision: number, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const id = IdSchema.parse(draftId);\n const revision = RevisionSchema.parse(expectedDraftRevision);\n const response = this.#scope(TasksetDraftDeletionSchema.parse(await this.#request(model, `/${encodeURIComponent(id)}?expectedDraftRevision=${revision}`, \"DELETE\", undefined, options.signal)), model);\n if (response.draftId !== id || response.revision !== revision + 1) this.#mismatch();\n return response;\n }\n\n #scope<T extends { teamId: string; modelId: string }>(value: T, modelId: string): T {\n if (value.teamId !== this.#options.teamId || value.modelId !== modelId) this.#mismatch();\n return value;\n }\n #draft(input: unknown, modelId: string, draftId?: string, revision?: number) {\n const value = this.#scope(TasksetDraftReadbackSchema.parse(input), modelId);\n if ((draftId !== undefined && value.draft.id !== draftId) || (revision !== undefined && value.draft.revision !== revision)) this.#mismatch();\n return value;\n }\n #mismatch(): never { throw new OpenPondTasksetDraftError(502, \"draft_response_mismatch\", \"Taskset draft response differs from the requested owner, revision or content.\"); }\n\n async #request(model: string, path: string, method: string, body: unknown, signal?: AbortSignal): Promise<unknown> {\n const serialized = body === undefined ? undefined : JSON.stringify(body);\n if (serialized && new TextEncoder().encode(serialized).byteLength > MAX_TASKSET_DRAFT_WORKSPACE_BYTES) throw new OpenPondTasksetDraftError(413, \"draft_too_large\", \"Taskset draft exceeds the 64 MiB envelope.\");\n const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/models/${encodeURIComponent(model)}/taskset-drafts${path}`, {\n method, headers: { Authorization: `Bearer ${this.#options.apiKey}`, \"X-OpenPond-Team-Id\": this.#options.teamId, Accept: \"application/json\", ...(serialized ? { \"Content-Type\": \"application/json\" } : {}) },\n body: serialized, signal, redirect: \"error\",\n });\n const reader = response.body?.getReader();\n if (!reader) throw new OpenPondTasksetDraftError(response.status, \"empty_response\", \"Taskset draft response was empty.\");\n let bytes = 0;\n let text = \"\";\n const decoder = new TextDecoder(\"utf-8\", { fatal: true });\n try {\n while (true) {\n const chunk = await reader.read();\n if (chunk.done) break;\n bytes += chunk.value.byteLength;\n if (bytes > MAX_TASKSET_DRAFT_WORKSPACE_BYTES) throw new OpenPondTasksetDraftError(413, \"draft_too_large\", \"Taskset draft response exceeds the 64 MiB envelope.\");\n text += decoder.decode(chunk.value, { stream: true });\n }\n text += decoder.decode();\n } finally { await reader.cancel(); reader.releaseLock(); }\n const value: unknown = JSON.parse(text);\n if (!response.ok) {\n const error = z.object({ code: z.string(), message: z.string() }).safeParse(value);\n throw new OpenPondTasksetDraftError(response.status, error.success ? error.data.code : \"draft_request_failed\", error.success ? error.data.message : `Taskset draft request failed (${response.status}).`);\n }\n return value;\n }\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["export * from \"./taskset-draft-dataset-artifacts.js\";\nexport * from \"./taskset-draft-dataset-sources.js\";\nexport * from \"./taskset-draft-harness-actions.js\";\nexport * from \"./taskset-draft-core.js\";\nexport * from \"./taskset-draft-document.js\";\nexport { TasksetMetricPolicySchema, type TasksetMetricPolicy } from \"@openpond/evals/metrics\";\nexport * from \"./taskset-draft-authoring.js\";\nexport * from \"./taskset-draft-files.js\";\nexport * from \"./taskset-draft-workspace.js\";\nexport * from \"./taskset-authored-contracts.js\";\nexport * from \"./taskset-authored-validation.js\";\nexport * from \"./taskset-draft-publication.js\";\nexport * from \"./taskset-draft-manifests.js\";\nexport * from \"./taskset-draft-api-contracts.js\";\nexport { OpenPondTasksetDraftClient, OpenPondTasksetDraftError } from \"./taskset-draft-client.js\";\n", "import { z } from \"zod\";\nimport { LearningRevisionRefSchema } from \"@openpond/evals/learning\";\nimport { TasksetDraftSchema, TasksetDraftStatusSchema } from \"./taskset-draft-document.js\";\nimport { TasksetDraftFileSchema, TasksetDraftFileInfoSchema } from \"./model-taskset-authoring-contracts.js\";\n\nconst IdSchema = TasksetDraftSchema.shape.id;\nconst RevisionSchema = z.number().int().positive();\nconst HashSchema = z.string().regex(/^[a-f0-9]{64}$/);\nconst scope = { teamId: IdSchema, modelId: IdSchema };\n\nexport const TasksetDraftCreateRequestSchema = z.object({\n schemaVersion: z.literal(\"openpond.tasksetDraftCreate.v1\"),\n operationId: IdSchema, modelId: IdSchema, expectedModelRevision: RevisionSchema,\n name: TasksetDraftSchema.shape.name,\n}).strict();\nexport type TasksetDraftCreateRequest = z.infer<typeof TasksetDraftCreateRequestSchema>;\n\nexport const TasksetDraftSourceDescriptorSchema = z.object({\n schemaVersion: z.literal(\"openpond.tasksetDraftSourceDescriptor.v1\"), ...scope,\n expectedModelRevision: RevisionSchema, sourcePackageHash: HashSchema,\n}).strict();\nexport const TasksetDraftReadbackSchema = z.object({\n schemaVersion: z.literal(\"openpond.tasksetDraftReadback.v1\"), ...scope,\n draft: TasksetDraftSchema, workspaceHash: HashSchema, projectEtag: HashSchema,\n}).strict().refine(value => value.draft.profileId === value.teamId && value.draft.modelScope?.modelId === value.modelId,\n \"The hosted draft must belong to its declared workspace and Model.\");\nexport const TasksetDraftSummarySchema = z.object({\n id: IdSchema, revision: RevisionSchema, name: TasksetDraftSchema.shape.name,\n status: TasksetDraftStatusSchema, updatedAt: TasksetDraftSchema.shape.updatedAt,\n sourceTasksetRef: LearningRevisionRefSchema.nullable(),\n}).strict();\nexport const TasksetDraftListSchema = z.object({\n schemaVersion: z.literal(\"openpond.tasksetDraftList.v1\"), ...scope,\n drafts: z.array(TasksetDraftSummarySchema).max(100), nextCursor: z.string().min(1).max(2_000).nullable(),\n}).strict();\nexport const TasksetDraftSaveRequestSchema = z.object({ expectedDraftRevision: RevisionSchema, draft: TasksetDraftSchema }).strict();\nexport const TasksetDraftRefreshRequestSchema = z.object({ expectedDraftRevision: RevisionSchema, expectedModelRevision: RevisionSchema }).strict();\nexport const TasksetDraftValidationRequestSchema = z.object({ expectedDraftRevision: RevisionSchema, expectedWorkspaceHash: HashSchema }).strict();\nexport const TasksetDraftValidationSchema = z.object({\n schemaVersion: z.literal(\"openpond.tasksetDraftValidation.v1\"), ...scope,\n draftId: IdSchema, draftRevision: RevisionSchema, workspaceHash: HashSchema,\n valid: z.boolean(), issues: z.array(z.object({ code: z.string().min(1), severity: z.enum([\"warning\", \"error\"]), message: z.string(), path: z.string().nullable() }).strict()),\n packageHash: HashSchema.nullable(), tasksetRef: LearningRevisionRefSchema.nullable(),\n}).strict().refine(value => value.valid\n ? value.packageHash !== null && value.tasksetRef !== null && value.issues.every(issue => issue.severity !== \"error\")\n : value.packageHash === null && value.tasksetRef === null && value.issues.some(issue => issue.severity === \"error\"), \"Validation must retain either a compiled package or publication errors.\");\nexport const TasksetDraftPublicationRequestSchema = TasksetDraftValidationRequestSchema.extend({\n operationId: IdSchema, expectedPackageHash: HashSchema, expectedTasksetRef: LearningRevisionRefSchema,\n}).strict();\nexport const TasksetDraftFileListSchema = z.object({\n schemaVersion: z.literal(\"openpond.tasksetDraftFileList.v1\"), ...scope,\n draftId: IdSchema, draftRevision: RevisionSchema, files: z.array(TasksetDraftFileInfoSchema).max(10_020),\n}).strict();\nexport const TasksetDraftFileReadbackSchema = z.object({\n schemaVersion: z.literal(\"openpond.tasksetDraftFileReadback.v1\"), ...scope,\n draftId: IdSchema, draftRevision: RevisionSchema, file: TasksetDraftFileSchema,\n}).strict();\nexport const TasksetDraftDeletionSchema = z.object({\n schemaVersion: z.literal(\"openpond.tasksetDraftDeletion.v1\"), ...scope,\n draftId: IdSchema, revision: RevisionSchema, deleted: z.literal(true),\n}).strict();\n\nexport type TasksetDraftSourceDescriptor = z.infer<typeof TasksetDraftSourceDescriptorSchema>;\nexport type TasksetDraftReadback = z.infer<typeof TasksetDraftReadbackSchema>;\nexport type TasksetDraftList = z.infer<typeof TasksetDraftListSchema>;\nexport type TasksetDraftSaveRequest = z.infer<typeof TasksetDraftSaveRequestSchema>;\nexport type TasksetDraftRefreshRequest = z.infer<typeof TasksetDraftRefreshRequestSchema>;\nexport type TasksetDraftValidationRequest = z.infer<typeof TasksetDraftValidationRequestSchema>;\nexport type TasksetDraftValidation = z.infer<typeof TasksetDraftValidationSchema>;\nexport type TasksetDraftPublicationRequest = z.infer<typeof TasksetDraftPublicationRequestSchema>;\nexport type TasksetDraftFileList = z.infer<typeof TasksetDraftFileListSchema>;\nexport type TasksetDraftFileReadback = z.infer<typeof TasksetDraftFileReadbackSchema>;\nexport type TasksetDraftDeletion = z.infer<typeof TasksetDraftDeletionSchema>;\n", "import { z } from \"zod\";\nimport { contentHash, sha256 } from \"@openpond/harness\";\nimport { sameLearningRef } from \"@openpond/evals/learning\";\nimport { ModelTasksetDraftRequestSchema, TasksetDraftFileMutationSchema, TasksetDraftFilePathSchema, type ModelTasksetDraftRequest, type TasksetDraftFileMutation } from \"./model-taskset-authoring-contracts.js\";\nimport { TasksetDraftSchema } from \"./taskset-draft-document.js\";\nimport { decodeTasksetDraftFileContent } from \"./taskset-draft-files.js\";\nimport { MAX_TASKSET_DRAFT_WORKSPACE_BYTES } from \"./taskset-draft-workspace.js\";\nimport { TasksetPackageReceiptSchema } from \"./taskset-package-client.js\";\nimport { TasksetDraftCreateRequestSchema, type TasksetDraftCreateRequest, TasksetDraftSourceDescriptorSchema, TasksetDraftReadbackSchema, TasksetDraftListSchema, TasksetDraftSaveRequestSchema, TasksetDraftRefreshRequestSchema,\n TasksetDraftValidationRequestSchema, TasksetDraftValidationSchema, TasksetDraftPublicationRequestSchema, TasksetDraftFileListSchema, TasksetDraftFileReadbackSchema, TasksetDraftDeletionSchema,\n type TasksetDraftSaveRequest, type TasksetDraftRefreshRequest, type TasksetDraftValidationRequest, type TasksetDraftPublicationRequest } from \"./taskset-draft-api-contracts.js\";\n\ntype Options = { signal?: AbortSignal };\nconst IdSchema = TasksetDraftSchema.shape.id;\nconst RevisionSchema = z.number().int().positive();\n\nexport class OpenPondTasksetDraftError extends Error {\n constructor(readonly status: number, readonly code: string, message: string) { super(message); this.name = \"OpenPondTasksetDraftError\"; }\n}\n\n/** Scoped mutable drafts use explicit CAS and never retry writes automatically. */\nexport class OpenPondTasksetDraftClient {\n readonly #options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof globalThis.fetch };\n constructor(options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof globalThis.fetch }) {\n const url = new URL(options.baseUrl);\n if (![\"http:\", \"https:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash || !options.apiKey.trim() || !options.teamId.trim()) throw new Error(\"Taskset draft client requires a clean HTTP(S) endpoint and workspace credentials.\");\n this.#options = { ...options, baseUrl: url.toString().replace(/\\/+$/, \"\") };\n }\n\n async inspectSource(modelId: string, expectedModelRevision: number, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const revision = RevisionSchema.parse(expectedModelRevision);\n const response = this.#scope(TasksetDraftSourceDescriptorSchema.parse(await this.#request(model, `/source?expectedModelRevision=${revision}`, \"GET\", undefined, options.signal)), model);\n if (response.expectedModelRevision !== revision) this.#mismatch();\n return response;\n }\n\n async initialize(input: ModelTasksetDraftRequest, options: Options = {}) {\n const request = ModelTasksetDraftRequestSchema.parse(input);\n const response = this.#draft(await this.#request(request.modelId, \"\", \"POST\", request, options.signal), request.modelId);\n const source = response.draft.modelScope?.source;\n if (!source || source.requestHash !== contentHash(request) || source.sourcePackageHash !== request.sourcePackageHash || source.draftId !== response.draft.id\n || source.lineage.owner.scopeId !== this.#options.teamId || source.lineage.owner.modelId !== request.modelId) this.#mismatch();\n return response;\n }\n\n async create(input: TasksetDraftCreateRequest, options: Options = {}) {\n const request = TasksetDraftCreateRequestSchema.parse(input);\n const response = this.#draft(await this.#request(request.modelId, \"\", \"POST\", request, options.signal), request.modelId);\n const expectedId = `model-taskset-draft-${contentHash({ owner: { scopeId: this.#options.teamId, modelId: request.modelId }, operationId: request.operationId })}`;\n if (response.draft.id !== expectedId || response.draft.modelScope?.source !== undefined) this.#mismatch();\n return response;\n }\n\n async list(modelId: string, options: Options & { limit?: number; cursor?: string } = {}) {\n const model = IdSchema.parse(modelId);\n const query = new URLSearchParams();\n if (options.limit !== undefined) query.set(\"limit\", String(z.number().int().min(1).max(100).parse(options.limit)));\n if (options.cursor !== undefined) query.set(\"cursor\", z.string().min(1).max(2_000).parse(options.cursor));\n return this.#scope(TasksetDraftListSchema.parse(await this.#request(model, query.size ? `?${query}` : \"\", \"GET\", undefined, options.signal)), model);\n }\n\n async get(modelId: string, draftId: string, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const id = IdSchema.parse(draftId);\n return this.#draft(await this.#request(model, `/${encodeURIComponent(id)}`, \"GET\", undefined, options.signal), model, id);\n }\n\n async save(modelId: string, input: TasksetDraftSaveRequest, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const request = TasksetDraftSaveRequestSchema.parse(input);\n return this.#draft(await this.#request(model, `/${encodeURIComponent(request.draft.id)}`, \"PUT\", request, options.signal), model, request.draft.id, request.expectedDraftRevision + 1);\n }\n\n async refreshModel(modelId: string, draftId: string, input: TasksetDraftRefreshRequest, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const id = IdSchema.parse(draftId);\n const request = TasksetDraftRefreshRequestSchema.parse(input);\n const response = this.#draft(await this.#request(model, `/${encodeURIComponent(id)}/refresh-model`, \"POST\", request, options.signal), model, id, request.expectedDraftRevision + 1);\n if (response.draft.modelScope?.expectedModelRevision !== request.expectedModelRevision) this.#mismatch();\n return response;\n }\n\n async files(modelId: string, draftId: string, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const id = IdSchema.parse(draftId);\n const response = this.#scope(TasksetDraftFileListSchema.parse(await this.#request(model, `/${encodeURIComponent(id)}/files`, \"GET\", undefined, options.signal)), model);\n if (response.draftId !== id) this.#mismatch();\n return response;\n }\n\n async readFile(modelId: string, draftId: string, path: string, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const id = IdSchema.parse(draftId);\n const relative = TasksetDraftFilePathSchema.parse(path);\n const response = this.#scope(TasksetDraftFileReadbackSchema.parse(await this.#request(model, `/${encodeURIComponent(id)}/file?path=${encodeURIComponent(relative)}`, \"GET\", undefined, options.signal)), model);\n if (response.draftId !== id || response.file.path !== relative) this.#mismatch();\n const bytes = decodeTasksetDraftFileContent(response.file.content);\n if (bytes.byteLength !== response.file.sizeBytes || sha256(bytes) !== response.file.contentHash) this.#mismatch();\n return response;\n }\n\n async saveFile(modelId: string, input: TasksetDraftFileMutation, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const request = TasksetDraftFileMutationSchema.parse(input);\n if (request.content) decodeTasksetDraftFileContent(request.content);\n return this.#draft(await this.#request(model, `/${encodeURIComponent(request.draftId)}/file`, \"PUT\", request, options.signal), model, request.draftId, request.expectedDraftRevision + 1);\n }\n\n async validate(modelId: string, draftId: string, input: TasksetDraftValidationRequest, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const id = IdSchema.parse(draftId);\n const request = TasksetDraftValidationRequestSchema.parse(input);\n const response = this.#scope(TasksetDraftValidationSchema.parse(await this.#request(model, `/${encodeURIComponent(id)}/validate`, \"POST\", request, options.signal)), model);\n if (response.draftId !== id || response.draftRevision !== request.expectedDraftRevision || response.workspaceHash !== request.expectedWorkspaceHash) this.#mismatch();\n return response;\n }\n\n async publish(modelId: string, draftId: string, input: TasksetDraftPublicationRequest, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const id = IdSchema.parse(draftId);\n const request = TasksetDraftPublicationRequestSchema.parse(input);\n const response = TasksetPackageReceiptSchema.parse(await this.#request(model, `/${encodeURIComponent(id)}/publish`, \"POST\", request, options.signal));\n if (response.teamId !== this.#options.teamId || response.modelProjectId !== model || response.operationId !== request.operationId\n || response.packageHash !== request.expectedPackageHash || !sameLearningRef(response.taskset, request.expectedTasksetRef) || response.selection !== \"select\") this.#mismatch();\n return response;\n }\n\n async delete(modelId: string, draftId: string, expectedDraftRevision: number, options: Options = {}) {\n const model = IdSchema.parse(modelId);\n const id = IdSchema.parse(draftId);\n const revision = RevisionSchema.parse(expectedDraftRevision);\n const response = this.#scope(TasksetDraftDeletionSchema.parse(await this.#request(model, `/${encodeURIComponent(id)}?expectedDraftRevision=${revision}`, \"DELETE\", undefined, options.signal)), model);\n if (response.draftId !== id || response.revision !== revision + 1) this.#mismatch();\n return response;\n }\n\n #scope<T extends { teamId: string; modelId: string }>(value: T, modelId: string): T {\n if (value.teamId !== this.#options.teamId || value.modelId !== modelId) this.#mismatch();\n return value;\n }\n #draft(input: unknown, modelId: string, draftId?: string, revision?: number) {\n const value = this.#scope(TasksetDraftReadbackSchema.parse(input), modelId);\n if ((draftId !== undefined && value.draft.id !== draftId) || (revision !== undefined && value.draft.revision !== revision)) this.#mismatch();\n return value;\n }\n #mismatch(): never { throw new OpenPondTasksetDraftError(502, \"draft_response_mismatch\", \"Taskset draft response differs from the requested owner, revision or content.\"); }\n\n async #request(model: string, path: string, method: string, body: unknown, signal?: AbortSignal): Promise<unknown> {\n const serialized = body === undefined ? undefined : JSON.stringify(body);\n if (serialized && new TextEncoder().encode(serialized).byteLength > MAX_TASKSET_DRAFT_WORKSPACE_BYTES) throw new OpenPondTasksetDraftError(413, \"draft_too_large\", \"Taskset draft exceeds the 64 MiB envelope.\");\n const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/models/${encodeURIComponent(model)}/taskset-drafts${path}`, {\n method, headers: { Authorization: `Bearer ${this.#options.apiKey}`, \"X-OpenPond-Team-Id\": this.#options.teamId, Accept: \"application/json\", ...(serialized ? { \"Content-Type\": \"application/json\" } : {}) },\n body: serialized, signal, redirect: \"error\",\n });\n const reader = response.body?.getReader();\n if (!reader) throw new OpenPondTasksetDraftError(response.status, \"empty_response\", \"Taskset draft response was empty.\");\n let bytes = 0;\n let text = \"\";\n const decoder = new TextDecoder(\"utf-8\", { fatal: true });\n try {\n while (true) {\n const chunk = await reader.read();\n if (chunk.done) break;\n bytes += chunk.value.byteLength;\n if (bytes > MAX_TASKSET_DRAFT_WORKSPACE_BYTES) throw new OpenPondTasksetDraftError(413, \"draft_too_large\", \"Taskset draft response exceeds the 64 MiB envelope.\");\n text += decoder.decode(chunk.value, { stream: true });\n }\n text += decoder.decode();\n } finally { await reader.cancel(); reader.releaseLock(); }\n const value: unknown = JSON.parse(text);\n if (!response.ok) {\n const error = z.object({ code: z.string(), message: z.string() }).safeParse(value);\n throw new OpenPondTasksetDraftError(response.status, error.success ? error.data.code : \"draft_request_failed\", error.success ? error.data.message : `Taskset draft request failed (${response.status}).`);\n }\n return value;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["z", "IdSchema", "RevisionSchema", "z"]
|
|
7
7
|
}
|
package/dist/taskset-packages.js
CHANGED
|
@@ -669,9 +669,10 @@ function prepareAuthoredTasksetSource(tasksetInput, sourceFiles, adapterId) {
|
|
|
669
669
|
// src/taskset-draft-package-compiler.ts
|
|
670
670
|
function compileModelTasksetDraftWorkspace(input) {
|
|
671
671
|
const workspace = validateTasksetDraftWorkspace(input.workspace);
|
|
672
|
-
const preparation = ModelTasksetDraftPreparationSchema.parse(input.preparation);
|
|
673
|
-
if (workspace.draft.
|
|
674
|
-
|
|
672
|
+
const preparation = input.preparation === null ? null : ModelTasksetDraftPreparationSchema.parse(input.preparation);
|
|
673
|
+
if (!workspace.draft.modelScope) throw new Error("Taskset draft requires a Model owner.");
|
|
674
|
+
if (preparation ? workspace.draft.id !== preparation.draftId || workspace.draft.modelScope.modelId !== preparation.lineage.owner.modelId || workspace.draft.profileId !== preparation.lineage.owner.scopeId || contentHash(workspace.draft.modelScope.source ?? null) !== contentHash(preparation) : workspace.draft.modelScope.source !== void 0) throw new Error("Taskset draft differs from its retained source preparation.");
|
|
675
|
+
const taskset = publishTasksetDraft({ draft: workspace.draft, now: workspace.draft.updatedAt, sourcePackageHash: workspace.contentHash });
|
|
675
676
|
const files = new Map(workspace.files.map((file) => [file.path, decodeTasksetDraftWorkspaceFile(file)]));
|
|
676
677
|
for (const [path, source] of renderTasksetDraftManifests(workspace.draft)) if (!isGeneratedTasksetPublicationFilePath(path)) files.set(path, new TextEncoder().encode(source));
|
|
677
678
|
const authored = prepareAuthoredTasksetSource(taskset, files, input.adapterId);
|
|
@@ -689,7 +690,7 @@ function compileModelTasksetDraftWorkspace(input) {
|
|
|
689
690
|
return { asset: entry.asset, base64: Buffer.from(bytes).toString("base64") };
|
|
690
691
|
})
|
|
691
692
|
});
|
|
692
|
-
return publishModelTasksetDraftPackage({ preparation, edited });
|
|
693
|
+
return preparation ? publishModelTasksetDraftPackage({ preparation, edited }) : edited;
|
|
693
694
|
}
|
|
694
695
|
|
|
695
696
|
// src/taskset-draft-source.ts
|