openpond-sdk 0.12.5 → 0.12.7

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.
Files changed (157) hide show
  1. package/TASKSETS.md +13 -0
  2. package/TRAINING_PROTOCOL.md +25 -0
  3. package/dist/advanced-refiner-evaluations.js +7 -7
  4. package/dist/candidate-evaluations.js +6 -6
  5. package/dist/{chunk-EJZ7HOIS.js → chunk-2XLKMZH5.js} +485 -251
  6. package/dist/chunk-2XLKMZH5.js.map +1 -0
  7. package/dist/{chunk-CAMLCKSF.js → chunk-3SIGXGAE.js} +132 -87
  8. package/dist/chunk-3SIGXGAE.js.map +1 -0
  9. package/dist/{chunk-T3MFWGMX.js → chunk-3VGTVZHL.js} +3 -3
  10. package/dist/{chunk-O54KGALH.js → chunk-5T76GARR.js} +2 -2
  11. package/dist/{chunk-WQFU635Q.js → chunk-ATVQQCYN.js} +8 -4
  12. package/dist/chunk-ATVQQCYN.js.map +1 -0
  13. package/dist/{chunk-MJELLVQP.js → chunk-B2MKB7NB.js} +2 -2
  14. package/dist/{chunk-H4NTJFEE.js → chunk-D3WOJTUY.js} +3 -2
  15. package/dist/{chunk-H4NTJFEE.js.map → chunk-D3WOJTUY.js.map} +1 -1
  16. package/dist/{chunk-F4GITADW.js → chunk-ETFWUMEJ.js} +2 -2
  17. package/dist/{chunk-6KKM2XRR.js → chunk-FPA3AVCP.js} +35 -6
  18. package/dist/chunk-FPA3AVCP.js.map +1 -0
  19. package/dist/{chunk-QFBSNSUL.js → chunk-HRJKDHHG.js} +6 -4
  20. package/dist/chunk-HRJKDHHG.js.map +1 -0
  21. package/dist/{chunk-6GQ3GIAP.js → chunk-HRZLFJXX.js} +3 -3
  22. package/dist/{chunk-BJ5MKLWH.js → chunk-KD6MM67B.js} +6 -6
  23. package/dist/{chunk-RE426Q7Y.js → chunk-LIMTJR3A.js} +3 -3
  24. package/dist/{chunk-ZFYI4P6C.js → chunk-ONGOAEY6.js} +14 -2
  25. package/dist/chunk-ONGOAEY6.js.map +1 -0
  26. package/dist/{chunk-FLNWE5ZA.js → chunk-QDYHSJT5.js} +22 -8
  27. package/dist/chunk-QDYHSJT5.js.map +1 -0
  28. package/dist/{chunk-GWGDWZVN.js → chunk-RDL6QIQO.js} +2 -2
  29. package/dist/{chunk-BGNPKYBJ.js → chunk-S2IASCGW.js} +3 -3
  30. package/dist/{chunk-KKL6OICH.js → chunk-SER76PQ7.js} +2 -2
  31. package/dist/{chunk-6MFFKAU6.js → chunk-SMHZT6RM.js} +2 -2
  32. package/dist/{chunk-BYNVSWIQ.js → chunk-SQBYHWZU.js} +2 -2
  33. package/dist/{chunk-6Y67YHVH.js → chunk-VBVFE33M.js} +5 -5
  34. package/dist/{chunk-DBKCSQVH.js → chunk-VQGTYGZH.js} +2 -2
  35. package/dist/{chunk-25L5IXHA.js → chunk-VTAGUWXH.js} +2 -2
  36. package/dist/{chunk-HOOHJCE7.js → chunk-XF3JR72U.js} +3 -3
  37. package/dist/{chunk-VZPNRPXL.js → chunk-Y3I7SN5W.js} +61 -35
  38. package/dist/chunk-Y3I7SN5W.js.map +1 -0
  39. package/dist/{chunk-XACJ63U4.js → chunk-Z4XGSEKC.js} +577 -249
  40. package/dist/chunk-Z4XGSEKC.js.map +1 -0
  41. package/dist/{chunk-AUNNXJQE.js → chunk-ZGZLN4LH.js} +2 -2
  42. package/dist/connected-evidence.js +14 -14
  43. package/dist/dataset-workspaces.js +14 -14
  44. package/dist/experiment-evaluation-schedules.js +18 -18
  45. package/dist/experiment-improvements.js +7 -7
  46. package/dist/experiments.js +17 -17
  47. package/dist/index.js +34 -33
  48. package/dist/index.js.map +1 -1
  49. package/dist/learning.js +113 -9
  50. package/dist/learning.js.map +1 -1
  51. package/dist/model-projects.js +1 -1
  52. package/dist/model-starter-attempts.js +2 -2
  53. package/dist/model-starter-catalog.js +9 -9
  54. package/dist/model-starters.js +13 -9
  55. package/dist/model-taskset-runs.js +3 -3
  56. package/dist/post-training.js +6 -6
  57. package/dist/taskset-drafts.js +12 -12
  58. package/dist/taskset-packages.js +15 -15
  59. package/dist/training-bundle.js +81 -19
  60. package/dist/training-bundle.js.map +1 -1
  61. package/dist/training.js +39 -7
  62. package/dist/types/packages/cloud/src/sandbox/sandbox-instance-client.d.ts.map +1 -1
  63. package/dist/types/packages/cloud/src/sandbox/url.d.ts +3 -1
  64. package/dist/types/packages/cloud/src/sandbox/url.d.ts.map +1 -1
  65. package/dist/types/packages/sdk/src/connected-evidence-client.d.ts +4 -0
  66. package/dist/types/packages/sdk/src/connected-evidence-client.d.ts.map +1 -1
  67. package/dist/types/packages/sdk/src/dataset-preparation-workspace.d.ts +2 -0
  68. package/dist/types/packages/sdk/src/dataset-preparation-workspace.d.ts.map +1 -1
  69. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts +14 -0
  70. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts.map +1 -1
  71. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts +4 -0
  72. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts.map +1 -1
  73. package/dist/types/packages/sdk/src/dataset-workspace-operations.d.ts +4 -0
  74. package/dist/types/packages/sdk/src/dataset-workspace-operations.d.ts.map +1 -1
  75. package/dist/types/packages/sdk/src/learning-client.d.ts +1 -0
  76. package/dist/types/packages/sdk/src/learning-client.d.ts.map +1 -1
  77. package/dist/types/packages/sdk/src/learning-correction-metrics.d.ts +358 -0
  78. package/dist/types/packages/sdk/src/learning-correction-metrics.d.ts.map +1 -0
  79. package/dist/types/packages/sdk/src/learning.d.ts +1 -0
  80. package/dist/types/packages/sdk/src/learning.d.ts.map +1 -1
  81. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts +24 -0
  82. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts.map +1 -1
  83. package/dist/types/packages/sdk/src/model-learning-policy.d.ts +16 -0
  84. package/dist/types/packages/sdk/src/model-learning-policy.d.ts.map +1 -1
  85. package/dist/types/packages/sdk/src/model-projects.d.ts +172 -0
  86. package/dist/types/packages/sdk/src/model-projects.d.ts.map +1 -1
  87. package/dist/types/packages/sdk/src/model-starters.d.ts +84 -1
  88. package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -1
  89. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +28 -28
  90. package/dist/types/packages/sdk/src/model-training-defaults.d.ts +14 -0
  91. package/dist/types/packages/sdk/src/model-training-defaults.d.ts.map +1 -1
  92. package/dist/types/packages/sdk/src/post-training.d.ts +46 -0
  93. package/dist/types/packages/sdk/src/post-training.d.ts.map +1 -1
  94. package/dist/types/packages/sdk/src/taskset-authored-files.d.ts.map +1 -1
  95. package/dist/types/packages/sdk/src/taskset-authored-portable-release.d.ts.map +1 -1
  96. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts +4 -0
  97. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts.map +1 -1
  98. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +141 -120
  99. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts.map +1 -1
  100. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts +4 -0
  101. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts.map +1 -1
  102. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts +4 -0
  103. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts.map +1 -1
  104. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts +4 -0
  105. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts.map +1 -1
  106. package/dist/types/packages/sdk/src/taskset-package-client.d.ts +51 -0
  107. package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
  108. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts.map +1 -1
  109. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts.map +1 -1
  110. package/dist/types/packages/sdk/src/training-bundle.d.ts.map +1 -1
  111. package/dist/types/packages/sdk/src/training-compute-selection.d.ts +52 -0
  112. package/dist/types/packages/sdk/src/training-compute-selection.d.ts.map +1 -0
  113. package/dist/types/packages/sdk/src/training-estimates.d.ts +1069 -0
  114. package/dist/types/packages/sdk/src/training-estimates.d.ts.map +1 -0
  115. package/dist/types/packages/sdk/src/training-learning-batch.d.ts +40 -40
  116. package/dist/types/packages/sdk/src/training-physical-placement.d.ts +16 -0
  117. package/dist/types/packages/sdk/src/training-physical-placement.d.ts.map +1 -0
  118. package/dist/types/packages/sdk/src/training-preparations.d.ts +248 -0
  119. package/dist/types/packages/sdk/src/training-preparations.d.ts.map +1 -1
  120. package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts +20 -0
  121. package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts.map +1 -1
  122. package/dist/types/packages/sdk/src/training-queue.d.ts +24 -0
  123. package/dist/types/packages/sdk/src/training-queue.d.ts.map +1 -0
  124. package/dist/types/packages/sdk/src/training-recipe-binding.d.ts.map +1 -1
  125. package/dist/types/packages/sdk/src/training-recovery.d.ts +85 -0
  126. package/dist/types/packages/sdk/src/training-recovery.d.ts.map +1 -0
  127. package/dist/types/packages/sdk/src/training-verifier-assets.d.ts +7 -0
  128. package/dist/types/packages/sdk/src/training-verifier-assets.d.ts.map +1 -0
  129. package/dist/types/packages/sdk/src/training.d.ts +599 -0
  130. package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
  131. package/package.json +3 -3
  132. package/dist/chunk-6KKM2XRR.js.map +0 -1
  133. package/dist/chunk-CAMLCKSF.js.map +0 -1
  134. package/dist/chunk-EJZ7HOIS.js.map +0 -1
  135. package/dist/chunk-FLNWE5ZA.js.map +0 -1
  136. package/dist/chunk-QFBSNSUL.js.map +0 -1
  137. package/dist/chunk-VZPNRPXL.js.map +0 -1
  138. package/dist/chunk-WQFU635Q.js.map +0 -1
  139. package/dist/chunk-XACJ63U4.js.map +0 -1
  140. package/dist/chunk-ZFYI4P6C.js.map +0 -1
  141. /package/dist/{chunk-T3MFWGMX.js.map → chunk-3VGTVZHL.js.map} +0 -0
  142. /package/dist/{chunk-O54KGALH.js.map → chunk-5T76GARR.js.map} +0 -0
  143. /package/dist/{chunk-MJELLVQP.js.map → chunk-B2MKB7NB.js.map} +0 -0
  144. /package/dist/{chunk-F4GITADW.js.map → chunk-ETFWUMEJ.js.map} +0 -0
  145. /package/dist/{chunk-6GQ3GIAP.js.map → chunk-HRZLFJXX.js.map} +0 -0
  146. /package/dist/{chunk-BJ5MKLWH.js.map → chunk-KD6MM67B.js.map} +0 -0
  147. /package/dist/{chunk-RE426Q7Y.js.map → chunk-LIMTJR3A.js.map} +0 -0
  148. /package/dist/{chunk-GWGDWZVN.js.map → chunk-RDL6QIQO.js.map} +0 -0
  149. /package/dist/{chunk-BGNPKYBJ.js.map → chunk-S2IASCGW.js.map} +0 -0
  150. /package/dist/{chunk-KKL6OICH.js.map → chunk-SER76PQ7.js.map} +0 -0
  151. /package/dist/{chunk-6MFFKAU6.js.map → chunk-SMHZT6RM.js.map} +0 -0
  152. /package/dist/{chunk-BYNVSWIQ.js.map → chunk-SQBYHWZU.js.map} +0 -0
  153. /package/dist/{chunk-6Y67YHVH.js.map → chunk-VBVFE33M.js.map} +0 -0
  154. /package/dist/{chunk-DBKCSQVH.js.map → chunk-VQGTYGZH.js.map} +0 -0
  155. /package/dist/{chunk-25L5IXHA.js.map → chunk-VTAGUWXH.js.map} +0 -0
  156. /package/dist/{chunk-HOOHJCE7.js.map → chunk-XF3JR72U.js.map} +0 -0
  157. /package/dist/{chunk-AUNNXJQE.js.map → chunk-ZGZLN4LH.js.map} +0 -0
