openpond-sdk 0.12.24 → 0.12.26

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 (231) hide show
  1. package/LEARNING.md +5 -7
  2. package/OPENTELEMETRY.md +1 -1
  3. package/PRODUCT_INTEGRATION.md +129 -0
  4. package/README.md +13 -3
  5. package/SERVERLESS_SERVING.md +37 -0
  6. package/TASKSETS.md +1 -2
  7. package/TASK_INGESTION.md +87 -86
  8. package/TRAINING_PROTOCOL.md +7 -3
  9. package/TRAINING_WORKFLOWS.md +11 -6
  10. package/dist/advanced-refiner-evaluations.js +10 -9
  11. package/dist/ai-sdk.js +225 -0
  12. package/dist/ai-sdk.js.map +1 -0
  13. package/dist/candidate-evaluations.js +7 -6
  14. package/dist/{chunk-ZQFROKKS.js → chunk-2U6BQ5C4.js} +3 -3
  15. package/dist/{chunk-BNBPKCIR.js → chunk-3BILL33A.js} +4 -4
  16. package/dist/{chunk-3B5KSH3V.js → chunk-456F3BXD.js} +5 -2
  17. package/dist/chunk-456F3BXD.js.map +1 -0
  18. package/dist/{chunk-GCUWJUUM.js → chunk-4A4FNG4R.js} +2 -2
  19. package/dist/{chunk-EZME7DV4.js → chunk-4CDLPMJK.js} +2 -2
  20. package/dist/{chunk-SP7DQEQM.js → chunk-4CRLQMJ2.js} +5 -5
  21. package/dist/{chunk-QOX57Y27.js → chunk-4PEK3YOW.js} +6 -3
  22. package/dist/chunk-4PEK3YOW.js.map +1 -0
  23. package/dist/{chunk-GS5HEE4M.js → chunk-4REK5TTE.js} +2 -2
  24. package/dist/{chunk-AG6UJ3DI.js → chunk-57ROW3XF.js} +3 -3
  25. package/dist/{chunk-3BYFS4RO.js → chunk-6LVLWRBJ.js} +11 -8
  26. package/dist/chunk-6LVLWRBJ.js.map +1 -0
  27. package/dist/{chunk-3VUF5H3B.js → chunk-AMZ2SWHR.js} +2 -2
  28. package/dist/{chunk-ZQ6QTYRE.js → chunk-AQV7RQZH.js} +11 -11
  29. package/dist/{chunk-ZQ6QTYRE.js.map → chunk-AQV7RQZH.js.map} +1 -1
  30. package/dist/{chunk-BJMENXR4.js → chunk-C7I4ZG6Q.js} +3 -3
  31. package/dist/{chunk-JMFYNIYZ.js → chunk-CAOMKM55.js} +6 -3
  32. package/dist/chunk-CAOMKM55.js.map +1 -0
  33. package/dist/{chunk-QNOCM5JX.js → chunk-D26RJQU7.js} +2 -2
  34. package/dist/{chunk-GBDBKGXW.js → chunk-EL6KZO43.js} +3 -3
  35. package/dist/{chunk-MVAEE5EI.js → chunk-H5KHLBC5.js} +5 -2
  36. package/dist/chunk-H5KHLBC5.js.map +1 -0
  37. package/dist/{chunk-7G47YXQT.js → chunk-HCUZYGUK.js} +8 -5
  38. package/dist/chunk-HCUZYGUK.js.map +1 -0
  39. package/dist/{chunk-Q4RGCEOI.js → chunk-JINWKUKR.js} +3 -3
  40. package/dist/{chunk-626JLH4D.js → chunk-JWEIAEQ6.js} +2 -2
  41. package/dist/{chunk-DH6O4JFB.js → chunk-KJTX4A27.js} +5 -2
  42. package/dist/chunk-KJTX4A27.js.map +1 -0
  43. package/dist/{chunk-OBI2MQYU.js → chunk-MN4FE52A.js} +17 -14
  44. package/dist/chunk-MN4FE52A.js.map +1 -0
  45. package/dist/{chunk-NZRGRUYG.js → chunk-MUG4OQKL.js} +21 -7
  46. package/dist/chunk-MUG4OQKL.js.map +1 -0
  47. package/dist/{chunk-C3TS766N.js → chunk-N6LGT7NT.js} +5 -2
  48. package/dist/chunk-N6LGT7NT.js.map +1 -0
  49. package/dist/{chunk-QIGMNB6M.js → chunk-P56JWQYV.js} +3 -3
  50. package/dist/{chunk-GX6KMHW2.js → chunk-QKLZZOZD.js} +5 -2
  51. package/dist/chunk-QKLZZOZD.js.map +1 -0
  52. package/dist/chunk-QYWPNNP3.js +9 -0
  53. package/dist/chunk-QYWPNNP3.js.map +1 -0
  54. package/dist/{chunk-QCRNQMN4.js → chunk-UZAVG2WK.js} +5 -5
  55. package/dist/chunk-UZAVG2WK.js.map +1 -0
  56. package/dist/{chunk-Z252BNAZ.js → chunk-VE5JD5FN.js} +6 -2
  57. package/dist/chunk-VE5JD5FN.js.map +1 -0
  58. package/dist/{chunk-7F43U2NC.js → chunk-WZKKQNYY.js} +3 -3
  59. package/dist/{chunk-6EZAGTZG.js → chunk-X5AT253K.js} +5 -5
  60. package/dist/{chunk-ZRTNR4U7.js → chunk-XWUTYFOU.js} +3 -3
  61. package/dist/{chunk-KEG5QS7W.js → chunk-XYK3MAIC.js} +193 -193
  62. package/dist/chunk-XYK3MAIC.js.map +1 -0
  63. package/dist/chunk-ZG4HVCJB.js +248 -0
  64. package/dist/chunk-ZG4HVCJB.js.map +1 -0
  65. package/dist/connected-evidence.js +11 -10
  66. package/dist/dataset-commerce.js +4 -1
  67. package/dist/dataset-commerce.js.map +1 -1
  68. package/dist/dataset-marketplace.js +4 -1
  69. package/dist/dataset-marketplace.js.map +1 -1
  70. package/dist/dataset-workspaces.js +157 -93
  71. package/dist/dataset-workspaces.js.map +1 -1
  72. package/dist/errors.js +2 -1
  73. package/dist/experiment-evaluation-schedules.js +20 -19
  74. package/dist/experiment-improvements.js +8 -7
  75. package/dist/experiments.js +21 -20
  76. package/dist/human-review.js +2 -1
  77. package/dist/index.js +87 -56
  78. package/dist/index.js.map +1 -1
  79. package/dist/learning.js +6 -3
  80. package/dist/learning.js.map +1 -1
  81. package/dist/model-projects.js +2 -1
  82. package/dist/model-starter-attempts.js +3 -2
  83. package/dist/model-starter-catalog.js +7 -4
  84. package/dist/model-starter-catalog.js.map +1 -1
  85. package/dist/model-starters.js +4 -3
  86. package/dist/model-taskset-runs.js +7 -4
  87. package/dist/model-taskset-runs.js.map +1 -1
  88. package/dist/post-training.js +7 -6
  89. package/dist/taskset-catalog.js +2 -1
  90. package/dist/taskset-drafts.js +13 -10
  91. package/dist/taskset-drafts.js.map +1 -1
  92. package/dist/taskset-packages.js +16 -15
  93. package/dist/tool-learning.js +4 -1
  94. package/dist/tool-learning.js.map +1 -1
  95. package/dist/training-bundle.js +19 -18
  96. package/dist/training-bundle.js.map +1 -1
  97. package/dist/training-hardware.js +3 -2
  98. package/dist/training-projects.js +4 -1
  99. package/dist/training-projects.js.map +1 -1
  100. package/dist/training.js +2761 -2626
  101. package/dist/training.js.map +1 -1
  102. package/dist/types/packages/sdk/src/ai-sdk.d.ts +6 -0
  103. package/dist/types/packages/sdk/src/ai-sdk.d.ts.map +1 -0
  104. package/dist/types/packages/sdk/src/candidate-evaluation-client.d.ts +21 -21
  105. package/dist/types/packages/sdk/src/connected-evidence-client.d.ts +1 -1
  106. package/dist/types/packages/sdk/src/connected-evidence-client.d.ts.map +1 -1
  107. package/dist/types/packages/sdk/src/connected-sync.d.ts +1 -1
  108. package/dist/types/packages/sdk/src/connected-sync.d.ts.map +1 -1
  109. package/dist/types/packages/sdk/src/dataset-commerce.d.ts +1 -1
  110. package/dist/types/packages/sdk/src/dataset-commerce.d.ts.map +1 -1
  111. package/dist/types/packages/sdk/src/dataset-marketplace.d.ts +1 -1
  112. package/dist/types/packages/sdk/src/dataset-marketplace.d.ts.map +1 -1
  113. package/dist/types/packages/sdk/src/dataset-population.d.ts +1 -1
  114. package/dist/types/packages/sdk/src/dataset-population.d.ts.map +1 -1
  115. package/dist/types/packages/sdk/src/dataset-preparation-client.d.ts +1 -1
  116. package/dist/types/packages/sdk/src/dataset-preparation-client.d.ts.map +1 -1
  117. package/dist/types/packages/sdk/src/dataset-task-ingestion.d.ts +9 -2
  118. package/dist/types/packages/sdk/src/dataset-task-ingestion.d.ts.map +1 -1
  119. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts +141 -141
  120. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts.map +1 -1
  121. package/dist/types/packages/sdk/src/dataset-workspace-error.d.ts +28 -0
  122. package/dist/types/packages/sdk/src/dataset-workspace-error.d.ts.map +1 -0
  123. package/dist/types/packages/sdk/src/dataset-workspaces.d.ts +1 -0
  124. package/dist/types/packages/sdk/src/dataset-workspaces.d.ts.map +1 -1
  125. package/dist/types/packages/sdk/src/endpoints.d.ts +4 -0
  126. package/dist/types/packages/sdk/src/endpoints.d.ts.map +1 -0
  127. package/dist/types/packages/sdk/src/evaluation-coordination-http.d.ts +1 -1
  128. package/dist/types/packages/sdk/src/evaluation-coordination-http.d.ts.map +1 -1
  129. package/dist/types/packages/sdk/src/experiment-client.d.ts +637 -637
  130. package/dist/types/packages/sdk/src/experiment-client.d.ts.map +1 -1
  131. package/dist/types/packages/sdk/src/experiment-draft-storage.d.ts +28 -28
  132. package/dist/types/packages/sdk/src/experiment-evaluation-schedules.d.ts +28 -28
  133. package/dist/types/packages/sdk/src/experiment-improvement-client.d.ts +1623 -1623
  134. package/dist/types/packages/sdk/src/experiment-improvement-client.d.ts.map +1 -1
  135. package/dist/types/packages/sdk/src/experiment-inspection.d.ts +1 -1
  136. package/dist/types/packages/sdk/src/experiment-inspection.d.ts.map +1 -1
  137. package/dist/types/packages/sdk/src/experiment-run-details.d.ts +7 -7
  138. package/dist/types/packages/sdk/src/grader-inspection.d.ts +1 -1
  139. package/dist/types/packages/sdk/src/grader-inspection.d.ts.map +1 -1
  140. package/dist/types/packages/sdk/src/human-review-client.d.ts +1 -1
  141. package/dist/types/packages/sdk/src/human-review-client.d.ts.map +1 -1
  142. package/dist/types/packages/sdk/src/index.d.ts +13 -4
  143. package/dist/types/packages/sdk/src/index.d.ts.map +1 -1
  144. package/dist/types/packages/sdk/src/learning-client.d.ts +1 -1
  145. package/dist/types/packages/sdk/src/learning-client.d.ts.map +1 -1
  146. package/dist/types/packages/sdk/src/learning-correction-metrics.d.ts +1 -1
  147. package/dist/types/packages/sdk/src/learning-correction-metrics.d.ts.map +1 -1
  148. package/dist/types/packages/sdk/src/managed-decision-executions.d.ts +347 -347
  149. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts +25 -25
  150. package/dist/types/packages/sdk/src/model-projects.d.ts +1 -1
  151. package/dist/types/packages/sdk/src/model-projects.d.ts.map +1 -1
  152. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts +1 -1
  153. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts.map +1 -1
  154. package/dist/types/packages/sdk/src/model-starter-catalog.d.ts +1 -1
  155. package/dist/types/packages/sdk/src/model-starter-catalog.d.ts.map +1 -1
  156. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +29 -29
  157. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts.map +1 -1
  158. package/dist/types/packages/sdk/src/post-training.d.ts +7 -7
  159. package/dist/types/packages/sdk/src/product-model-response.d.ts +4 -0
  160. package/dist/types/packages/sdk/src/product-model-response.d.ts.map +1 -0
  161. package/dist/types/packages/sdk/src/product-models.d.ts +76 -0
  162. package/dist/types/packages/sdk/src/product-models.d.ts.map +1 -0
  163. package/dist/types/packages/sdk/src/profile-evaluation-discovery.d.ts +1 -1
  164. package/dist/types/packages/sdk/src/profile-evaluation-discovery.d.ts.map +1 -1
  165. package/dist/types/packages/sdk/src/serverless-serving.d.ts +157 -0
  166. package/dist/types/packages/sdk/src/serverless-serving.d.ts.map +1 -0
  167. package/dist/types/packages/sdk/src/steering-model-serving.d.ts +276 -0
  168. package/dist/types/packages/sdk/src/steering-model-serving.d.ts.map +1 -1
  169. package/dist/types/packages/sdk/src/taskset-catalog.d.ts +1 -1
  170. package/dist/types/packages/sdk/src/taskset-catalog.d.ts.map +1 -1
  171. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +121 -121
  172. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts.map +1 -1
  173. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts +20 -20
  174. package/dist/types/packages/sdk/src/taskset-package-client.d.ts +1 -1
  175. package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
  176. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +20 -20
  177. package/dist/types/packages/sdk/src/tool-learning-client.d.ts +1 -1
  178. package/dist/types/packages/sdk/src/tool-learning-client.d.ts.map +1 -1
  179. package/dist/types/packages/sdk/src/training-evidence.d.ts +54 -0
  180. package/dist/types/packages/sdk/src/training-evidence.d.ts.map +1 -0
  181. package/dist/types/packages/sdk/src/training-harness-sources.d.ts +2 -2
  182. package/dist/types/packages/sdk/src/training-model-serving-control.d.ts +232 -0
  183. package/dist/types/packages/sdk/src/training-model-serving-control.d.ts.map +1 -1
  184. package/dist/types/packages/sdk/src/training-model-serving.d.ts +552 -0
  185. package/dist/types/packages/sdk/src/training-model-serving.d.ts.map +1 -1
  186. package/dist/types/packages/sdk/src/training-project-client.d.ts +1 -1
  187. package/dist/types/packages/sdk/src/training-project-client.d.ts.map +1 -1
  188. package/dist/types/packages/sdk/src/training-transport.d.ts +1 -1
  189. package/dist/types/packages/sdk/src/training-transport.d.ts.map +1 -1
  190. package/dist/types/packages/sdk/src/training.d.ts +2489 -2148
  191. package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
  192. package/dist/types/packages/sdk/src/types.d.ts +14 -1
  193. package/dist/types/packages/sdk/src/types.d.ts.map +1 -1
  194. package/examples/learning/submit.py +1 -1
  195. package/examples/learning/submit.ts +2 -2
  196. package/examples/training/continual.ts +4 -4
  197. package/examples/training/manual.ts +1 -3
  198. package/fixtures/personalized-inference-request.schema.json +316 -0
  199. package/fixtures/python-foundation/schemas.json +4873 -4484
  200. package/package.json +19 -3
  201. package/dist/chunk-3B5KSH3V.js.map +0 -1
  202. package/dist/chunk-3BYFS4RO.js.map +0 -1
  203. package/dist/chunk-7G47YXQT.js.map +0 -1
  204. package/dist/chunk-C3TS766N.js.map +0 -1
  205. package/dist/chunk-DH6O4JFB.js.map +0 -1
  206. package/dist/chunk-GX6KMHW2.js.map +0 -1
  207. package/dist/chunk-JMFYNIYZ.js.map +0 -1
  208. package/dist/chunk-KEG5QS7W.js.map +0 -1
  209. package/dist/chunk-MVAEE5EI.js.map +0 -1
  210. package/dist/chunk-NZRGRUYG.js.map +0 -1
  211. package/dist/chunk-OBI2MQYU.js.map +0 -1
  212. package/dist/chunk-QCRNQMN4.js.map +0 -1
  213. package/dist/chunk-QOX57Y27.js.map +0 -1
  214. package/dist/chunk-Z252BNAZ.js.map +0 -1
  215. /package/dist/{chunk-ZQFROKKS.js.map → chunk-2U6BQ5C4.js.map} +0 -0
  216. /package/dist/{chunk-BNBPKCIR.js.map → chunk-3BILL33A.js.map} +0 -0
  217. /package/dist/{chunk-GCUWJUUM.js.map → chunk-4A4FNG4R.js.map} +0 -0
  218. /package/dist/{chunk-EZME7DV4.js.map → chunk-4CDLPMJK.js.map} +0 -0
  219. /package/dist/{chunk-SP7DQEQM.js.map → chunk-4CRLQMJ2.js.map} +0 -0
  220. /package/dist/{chunk-GS5HEE4M.js.map → chunk-4REK5TTE.js.map} +0 -0
  221. /package/dist/{chunk-AG6UJ3DI.js.map → chunk-57ROW3XF.js.map} +0 -0
  222. /package/dist/{chunk-3VUF5H3B.js.map → chunk-AMZ2SWHR.js.map} +0 -0
  223. /package/dist/{chunk-BJMENXR4.js.map → chunk-C7I4ZG6Q.js.map} +0 -0
  224. /package/dist/{chunk-QNOCM5JX.js.map → chunk-D26RJQU7.js.map} +0 -0
  225. /package/dist/{chunk-GBDBKGXW.js.map → chunk-EL6KZO43.js.map} +0 -0
  226. /package/dist/{chunk-Q4RGCEOI.js.map → chunk-JINWKUKR.js.map} +0 -0
  227. /package/dist/{chunk-626JLH4D.js.map → chunk-JWEIAEQ6.js.map} +0 -0
  228. /package/dist/{chunk-QIGMNB6M.js.map → chunk-P56JWQYV.js.map} +0 -0
  229. /package/dist/{chunk-7F43U2NC.js.map → chunk-WZKKQNYY.js.map} +0 -0
  230. /package/dist/{chunk-6EZAGTZG.js.map → chunk-X5AT253K.js.map} +0 -0
  231. /package/dist/{chunk-ZRTNR4U7.js.map → chunk-XWUTYFOU.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/taskset-catalog.ts"],"sourcesContent":["import { DEFAULT_API_BASE_URL } from \"./endpoints.js\";\nimport { z } from \"zod\";\n\nconst IdSchema = z.string().trim().min(1).max(500);\nconst HashSchema = z.string().regex(/^[a-f0-9]{64}$/);\nexport const TasksetCatalogReleaseRefSchema = z.object({ id: IdSchema, revision: z.number().int().positive(), contentHash: HashSchema }).strict();\n\n/** Inventory metadata only. Task rows, evaluator source, and object locations\n * are resolved separately by an authorized package operation. */\nexport const HostedTasksetSummarySchema = z.object({\n schemaVersion: z.literal(\"openpond.hostedTasksetSummary.v1\"),\n id: IdSchema,\n teamId: IdSchema,\n release: TasksetCatalogReleaseRefSchema,\n name: z.string().min(1).max(500),\n description: z.string().max(20_000),\n taskCount: z.number().int().nonnegative(),\n buildIntent: z.string().min(1).max(100),\n methodHint: z.string().min(1).max(100).nullable(),\n packageBytes: z.number().int().nonnegative().nullable(),\n storedBytes: z.number().int().nonnegative().nullable(),\n createdAt: z.string().datetime({ offset: true }),\n}).strict();\nexport const TasksetCatalogQuerySchema = z.object({\n afterId: z.string().trim().min(1).max(2_000).optional(),\n limit: z.number().int().min(1).max(100).default(30),\n modelProjectId: IdSchema.optional(),\n projectId: IdSchema.optional(),\n search: z.string().trim().max(100).optional(),\n sort: z.enum([\"id\", \"name\", \"updated\"]).default(\"id\"),\n}).strict();\nexport const TasksetCatalogPageSchema = z.object({\n items: z.array(HostedTasksetSummarySchema).max(100),\n nextCursor: z.string().trim().min(1).max(2_000).nullable(),\n}).strict();\nexport const TasksetCatalogErrorSchema = z.object({\n code: z.string().min(1),\n message: z.string().min(1),\n}).strict();\nexport type HostedTasksetSummary = z.infer<typeof HostedTasksetSummarySchema>;\nexport type TasksetCatalogPage = z.infer<typeof TasksetCatalogPageSchema>;\n\nexport class OpenPondTasksetCatalogError extends Error {\n constructor(readonly status: number, readonly code: string, message: string) {\n super(message);\n this.name = \"OpenPondTasksetCatalogError\";\n }\n}\n\nexport interface TasksetCatalogClientOptions {\n baseUrl?: string;\n apiKey: string;\n teamId: string;\n fetch?: typeof globalThis.fetch;\n}\n\nexport class OpenPondTasksetCatalogClient {\n readonly #options: TasksetCatalogClientOptions;\n constructor(options: TasksetCatalogClientOptions) {\n if (!options.apiKey.trim() || !options.teamId.trim()) throw new Error(\"Taskset API key and workspace are required.\");\n const url = new URL(options.baseUrl ?? DEFAULT_API_BASE_URL);\n if (![\"http:\", \"https:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error(\"Taskset base URL must be an HTTP(S) endpoint without credentials, query, or fragment.\");\n this.#options = { ...options, baseUrl: url.toString().replace(/\\/+$/, \"\") };\n }\n\n async list(query: z.input<typeof TasksetCatalogQuerySchema> = {}, options: { signal?: AbortSignal } = {}): Promise<TasksetCatalogPage> {\n const parsed = TasksetCatalogQuerySchema.parse(query);\n const search = new URLSearchParams({ limit: String(parsed.limit) });\n if (parsed.afterId) search.set(\"afterId\", parsed.afterId);\n if (parsed.modelProjectId) search.set(\"modelProjectId\", parsed.modelProjectId);\n if (parsed.projectId) search.set(\"projectId\", parsed.projectId);\n if (parsed.search !== undefined) search.set(\"search\", parsed.search);\n search.set(\"sort\", parsed.sort);\n const page = TasksetCatalogPageSchema.parse(await this.#request(`?${search}`, options.signal));\n if (page.items.length > parsed.limit || new Set(page.items.map(item => item.id)).size !== page.items.length || page.items.some((item) => item.teamId !== this.#options.teamId)) throw new OpenPondTasksetCatalogError(502, \"catalog_scope_mismatch\", \"Taskset inventory did not match the requested workspace or page size.\");\n return page;\n }\n\n async get(id: string, options: { signal?: AbortSignal } = {}): Promise<HostedTasksetSummary> {\n const parsed = IdSchema.parse(id);\n const item = HostedTasksetSummarySchema.parse(await this.#request(`/${encodeURIComponent(parsed)}`, options.signal));\n if (item.id !== parsed || item.teamId !== this.#options.teamId) throw new OpenPondTasksetCatalogError(502, \"catalog_identity_mismatch\", \"Taskset metadata did not match the requested identity.\");\n return item;\n }\n\n /** Resolve a saved portable reference without scanning inventory pages. */\n async resolve(release: z.infer<typeof TasksetCatalogReleaseRefSchema>, options: { signal?: AbortSignal } = {}): Promise<HostedTasksetSummary> {\n const parsed = TasksetCatalogReleaseRefSchema.parse(release);\n const item = HostedTasksetSummarySchema.parse(await this.#request(`/releases/${encodeURIComponent(parsed.id)}/${parsed.revision}/${parsed.contentHash}`, options.signal));\n if (item.teamId !== this.#options.teamId || item.release.id !== parsed.id || item.release.revision !== parsed.revision || item.release.contentHash !== parsed.contentHash) throw new OpenPondTasksetCatalogError(502, \"catalog_release_mismatch\", \"Taskset metadata did not match the requested immutable release.\");\n return item;\n }\n\n async #request(path: string, signal?: AbortSignal): Promise<unknown> {\n const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/taskset-catalog${path}`, {\n headers: { Authorization: `Bearer ${this.#options.apiKey}`, \"X-OpenPond-Team-Id\": this.#options.teamId, Accept: \"application/json\" },\n signal, redirect: \"error\",\n });\n const reader = response.body?.getReader();\n if (!reader) throw new OpenPondTasksetCatalogError(response.status, \"empty_response\", \"Taskset catalog response was empty.\");\n const decoder = new TextDecoder();\n let bytes = 0;\n let text = \"\";\n try {\n while (true) {\n const chunk = await reader.read();\n if (chunk.done) break;\n bytes += chunk.value.byteLength;\n if (bytes > 4_194_304) throw new OpenPondTasksetCatalogError(response.status, \"response_too_large\", \"Taskset catalog response exceeded 4 MiB.\");\n text += decoder.decode(chunk.value, { stream: true });\n }\n text += decoder.decode();\n } finally { await reader.cancel(); reader.releaseLock(); }\n const payload: unknown = JSON.parse(text);\n if (!response.ok) {\n const error = TasksetCatalogErrorSchema.safeParse(payload);\n throw new OpenPondTasksetCatalogError(response.status, error.success ? error.data.code : \"invalid_error_response\", error.success ? error.data.message : `Taskset catalog request failed (${response.status}).`);\n }\n return payload;\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  EvaluationCoordinationTransport
3
- } from "./chunk-3B5KSH3V.js";
3
+ } from "./chunk-456F3BXD.js";
4
4
  import {
5
5
  RunExperimentSchema
6
- } from "./chunk-ZQFROKKS.js";
6
+ } from "./chunk-2U6BQ5C4.js";
7
7
  import {
8
8
  ImmutableReleaseRefSchema,
9
9
  assertContentHash,
@@ -171,4 +171,4 @@ export {
171
171
  ExperimentEvaluationScheduleCommandSchema,
172
172
  OpenPondExperimentEvaluationScheduleClient
173
173
  };
174
- //# sourceMappingURL=chunk-7F43U2NC.js.map
174
+ //# sourceMappingURL=chunk-WZKKQNYY.js.map
@@ -1,12 +1,12 @@
1
+ import {
2
+ ExperimentImprovementOptionsSchema
3
+ } from "./chunk-D26RJQU7.js";
1
4
  import {
2
5
  EvaluationCoordinationTransport
3
- } from "./chunk-3B5KSH3V.js";
6
+ } from "./chunk-456F3BXD.js";
4
7
  import {
5
8
  ChatModelRefSchema
6
9
  } from "./chunk-H3367ISL.js";