package/dist/learning.js CHANGED
@@ -11,8 +11,9 @@ import {
11
11
  OpenPondLearningClient,
12
12
  OpenPondLearningError,
13
13
  assertLearningCredentialExpiry,
14
- createSourceCredentialRequest
15
- } from "./chunk-H4NTJFEE.js";
14
+ createSourceCredentialRequest,
15
+ readBoundedLearningResponse
16
+ } from "./chunk-D3WOJTUY.js";
16
17
  import {
17
18
  ModelInitialLearningSchema
18
19
  } from "./chunk-CL3IOOVL.js";
@@ -174,16 +175,16 @@ var OpenPondGraderInspectionClient = class {
174
175
  if (page.teamId !== this.options.teamId || page.items.length > query.limit || new Set(page.items.map((item) => item.reward.id)).size !== page.items.length) throw new Error("Grader catalog differs from its requested workspace or bounds.");
175
176
  return page;
176
177
  }
177
- async versions(id, query = {}, signal) {
178
+ async versions(id2, query = {}, signal) {
178
179
  const options = z.object({ beforeRevision: z.number().int().positive().optional(), limit: z.number().int().min(1).max(100).default(25) }).strict().parse(query);
179
- const page = GraderVersionsPageSchema.parse(await this.read(`/${encodeURIComponent(Id.parse(id))}/versions`, options, signal));
180
- if (page.teamId !== this.options.teamId || page.id !== id || page.items.length > options.limit || page.items.some((item, index) => item.id !== id || options.beforeRevision && item.revision >= options.beforeRevision || index > 0 && item.revision >= page.items[index - 1].revision)) throw new Error("Grader versions differ from their requested identity or revision order.");
180
+ const page = GraderVersionsPageSchema.parse(await this.read(`/${encodeURIComponent(Id.parse(id2))}/versions`, options, signal));
181
+ if (page.teamId !== this.options.teamId || page.id !== id2 || page.items.length > options.limit || page.items.some((item, index) => item.id !== id2 || options.beforeRevision && item.revision >= options.beforeRevision || index > 0 && item.revision >= page.items[index - 1].revision)) throw new Error("Grader versions differ from their requested identity or revision order.");
181
182
  return page;
182
183
  }
183
- async usage(id, value, signal) {
184
+ async usage(id2, value, signal) {
184
185
  const query = GraderUsageQuerySchema.parse(value);
185
- const page = GraderUsagePageSchema.parse(await this.read(`/${encodeURIComponent(Id.parse(id))}/usage`, query, signal));
186
- if (page.teamId !== this.options.teamId || page.id !== id || page.section !== query.section || page.items.length > query.limit) throw new Error("Grader usage differs from its requested workspace, identity or bounds.");
186
+ const page = GraderUsagePageSchema.parse(await this.read(`/${encodeURIComponent(Id.parse(id2))}/usage`, query, signal));
187
+ if (page.teamId !== this.options.teamId || page.id !== id2 || page.section !== query.section || page.items.length > query.limit) throw new Error("Grader usage differs from its requested workspace, identity or bounds.");
187
188
  return page;
188
189
  }
189
190
  async read(path, query, signal) {
@@ -201,7 +202,108 @@ function graderFeedbackKeyFromName(name, rewardId) {
201
202
  const prefix = /^[a-z]/.test(slug) ? slug : `grader_${slug}`;
202
203
  return `${(prefix || "grader").slice(0, 55).replace(/_+$/g, "")}_${contentHash(rewardId).slice(0, 24)}`;
203
204
  }
205
+
206
+ // src/learning-correction-metrics.ts
207
+ import { z as z2 } from "zod";
208
+ import { CorrectionVerificationPlanContentSchema, CorrectionVerificationPlanSchema, CorrectionOpportunitySchema, CorrectionMetricSummarySchema, CorrectionMetricObservationSchema, assertLearningRequestJson } from "@openpond/evals/learning";
209
+ import { CorrectionVerificationPlanSchema as CorrectionVerificationPlanSchema2, CorrectionMetricSummarySchema as CorrectionMetricSummarySchema2, CorrectionMetricObservationSchema as CorrectionMetricObservationSchema2 } from "@openpond/evals/learning";
210
+ var id = z2.string().trim().min(1).max(500);
211
+ var ref = z2.object({ id, contentHash: z2.string().regex(/^[a-f0-9]{64}$/) }).strict();
212
+ var CorrectionMetricsReadSchema = z2.object({ teamId: id, modelId: id, runId: id.optional(), from: z2.string().datetime().optional(), to: z2.string().datetime().optional() }).strict();
213
+ var CorrectionMetricsCommandSchema = z2.discriminatedUnion("action", [
214
+ z2.object({
215
+ action: z2.literal("declare_verification"),
216
+ teamId: id,
217
+ operationId: id,
218
+ plan: z2.object({
219
+ modelId: CorrectionVerificationPlanContentSchema.shape.modelId,
220
+ classification: CorrectionVerificationPlanContentSchema.shape.classification,
221
+ feedback: CorrectionVerificationPlanContentSchema.shape.feedback,
222
+ evidence: CorrectionVerificationPlanContentSchema.shape.evidence,
223
+ trainingJobId: CorrectionVerificationPlanContentSchema.shape.trainingJobId,
224
+ checkpoint: CorrectionVerificationPlanContentSchema.shape.checkpoint,
225
+ artifact: CorrectionVerificationPlanContentSchema.shape.artifact,
226
+ taskset: CorrectionVerificationPlanContentSchema.shape.taskset,
227
+ checks: CorrectionVerificationPlanContentSchema.shape.checks,
228
+ baselineOperationId: CorrectionVerificationPlanContentSchema.shape.baselineOperationId,
229
+ candidateOperationId: CorrectionVerificationPlanContentSchema.shape.candidateOperationId,
230
+ criterion: CorrectionVerificationPlanContentSchema.shape.criterion
231
+ }).strict()
232
+ }).strict(),
233
+ z2.object({
234
+ action: z2.literal("link_live_opportunity"),
235
+ teamId: id,
236
+ operationId: id,
237
+ correction: ref,
238
+ inferenceRequestId: id,
239
+ grade: z2.object({ id, revision: z2.number().int().positive() }).strict(),
240
+ checkIds: z2.array(id).min(1).max(1e3)
241
+ }).strict()
242
+ ]);
243
+ var CorrectionMetricsDetailSchema = z2.object({ summary: CorrectionMetricSummarySchema.nullable(), observations: z2.array(CorrectionMetricObservationSchema).max(1e3) }).strict();
244
+ var OpenPondCorrectionMetricsClient = class {
245
+ options;
246
+ constructor(options) {
247
+ if (!options.apiKey.trim()) throw new Error("Learning API key is required.");
248
+ const url = new URL(options.baseUrl);
249
+ if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash)
250
+ throw new Error("Learning base URL must be an HTTP(S) endpoint without credentials, query, or fragment.");
251
+ this.options = { ...options, baseUrl: url.toString().replace(/\/+$/, "") };
252
+ }
253
+ async request(path, teamId, init) {
254
+ const response = await (this.options.fetch ?? globalThis.fetch)(`${this.options.baseUrl}${path}`, {
255
+ ...init,
256
+ redirect: "error",
257
+ headers: { Authorization: `Bearer ${this.options.apiKey}`, "Content-Type": "application/json", Accept: "application/json", "X-OpenPond-Team-Id": teamId }
258
+ });
259
+ let payload;
260
+ try {
261
+ payload = await readBoundedLearningResponse(response);
262
+ } catch (error) {
263
+ if (error instanceof OpenPondLearningError) throw error;
264
+ throw new OpenPondLearningError(response.ok ? 502 : response.status, "invalid_response", "Correction metrics returned an invalid response.", null);
265
+ }
266
+ if (!response.ok) {
267
+ const error = z2.object({ code: z2.string().optional(), error: z2.string().optional() }).passthrough().safeParse(payload);
268
+ throw new OpenPondLearningError(
269
+ response.status,
270
+ error.success ? error.data.code ?? "correction_request_failed" : "correction_request_failed",
271
+ error.success ? error.data.error ?? `Correction metrics request failed (${response.status}).` : `Correction metrics request failed (${response.status}).`,
272
+ payload
273
+ );
274
+ }
275
+ return payload;
276
+ }
277
+ async read(input, options = {}) {
278
+ const query = CorrectionMetricsReadSchema.parse(input);
279
+ const result = CorrectionMetricsDetailSchema.parse(await this.request(`/v1/learning/corrections?query=${encodeURIComponent(JSON.stringify(query))}`, query.teamId, { method: "GET", signal: options.signal }));
280
+ if (result.summary && (result.summary.scope.teamId !== query.teamId || result.summary.scope.modelId !== query.modelId || query.runId && result.summary.scope.runId !== query.runId) || result.observations.some((observation) => observation.modelId !== query.modelId || query.runId && observation.trainingJobId !== query.runId))
281
+ throw new OpenPondLearningError(502, "correction_scope_mismatch", "Correction metrics did not match the requested workspace, Model or run.", null);
282
+ return result;
283
+ }
284
+ async command(input, options = {}) {
285
+ const command = CorrectionMetricsCommandSchema.parse(input);
286
+ assertLearningRequestJson(command);
287
+ const payload = await this.request("/v1/learning/corrections", command.teamId, { method: "POST", body: JSON.stringify(command), signal: options.signal });
288
+ if (command.action === "declare_verification") {
289
+ const result2 = CorrectionVerificationPlanSchema.parse(payload);
290
+ if (result2.teamId !== command.teamId || result2.modelId !== command.plan.modelId || result2.trainingJobId !== command.plan.trainingJobId)
291
+ throw new OpenPondLearningError(502, "correction_scope_mismatch", "Correction declaration did not match the requested workspace, Model or run.", null);
292
+ return result2;
293
+ }
294
+ const result = CorrectionOpportunitySchema.parse(payload);
295
+ if (result.correction.id !== command.correction.id || result.correction.contentHash !== command.correction.contentHash || result.attempt.id !== command.inferenceRequestId)
296
+ throw new OpenPondLearningError(502, "correction_scope_mismatch", "Correction opportunity did not match the declared correction and serving request.", null);
297
+ return result;
298
+ }
299
+ };
204
300
  export {
301
+ CorrectionMetricObservationSchema2 as CorrectionMetricObservationSchema,
302
+ CorrectionMetricSummarySchema2 as CorrectionMetricSummarySchema,
303
+ CorrectionMetricsCommandSchema,
304
+ CorrectionMetricsDetailSchema,
305
+ CorrectionMetricsReadSchema,
306
+ CorrectionVerificationPlanSchema2 as CorrectionVerificationPlanSchema,
205
307
  GraderCatalogPageSchema,
206
308
  GraderCatalogQuerySchema,
207
309
  GraderUsagePageSchema,
@@ -216,6 +318,7 @@ export {
216
318
  LearningSourceCredentialRequestSchema,
217
319
  LearningSourceCredentialSchema,
218
320
  LearningSourceCredentialSecretSchema,
321
+ OpenPondCorrectionMetricsClient,
219
322
  OpenPondGraderInspectionClient,
220
323
  OpenPondLearningClient,
221
324
  OpenPondLearningError,
@@ -225,6 +328,7 @@ export {
225
328
  graderFeedbackKeyFromName,
226
329
  hostedLearningPolicyDefaults,
227
330
  hostedLearningPolicyReferences,
228
- initialHostedModelLearning
331
+ initialHostedModelLearning,
332
+ readBoundedLearningResponse
229
333
  };
230
334
  //# sourceMappingURL=learning.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/learning.ts","../src/model-learning-policy.ts","../src/grader-inspection.ts","../src/grader-feedback-key.ts"],"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\nexport * from \"./grader-inspection.js\";\n\nexport * from \"./grader-feedback-key.js\";\n","import { LearningDomainError, LearningPolicyContentSchema, LearningSourceContentSchema, learningRef, sameLearningRef, sealLearningContent, type TaskDefinition, type LearningPolicy, type LearningRevisionRef } from \"@openpond/evals/learning\";\nimport { contentHash } from \"@openpond/harness\";\n\nimport type { HostedModelProjectSummary } from \"./model-projects.js\";\nimport { ModelInitialLearningSchema, type ModelInitialLearning } from \"./model-learning-intent.js\";\n\n/** Compile the simple creation choice into exact source and policy releases.\n * Hosts commit these with the new Model and its idempotency receipt. */\nexport function initialHostedModelLearning(input: { project: HostedModelProjectSummary; definition: TaskDefinition; learning: ModelInitialLearning }) {\n const learning = ModelInitialLearningSchema.parse(input.learning);\n const { project, definition } = input;\n if (!project.trainingSetup.rewardBindingRef || !sameLearningRef(definition.rewardBinding, project.trainingSetup.rewardBindingRef)) throw new LearningDomainError(\"learning_policy_binding_mismatch\", 422, \"The task format must use the Model's selected grader.\");\n const source = LearningSourceContentSchema.parse({ schemaVersion: \"openpond.learningSource.v1\", id: `model-source-${contentHash([project.portableProjectId, learningRef(definition)])}`,\n revision: 1, name: `${project.name} tasks`, kind: \"direct\", taskDefinition: learningRef(definition), enabled: true,\n allowedSplits: [\"train\", \"validation\", \"test\", \"frozen_eval\"], mapping: null, adapterVersion: null });\n const policy = createHostedLearningPolicyContent({ project, previous: null, policyId: `model-policy-${contentHash(project.portableProjectId)}`,\n applyModelConfiguration: true, sources: [learningRef(sealLearningContent(source))], taskDefinition: learningRef(definition),\n settings: { ...hostedLearningPolicyDefaults(project, null), enabled: true, scheduled: true,\n trigger: learning.mode === \"nightly\" ? { kind: \"nightly\", localTime: learning.localTime, timeZone: learning.timeZone } : { kind: \"approved_count\" },\n minimumApprovedExamples: learning.minimumTasks, maxBatchExamples: learning.minimumTasks,\n maxIterationSpendUsd: learning.maximumSpendUsd, maxDailySpendUsd: learning.maximumDailySpendUsd,\n cooldownSeconds: 0, maxBacklogExamples: Math.max(1_000, learning.minimumTasks * 10),\n } });\n return { source, policy };\n}\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: Boolean(policy && [\"schedule\", \"nightly\", \"approved_count\"].includes(policy.trigger.kind)),\n intervalSeconds: policy?.trigger.kind === \"schedule\" ? policy.trigger.intervalSeconds : 86_400,\n humanReviewRequired: policy?.admission.mode !== \"qualified_automatic\",\n minimumApprovedExamples: policy?.admission.minimumApprovedExamples ?? 10,\n maxBatchExamples: policy?.limits.maxBatchExamples ?? 10,\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 trigger?: Exclude<LearningPolicy[\"trigger\"], { kind: \"upstream_accepted\" }>;\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 const trigger = settings.trigger ?? (settings.scheduled ? { kind: \"schedule\" as const, intervalSeconds: settings.intervalSeconds } : { kind: \"manual\" as const });\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,\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: trigger.kind !== \"manual\", 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","import { z } from \"zod\";\nimport { RewardReleaseSchema } from \"@openpond/evals/rewards\";\nconst Id = z.string().trim().min(1).max(240);\nexport const GraderCatalogQuerySchema = z.object({ projectId: Id.optional(), search: z.string().max(300).optional(), kind: z.string().max(100).optional(), sort: z.enum([\"name\", \"type\", \"version\", \"projects\", \"datasets\", \"runs\"]).optional(), direction: z.enum([\"asc\", \"desc\"]).optional(), after: z.string().max(3000).optional(), limit: z.number().int().min(1).max(100).default(30) }).strict();\nexport const GraderCatalogPageSchema = z.object({ teamId: Id, items: z.array(z.object({ reward: RewardReleaseSchema, projects: z.number().int().nonnegative(), datasets: z.number().int().nonnegative(), runs: z.number().int().nonnegative() }).strict()).max(100), nextCursor: z.string().nullable() }).strict();\nexport const GraderVersionsPageSchema = z.object({ teamId: Id, id: Id, items: z.array(RewardReleaseSchema).max(100), nextRevision: z.number().int().positive().nullable() }).strict();\nexport const GraderUsageQuerySchema = z.object({ section: z.enum([\"projects\", \"datasets\", \"runs\"]), after: Id.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();\nexport const GraderUsagePageSchema = z.object({ teamId: Id, id: Id, section: GraderUsageQuerySchema.shape.section, items: z.array(z.union([\n z.object({ id: Id, name: z.string(), graderRevisions: z.array(z.number().int().positive()), archived: z.boolean() }).strict(),\n z.object({ id: Id, name: z.string(), revision: z.number().int().positive(), graderRevisions: z.array(z.number().int().positive()) }).strict(),\n z.object({ id: Id, name: z.string(), status: z.string() }).strict(),\n])).max(100), nextCursor: Id.nullable() }).strict();\nexport class OpenPondGraderInspectionClient {\n private readonly baseUrl: string;\n constructor(private readonly options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof 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(\"A clean API origin and workspace credentials are required.\");\n this.baseUrl = url.toString().replace(/\\/+$/, \"\");\n }\n async catalog(value: z.input<typeof GraderCatalogQuerySchema> = {}, signal?: AbortSignal) {\n const query = GraderCatalogQuerySchema.parse(value);\n const page = GraderCatalogPageSchema.parse(await this.read(\"\", query, signal));\n if (page.teamId !== this.options.teamId || page.items.length > query.limit || new Set(page.items.map(item => item.reward.id)).size !== page.items.length) throw new Error(\"Grader catalog differs from its requested workspace or bounds.\");\n return page;\n }\n async versions(id: string, query: { beforeRevision?: number; limit?: number } = {}, signal?: AbortSignal) {\n const options = z.object({ beforeRevision: z.number().int().positive().optional(), limit: z.number().int().min(1).max(100).default(25) }).strict().parse(query);\n const page = GraderVersionsPageSchema.parse(await this.read(`/${encodeURIComponent(Id.parse(id))}/versions`, options, signal));\n if (page.teamId !== this.options.teamId || page.id !== id || page.items.length > options.limit || page.items.some((item, index) => item.id !== id || options.beforeRevision && item.revision >= options.beforeRevision || index > 0 && item.revision >= page.items[index - 1]!.revision)) throw new Error(\"Grader versions differ from their requested identity or revision order.\");\n return page;\n }\n async usage(id: string, value: z.input<typeof GraderUsageQuerySchema>, signal?: AbortSignal) {\n const query = GraderUsageQuerySchema.parse(value);\n const page = GraderUsagePageSchema.parse(await this.read(`/${encodeURIComponent(Id.parse(id))}/usage`, query, signal));\n if (page.teamId !== this.options.teamId || page.id !== id || page.section !== query.section || page.items.length > query.limit) throw new Error(\"Grader usage differs from its requested workspace, identity or bounds.\");\n return page;\n }\n private async read(path: string, query: Record<string, unknown>, signal?: AbortSignal) {\n const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));\n const response = await (this.options.fetch ?? fetch)(`${this.baseUrl}/v1/learning/read/graders${path}?${params}`, { signal, redirect: \"error\", headers: { Authorization: `Bearer ${this.options.apiKey}`, \"X-OpenPond-Team-Id\": this.options.teamId, Accept: \"application/json\" } });\n const value: unknown = await response.json();\n if (!response.ok) throw new Error(z.object({ error: z.string() }).parse(value).error);\n return value;\n }\n}\n","import { contentHash } from \"@openpond/harness\";\n\n/** Draft presentation default. Published keys must retain their released value. */\nexport function graderFeedbackKeyFromName(name: string, rewardId: string): string {\n const slug = name.normalize(\"NFKD\").toLowerCase().replace(/[^a-z0-9]+/g, \"_\").replace(/^_+|_+$/g, \"\");\n const prefix = /^[a-z]/.test(slug) ? slug : `grader_${slug}`;\n return `${(prefix || \"grader\").slice(0, 55).replace(/_+$/g, \"\")}_${contentHash(rewardId).slice(0, 24)}`;\n}\n"],"mappings":"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","names":["value"]}
1
+ {"version":3,"sources":["../src/learning.ts","../src/model-learning-policy.ts","../src/grader-inspection.ts","../src/grader-feedback-key.ts","../src/learning-correction-metrics.ts"],"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\nexport * from \"./grader-inspection.js\";\n\nexport * from \"./grader-feedback-key.js\";\nexport * from \"./learning-correction-metrics.js\";\n","import { LearningDomainError, LearningPolicyContentSchema, LearningSourceContentSchema, learningRef, sameLearningRef, sealLearningContent, type TaskDefinition, type LearningPolicy, type LearningRevisionRef } from \"@openpond/evals/learning\";\nimport { contentHash } from \"@openpond/harness\";\n\nimport type { HostedModelProjectSummary } from \"./model-projects.js\";\nimport { ModelInitialLearningSchema, type ModelInitialLearning } from \"./model-learning-intent.js\";\n\n/** Compile the simple creation choice into exact source and policy releases.\n * Hosts commit these with the new Model and its idempotency receipt. */\nexport function initialHostedModelLearning(input: { project: HostedModelProjectSummary; definition: TaskDefinition; learning: ModelInitialLearning }) {\n const learning = ModelInitialLearningSchema.parse(input.learning);\n const { project, definition } = input;\n if (!project.trainingSetup.rewardBindingRef || !sameLearningRef(definition.rewardBinding, project.trainingSetup.rewardBindingRef)) throw new LearningDomainError(\"learning_policy_binding_mismatch\", 422, \"The task format must use the Model's selected grader.\");\n const source = LearningSourceContentSchema.parse({ schemaVersion: \"openpond.learningSource.v1\", id: `model-source-${contentHash([project.portableProjectId, learningRef(definition)])}`,\n revision: 1, name: `${project.name} tasks`, kind: \"direct\", taskDefinition: learningRef(definition), enabled: true,\n allowedSplits: [\"train\", \"validation\", \"test\", \"frozen_eval\"], mapping: null, adapterVersion: null });\n const policy = createHostedLearningPolicyContent({ project, previous: null, policyId: `model-policy-${contentHash(project.portableProjectId)}`,\n applyModelConfiguration: true, sources: [learningRef(sealLearningContent(source))], taskDefinition: learningRef(definition),\n settings: { ...hostedLearningPolicyDefaults(project, null), enabled: true, scheduled: true,\n trigger: learning.mode === \"nightly\" ? { kind: \"nightly\", localTime: learning.localTime, timeZone: learning.timeZone } : { kind: \"approved_count\" },\n minimumApprovedExamples: learning.minimumTasks, maxBatchExamples: learning.minimumTasks,\n maxIterationSpendUsd: learning.maximumSpendUsd, maxDailySpendUsd: learning.maximumDailySpendUsd,\n cooldownSeconds: 0, maxBacklogExamples: Math.max(1_000, learning.minimumTasks * 10),\n } });\n return { source, policy };\n}\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: Boolean(policy && [\"schedule\", \"nightly\", \"approved_count\"].includes(policy.trigger.kind)),\n intervalSeconds: policy?.trigger.kind === \"schedule\" ? policy.trigger.intervalSeconds : 86_400,\n humanReviewRequired: policy?.admission.mode !== \"qualified_automatic\",\n minimumApprovedExamples: policy?.admission.minimumApprovedExamples ?? 10,\n maxBatchExamples: policy?.limits.maxBatchExamples ?? 10,\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 trigger?: Exclude<LearningPolicy[\"trigger\"], { kind: \"upstream_accepted\" }>;\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 const trigger = settings.trigger ?? (settings.scheduled ? { kind: \"schedule\" as const, intervalSeconds: settings.intervalSeconds } : { kind: \"manual\" as const });\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,\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: trigger.kind !== \"manual\", 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","import { z } from \"zod\";\nimport { RewardReleaseSchema } from \"@openpond/evals/rewards\";\nconst Id = z.string().trim().min(1).max(240);\nexport const GraderCatalogQuerySchema = z.object({ projectId: Id.optional(), search: z.string().max(300).optional(), kind: z.string().max(100).optional(), sort: z.enum([\"name\", \"type\", \"version\", \"projects\", \"datasets\", \"runs\"]).optional(), direction: z.enum([\"asc\", \"desc\"]).optional(), after: z.string().max(3000).optional(), limit: z.number().int().min(1).max(100).default(30) }).strict();\nexport const GraderCatalogPageSchema = z.object({ teamId: Id, items: z.array(z.object({ reward: RewardReleaseSchema, projects: z.number().int().nonnegative(), datasets: z.number().int().nonnegative(), runs: z.number().int().nonnegative() }).strict()).max(100), nextCursor: z.string().nullable() }).strict();\nexport const GraderVersionsPageSchema = z.object({ teamId: Id, id: Id, items: z.array(RewardReleaseSchema).max(100), nextRevision: z.number().int().positive().nullable() }).strict();\nexport const GraderUsageQuerySchema = z.object({ section: z.enum([\"projects\", \"datasets\", \"runs\"]), after: Id.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();\nexport const GraderUsagePageSchema = z.object({ teamId: Id, id: Id, section: GraderUsageQuerySchema.shape.section, items: z.array(z.union([\n z.object({ id: Id, name: z.string(), graderRevisions: z.array(z.number().int().positive()), archived: z.boolean() }).strict(),\n z.object({ id: Id, name: z.string(), revision: z.number().int().positive(), graderRevisions: z.array(z.number().int().positive()) }).strict(),\n z.object({ id: Id, name: z.string(), status: z.string() }).strict(),\n])).max(100), nextCursor: Id.nullable() }).strict();\nexport class OpenPondGraderInspectionClient {\n private readonly baseUrl: string;\n constructor(private readonly options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof 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(\"A clean API origin and workspace credentials are required.\");\n this.baseUrl = url.toString().replace(/\\/+$/, \"\");\n }\n async catalog(value: z.input<typeof GraderCatalogQuerySchema> = {}, signal?: AbortSignal) {\n const query = GraderCatalogQuerySchema.parse(value);\n const page = GraderCatalogPageSchema.parse(await this.read(\"\", query, signal));\n if (page.teamId !== this.options.teamId || page.items.length > query.limit || new Set(page.items.map(item => item.reward.id)).size !== page.items.length) throw new Error(\"Grader catalog differs from its requested workspace or bounds.\");\n return page;\n }\n async versions(id: string, query: { beforeRevision?: number; limit?: number } = {}, signal?: AbortSignal) {\n const options = z.object({ beforeRevision: z.number().int().positive().optional(), limit: z.number().int().min(1).max(100).default(25) }).strict().parse(query);\n const page = GraderVersionsPageSchema.parse(await this.read(`/${encodeURIComponent(Id.parse(id))}/versions`, options, signal));\n if (page.teamId !== this.options.teamId || page.id !== id || page.items.length > options.limit || page.items.some((item, index) => item.id !== id || options.beforeRevision && item.revision >= options.beforeRevision || index > 0 && item.revision >= page.items[index - 1]!.revision)) throw new Error(\"Grader versions differ from their requested identity or revision order.\");\n return page;\n }\n async usage(id: string, value: z.input<typeof GraderUsageQuerySchema>, signal?: AbortSignal) {\n const query = GraderUsageQuerySchema.parse(value);\n const page = GraderUsagePageSchema.parse(await this.read(`/${encodeURIComponent(Id.parse(id))}/usage`, query, signal));\n if (page.teamId !== this.options.teamId || page.id !== id || page.section !== query.section || page.items.length > query.limit) throw new Error(\"Grader usage differs from its requested workspace, identity or bounds.\");\n return page;\n }\n private async read(path: string, query: Record<string, unknown>, signal?: AbortSignal) {\n const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));\n const response = await (this.options.fetch ?? fetch)(`${this.baseUrl}/v1/learning/read/graders${path}?${params}`, { signal, redirect: \"error\", headers: { Authorization: `Bearer ${this.options.apiKey}`, \"X-OpenPond-Team-Id\": this.options.teamId, Accept: \"application/json\" } });\n const value: unknown = await response.json();\n if (!response.ok) throw new Error(z.object({ error: z.string() }).parse(value).error);\n return value;\n }\n}\n","import { contentHash } from \"@openpond/harness\";\n\n/** Draft presentation default. Published keys must retain their released value. */\nexport function graderFeedbackKeyFromName(name: string, rewardId: string): string {\n const slug = name.normalize(\"NFKD\").toLowerCase().replace(/[^a-z0-9]+/g, \"_\").replace(/^_+|_+$/g, \"\");\n const prefix = /^[a-z]/.test(slug) ? slug : `grader_${slug}`;\n return `${(prefix || \"grader\").slice(0, 55).replace(/_+$/g, \"\")}_${contentHash(rewardId).slice(0, 24)}`;\n}\n","import { z } from \"zod\";\nimport { CorrectionVerificationPlanContentSchema, CorrectionVerificationPlanSchema, CorrectionOpportunitySchema, CorrectionMetricSummarySchema, CorrectionMetricObservationSchema, assertLearningRequestJson } from \"@openpond/evals/learning\";\nimport { OpenPondLearningError, readBoundedLearningResponse, type LearningRequestOptions } from \"./learning-client.js\";\nexport { CorrectionVerificationPlanSchema, CorrectionMetricSummarySchema, CorrectionMetricObservationSchema } from \"@openpond/evals/learning\";\nexport type { CorrectionVerificationPlan, CorrectionMetricSummary, CorrectionMetricObservation } from \"@openpond/evals/learning\";\nconst id = z.string().trim().min(1).max(500);\nconst ref = z.object({ id, contentHash: z.string().regex(/^[a-f0-9]{64}$/) }).strict();\nexport const CorrectionMetricsReadSchema = z.object({ teamId: id, modelId: id, runId: id.optional(), from: z.string().datetime().optional(), to: z.string().datetime().optional() }).strict();\nexport const CorrectionMetricsCommandSchema = z.discriminatedUnion(\"action\", [\n z.object({ action: z.literal(\"declare_verification\"), teamId: id, operationId: id,\n plan: z.object({\n modelId: CorrectionVerificationPlanContentSchema.shape.modelId,\n classification: CorrectionVerificationPlanContentSchema.shape.classification,\n feedback: CorrectionVerificationPlanContentSchema.shape.feedback,\n evidence: CorrectionVerificationPlanContentSchema.shape.evidence,\n trainingJobId: CorrectionVerificationPlanContentSchema.shape.trainingJobId,\n checkpoint: CorrectionVerificationPlanContentSchema.shape.checkpoint,\n artifact: CorrectionVerificationPlanContentSchema.shape.artifact,\n taskset: CorrectionVerificationPlanContentSchema.shape.taskset,\n checks: CorrectionVerificationPlanContentSchema.shape.checks,\n baselineOperationId: CorrectionVerificationPlanContentSchema.shape.baselineOperationId,\n candidateOperationId: CorrectionVerificationPlanContentSchema.shape.candidateOperationId,\n criterion: CorrectionVerificationPlanContentSchema.shape.criterion,\n }).strict() }).strict(),\n z.object({ action: z.literal(\"link_live_opportunity\"), teamId: id, operationId: id, correction: ref, inferenceRequestId: id,\n grade: z.object({ id, revision: z.number().int().positive() }).strict(), checkIds: z.array(id).min(1).max(1000) }).strict(),\n]);\nexport const CorrectionMetricsDetailSchema = z.object({ summary: CorrectionMetricSummarySchema.nullable(), observations: z.array(CorrectionMetricObservationSchema).max(1000) }).strict();\nexport type CorrectionMetricsRead = z.infer<typeof CorrectionMetricsReadSchema>;\nexport type CorrectionMetricsCommand = z.infer<typeof CorrectionMetricsCommandSchema>;\nexport class OpenPondCorrectionMetricsClient {\n private readonly options: { baseUrl: string; apiKey: string; fetch?: typeof globalThis.fetch };\n constructor(options: { baseUrl: string; apiKey: string; fetch?: typeof globalThis.fetch }) {\n if (!options.apiKey.trim()) throw new Error(\"Learning API key is required.\");\n const url = new URL(options.baseUrl);\n if (![\"http:\", \"https:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash)\n throw new Error(\"Learning base URL must be an HTTP(S) endpoint without credentials, query, or fragment.\");\n this.options = { ...options, baseUrl: url.toString().replace(/\\/+$/, \"\") };\n }\n private async request(path: string, teamId: string, init: RequestInit) {\n const response = await (this.options.fetch ?? globalThis.fetch)(`${this.options.baseUrl}${path}`, {\n ...init, redirect: \"error\", headers: { Authorization: `Bearer ${this.options.apiKey}`, \"Content-Type\": \"application/json\", Accept: \"application/json\", \"X-OpenPond-Team-Id\": teamId },\n });\n let payload: unknown;\n try { payload = await readBoundedLearningResponse(response); }\n catch (error) {\n if (error instanceof OpenPondLearningError) throw error;\n throw new OpenPondLearningError(response.ok ? 502 : response.status, \"invalid_response\", \"Correction metrics returned an invalid response.\", null);\n }\n if (!response.ok) {\n const error = z.object({ code: z.string().optional(), error: z.string().optional() }).passthrough().safeParse(payload);\n throw new OpenPondLearningError(response.status, error.success ? error.data.code ?? \"correction_request_failed\" : \"correction_request_failed\",\n error.success ? error.data.error ?? `Correction metrics request failed (${response.status}).` : `Correction metrics request failed (${response.status}).`, payload);\n }\n return payload;\n }\n async read(input: CorrectionMetricsRead, options: LearningRequestOptions = {}) {\n const query = CorrectionMetricsReadSchema.parse(input);\n const result = CorrectionMetricsDetailSchema.parse(await this.request(`/v1/learning/corrections?query=${encodeURIComponent(JSON.stringify(query))}`, query.teamId, { method: \"GET\", signal: options.signal }));\n if (result.summary && (result.summary.scope.teamId !== query.teamId || result.summary.scope.modelId !== query.modelId || query.runId && result.summary.scope.runId !== query.runId)\n || result.observations.some(observation => observation.modelId !== query.modelId || query.runId && observation.trainingJobId !== query.runId))\n throw new OpenPondLearningError(502, \"correction_scope_mismatch\", \"Correction metrics did not match the requested workspace, Model or run.\", null);\n return result;\n }\n async command(input: CorrectionMetricsCommand, options: LearningRequestOptions = {}) {\n const command = CorrectionMetricsCommandSchema.parse(input);\n assertLearningRequestJson(command);\n const payload = await this.request(\"/v1/learning/corrections\", command.teamId, { method: \"POST\", body: JSON.stringify(command), signal: options.signal });\n if (command.action === \"declare_verification\") {\n const result = CorrectionVerificationPlanSchema.parse(payload);\n if (result.teamId !== command.teamId || result.modelId !== command.plan.modelId || result.trainingJobId !== command.plan.trainingJobId)\n throw new OpenPondLearningError(502, \"correction_scope_mismatch\", \"Correction declaration did not match the requested workspace, Model or run.\", null);\n return result;\n }\n const result = CorrectionOpportunitySchema.parse(payload);\n if (result.correction.id !== command.correction.id || result.correction.contentHash !== command.correction.contentHash || result.attempt.id !== command.inferenceRequestId)\n throw new OpenPondLearningError(502, \"correction_scope_mismatch\", \"Correction opportunity did not match the declared correction and serving request.\", null);\n return result;\n }\n}\n"],"mappings":"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","names":["id","value","z","CorrectionVerificationPlanSchema","CorrectionMetricSummarySchema","CorrectionMetricObservationSchema","z","result"]}
@@ -28,7 +28,7 @@ import {
28
28
  createModelProjectsClient,
29
29
  modelProjectConfigurationHash,
30
30
  parseModelProjectSaveRequest
31
- } from "./chunk-CAMLCKSF.js";
31
+ } from "./chunk-3SIGXGAE.js";
32
32
  import {
33
33
  ModelInitialLearningSchema
34
34
  } from "./chunk-CL3IOOVL.js";
@@ -11,8 +11,8 @@ import {
11
11
  ModelStarterAttemptSummarySchema,
12
12
  OpenPondModelStarterAttemptError,
13
13
  OpenPondModelStarterAttemptsClient
14
- } from "./chunk-O54KGALH.js";
15
- import "./chunk-CAMLCKSF.js";
14
+ } from "./chunk-5T76GARR.js";
15
+ import "./chunk-3SIGXGAE.js";
16
16
  import "./chunk-CL3IOOVL.js";
17
17
  import "./chunk-H3JZ3P5T.js";
18
18
  import "./chunk-YLJ4XMA6.js";
@@ -1,20 +1,20 @@
1
1
  import {
2
2
  ModelStarterSchema,
3
3
  validateResolvedModelStarter
4
- } from "./chunk-VZPNRPXL.js";
5
- import "./chunk-EJZ7HOIS.js";
4
+ } from "./chunk-Y3I7SN5W.js";
5
+ import "./chunk-2XLKMZH5.js";
6
6
  import "./chunk-TK3DXH7A.js";