7
- import {
8
- ExperimentImprovementOptionsSchema
9
- } from "./chunk-QNOCM5JX.js";
10
10
  import {
11
11
  ImmutableReleaseRefSchema,
12
12
  contentHash
@@ -264,4 +264,4 @@ export {
264
264
  AdvancedRefinerEvaluationAccountingSchema,
265
265
  OpenPondAdvancedRefinerEvaluationClient
266
266
  };
267
- //# sourceMappingURL=chunk-6EZAGTZG.js.map
267
+ //# sourceMappingURL=chunk-X5AT253K.js.map
@@ -3,10 +3,10 @@ import {
3
3
  EvaluationProjectContextSchema,
4
4
  ModelStarterAttemptPolicySchema,
5
5
  ModelStarterAttemptSummarySchema
6
- } from "./chunk-JMFYNIYZ.js";
6
+ } from "./chunk-CAOMKM55.js";
7
7
  import {
8
8
  ModelProjectVersionedRefSchema
9
- } from "./chunk-MVAEE5EI.js";
9
+ } from "./chunk-H5KHLBC5.js";
10
10
  import {
11
11
  canonicalJson,
12
12
  canonicalSha256
@@ -179,4 +179,4 @@ export {
179
179
  verifyModelTasksetRunDetails,
180
180
  verifyModelTasksetRunResult
181
181
  };
182
- //# sourceMappingURL=chunk-ZRTNR4U7.js.map
182
+ //# sourceMappingURL=chunk-XWUTYFOU.js.map
@@ -8,7 +8,7 @@ import {
8
8
  ModelProjectRecipeDocumentSchema,
9
9
  ModelProjectVersionedRefSchema,
10
10
  TrainingGpuSelectionSchema
11
- } from "./chunk-MVAEE5EI.js";
11
+ } from "./chunk-H5KHLBC5.js";
12
12
  import {
13
13
  OpenPondProtocolError,
14
14
  TRAINING_INPUT_ARTIFACT_MAX_BYTES,
@@ -17,35 +17,159 @@ import {
17
17
  canonicalSha256
18
18
  } from "./chunk-B3ZHJ2KK.js";
19
19
 
20
- // src/managed-compute-price.ts
20
+ // src/training-recovery.ts
21
21
  import { z } from "zod";
22
- var Hash = z.string().regex(/^[a-f0-9]{64}$/);
23
- var Money = z.string().regex(/^(0|[1-9]\d*)(\.\d{1,6})?$/).max(24);
22
+ var id = z.string().trim().min(1).max(191);
23
+ var hash = z.string().regex(/^[a-f0-9]{64}$/);
24
+ var ApprovalBodySchema = z.object({
25
+ schemaVersion: z.literal("openpond.checkpointRecoveryResourceApproval.v1"),
26
+ ownerUserId: id,
27
+ teamId: id,
28
+ sourceJobId: id,
29
+ sourceJobVersion: z.number().int().positive(),
30
+ sourceInputManifestSha256: hash,
31
+ checkpointId: id,
32
+ adapterSha256: hash,
33
+ resumeSha256: hash,
34
+ idempotencyKey: z.string().trim().min(16).max(191),
35
+ approvedAt: z.iso.datetime({ offset: true }),
36
+ maximumSpendUsd: z.number().positive().finite().max(30).refine(
37
+ (value) => Number(value.toFixed(6)) === value,
38
+ "Recovery spend must use whole microdollars"
39
+ ),
40
+ maximumGpuSeconds: z.number().int().positive().max(21600),
41
+ maximumWallSeconds: z.number().int().positive().max(21600)
42
+ }).strict();
43
+ var TrainingCheckpointRecoveryResourceApprovalSchema = ApprovalBodySchema.extend({
44
+ approvalHash: hash
45
+ }).strict().superRefine((value, context) => {
46
+ if (value.maximumGpuSeconds > value.maximumWallSeconds)
47
+ context.addIssue({
48
+ code: "custom",
49
+ path: ["maximumGpuSeconds"],
50
+ message: "Recovery GPU duration exceeds its wall"
51
+ });
52
+ });
53
+ async function createTrainingCheckpointRecoveryResourceApproval(input) {
54
+ const body = ApprovalBodySchema.parse(input);
55
+ return TrainingCheckpointRecoveryResourceApprovalSchema.parse({
56
+ ...body,
57
+ approvalHash: await canonicalSha256(body)
58
+ });
59
+ }
60
+ var TrainingCheckpointRecoveryRequestSchema = z.object({
61
+ resourceApproval: TrainingCheckpointRecoveryResourceApprovalSchema.optional(),
62
+ mode: z.literal("evaluation_only").optional(),
63
+ evaluationGpuType: z.enum(["NVIDIA A100 80GB PCIe", "NVIDIA A100-SXM4-80GB", "NVIDIA H100 80GB HBM3"]).optional(),
64
+ expectedVersion: z.number().int().positive(),
65
+ checkpointId: id,
66
+ idempotencyKey: z.string().trim().min(16).max(191),
67
+ maximumSpendUsd: z.number().positive().finite(),
68
+ maximumWallSeconds: z.number().int().positive().max(21600)
69
+ }).strict().superRefine((value, context) => {
70
+ if (value.evaluationGpuType && value.mode !== "evaluation_only")
71
+ context.addIssue({
72
+ code: "custom",
73
+ path: ["evaluationGpuType"],
74
+ message: "GPU substitution requires explicit evaluation-only recovery"
75
+ });
76
+ const a = value.resourceApproval;
77
+ if (a && (a.sourceJobVersion !== value.expectedVersion || a.checkpointId !== value.checkpointId || a.idempotencyKey !== value.idempotencyKey || a.maximumSpendUsd !== value.maximumSpendUsd || a.maximumWallSeconds !== value.maximumWallSeconds))
78
+ context.addIssue({
79
+ code: "custom",
80
+ path: ["resourceApproval"],
81
+ message: "Recovery resource approval does not match its request"
82
+ });
83
+ });
84
+
85
+ // src/training-physical-placement.ts
86
+ import { z as z2 } from "zod";
87
+ var TrainingPhysicalPlacementSchema = z2.object({
88
+ mode: z2.literal("reuse_only"),
89
+ physicalWorkerId: z2.string().trim().min(1).max(191),
90
+ providerPodId: z2.string().trim().min(1).max(191),
91
+ workerImageDigest: z2.string().regex(/^sha256:[a-f0-9]{64}$/),
92
+ baseProfileSha256: z2.string().regex(/^[a-f0-9]{64}$/),
93
+ gpuType: z2.string().trim().min(1).max(200),
94
+ sourceJobId: z2.string().trim().min(1).max(191),
95
+ sourceInputManifestSha256: z2.string().regex(/^[a-f0-9]{64}$/),
96
+ ownerTeamId: z2.string().trim().min(1).max(191),
97
+ deadlineAt: z2.string().datetime({ offset: true })
98
+ }).strict();
99
+
100
+ // src/training-queue.ts
101
+ import { z as z3 } from "zod";
102
+ var Timestamp = z3.string().datetime({ offset: true });
103
+ var TrainingQueueStatusSchema = z3.object({
104
+ ticketId: z3.string().trim().min(1).max(191),
105
+ ticketNumber: z3.number().int().positive().max(Number.MAX_SAFE_INTEGER),
106
+ label: z3.literal("Waiting for resources"),
107
+ position: z3.number().int().positive().nullable(),
108
+ positionScope: z3.literal("compatible_fair_queue"),
109
+ enqueuedAt: Timestamp,
110
+ asOf: Timestamp,
111
+ estimate: z3.object({
112
+ revision: z3.number().int().nonnegative(),
113
+ estimatedStartAt: Timestamp,
114
+ expiresAt: Timestamp,
115
+ evidence: z3.enum(["observed_capacity", "measured_bootstrap", "scheduled_release"])
116
+ }).strict().nullable()
117
+ }).strict().superRefine((value, context) => {
118
+ if (value.estimate && Date.parse(value.estimate.expiresAt) <= Date.parse(value.asOf))
119
+ context.addIssue({ code: "custom", path: ["estimate"], message: "An expired queue forecast must be returned as unavailable" });
120
+ });
121
+
122
+ // src/training-usage-status.ts
123
+ import { z as z4 } from "zod";
124
+ var Money = z4.string().regex(/^(0|[1-9]\d*)\.\d{6}$/).max(24).refine((value) => /^(0|[1-9]\d*)\.\d{6}$/.test(value) && value.length <= 24 && BigInt(value.replace(".", "")) <= BigInt(Number.MAX_SAFE_INTEGER));
125
+ var TrainingUsageSnapshotSchema = z4.object({
126
+ schemaVersion: z4.literal("openpond.trainingUsageSnapshot.v1"),
127
+ asOf: z4.iso.datetime(),
128
+ customerCapUsd: Money.nullable(),
129
+ chargedUsd: Money,
130
+ committedUsd: Money,
131
+ outstandingUsd: Money,
132
+ remainingCapUsd: Money.nullable(),
133
+ availableCreditUsd: Money,
134
+ complete: z4.boolean(),
135
+ components: z4.array(z4.object({
136
+ component: z4.enum(["gpu", "guest", "storage", "judge"]),
137
+ chargedUsd: Money,
138
+ committedUsd: Money,
139
+ outstandingUsd: Money,
140
+ openOwners: z4.number().int().nonnegative()
141
+ }).strict()).length(4).refine((values) => values.every((value, index) => value.component === ["gpu", "guest", "storage", "judge"][index]))
142
+ }).strict();
143
+
144
+ // src/managed-compute-price.ts
145
+ import { z as z5 } from "zod";
146
+ var Hash = z5.string().regex(/^[a-f0-9]{64}$/);
147
+ var Money2 = z5.string().regex(/^(0|[1-9]\d*)(\.\d{1,6})?$/).max(24);
24
148
  var micros = (value) => {
25
- const [whole, fraction = ""] = Money.parse(value).split(".");
149
+ const [whole, fraction = ""] = Money2.parse(value).split(".");
26
150
  return BigInt(whole) * 1000000n + BigInt(fraction.padEnd(6, "0"));
27
151
  };
28
- var ComputeAppliedPriceSchema = z.object({
29
- schemaVersion: z.literal("openpond.computeAppliedPrice.v1"),
30
- version: z.string().min(1).max(500),
31
- service: z.enum(["managed_rl", "model_modification", "model_serving", "sandbox"]),
152
+ var ComputeAppliedPriceSchema = z5.object({
153
+ schemaVersion: z5.literal("openpond.computeAppliedPrice.v1"),
154
+ version: z5.string().min(1).max(500),
155
+ service: z5.enum(["managed_rl", "model_modification", "model_serving", "sandbox"]),
32
156
  profileHash: Hash,
33
- currency: z.literal("USD"),
34
- unit: z.literal("resource_hour"),
35
- hourlyUsd: Money.refine((value) => {
36
- if (!Money.safeParse(value).success) return false;
157
+ currency: z5.literal("USD"),
158
+ unit: z5.literal("resource_hour"),
159
+ hourlyUsd: Money2.refine((value) => {
160
+ if (!Money2.safeParse(value).success) return false;
37
161
  const amount = micros(value);
38
162
  return amount > 0n && amount <= BigInt(Number.MAX_SAFE_INTEGER);
39
163
  })
40
164
  }).strict();
41
- var ManagedModificationPriceSchema = z.object({
42
- schemaVersion: z.literal("openpond.modificationPrice.v1"),
43
- appliedPrice: ComputeAppliedPriceSchema.extend({ service: z.literal("model_modification") }),
44
- billingBoundary: z.literal("active_allocation_until_verified_cleanup"),
45
- startupBillable: z.literal(true),
46
- postCompletionIdleBillable: z.literal(false),
47
- minimumBillableSeconds: z.literal(0),
48
- warmReuseSeconds: z.literal(300)
165
+ var ManagedModificationPriceSchema = z5.object({
166
+ schemaVersion: z5.literal("openpond.modificationPrice.v1"),
167
+ appliedPrice: ComputeAppliedPriceSchema.extend({ service: z5.literal("model_modification") }),
168
+ billingBoundary: z5.literal("active_allocation_until_verified_cleanup"),
169
+ startupBillable: z5.literal(true),
170
+ postCompletionIdleBillable: z5.literal(false),
171
+ minimumBillableSeconds: z5.literal(0),
172
+ warmReuseSeconds: z5.literal(300)
49
173
  }).strict();
50
174
  function canonicalComputeSpendCap(value) {
51
175
  if (value == null || value.trim() === "") return null;
@@ -63,25 +187,25 @@ async function managedModificationPriceApprovalMatches(plan, command) {
63
187
  }
64
188
 
65
189
  // src/training-usage-funding.ts
66
- import { z as z2 } from "zod";
67
- var Id = z2.string().min(1).max(500);
68
- var Hash2 = z2.string().regex(/^[a-f0-9]{64}$/);
69
- var Price = ComputeAppliedPriceSchema.extend({ service: z2.literal("managed_rl") });
70
- var Cap = z2.string().regex(/^(0|[1-9]\d*)\.\d{6}$/).max(24).refine((value) => {
190
+ import { z as z6 } from "zod";
191
+ var Id = z6.string().min(1).max(500);
192
+ var Hash2 = z6.string().regex(/^[a-f0-9]{64}$/);
193
+ var Price = ComputeAppliedPriceSchema.extend({ service: z6.literal("managed_rl") });
194
+ var Cap = z6.string().regex(/^(0|[1-9]\d*)\.\d{6}$/).max(24).refine((value) => {
71
195
  if (!/^(0|[1-9]\d*)\.\d{6}$/.test(value) || value.length > 24) return false;
72
196
  const micros2 = BigInt(value.replace(".", ""));
73
197
  return micros2 > 0n && micros2 <= BigInt(Number.MAX_SAFE_INTEGER);
74
198
  }).nullable();
75
- var Guests = z2.array(z2.object({
199
+ var Guests = z6.array(z6.object({
76
200
  profileHash: Hash2,
77
201
  price: Price,
78
- resources: z2.object({ cpu: z2.number().positive(), memoryGb: z2.number().positive(), diskGb: z2.number().nonnegative() }).strict()
202
+ resources: z6.object({ cpu: z6.number().positive(), memoryGb: z6.number().positive(), diskGb: z6.number().nonnegative() }).strict()
79
203
  }).strict()).max(32);
80
- var Rate = z2.string().regex(/^(0|[1-9]\d*)\.\d{6}$/).max(24).refine((value) => /^(0|[1-9]\d*)\.\d{6}$/.test(value) && value.length <= 24 && BigInt(value.replace(".", "")) <= BigInt(Number.MAX_SAFE_INTEGER));
81
- var Judges = z2.object({
82
- billing: z2.literal("existing_retail_child_captures"),
83
- acceptedPricingHashes: z2.array(Hash2).max(64),
84
- prices: z2.array(z2.object({
204
+ var Rate = z6.string().regex(/^(0|[1-9]\d*)\.\d{6}$/).max(24).refine((value) => /^(0|[1-9]\d*)\.\d{6}$/.test(value) && value.length <= 24 && BigInt(value.replace(".", "")) <= BigInt(Number.MAX_SAFE_INTEGER));
205
+ var Judges = z6.object({
206
+ billing: z6.literal("existing_retail_child_captures"),
207
+ acceptedPricingHashes: z6.array(Hash2).max(64),
208
+ prices: z6.array(z6.object({
85
209
  modelId: Id,
86
210
  displayName: Id,
87
211
  acceptedPricingHash: Hash2,
@@ -90,8 +214,8 @@ var Judges = z2.object({
90
214
  outputUsdPerMillionTokens: Rate,
91
215
  cacheWriteUsdPerMillionTokens: Rate.nullable(),
92
216
  cacheWriteOneHourUsdPerMillionTokens: Rate.nullable(),
93
- longContextThresholdTokens: z2.number().int().positive().nullable(),
94
- longContext: z2.object({
217
+ longContextThresholdTokens: z6.number().int().positive().nullable(),
218
+ longContext: z6.object({
95
219
  inputUsdPerMillionTokens: Rate,
96
220
  cachedInputUsdPerMillionTokens: Rate,
97
221
  outputUsdPerMillionTokens: Rate,
@@ -99,51 +223,51 @@ var Judges = z2.object({
99
223
  }).strict().nullable()
100
224
  }).strict()).max(64)
101
225
  }).strict();
102
- var TrainingBillingModesSchema = z2.tuple([
103
- z2.object({ mode: z2.literal("prepaid_only"), availability: z2.literal("available"), reason: z2.null() }).strict(),
104
- z2.object({
105
- mode: z2.literal("actual_usage"),
106
- availability: z2.enum(["unavailable", "requires_preparation"]),
107
- reason: z2.string().min(1).max(500).nullable()
226
+ var TrainingBillingModesSchema = z6.tuple([
227
+ z6.object({ mode: z6.literal("prepaid_only"), availability: z6.literal("available"), reason: z6.null() }).strict(),
228
+ z6.object({
229
+ mode: z6.literal("actual_usage"),
230
+ availability: z6.enum(["unavailable", "requires_preparation"]),
231
+ reason: z6.string().min(1).max(500).nullable()
108
232
  }).strict()
109
233
  ]);
110
- var TrainingUsageFundingRequestSchema = z2.object({
111
- schemaVersion: z2.literal("openpond.trainingUsageFundingRequest.v1"),
112
- billingMode: z2.literal("actual_usage"),
234
+ var TrainingUsageFundingRequestSchema = z6.object({
235
+ schemaVersion: z6.literal("openpond.trainingUsageFundingRequest.v1"),
236
+ billingMode: z6.literal("actual_usage"),
113
237
  customerCapUsd: Cap
114
238
  }).strict();
115
- var TrainingUsageQualificationRefSchema = z2.object({
116
- authorizationId: z2.uuid(),
239
+ var TrainingUsageQualificationRefSchema = z6.object({
240
+ authorizationId: z6.uuid(),
117
241
  operationId: Id,
118
242
  authorizationSha256: Hash2
119
243
  }).strict();
120
- var TrainingUsageQuoteContentSchema = z2.object({
121
- schemaVersion: z2.literal("openpond.trainingUsageQuote.v1"),
244
+ var TrainingUsageQuoteContentSchema = z6.object({
245
+ schemaVersion: z6.literal("openpond.trainingUsageQuote.v1"),
122
246
  teamId: Id,
123
247
  actorUserId: Id,
124
248
  preparationId: Id,
125
249
  submissionHash: Hash2,
126
- workerImageDigest: z2.string().regex(/^sha256:[a-f0-9]{64}$/),
250
+ workerImageDigest: z6.string().regex(/^sha256:[a-f0-9]{64}$/),
127
251
  customerCapUsd: Cap,
128
- maximumWallSeconds: z2.number().int().positive(),
129
- retentionDays: z2.number().int().nonnegative(),
252
+ maximumWallSeconds: z6.number().int().positive(),
253
+ retentionDays: z6.number().int().nonnegative(),
130
254
  qualification: TrainingUsageQualificationRefSchema.optional(),
131
255
  gpu: Price,
132
256
  guests: Guests,
133
257
  judges: Judges,
134
- storage: z2.object({
258
+ storage: z6.object({
135
259
  price: Price,
136
- storageClass: z2.literal("STANDARD"),
137
- quantityBasis: z2.literal("gib_milliseconds"),
138
- onCreditExhaustion: z2.literal("retain_objects_and_stop_new_storage")
260
+ storageClass: z6.literal("STANDARD"),
261
+ quantityBasis: z6.literal("gib_milliseconds"),
262
+ onCreditExhaustion: z6.literal("retain_objects_and_stop_new_storage")
139
263
  }).strict(),
140
- gpuBillingBoundary: z2.literal("active_allocation_until_verified_cleanup"),
141
- storageBillingBoundary: z2.literal("accepted_retention_window"),
142
- startupBillable: z2.literal(true),
143
- postCompletionIdleBillable: z2.literal(false),
144
- minimumBillableSeconds: z2.literal(0),
145
- issuedAt: z2.iso.datetime(),
146
- expiresAt: z2.iso.datetime()
264
+ gpuBillingBoundary: z6.literal("active_allocation_until_verified_cleanup"),
265
+ storageBillingBoundary: z6.literal("accepted_retention_window"),
266
+ startupBillable: z6.literal(true),
267
+ postCompletionIdleBillable: z6.literal(false),
268
+ minimumBillableSeconds: z6.literal(0),
269
+ issuedAt: z6.iso.datetime(),
270
+ expiresAt: z6.iso.datetime()
147
271
  }).strict();
148
272
  var TrainingUsageQuoteSchema = TrainingUsageQuoteContentSchema.extend({ contentHash: Hash2, signature: Id }).strict();
149
273
  async function verifyTrainingUsageQuote(raw, expected) {
@@ -153,130 +277,6 @@ async function verifyTrainingUsageQuote(raw, expected) {
153
277
  return quote;
154
278
  }
155
279
 
156
- // src/training-recovery.ts
157
- import { z as z3 } from "zod";
158
- var id = z3.string().trim().min(1).max(191);
159
- var hash = z3.string().regex(/^[a-f0-9]{64}$/);
160
- var ApprovalBodySchema = z3.object({
161
- schemaVersion: z3.literal("openpond.checkpointRecoveryResourceApproval.v1"),
162
- ownerUserId: id,
163
- teamId: id,
164
- sourceJobId: id,
165
- sourceJobVersion: z3.number().int().positive(),
166
- sourceInputManifestSha256: hash,
167
- checkpointId: id,
168
- adapterSha256: hash,
169
- resumeSha256: hash,
170
- idempotencyKey: z3.string().trim().min(16).max(191),
171
- approvedAt: z3.iso.datetime({ offset: true }),
172
- maximumSpendUsd: z3.number().positive().finite().max(30).refine(
173
- (value) => Number(value.toFixed(6)) === value,
174
- "Recovery spend must use whole microdollars"
175
- ),
176
- maximumGpuSeconds: z3.number().int().positive().max(21600),
177
- maximumWallSeconds: z3.number().int().positive().max(21600)
178
- }).strict();
179
- var TrainingCheckpointRecoveryResourceApprovalSchema = ApprovalBodySchema.extend({
180
- approvalHash: hash
181
- }).strict().superRefine((value, context) => {
182
- if (value.maximumGpuSeconds > value.maximumWallSeconds)
183
- context.addIssue({
184
- code: "custom",
185
- path: ["maximumGpuSeconds"],
186
- message: "Recovery GPU duration exceeds its wall"
187
- });
188
- });
189
- async function createTrainingCheckpointRecoveryResourceApproval(input) {
190
- const body = ApprovalBodySchema.parse(input);
191
- return TrainingCheckpointRecoveryResourceApprovalSchema.parse({
192
- ...body,
193
- approvalHash: await canonicalSha256(body)
194
- });
195
- }
196
- var TrainingCheckpointRecoveryRequestSchema = z3.object({
197
- resourceApproval: TrainingCheckpointRecoveryResourceApprovalSchema.optional(),
198
- mode: z3.literal("evaluation_only").optional(),
199
- evaluationGpuType: z3.enum(["NVIDIA A100 80GB PCIe", "NVIDIA A100-SXM4-80GB", "NVIDIA H100 80GB HBM3"]).optional(),
200
- expectedVersion: z3.number().int().positive(),
201
- checkpointId: id,
202
- idempotencyKey: z3.string().trim().min(16).max(191),
203
- maximumSpendUsd: z3.number().positive().finite(),
204
- maximumWallSeconds: z3.number().int().positive().max(21600)
205
- }).strict().superRefine((value, context) => {
206
- if (value.evaluationGpuType && value.mode !== "evaluation_only")
207
- context.addIssue({
208
- code: "custom",
209
- path: ["evaluationGpuType"],
210
- message: "GPU substitution requires explicit evaluation-only recovery"
211
- });
212
- const a = value.resourceApproval;
213
- if (a && (a.sourceJobVersion !== value.expectedVersion || a.checkpointId !== value.checkpointId || a.idempotencyKey !== value.idempotencyKey || a.maximumSpendUsd !== value.maximumSpendUsd || a.maximumWallSeconds !== value.maximumWallSeconds))
214
- context.addIssue({
215
- code: "custom",
216
- path: ["resourceApproval"],
217
- message: "Recovery resource approval does not match its request"
218
- });
219
- });
220
-
221
- // src/training-physical-placement.ts
222
- import { z as z4 } from "zod";
223
- var TrainingPhysicalPlacementSchema = z4.object({
224
- mode: z4.literal("reuse_only"),
225
- physicalWorkerId: z4.string().trim().min(1).max(191),
226
- providerPodId: z4.string().trim().min(1).max(191),
227
- workerImageDigest: z4.string().regex(/^sha256:[a-f0-9]{64}$/),
228
- baseProfileSha256: z4.string().regex(/^[a-f0-9]{64}$/),
229
- gpuType: z4.string().trim().min(1).max(200),
230
- sourceJobId: z4.string().trim().min(1).max(191),
231
- sourceInputManifestSha256: z4.string().regex(/^[a-f0-9]{64}$/),
232
- ownerTeamId: z4.string().trim().min(1).max(191),
233
- deadlineAt: z4.string().datetime({ offset: true })
234
- }).strict();
235
-
236
- // src/training-queue.ts
237
- import { z as z5 } from "zod";
238
- var Timestamp = z5.string().datetime({ offset: true });
239
- var TrainingQueueStatusSchema = z5.object({
240
- ticketId: z5.string().trim().min(1).max(191),
241
- ticketNumber: z5.number().int().positive().max(Number.MAX_SAFE_INTEGER),
242
- label: z5.literal("Waiting for resources"),
243
- position: z5.number().int().positive().nullable(),
244
- positionScope: z5.literal("compatible_fair_queue"),
245
- enqueuedAt: Timestamp,
246
- asOf: Timestamp,
247
- estimate: z5.object({
248
- revision: z5.number().int().nonnegative(),
249
- estimatedStartAt: Timestamp,
250
- expiresAt: Timestamp,
251
- evidence: z5.enum(["observed_capacity", "measured_bootstrap", "scheduled_release"])
252
- }).strict().nullable()
253
- }).strict().superRefine((value, context) => {
254
- if (value.estimate && Date.parse(value.estimate.expiresAt) <= Date.parse(value.asOf))
255
- context.addIssue({ code: "custom", path: ["estimate"], message: "An expired queue forecast must be returned as unavailable" });
256
- });
257
-
258
- // src/training-usage-status.ts
259
- import { z as z6 } from "zod";
260
- var Money2 = z6.string().regex(/^(0|[1-9]\d*)\.\d{6}$/).max(24).refine((value) => /^(0|[1-9]\d*)\.\d{6}$/.test(value) && value.length <= 24 && BigInt(value.replace(".", "")) <= BigInt(Number.MAX_SAFE_INTEGER));
261
- var TrainingUsageSnapshotSchema = z6.object({
262
- schemaVersion: z6.literal("openpond.trainingUsageSnapshot.v1"),
263
- asOf: z6.iso.datetime(),
264
- customerCapUsd: Money2.nullable(),
265
- chargedUsd: Money2,
266
- committedUsd: Money2,
267
- outstandingUsd: Money2,
268
- remainingCapUsd: Money2.nullable(),
269
- availableCreditUsd: Money2,
270
- complete: z6.boolean(),
271
- components: z6.array(z6.object({
272
- component: z6.enum(["gpu", "guest", "storage", "judge"]),
273
- chargedUsd: Money2,
274
- committedUsd: Money2,
275
- outstandingUsd: Money2,
276
- openOwners: z6.number().int().nonnegative()
277
- }).strict()).length(4).refine((values) => values.every((value, index) => value.component === ["gpu", "guest", "storage", "judge"][index]))
278
- }).strict();
279
-
280
280
  // src/training-job-contracts.ts
281
281
  import { z as z7 } from "zod";
282
282
  import { TrainingHandoffOriginSchema } from "@openpond/evals/learning";
@@ -817,6 +817,12 @@ async function trainingEvaluationSourceRef(input) {
817
817
  }
818
818
 
819
819
  export {
820
+ TrainingCheckpointRecoveryResourceApprovalSchema,
821
+ createTrainingCheckpointRecoveryResourceApproval,
822
+ TrainingCheckpointRecoveryRequestSchema,
823
+ TrainingPhysicalPlacementSchema,
824
+ TrainingQueueStatusSchema,
825
+ TrainingUsageSnapshotSchema,
820
826
  ComputeAppliedPriceSchema,
821
827
  ManagedModificationPriceSchema,
822
828
  canonicalComputeSpendCap,
@@ -828,12 +834,6 @@ export {
828
834
  TrainingUsageQuoteContentSchema,
829
835
  TrainingUsageQuoteSchema,
830
836
  verifyTrainingUsageQuote,
831
- TrainingCheckpointRecoveryResourceApprovalSchema,
832
- createTrainingCheckpointRecoveryResourceApproval,
833
- TrainingCheckpointRecoveryRequestSchema,
834
- TrainingPhysicalPlacementSchema,
835
- TrainingQueueStatusSchema,
836
- TrainingUsageSnapshotSchema,
837
837
  TrainingInputArtifactUploadSchema,
838
838
  TrainingInputArtifactSchema,
839
839
  trainingInputArtifactUploadHash,
@@ -872,4 +872,4 @@ export {
872
872
  assertTrainingEvaluationIsolation,
873
873
  trainingEvaluationSourceRef
874
874
  };
875
- //# sourceMappingURL=chunk-KEG5QS7W.js.map
875
+ //# sourceMappingURL=chunk-XYK3MAIC.js.map