7
- import "./chunk-XACJ63U4.js";
8
- import "./chunk-RE426Q7Y.js";
9
- import "./chunk-T3MFWGMX.js";
7
+ import "./chunk-Z4XGSEKC.js";
8
+ import "./chunk-LIMTJR3A.js";
9
+ import "./chunk-3VGTVZHL.js";
10
10
  import "./chunk-Q4TKI2MV.js";
11
11
  import "./chunk-H3367ISL.js";
12
- import "./chunk-MJELLVQP.js";
13
- import "./chunk-6GQ3GIAP.js";
14
- import "./chunk-O54KGALH.js";
12
+ import "./chunk-B2MKB7NB.js";
13
+ import "./chunk-HRZLFJXX.js";
14
+ import "./chunk-5T76GARR.js";
15
15
  import {
16
16
  ModelProjectVersionedRefSchema
17
- } from "./chunk-CAMLCKSF.js";
17
+ } from "./chunk-3SIGXGAE.js";
18
18
  import "./chunk-CL3IOOVL.js";
19
19
  import "./chunk-H3JZ3P5T.js";
20
20
  import "./chunk-YLJ4XMA6.js";
@@ -6,13 +6,15 @@ import {
6
6
  ModelStarterSchema,
7
7
  ResolvedModelStarterSchema,
8
8
  createModelStarterCreationRequest,
9
+ createModelTrainingRecipeDefaults,
9
10
  modelStarterPrivacyContentHash,
10
11
  parseModelStarterCreationRequest,
11
12
  prepareModelTrainingDefaults,
12
13
  previewModelStarter,
14
+ rebindModelTrainingRecipe,
13
15
  validateModelStarterCreation,
14
16
  validateResolvedModelStarter
15
- } from "./chunk-VZPNRPXL.js";
17
+ } from "./chunk-Y3I7SN5W.js";
16
18
  import {
17
19
  ModelStarterEnvironmentAttemptSchema,
18
20
  ModelStarterExecutionSchema,
@@ -31,17 +33,17 @@ import {
31
33
  validateModelTasksetPackage,
32
34
  verifyModelStarterEnvironmentAttempt,
33
35
  verifyNativeHarnessExperimentAttempt
34
- } from "./chunk-EJZ7HOIS.js";
36
+ } from "./chunk-2XLKMZH5.js";
35
37
  import "./chunk-TK3DXH7A.js";
36
- import "./chunk-XACJ63U4.js";
37
- import "./chunk-RE426Q7Y.js";
38
- import "./chunk-T3MFWGMX.js";
38
+ import "./chunk-Z4XGSEKC.js";
39
+ import "./chunk-LIMTJR3A.js";
40
+ import "./chunk-3VGTVZHL.js";
39
41
  import "./chunk-Q4TKI2MV.js";
40
42
  import "./chunk-H3367ISL.js";
41
- import "./chunk-MJELLVQP.js";
42
- import "./chunk-6GQ3GIAP.js";
43
- import "./chunk-O54KGALH.js";
44
- import "./chunk-CAMLCKSF.js";
43
+ import "./chunk-B2MKB7NB.js";
44
+ import "./chunk-HRZLFJXX.js";
45
+ import "./chunk-5T76GARR.js";
46
+ import "./chunk-3SIGXGAE.js";
45
47
  import "./chunk-CL3IOOVL.js";
46
48
  import "./chunk-H3JZ3P5T.js";
47
49
  import "./chunk-YLJ4XMA6.js";
@@ -62,6 +64,7 @@ export {
62
64
  createModelStarterCreationRequest,
63
65
  createModelStarterExecutionAsset,
64
66
  createModelTasksetExecutionResourcesAsset,
67
+ createModelTrainingRecipeDefaults,
65
68
  deriveModelTaskset,
66
69
  modelStarterExecutionAssetId,
67
70
  modelStarterPrivacyContentHash,
@@ -69,6 +72,7 @@ export {
69
72
  parseModelStarterCreationRequest,
70
73
  prepareModelTrainingDefaults,
71
74
  previewModelStarter,
75
+ rebindModelTrainingRecipe,
72
76
  resolveModelStarterExecutionAsset,
73
77
  resolveModelTasksetExecutionResourcesAsset,
74
78
  validateModelStarterCreation,
@@ -10,11 +10,11 @@ import {
10
10
  verifyHarnessExperimentManifest,
11
11
  verifyModelTasksetRunDetails,
12
12
  verifyModelTasksetRunResult
13
- } from "./chunk-6GQ3GIAP.js";
14
- import "./chunk-O54KGALH.js";
13
+ } from "./chunk-HRZLFJXX.js";
14
+ import "./chunk-5T76GARR.js";
15
15
  import {
16
16
  canonicalJson
17
- } from "./chunk-CAMLCKSF.js";
17
+ } from "./chunk-3SIGXGAE.js";
18
18
  import "./chunk-CL3IOOVL.js";
19
19
  import "./chunk-H3JZ3P5T.js";
20
20
  import "./chunk-YLJ4XMA6.js";
@@ -16,12 +16,12 @@ import {
16
16
  postTrainingActive,
17
17
  postTrainingRecipe,
18
18
  verifyPostTrainingPlan
19
- } from "./chunk-RE426Q7Y.js";
20
- import "./chunk-T3MFWGMX.js";
21
- import "./chunk-MJELLVQP.js";
22
- import "./chunk-6GQ3GIAP.js";
23
- import "./chunk-O54KGALH.js";
24
- import "./chunk-CAMLCKSF.js";
19
+ } from "./chunk-LIMTJR3A.js";
20
+ import "./chunk-3VGTVZHL.js";
21
+ import "./chunk-B2MKB7NB.js";
22
+ import "./chunk-HRZLFJXX.js";
23
+ import "./chunk-5T76GARR.js";
24
+ import "./chunk-3SIGXGAE.js";
25
25
  import "./chunk-CL3IOOVL.js";
26
26
  import "./chunk-H3JZ3P5T.js";
27
27
  import "./chunk-YLJ4XMA6.js";
@@ -4,10 +4,10 @@ import {
4
4
  TaskDesignProposalSchema,
5
5
  TaskExampleProposalSchema,
6
6
  TrainingTacticSchema
7
- } from "./chunk-BGNPKYBJ.js";
7
+ } from "./chunk-S2IASCGW.js";
8
8
  import {
9
9
  TasksetPackageReceiptSchema
10
- } from "./chunk-QFBSNSUL.js";
10
+ } from "./chunk-HRJKDHHG.js";
11
11
  import {
12
12
  MAX_TASKSET_DRAFT_EDIT_FILE_BYTES,
13
13
  MAX_TASKSET_DRAFT_WORKSPACE_BYTES,
@@ -28,7 +28,7 @@ import {
28
28
  saveTasksetDraftWorkspaceFile,
29
29
  tasksetDraftFromTaskset,
30
30
  validateTasksetDraftWorkspace
31
- } from "./chunk-HOOHJCE7.js";
31
+ } from "./chunk-XF3JR72U.js";
32
32
  import "./chunk-Z252BNAZ.js";
33
33
  import {
34
34
  AuthoringProvenanceSchema,
@@ -56,7 +56,7 @@ import {
56
56
  isTrainingSourceRef,
57
57
  validatePortability,
58
58
  validateTaskset
59
- } from "./chunk-ZFYI4P6C.js";
59
+ } from "./chunk-ONGOAEY6.js";
60
60
  import {
61
61
  ConnectedDatasetSourceRefSchema,
62
62
  CorrectionSignalSchema,
@@ -112,7 +112,7 @@ import {
112
112
  UploadedFileDatasetSourceRefSchema,
113
113
  assertTasksetCalibrationClosures,
114
114
  resolveTasksetCalibrationFixture
115
- } from "./chunk-EJZ7HOIS.js";
115
+ } from "./chunk-2XLKMZH5.js";
116
116
  import {
117
117
  ModelTasksetDraftRequestSchema,
118
118
  TasksetDraftFileInfoSchema,
@@ -120,15 +120,15 @@ import {
120
120
  TasksetDraftFilePathSchema,
121
121
  TasksetDraftFileSchema
122
122
  } from "./chunk-TK3DXH7A.js";
123
- import "./chunk-XACJ63U4.js";
124
- import "./chunk-RE426Q7Y.js";
125
- import "./chunk-T3MFWGMX.js";
123
+ import "./chunk-Z4XGSEKC.js";
124
+ import "./chunk-LIMTJR3A.js";
125
+ import "./chunk-3VGTVZHL.js";
126
126
  import "./chunk-Q4TKI2MV.js";
127
127
  import "./chunk-H3367ISL.js";
128
- import "./chunk-MJELLVQP.js";
129
- import "./chunk-6GQ3GIAP.js";
130
- import "./chunk-O54KGALH.js";
131
- import "./chunk-CAMLCKSF.js";
128
+ import "./chunk-B2MKB7NB.js";
129
+ import "./chunk-HRZLFJXX.js";
130
+ import "./chunk-5T76GARR.js";
131
+ import "./chunk-3SIGXGAE.js";
132
132
  import "./chunk-CL3IOOVL.js";
133
133
  import {
134
134
  contentHash,
@@ -7,7 +7,7 @@ import {
7
7
  inspectModelBatchPackage,
8
8
  materializeTasksetDraftWorkspace,
9
9
  prepareTasksetDraftSource
10
- } from "./chunk-6Y67YHVH.js";
10
+ } from "./chunk-VBVFE33M.js";
11
11
  import {
12
12
  OpenPondTasksetPackageClient,
13
13
  OpenPondTasksetPackageError,
@@ -16,7 +16,7 @@ import {
16
16
  TasksetPackageReadbackSchema,
17
17
  TasksetPackageReceiptSchema,
18
18
  TasksetReleasePackageReadbackSchema
19
- } from "./chunk-QFBSNSUL.js";
19
+ } from "./chunk-HRJKDHHG.js";
20
20
  import {
21
21
  ModelBatchReviewInspectionSchema,
22
22
  ModelBatchReviewReceiptSchema,
@@ -27,7 +27,7 @@ import {
27
27
  prepareImportedTasksetPackage,
28
28
  projectLearningBatchGraders,
29
29
  tasksetPackageSourceId
30
- } from "./chunk-FLNWE5ZA.js";
30
+ } from "./chunk-QDYHSJT5.js";
31
31
  import {
32
32
  AuthoredTasksetFileInventorySchema,
33
33
  compileModelTasksetDraftWorkspace,
@@ -35,8 +35,8 @@ import {
35
35
  prepareAuthoredTasksetSource,
36
36
  prepareModelTasksetDraft,
37
37
  publishModelTasksetDraftPackage
38
- } from "./chunk-6KKM2XRR.js";
39
- import "./chunk-HOOHJCE7.js";
38
+ } from "./chunk-FPA3AVCP.js";
39
+ import "./chunk-XF3JR72U.js";
40
40
  import "./chunk-Z252BNAZ.js";
41
41
  import {
42
42
  materializePortableTasksetRelease,
@@ -45,8 +45,8 @@ import {
45
45
  projectPortableTaskRecord,
46
46
  projectPreferenceComparisonRelease,
47
47
  resolvePortableTasksetRewardExecution
48
- } from "./chunk-WQFU635Q.js";
49
- import "./chunk-ZFYI4P6C.js";
48
+ } from "./chunk-ATVQQCYN.js";
49
+ import "./chunk-ONGOAEY6.js";
50
50
  import {
51
51
  MAX_TASKSET_PACKAGE_BYTES,
52
52
  TasksetPackageContentSchema,
@@ -63,7 +63,7 @@ import {
63
63
  tasksetPackageRewardBinding,
64
64
  validateTasksetLearningResources,
65
65
  validateTasksetPackage
66
- } from "./chunk-EJZ7HOIS.js";
66
+ } from "./chunk-2XLKMZH5.js";
67
67
  import {
68
68
  ModelTasksetAuthoringOwnerSchema,
69
69
  ModelTasksetAuthoringSchema,
@@ -75,15 +75,15 @@ import {
75
75
  TasksetDraftFilePathSchema,
76
76
  TasksetDraftFileSchema
77
77
  } from "./chunk-TK3DXH7A.js";
78
- import "./chunk-XACJ63U4.js";
79
- import "./chunk-RE426Q7Y.js";
80
- import "./chunk-T3MFWGMX.js";
78
+ import "./chunk-Z4XGSEKC.js";
79
+ import "./chunk-LIMTJR3A.js";
80
+ import "./chunk-3VGTVZHL.js";
81
81
  import "./chunk-Q4TKI2MV.js";
82
82
  import "./chunk-H3367ISL.js";
83
- import "./chunk-MJELLVQP.js";
84
- import "./chunk-6GQ3GIAP.js";
85
- import "./chunk-O54KGALH.js";
86
- import "./chunk-CAMLCKSF.js";
83
+ import "./chunk-B2MKB7NB.js";
84
+ import "./chunk-HRZLFJXX.js";
85
+ import "./chunk-5T76GARR.js";
86
+ import "./chunk-3SIGXGAE.js";
87
87
  import "./chunk-CL3IOOVL.js";
88
88
  import "./chunk-H3JZ3P5T.js";
89
89
  import "./chunk-YLJ4XMA6.js";