openpond-sdk 0.12.9 → 0.12.11

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 (150) hide show
  1. package/README.md +2 -0
  2. package/TRAINING_PROTOCOL.md +40 -0
  3. package/dist/advanced-refiner-evaluations.js +8 -7
  4. package/dist/candidate-evaluations.js +7 -6
  5. package/dist/{chunk-TWJYL5YF.js → chunk-2LVR24GU.js} +5 -5
  6. package/dist/{chunk-MRUDFIB6.js → chunk-7BYLH47N.js} +6 -4
  7. package/dist/{chunk-MRUDFIB6.js.map → chunk-7BYLH47N.js.map} +1 -1
  8. package/dist/chunk-B3ZHJ2KK.js +152 -0
  9. package/dist/chunk-B3ZHJ2KK.js.map +1 -0
  10. package/dist/{chunk-D3WOJTUY.js → chunk-C3TS766N.js} +24 -87
  11. package/dist/chunk-C3TS766N.js.map +1 -0
  12. package/dist/{chunk-WYR3MZHU.js → chunk-C4W2MEFP.js} +2 -2
  13. package/dist/{chunk-GGG6H4MK.js → chunk-CNREFTAV.js} +2 -2
  14. package/dist/chunk-EZME7DV4.js +161 -0
  15. package/dist/chunk-EZME7DV4.js.map +1 -0
  16. package/dist/{chunk-IOZCYSJ6.js → chunk-GHPCQXG5.js} +2 -2
  17. package/dist/{chunk-EYMZQML2.js → chunk-GJRXJL6G.js} +525 -484
  18. package/dist/chunk-GJRXJL6G.js.map +1 -0
  19. package/dist/chunk-GX6KMHW2.js +108 -0
  20. package/dist/chunk-GX6KMHW2.js.map +1 -0
  21. package/dist/{chunk-BWFG46HX.js → chunk-HAQPGTQ4.js} +2 -2
  22. package/dist/{chunk-RFKZSSLB.js → chunk-IFBCLRBM.js} +5 -3
  23. package/dist/{chunk-RFKZSSLB.js.map → chunk-IFBCLRBM.js.map} +1 -1
  24. package/dist/chunk-IZ26ZCGU.js +65 -0
  25. package/dist/chunk-IZ26ZCGU.js.map +1 -0
  26. package/dist/{chunk-EEZ5YHJQ.js → chunk-JBYFD3QS.js} +3 -3
  27. package/dist/{chunk-U4QIGSP5.js → chunk-JDQVAG3R.js} +3 -3
  28. package/dist/{chunk-UWM2ZPGS.js → chunk-K54BDIKL.js} +3 -3
  29. package/dist/{chunk-QVLJFJBU.js → chunk-KOJC3TH4.js} +6 -6
  30. package/dist/{chunk-YP5DXGGC.js → chunk-LHHHJIDR.js} +2 -2
  31. package/dist/{chunk-UMK6DH75.js → chunk-NKF5NIML.js} +7 -5
  32. package/dist/{chunk-UMK6DH75.js.map → chunk-NKF5NIML.js.map} +1 -1
  33. package/dist/{chunk-LUFOAMN5.js → chunk-O3NOGKMT.js} +2 -2
  34. package/dist/{chunk-GZSQIOAH.js → chunk-ORYA2G7S.js} +6 -6
  35. package/dist/{chunk-XL44IXBO.js → chunk-RIN6Z56W.js} +5 -5
  36. package/dist/{chunk-CJDEVI3T.js → chunk-RLW4Y5ZV.js} +5 -3
  37. package/dist/{chunk-CJDEVI3T.js.map → chunk-RLW4Y5ZV.js.map} +1 -1
  38. package/dist/{chunk-QHCY4MBG.js → chunk-TLSP5JKG.js} +2 -2
  39. package/dist/chunk-U2KGUAIS.js +18 -0
  40. package/dist/chunk-U2KGUAIS.js.map +1 -0
  41. package/dist/{chunk-YSEYPMQ3.js → chunk-UOV2LEXS.js} +12 -154
  42. package/dist/chunk-UOV2LEXS.js.map +1 -0
  43. package/dist/{chunk-CZXN63A4.js → chunk-UWY5PUHR.js} +2 -2
  44. package/dist/{chunk-HYCHLMP7.js → chunk-XMVSQIK4.js} +2 -2
  45. package/dist/{chunk-TZREEZ4C.js → chunk-XRBM6PBD.js} +9 -9
  46. package/dist/{chunk-MGFI4226.js → chunk-YIGFQWZV.js} +3 -3
  47. package/dist/{chunk-EWRWGFKD.js → chunk-ZYDDHHZZ.js} +6 -4
  48. package/dist/{chunk-EWRWGFKD.js.map → chunk-ZYDDHHZZ.js.map} +1 -1
  49. package/dist/connected-evidence.js +18 -15
  50. package/dist/dataset-workspaces.js +21 -18
  51. package/dist/dataset-workspaces.js.map +1 -1
  52. package/dist/errors.js +13 -0
  53. package/dist/errors.js.map +1 -0
  54. package/dist/experiment-evaluation-schedules.js +22 -19
  55. package/dist/experiment-improvements.js +9 -8
  56. package/dist/experiments.js +22 -19
  57. package/dist/index.js +64 -58
  58. package/dist/index.js.map +1 -1
  59. package/dist/learning.js +9 -5
  60. package/dist/learning.js.map +1 -1
  61. package/dist/model-projects.js +6 -4
  62. package/dist/model-starter-attempts.js +3 -2
  63. package/dist/model-starter-catalog.js +13 -10
  64. package/dist/model-starter-catalog.js.map +1 -1
  65. package/dist/model-starters.js +13 -10
  66. package/dist/model-taskset-runs.js +5 -4
  67. package/dist/model-taskset-runs.js.map +1 -1
  68. package/dist/post-training.js +7 -6
  69. package/dist/taskset-drafts.js +17 -14
  70. package/dist/taskset-drafts.js.map +1 -1
  71. package/dist/taskset-packages.js +24 -21
  72. package/dist/tool-learning-local-store.js +355 -0
  73. package/dist/tool-learning-local-store.js.map +1 -0
  74. package/dist/tool-learning.js +414 -0
  75. package/dist/tool-learning.js.map +1 -0
  76. package/dist/training-bundle.js +31 -16
  77. package/dist/training-bundle.js.map +1 -1
  78. package/dist/training-hardware.js +23 -0
  79. package/dist/training-hardware.js.map +1 -0
  80. package/dist/training.js +31 -13
  81. package/dist/types/packages/sdk/src/connected-evidence-client.d.ts +40 -40
  82. package/dist/types/packages/sdk/src/dataset-preparation-workspace.d.ts +20 -20
  83. package/dist/types/packages/sdk/src/errors.d.ts +3 -0
  84. package/dist/types/packages/sdk/src/errors.d.ts.map +1 -0
  85. package/dist/types/packages/sdk/src/experiment-client.d.ts +636 -636
  86. package/dist/types/packages/sdk/src/experiment-improvement-client.d.ts +1622 -1622
  87. package/dist/types/packages/sdk/src/experiment-run-details.d.ts +54 -54
  88. package/dist/types/packages/sdk/src/learning-client.d.ts +1 -6
  89. package/dist/types/packages/sdk/src/learning-client.d.ts.map +1 -1
  90. package/dist/types/packages/sdk/src/learning-error.d.ts +7 -0
  91. package/dist/types/packages/sdk/src/learning-error.d.ts.map +1 -0
  92. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts +2 -0
  93. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts.map +1 -1
  94. package/dist/types/packages/sdk/src/model-projects.d.ts +24 -0
  95. package/dist/types/packages/sdk/src/model-projects.d.ts.map +1 -1
  96. package/dist/types/packages/sdk/src/model-starters.d.ts +6 -0
  97. package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -1
  98. package/dist/types/packages/sdk/src/post-training.d.ts +58 -54
  99. package/dist/types/packages/sdk/src/post-training.d.ts.map +1 -1
  100. package/dist/types/packages/sdk/src/taskset-authored-files.d.ts +20 -20
  101. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +2 -0
  102. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts.map +1 -1
  103. package/dist/types/packages/sdk/src/taskset-package-client.d.ts +6 -0
  104. package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
  105. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +20 -20
  106. package/dist/types/packages/sdk/src/tool-learning-client.d.ts +1217 -0
  107. package/dist/types/packages/sdk/src/tool-learning-client.d.ts.map +1 -0
  108. package/dist/types/packages/sdk/src/tool-learning-local-store.d.ts +140 -0
  109. package/dist/types/packages/sdk/src/tool-learning-local-store.d.ts.map +1 -0
  110. package/dist/types/packages/sdk/src/tool-learning.d.ts +4 -0
  111. package/dist/types/packages/sdk/src/tool-learning.d.ts.map +1 -0
  112. package/dist/types/packages/sdk/src/training-compute-selection.d.ts +2 -0
  113. package/dist/types/packages/sdk/src/training-compute-selection.d.ts.map +1 -1
  114. package/dist/types/packages/sdk/src/training-estimates.d.ts +9 -1
  115. package/dist/types/packages/sdk/src/training-estimates.d.ts.map +1 -1
  116. package/dist/types/packages/sdk/src/training-hardware.d.ts +886 -0
  117. package/dist/types/packages/sdk/src/training-hardware.d.ts.map +1 -0
  118. package/dist/types/packages/sdk/src/training-learning-batch.d.ts +40 -40
  119. package/dist/types/packages/sdk/src/training-preparations.d.ts +22 -0
  120. package/dist/types/packages/sdk/src/training-preparations.d.ts.map +1 -1
  121. package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts +2 -0
  122. package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts.map +1 -1
  123. package/dist/types/packages/sdk/src/training-supervised.d.ts +101 -0
  124. package/dist/types/packages/sdk/src/training-supervised.d.ts.map +1 -0
  125. package/dist/types/packages/sdk/src/training-transport.d.ts +24 -0
  126. package/dist/types/packages/sdk/src/training-transport.d.ts.map +1 -0
  127. package/dist/types/packages/sdk/src/training.d.ts +34 -16
  128. package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
  129. package/package.json +18 -2
  130. package/dist/chunk-D3WOJTUY.js.map +0 -1
  131. package/dist/chunk-EYMZQML2.js.map +0 -1
  132. package/dist/chunk-YSEYPMQ3.js.map +0 -1
  133. /package/dist/{chunk-TWJYL5YF.js.map → chunk-2LVR24GU.js.map} +0 -0
  134. /package/dist/{chunk-WYR3MZHU.js.map → chunk-C4W2MEFP.js.map} +0 -0
  135. /package/dist/{chunk-GGG6H4MK.js.map → chunk-CNREFTAV.js.map} +0 -0
  136. /package/dist/{chunk-IOZCYSJ6.js.map → chunk-GHPCQXG5.js.map} +0 -0
  137. /package/dist/{chunk-BWFG46HX.js.map → chunk-HAQPGTQ4.js.map} +0 -0
  138. /package/dist/{chunk-EEZ5YHJQ.js.map → chunk-JBYFD3QS.js.map} +0 -0
  139. /package/dist/{chunk-U4QIGSP5.js.map → chunk-JDQVAG3R.js.map} +0 -0
  140. /package/dist/{chunk-UWM2ZPGS.js.map → chunk-K54BDIKL.js.map} +0 -0
  141. /package/dist/{chunk-QVLJFJBU.js.map → chunk-KOJC3TH4.js.map} +0 -0
  142. /package/dist/{chunk-YP5DXGGC.js.map → chunk-LHHHJIDR.js.map} +0 -0
  143. /package/dist/{chunk-LUFOAMN5.js.map → chunk-O3NOGKMT.js.map} +0 -0
  144. /package/dist/{chunk-GZSQIOAH.js.map → chunk-ORYA2G7S.js.map} +0 -0
  145. /package/dist/{chunk-XL44IXBO.js.map → chunk-RIN6Z56W.js.map} +0 -0
  146. /package/dist/{chunk-QHCY4MBG.js.map → chunk-TLSP5JKG.js.map} +0 -0
  147. /package/dist/{chunk-CZXN63A4.js.map → chunk-UWY5PUHR.js.map} +0 -0
  148. /package/dist/{chunk-HYCHLMP7.js.map → chunk-XMVSQIK4.js.map} +0 -0
  149. /package/dist/{chunk-TZREEZ4C.js.map → chunk-XRBM6PBD.js.map} +0 -0
  150. /package/dist/{chunk-MGFI4226.js.map → chunk-YIGFQWZV.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/training-supervised.ts","../src/training-acceptance.ts","../src/training.ts","../src/training-recovery.ts","../src/training-physical-placement.ts","../src/training-preparations.ts","../src/training-estimates.ts","../src/training-queue.ts","../src/training-harness-sources.ts","../src/training-candidate-decisions.ts","../src/training-evaluation-results.ts","../src/training-grading-plan.ts","../src/training-evaluation-source.ts"],"sourcesContent":["import { z } from \"zod\";\n\nconst Id = z.string().trim().min(1).max(240);\nconst Hash = z.string().trim().min(8).max(256);\n\n/** Shared recipe for the public API, local workbench, and managed executor.\n * Supervised training has no rollout-group, reward, or relative-loss settings.\n */\nexport const SftRecipeSchema = z.object({\n schemaVersion: z.literal(\"openpond.sftRecipe.v1\"),\n method: z.literal(\"sft\"),\n parameterization: z.literal(\"lora\"),\n baseModel: z.object({\n id: Id,\n revision: z.string().trim().min(1).max(256),\n tokenizerRevision: z.string().trim().min(1).max(256),\n chatTemplateHash: Hash,\n }),\n dataset: z.object({\n trainSplit: z.literal(\"train\"),\n validationSplit: z.enum([\"validation\", \"frozen_eval\"]),\n completionOnly: z.boolean(),\n maxSequenceLength: z.number().int().positive().max(32_768),\n maxExamples: z.number().int().positive().max(100_000).default(1_000),\n selectionStrategy: z.literal(\"stable_hash_top_n\").default(\"stable_hash_top_n\"),\n selectionSeed: z.number().int().default(17),\n }),\n lora: z.object({\n rank: z.number().int().positive().max(256),\n alpha: z.number().positive().max(1_024),\n dropout: z.number().min(0).max(1),\n targetModules: z.array(Id).min(1).max(100),\n }),\n optimizer: z.object({\n learningRate: z.number().positive(),\n epochs: z.number().positive().max(100),\n maxSteps: z.number().int().positive().max(1_000_000),\n batchSize: z.number().int().positive().max(10_000),\n gradientAccumulationSteps: z.number().int().positive().max(10_000),\n seed: z.number().int(),\n }),\n resourceLimits: z.object({\n cpuThreads: z.number().int().positive().max(256),\n memoryBytes: z.number().int().positive(),\n wallTimeMs: z.number().int().positive(),\n }),\n});\nexport type SftRecipe = z.infer<typeof SftRecipeSchema>;\n\n/** The first managed SFT worker has a deliberately bounded execution surface.\n * This is an executable requirement, not an advertised fleet capability.\n */\nexport const ManagedSftRecipeSchema = SftRecipeSchema.safeExtend({\n dataset: SftRecipeSchema.shape.dataset.safeExtend({\n completionOnly: z.literal(true),\n maxSequenceLength: z.number().int().min(2).max(8192),\n maxExamples: z.number().int().min(1).max(1000).default(1000),\n }),\n lora: SftRecipeSchema.shape.lora.safeExtend({\n rank: z.number().int().min(1).max(64),\n dropout: z.number().min(0).lt(1),\n targetModules: z\n .array(z.enum([\"q_proj\", \"k_proj\", \"v_proj\", \"o_proj\", \"gate_proj\", \"up_proj\", \"down_proj\"]))\n .min(1)\n .max(7),\n }),\n optimizer: SftRecipeSchema.shape.optimizer.safeExtend({\n learningRate: z.number().positive().max(0.001),\n epochs: z.number().positive().max(10),\n maxSteps: z.number().int().min(1).max(128),\n batchSize: z.number().int().min(1).max(32),\n gradientAccumulationSteps: z.number().int().min(1).max(32),\n seed: z\n .number()\n .int()\n .min(-(2 ** 31))\n .max(2 ** 31 - 1),\n }),\n resourceLimits: SftRecipeSchema.shape.resourceLimits.safeExtend({\n wallTimeMs: z.number().int().min(1000).max(21_600_000),\n }),\n}).superRefine((recipe, context) => {\n if (recipe.optimizer.batchSize * recipe.optimizer.gradientAccumulationSteps > 32)\n context.addIssue({\n code: \"custom\",\n path: [\"optimizer\"],\n message: \"Managed SFT supports at most 32 accumulated examples.\",\n });\n if (new Set(recipe.lora.targetModules).size !== recipe.lora.targetModules.length)\n context.addIssue({\n code: \"custom\",\n path: [\"lora\", \"targetModules\"],\n message: \"Adapter target modules must be unique.\",\n });\n});\n","import { z } from \"zod\";\nimport { assertAcceptanceGroupSnapshot, AcceptanceGroupSnapshotSchema } from \"@openpond/evals/learning\";\nimport { ModelProjectImmutableRefSchema } from \"./model-projects.js\";\nimport { OpenPondProtocolError } from \"./protocol.js\";\n\nconst Id = z.string().trim().min(1).max(240);\nexport const TrainingAcceptanceGroupReferenceSchema = ModelProjectImmutableRefSchema.extend({ revision: z.number().int().positive() }).strict();\nexport const TrainingAcceptanceGroupSummarySchema = TrainingAcceptanceGroupReferenceSchema.extend({\n teamId: Id, jobId: Id,\n plan: ModelProjectImmutableRefSchema,\n baseline: ModelProjectImmutableRefSchema,\n candidate: ModelProjectImmutableRefSchema,\n state: AcceptanceGroupSnapshotSchema.shape.state,\n updatedAt: z.string().datetime(),\n}).strict();\nexport const TrainingAcceptanceGroupPageSchema = z.object({\n schemaVersion: z.literal(\"openpond.trainingAcceptanceGroupPage.v1\"),\n teamId: Id, jobId: Id, groups: z.array(TrainingAcceptanceGroupSummarySchema).max(100), nextCursor: Id.nullable(),\n}).strict();\nexport const TrainingAcceptanceGroupQuerySchema = z.object({\n cursor: Id.optional(), limit: z.number().int().min(1).max(100).default(25),\n}).strict();\nexport type TrainingAcceptanceGroupReference = z.infer<typeof TrainingAcceptanceGroupReferenceSchema>;\nexport type TrainingAcceptanceGroupSummary = z.infer<typeof TrainingAcceptanceGroupSummarySchema>;\nexport type TrainingAcceptanceGroupPage = z.infer<typeof TrainingAcceptanceGroupPageSchema>;\nexport type TrainingAcceptanceGroupQuery = z.input<typeof TrainingAcceptanceGroupQuerySchema>;\nexport type TrainingAcceptanceTarget = { teamId: string; jobId: string };\n\n/** Read retained evidence. These operations do not create, retry or dispatch checks. */\nexport function createTrainingAcceptanceClient(request: (path: string, init?: RequestInit) => Promise<unknown>) {\n const route = (target: TrainingAcceptanceTarget) => {\n Id.parse(target.teamId);\n return `/v1/training/jobs/${encodeURIComponent(Id.parse(target.jobId))}/acceptance-groups`;\n };\n return {\n async acceptanceGroups(target: TrainingAcceptanceTarget, input: TrainingAcceptanceGroupQuery = {}) {\n const query = TrainingAcceptanceGroupQuerySchema.parse(input);\n const params = new URLSearchParams({ limit: String(query.limit) });\n if (query.cursor) params.set(\"cursor\", query.cursor);\n const page = TrainingAcceptanceGroupPageSchema.parse(await request(`${route(target)}?${params}`));\n if (page.teamId !== target.teamId || page.jobId !== target.jobId || page.groups.length > query.limit ||\n page.groups.some(group => group.teamId !== target.teamId || group.jobId !== target.jobId || (query.cursor && group.id <= query.cursor)) ||\n new Set(page.groups.map(group => group.id)).size !== page.groups.length ||\n (page.nextCursor !== null && page.nextCursor !== page.groups.at(-1)?.id))\n throw new OpenPondProtocolError(\"acceptance_group_scope_mismatch\", \"Acceptance groups do not match the requested workspace, job or cursor.\");\n return page;\n },\n async acceptanceGroup(target: TrainingAcceptanceTarget, groupId: string, expected?: TrainingAcceptanceGroupReference) {\n const reference = expected ? TrainingAcceptanceGroupReferenceSchema.parse({ id: expected.id, revision: expected.revision, contentHash: expected.contentHash }) : null;\n if (reference && reference.id !== groupId) throw new OpenPondProtocolError(\"acceptance_group_identity_mismatch\", \"The retained group reference differs from the requested group.\");\n const suffix = reference ? `?revision=${reference.revision}` : \"\";\n const snapshot = assertAcceptanceGroupSnapshot(await request(`${route(target)}/${encodeURIComponent(Id.parse(groupId))}${suffix}`));\n if (snapshot.manifest.teamId !== target.teamId || snapshot.manifest.trainingJob.id !== target.jobId || snapshot.manifest.id !== groupId ||\n (reference && (snapshot.revision !== reference.revision || snapshot.contentHash !== reference.contentHash)))\n throw new OpenPondProtocolError(\"acceptance_group_identity_mismatch\", \"Acceptance evidence does not match the requested workspace, job or retained revision.\");\n return snapshot;\n },\n };\n}\n","import { createTrainingRequest } from \"./training-transport.js\";\nimport { SftRecipeSchema } from \"./training-supervised.js\";\nexport { SftRecipeSchema, ManagedSftRecipeSchema, type SftRecipe } from \"./training-supervised.js\";\nexport { TrainingApiErrorSchema, OpenPondTrainingApiError } from \"./training-transport.js\";\nimport { createTrainingAcceptanceClient } from \"./training-acceptance.js\";\nimport { createTrainingHardwareClient } from \"./training-hardware.js\";\nexport { HardwareObservationSchema, HardwareFleetSnapshotSchema,\n HardwareAvailabilitySchema, HardwareGpuObservationSchema,\n type HardwareObservation, type HardwareFleetSnapshot, type HardwareObservationQuery } from \"./training-hardware.js\";\nimport { TrainingHandoffOriginSchema } from \"./post-training.js\";\nimport { createPostTrainingClient } from \"./post-training.js\";\nexport {\n TrainingAcceptanceGroupReferenceSchema,\n TrainingAcceptanceGroupSummarySchema,\n TrainingAcceptanceGroupPageSchema,\n TrainingAcceptanceGroupQuerySchema,\n type TrainingAcceptanceGroupReference,\n type TrainingAcceptanceGroupSummary,\n type TrainingAcceptanceGroupPage,\n type TrainingAcceptanceGroupQuery,\n type TrainingAcceptanceTarget,\n} from \"./training-acceptance.js\";\nimport { z } from \"zod\";\nimport { TrainingCheckpointRecoveryRequestSchema, TrainingCheckpointRecoveryResourceApprovalSchema } from \"./training-recovery.js\";\nexport { TrainingCheckpointRecoveryRequestSchema, TrainingCheckpointRecoveryResourceApprovalSchema,\n createTrainingCheckpointRecoveryResourceApproval } from \"./training-recovery.js\";\nimport { TrainingPhysicalPlacementSchema } from \"./training-physical-placement.js\";\nexport { TrainingPhysicalPlacementSchema, type TrainingPhysicalPlacement } from \"./training-physical-placement.js\";\nimport { createTrainingPreparationClient } from \"./training-preparations.js\";\nimport { createTrainingEstimateClient } from \"./training-estimates.js\";\nimport { TrainingGpuSelectionSchema, TrainingGpuCatalogSchema } from \"./training-compute-selection.js\";\nexport { TrainingGpuCatalogSchema, type TrainingGpuCatalog } from \"./training-compute-selection.js\";\nimport { TrainingQueueStatusSchema } from \"./training-queue.js\";\nexport { TrainingQueueStatusSchema, type TrainingQueueStatus } from \"./training-queue.js\";\nexport {\n TrainingGpuSelectionSchema,\n TrainingEstimateSourceSchema,\n TrainingEstimateRequestSchema,\n TrainingEstimateComponentSchema,\n TrainingEstimateReviewSchema,\n TrainingEstimateSchema,\n trainingEstimateSourceIdentity,\n type TrainingGpuSelection,\n type TrainingEstimateRequest,\n type TrainingEstimate,\n type TrainingEstimateReview,\n} from \"./training-estimates.js\";\nexport {\n TrainingPreparationRequestSchema,\n TrainingPreparationPlanContentSchema,\n TrainingPreparationPlanSchema,\n TrainingPreparationReceiptSchema,\n TrainingPreparationControlSchema,\n parseAndVerifyTrainingPreparationReceipt,\n type TrainingPreparationRequest,\n type TrainingPreparationPlan,\n type TrainingPreparationReceipt,\n type TrainingPreparationControl,\n} from \"./training-preparations.js\";\nexport {\n TrainingPreparationListQuerySchema,\n TrainingPreparationPageSchema,\n type TrainingPreparationListQuery,\n type TrainingPreparationPage,\n} from \"./training-preparations.js\";\nimport { createTrainingHarnessSourceClient } from \"./training-harness-sources.js\";\nexport { TrainingHarnessSourcePublicationSchema } from \"./training-harness-sources.js\";\nimport { createTrainingCandidateDecisionClient } from \"./training-candidate-decisions.js\";\nexport {\n TrainingCandidateDecisionRequestSchema,\n TrainingCandidateDecisionSchema,\n trainingCandidateDecisionHash,\n parseAndVerifyTrainingCandidateDecision,\n type TrainingCandidateDecisionRequest,\n type TrainingCandidateDecision,\n type TrainingCandidateDecisionTarget,\n} from \"./training-candidate-decisions.js\";\nimport { parseAndVerifyTrainingEvaluationTaskPage } from \"./training-evaluation-results.js\";\n\nexport { deterministicTrainingRewardSource } from \"./training-grading-plan.js\";\nexport {\n TRAINING_EVALUATION_SOURCE_PATH,\n TrainingEvaluationSourceSchema,\n assertTrainingEvaluationIsolation,\n trainingEvaluationSourceRef,\n type TrainingEvaluationSource,\n} from \"./training-evaluation-source.js\";\nexport {\n TrainingEvaluationTaskResultSchema,\n TrainingEvaluationTaskPageSchema,\n trainingEvaluationTaskPageHash,\n parseAndVerifyTrainingEvaluationTaskPage,\n type TrainingEvaluationTaskResult,\n type TrainingEvaluationTaskPage,\n} from \"./training-evaluation-results.js\";\n\nimport {\n ModelProjectBaseModelSchema,\n ModelProjectImmutableRefSchema,\n ModelProjectRecipeDocumentSchema,\n ModelProjectVersionedRefSchema,\n} from \"./model-projects.js\";\nimport {\n TRAINING_INPUT_ARTIFACT_MAX_BYTES,\n TRAINING_JOB_SUBMISSION_MAX_BYTES,\n OpenPondProtocolError,\n assertCanonicalPayloadSize,\n canonicalSha256,\n} from \"./protocol.js\";\n\nexport {\n OPENPOND_TRAINING_MEDIA_TYPE,\n OPENPOND_TRAINING_PROTOCOL_MAJOR,\n TRAINING_API_RESPONSE_MAX_BYTES,\n TRAINING_INPUT_ARTIFACT_MAX_BYTES,\n TRAINING_JOB_SUBMISSION_MAX_BYTES,\n OpenPondProtocolError,\n assertCanonicalPayloadSize,\n canonicalJson,\n canonicalJsonByteLength,\n canonicalSha256,\n parseBoundedJson,\n} from \"./protocol.js\";\n\nconst IdSchema = z.string().trim().min(1).max(500);\nconst HashSchema = z.string().regex(/^[a-f0-9]{64}$/);\nconst TimestampSchema = z.string().datetime({ offset: true });\n\n/**\n * Stages a content-addressed immutable input before Job admission. The payload\n * is deliberately opaque to the transport contract: its declared kind owns\n * the executable schema, while the envelope provides bounded bytes,\n * idempotency, and a stable manifest lookup key.\n */\nexport const TrainingInputArtifactUploadSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.trainingInputArtifactUpload.v2\"),\n kind: z.enum([\"portable_training_bundle\", \"reward_model_dataset\"]),\n idempotencyKey: z.string().trim().min(1).max(500),\n sourceManifest: ModelProjectImmutableRefSchema,\n payload: z.unknown(),\n contentHash: HashSchema,\n })\n .strict();\n\nexport const TrainingInputArtifactSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.trainingInputArtifact.v2\"),\n kind: z.enum([\"portable_training_bundle\", \"reward_model_dataset\"]),\n sourceManifest: ModelProjectImmutableRefSchema,\n artifactRef: z.string().trim().min(1).max(2_000),\n contentHash: HashSchema,\n sizeBytes: z.number().int().positive(),\n createdAt: TimestampSchema,\n })\n .strict();\n\nexport async function trainingInputArtifactUploadHash(\n upload: Omit<TrainingInputArtifactUpload, \"contentHash\"> | TrainingInputArtifactUpload,\n): Promise<string> {\n const { contentHash: _contentHash, ...content } = upload as TrainingInputArtifactUpload;\n return canonicalSha256(content);\n}\n\nexport async function parseAndVerifyTrainingInputArtifactUpload(\n value: unknown,\n): Promise<TrainingInputArtifactUpload> {\n assertCanonicalPayloadSize(value, TRAINING_INPUT_ARTIFACT_MAX_BYTES, \"Training input artifact\");\n const parsed = TrainingInputArtifactUploadSchema.parse(value);\n const expectedHash = await trainingInputArtifactUploadHash(parsed);\n if (parsed.contentHash !== expectedHash) {\n throw new OpenPondProtocolError(\n \"content_hash_mismatch\",\n `Training input artifact contentHash ${parsed.contentHash} does not match ${expectedHash}.`,\n );\n }\n return parsed;\n}\n\nexport const TrainingJobKindSchema = z.enum([\"reward_model_train\", \"policy_optimize\"]);\n\nexport const TrainingJobStateSchema = z.enum([\n \"queued\",\n \"admitting\",\n \"provisioning\",\n \"running\",\n \"stopping\",\n \"cancelling\",\n \"succeeded\",\n \"failed\",\n \"cancelled\",\n]);\n\nexport const TrainingCapabilityRequirementSchema = z\n .object({\n id: IdSchema,\n version: z.string().trim().min(1).max(200).nullable().default(null),\n required: z.boolean().default(true),\n })\n .strict();\n\nexport const TrainingJobSourceSchema = z\n .object({\n origin: TrainingHandoffOriginSchema.optional(),\n modelProject: z\n .object({\n id: IdSchema,\n portableProjectId: IdSchema,\n revision: z.number().int().positive(),\n contentHash: HashSchema,\n })\n .strict(),\n harnessRunManifest: ModelProjectImmutableRefSchema,\n harnessRelease: ModelProjectImmutableRefSchema,\n taskset: ModelProjectVersionedRefSchema,\n tasksetRelease: ModelProjectImmutableRefSchema,\n evaluation: z\n .object({\n taskset: ModelProjectVersionedRefSchema,\n dataset: ModelProjectImmutableRefSchema,\n })\n .strict()\n .nullable()\n .optional(),\n dataset: ModelProjectImmutableRefSchema,\n evidenceSets: z.array(ModelProjectImmutableRefSchema).max(10_000),\n })\n .strict();\n\nexport const RewardModelTrainingRequestSchema = z\n .object({\n kind: z.literal(\"reward_model_train\"),\n baseModel: ModelProjectBaseModelSchema,\n preferenceDatasetRelease: ModelProjectImmutableRefSchema,\n processorRelease: ModelProjectImmutableRefSchema,\n recipe: z\n .object({\n schemaVersion: z.literal(\"openpond.rewardModelRecipe.v1\"),\n method: z.literal(\"reward_model\"),\n parameterization: z.literal(\"lora_with_scalar_head\"),\n })\n .catchall(z.unknown()),\n })\n .strict();\n\nconst DeterministicRewardSourceSchema = z\n .object({\n kind: z.literal(\"deterministic\"),\n grader: ModelProjectImmutableRefSchema,\n composer: ModelProjectImmutableRefSchema.nullable().default(null),\n })\n .strict();\n\nconst LearnedRewardSourceSchema = z\n .object({\n kind: z.literal(\"learned_reward\"),\n rewardModelVersion: ModelProjectImmutableRefSchema,\n qualificationReport: ModelProjectImmutableRefSchema.nullable().default(null),\n evaluationReferences: z.array(ModelProjectImmutableRefSchema).max(1_000).default([]),\n scorerArtifact: z\n .object({\n artifactRef: z.string().trim().min(1).max(2_000),\n contentHash: HashSchema,\n executionReceipt: ModelProjectImmutableRefSchema,\n })\n .strict(),\n processorRelease: ModelProjectImmutableRefSchema,\n rewardComposerRelease: ModelProjectImmutableRefSchema,\n })\n .strict();\n\nexport const TrainingQualificationBaseModelSchema = ModelProjectBaseModelSchema.extend({\n revision: z.string().regex(/^[a-f0-9]{40,64}$/),\n tokenizerRevision: z.string().regex(/^[a-f0-9]{40,64}$/),\n chatTemplateHash: HashSchema,\n}).strict();\n\nexport const PolicyOptimizationRequestSchema = z\n .object({\n kind: z.literal(\"policy_optimize\"),\n /** Collect and grade one original-learner group without optimizer work. */\n executionMode: z.literal(\"qualification\").optional(),\n baseModel: ModelProjectBaseModelSchema,\n recipe: ModelProjectRecipeDocumentSchema,\n rewardSource: z.discriminatedUnion(\"kind\", [\n DeterministicRewardSourceSchema,\n LearnedRewardSourceSchema,\n ]),\n resumeFrom: ModelProjectImmutableRefSchema.nullable().default(null),\n })\n .strict()\n .superRefine((job, context) => {\n if (job.recipe.method !== \"sft\") return;\n const recipe = SftRecipeSchema.safeParse(job.recipe);\n if (!recipe.success) {\n context.addIssue({\n code: \"custom\",\n path: [\"recipe\"],\n message: \"The SFT recipe is incomplete or invalid.\",\n });\n return;\n }\n if (job.executionMode || job.resumeFrom || \"continuation\" in job.recipe)\n context.addIssue({\n code: \"custom\",\n message:\n \"Initial managed SFT requires a fresh supervised run without rollout qualification or continuation.\",\n });\n if (\n recipe.data.baseModel.id !== job.baseModel.modelId ||\n recipe.data.baseModel.revision !== job.baseModel.revision ||\n recipe.data.baseModel.tokenizerRevision !== job.baseModel.tokenizerRevision ||\n recipe.data.baseModel.chatTemplateHash !== job.baseModel.chatTemplateHash\n )\n context.addIssue({\n code: \"custom\",\n path: [\"baseModel\"],\n message: \"The SFT recipe must pin the exact submitted base and tokenizer.\",\n });\n });\n\nexport const TrainingJobRequestSchema = z.discriminatedUnion(\"kind\", [\n RewardModelTrainingRequestSchema,\n PolicyOptimizationRequestSchema,\n]);\n\nexport const TrainingJobApprovalSchema = z\n .object({\n approvalHash: HashSchema,\n approvedAt: TimestampSchema,\n exportApproved: z.boolean(),\n maximumSpendUsd: z.number().nonnegative(),\n retentionDays: z.number().int().nonnegative().nullable(),\n region: z.string().trim().min(1).max(200).nullable().default(null),\n })\n .strict();\n\nexport const TrainingJobSubmissionSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.trainingJobSubmission.v2\"),\n idempotencyKey: z.string().trim().min(1).max(500),\n name: z.string().trim().min(1).max(200),\n source: TrainingJobSourceSchema,\n job: TrainingJobRequestSchema,\n requestedCapabilities: z.array(TrainingCapabilityRequirementSchema).max(1_000),\n placementObjective: z.enum([\"fast\", \"balanced\", \"economical\"]),\n gpuSelection: TrainingGpuSelectionSchema.optional(),\n physicalPlacement: TrainingPhysicalPlacementSchema.optional(),\n budget: z\n .object({\n maximumSpendUsd: z.number().nonnegative(),\n maximumWallSeconds: z.number().int().positive(),\n })\n .strict(),\n approval: TrainingJobApprovalSchema,\n contentHash: HashSchema,\n })\n .strict()\n .superRefine((submission, context) => {\n const distributed = (submission.gpuSelection?.gpuCount ?? 1) === 2;\n const distributedRequirement = submission.requestedCapabilities.some(requirement =>\n requirement.id === \"managed_rl.policy.data_parallel\" && requirement.version === \"1\" && requirement.required);\n if (distributed !== distributedRequirement) {\n context.addIssue({ code: \"custom\", path: [\"requestedCapabilities\"], message: \"Two-GPU training must require managed_rl.policy.data_parallel@1 and bind gpuSelection.gpuCount to 2.\" });\n }\n if (distributed && (submission.job.kind !== \"policy_optimize\" || submission.job.executionMode ||\n submission.job.recipe.method !== \"grpo\" || submission.physicalPlacement)) {\n context.addIssue({ code: \"custom\", path: [\"gpuSelection\"], message: \"Two-GPU execution requires exclusive GRPO policy training.\" });\n }\n if (submission.physicalPlacement && (submission.job.kind !== \"policy_optimize\" ||\n submission.job.resumeFrom || submission.job.executionMode || submission.job.recipe.continuation !== undefined)) {\n context.addIssue({ code: \"custom\", path: [\"physicalPlacement\"], message: \"Reuse-only placement requires fresh-base policy training without continuation.\" });\n }\n if (submission.job.kind === \"policy_optimize\" && submission.job.executionMode === \"qualification\") {\n const job = submission.job;\n if (!TrainingQualificationBaseModelSchema.safeParse(job.baseModel).success) {\n context.addIssue({ code: \"custom\", path: [\"job\", \"baseModel\"], message: \"Qualification requires immutable model and tokenizer revisions and a SHA-256 chat-template pin.\" });\n }\n if (job.resumeFrom || job.recipe.continuation !== undefined || job.rewardSource.kind !== \"deterministic\" || job.recipe.method !== \"grpo\") {\n context.addIssue({\n code: \"custom\", path: [\"job\"],\n message: \"Qualification requires the original GRPO learner, deterministic reward, and no resume or continuation.\",\n });\n }\n if (!submission.requestedCapabilities.some(requirement => requirement.required && requirement.id === \"managed_rl.policy.qualification\" && requirement.version === \"1\")) {\n context.addIssue({\n code: \"custom\", path: [\"requestedCapabilities\"],\n message: \"Qualification must require managed_rl.policy.qualification@1.\",\n });\n }\n }\n if (submission.approval.maximumSpendUsd !== submission.budget.maximumSpendUsd) {\n context.addIssue({\n code: \"custom\",\n path: [\"approval\", \"maximumSpendUsd\"],\n message: \"Approved spend must equal the immutable Job budget.\",\n });\n }\n });\n\nexport async function trainingJobSubmissionHash(\n submission: Omit<TrainingJobSubmission, \"contentHash\"> | TrainingJobSubmission,\n): Promise<string> {\n const { contentHash: _contentHash, ...content } = submission as TrainingJobSubmission;\n return canonicalSha256(content);\n}\n\nexport async function parseAndVerifyTrainingJobSubmission(\n value: unknown,\n): Promise<TrainingJobSubmission> {\n assertCanonicalPayloadSize(value, TRAINING_JOB_SUBMISSION_MAX_BYTES, \"Training Job submission\");\n const parsed = TrainingJobSubmissionSchema.parse(value);\n const expectedHash = await trainingJobSubmissionHash(parsed);\n if (parsed.contentHash !== expectedHash) {\n throw new OpenPondProtocolError(\n \"content_hash_mismatch\",\n `Training Job contentHash ${parsed.contentHash} does not match ${expectedHash}.`,\n );\n }\n return parsed;\n}\n\nexport const TrainingJobRecoverySchema = z.object({\n resourceApproval: TrainingCheckpointRecoveryResourceApprovalSchema.optional(),\n mode: z.literal(\"evaluation_only\").optional(),\n trainingWorkloadComplete: z.boolean().optional(),\n sourceJobId: IdSchema,\n checkpointId: IdSchema,\n policyVersion: z.number().int().positive(),\n completedGroups: z.number().int().positive(),\n optimizerMode: z.literal(\"continue\"),\n}).strict();\n\nexport const TrainingJobSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.trainingJob.v2\"),\n id: IdSchema,\n teamId: IdSchema,\n kind: TrainingJobKindSchema,\n executionMode: z.literal(\"qualification\").optional(),\n recovery: TrainingJobRecoverySchema.optional(),\n modelProjectId: IdSchema,\n portableProjectId: IdSchema,\n sourceProjectRevision: z.number().int().positive(),\n submissionHash: HashSchema,\n state: TrainingJobStateSchema,\n queue: TrainingQueueStatusSchema.optional(),\n phase: z.string().trim().min(1).max(200),\n version: z.number().int().nonnegative(),\n progress: z.number().min(0).max(1),\n rolloutProgress: z\n .object({\n groupsCompleted: z.number().int().nonnegative(),\n groupsTarget: z.number().int().nonnegative(),\n optimizerUpdatesApplied: z.number().int().nonnegative(),\n optimizerUpdatesSkipped: z.number().int().nonnegative(),\n })\n .strict(),\n accruedSpendUsd: z.number().nonnegative(),\n terminalReason: z.string().trim().min(1).max(5_000).nullable(),\n createdAt: TimestampSchema,\n updatedAt: TimestampSchema,\n completedAt: TimestampSchema.nullable(),\n })\n .strict();\n\nexport const TrainingJobPageSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.trainingJobPage.v2\"),\n jobs: z.array(TrainingJobSchema).max(1_000),\n nextCursor: z.string().trim().min(1).max(2_000).nullable(),\n })\n .strict();\n\nexport const TrainingJobEventSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.trainingJobEvent.v2\"),\n id: IdSchema,\n jobId: IdSchema,\n sequence: z.number().int().nonnegative(),\n type: IdSchema,\n phase: z.string().trim().min(1).max(200),\n message: z.string().trim().min(1).max(5_000).nullable(),\n data: z.record(z.string(), z.unknown()).default({}),\n createdAt: TimestampSchema,\n })\n .strict();\n\nexport const TrainingJobLogSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.trainingJobLog.v2\"),\n jobId: IdSchema,\n sequence: z.number().int().nonnegative(),\n level: z.enum([\"debug\", \"info\", \"warning\", \"error\"]),\n message: z.string().max(20_000),\n createdAt: TimestampSchema,\n })\n .strict();\n\nexport const TrainingJobControlRequestSchema = z\n .object({ expectedVersion: z.number().int().nonnegative() })\n .strict();\n\nexport const TrainingJobOutputSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.trainingJobOutput.v2\"),\n id: IdSchema,\n jobId: IdSchema,\n kind: z.enum([\"checkpoint\", \"adapter\", \"scorer\", \"metrics\", \"evaluation\", \"trace\", \"receipt\"]),\n artifactRef: z.string().trim().min(1).max(2_000),\n contentHash: HashSchema,\n sizeBytes: z.number().int().nonnegative(),\n metadata: z.record(z.string(), z.unknown()).default({}),\n createdAt: TimestampSchema,\n })\n .strict();\n\n/** Evidence that collection used the pinned original learner and never updated it. */\nexport const TrainingQualificationEvidenceSchema = z.object({\n schemaVersion: z.literal(\"openpond.trainingQualificationEvidence.v1\"),\n baseModel: TrainingQualificationBaseModelSchema,\n group: ModelProjectImmutableRefSchema,\n rolloutReceipts: z.array(ModelProjectImmutableRefSchema).min(1).max(1_000),\n rewardEvidenceHash: HashSchema,\n groupsCompleted: z.literal(1),\n optimizerUpdatesApplied: z.literal(0),\n optimizerUpdatesSkipped: z.literal(0),\n trainingStepsCreated: z.literal(0),\n checkpointsCreated: z.literal(0),\n artifactsCreated: z.literal(0),\n}).strict().superRefine((evidence, context) => {\n if (new Set(evidence.rolloutReceipts.map(receipt => receipt.id)).size !== evidence.rolloutReceipts.length) {\n context.addIssue({ code: \"custom\", path: [\"rolloutReceipts\"], message: \"Qualification rollout receipt identities must be unique.\" });\n }\n});\n\nexport const TrainingExecutionReceiptSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.trainingExecutionReceipt.v2\"),\n id: IdSchema,\n teamId: IdSchema,\n jobId: IdSchema,\n submissionHash: HashSchema,\n manifestHash: HashSchema,\n recipeHash: HashSchema,\n capabilityHash: HashSchema,\n runtimeRelease: ModelProjectImmutableRefSchema,\n inputs: z.array(ModelProjectImmutableRefSchema).max(10_000),\n outputs: z.array(ModelProjectImmutableRefSchema).max(10_000),\n spendUsd: z.number().nonnegative(),\n durationSeconds: z.number().nonnegative(),\n cleanupComplete: z.boolean(),\n qualification: TrainingQualificationEvidenceSchema.optional(),\n issuer: IdSchema,\n issuedAt: TimestampSchema,\n signature: z.string().trim().min(1).max(10_000).nullable(),\n })\n .strict();\n\nexport async function trainingExecutionReceiptHash(\n receipt: TrainingExecutionReceipt,\n): Promise<string> {\n return canonicalSha256(TrainingExecutionReceiptSchema.parse(receipt));\n}\n\nexport async function parseAndVerifyTrainingExecutionReceipt(\n value: unknown,\n expected: {\n id: string;\n contentHash: string;\n teamId?: string;\n jobId?: string;\n requireCleanup?: boolean;\n qualificationSubmission?: TrainingJobSubmission;\n outputs?: TrainingJobOutput[];\n },\n): Promise<TrainingExecutionReceipt> {\n const receipt = TrainingExecutionReceiptSchema.parse(value);\n const expectedId = IdSchema.parse(expected.id);\n const expectedHash = HashSchema.parse(expected.contentHash);\n const actualHash = await trainingExecutionReceiptHash(receipt);\n if (receipt.id !== expectedId || actualHash !== expectedHash) {\n throw new OpenPondProtocolError(\n \"execution_receipt_mismatch\",\n \"The execution receipt identity or canonical content hash did not match.\",\n );\n }\n if (expected.teamId !== undefined && receipt.teamId !== IdSchema.parse(expected.teamId)) {\n throw new OpenPondProtocolError(\n \"execution_receipt_team_mismatch\",\n \"The execution receipt belongs to a different team.\",\n );\n }\n if (expected.jobId !== undefined && receipt.jobId !== IdSchema.parse(expected.jobId)) {\n throw new OpenPondProtocolError(\n \"execution_receipt_job_mismatch\",\n \"The execution receipt belongs to a different Training Job.\",\n );\n }\n if ((expected.requireCleanup ?? true) && !receipt.cleanupComplete) {\n throw new OpenPondProtocolError(\n \"execution_cleanup_incomplete\",\n \"The execution receipt does not attest complete terminal cleanup.\",\n );\n }\n if (expected.qualificationSubmission) {\n const submission = await parseAndVerifyTrainingJobSubmission(expected.qualificationSubmission);\n if (submission.job.kind !== \"policy_optimize\" || submission.job.executionMode !== \"qualification\") {\n throw new OpenPondProtocolError(\"qualification_submission_required\", \"Expected an immutable qualification submission.\");\n }\n await assertTrainingQualificationReceipt(receipt, { submissionHash: submission.contentHash, baseModel: submission.job.baseModel, outputs: expected.outputs });\n }\n return receipt;\n}\n\nexport async function assertTrainingQualificationReceipt(\n receipt: TrainingExecutionReceipt,\n expected: { submissionHash: string; baseModel?: z.infer<typeof ModelProjectBaseModelSchema>; outputs?: TrainingJobOutput[] },\n): Promise<void> {\n const evidence = TrainingQualificationEvidenceSchema.parse(receipt.qualification);\n if (receipt.submissionHash !== expected.submissionHash || !receipt.cleanupComplete) {\n throw new OpenPondProtocolError(\"qualification_receipt_mismatch\", \"Qualification must attest the expected submission and complete cleanup.\");\n }\n if (expected.baseModel && await canonicalSha256(evidence.baseModel) !== await canonicalSha256(expected.baseModel)) {\n throw new OpenPondProtocolError(\"qualification_learner_mismatch\", \"Qualification used a different original learner or tokenizer.\");\n }\n if (expected.outputs?.some(output => [\"checkpoint\", \"adapter\", \"scorer\"].includes(output.kind))) {\n throw new OpenPondProtocolError(\"qualification_updated_artifact\", \"Qualification must not publish trained artifacts or checkpoints.\");\n }\n}\n\nexport const TrainingJobOutputsSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.trainingJobOutputs.v2\"),\n outputs: z.array(TrainingJobOutputSchema).max(10_000),\n receipt: TrainingExecutionReceiptSchema.nullable(),\n })\n .strict();\n\nexport const TrainingPolicyLoraCapabilitiesSchema = z.object({\n workerImageDigest: z.string().regex(/^sha256:[a-f0-9]{64}$/),\n envelopeRank: z.number().int().positive().max(256),\n supportedRanks: z.array(z.number().int().positive().max(256)).max(256),\n qualification: z.object({ evidenceRef: z.string().min(1), evidenceSha256: HashSchema }).strict().nullable(),\n continuation: z.object({\n sharedRequiresSameRank: z.literal(true),\n mergedRequiresSameRank: z.literal(true),\n residualAppendRequiresFreeCapacity: z.literal(true),\n stageOptimizer: z.literal(\"reset\"),\n interruptedRecoveryOptimizer: z.literal(\"restore\"),\n }).strict(),\n}).strict().superRefine((value, context) => {\n if (new Set(value.supportedRanks).size !== value.supportedRanks.length || value.supportedRanks.some(rank => rank > value.envelopeRank))\n context.addIssue({ code: \"custom\", path: [\"supportedRanks\"], message: \"Supported ranks must be unique and fit the physical adapter envelope.\" });\n if (value.supportedRanks.length && !value.qualification)\n context.addIssue({ code: \"custom\", path: [\"qualification\"], message: \"Advertised ranks require immutable image qualification evidence.\" });\n});\nexport type TrainingPolicyLoraCapabilities = z.infer<typeof TrainingPolicyLoraCapabilitiesSchema>;\n\nexport function supportsTrainingPolicyLoraRank(capabilities: TrainingPolicyLoraCapabilities, rank: number,\n continuation?: { mode: \"shared\" | \"sequential_merge\" | \"residual_append\"; parentEnabledRank: number }): boolean {\n if (!capabilities.supportedRanks.includes(rank)) return false;\n if (!continuation) return true;\n return continuation.mode === \"residual_append\"\n ? continuation.parentEnabledRank + rank <= capabilities.envelopeRank\n : continuation.parentEnabledRank === rank;\n}\n\nexport const TrainingCapabilitiesSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.trainingCapabilities.v2\"),\n capabilityHash: HashSchema,\n jobKinds: z.array(TrainingJobKindSchema),\n methods: z.array(z.string().trim().min(1).max(200)),\n executionModes: z.array(z.enum([\"training\", \"qualification\"])).optional(),\n policyLora: TrainingPolicyLoraCapabilitiesSchema.optional(),\n policyDataParallel: z.object({\n capability: z.literal(\"managed_rl.policy.data_parallel\"),\n version: z.literal(\"1\"),\n gpuCount: z.literal(2),\n worldSize: z.literal(2),\n backend: z.literal(\"nccl\"),\n allocationMode: z.literal(\"exclusive\"),\n workerImageDigest: z.string().regex(/^sha256:[a-f0-9]{64}$/),\n }).strict().optional(),\n structuredOutputs: z.object({\n capability: z.literal(\"work.structured-output.v1\"),\n harnessRuntimeHash: HashSchema,\n workHarnessHash: HashSchema,\n schemaHash: HashSchema,\n artifactHash: HashSchema,\n invalidDataRejected: z.literal(true),\n invalidBytesRejected: z.literal(true),\n }).strict().optional(),\n placements: z.array(z.enum([\"local\", \"remote\", \"colocated\", \"provider_native\"])),\n controls: z\n .object({\n cancel: z.boolean(),\n stopAfterGroup: z.boolean(),\n resumeFromCheckpoint: z.boolean(),\n })\n .strict(),\n estimates: z.object({ schemaVersion: z.literal(\"openpond.trainingEstimate.v1\") }).strict().optional(),\n limits: z\n .object({\n maximumSpendUsd: z.number().nonnegative(),\n maximumWallSeconds: z.number().int().positive(),\n maximumArtifactBytes: z.number().int().positive(),\n })\n .strict(),\n checkedAt: TimestampSchema,\n expiresAt: TimestampSchema,\n })\n .strict();\n\nexport type TrainingJobSubmission = z.infer<typeof TrainingJobSubmissionSchema>;\nexport type TrainingQualificationEvidence = z.infer<typeof TrainingQualificationEvidenceSchema>;\nexport type TrainingInputArtifactUpload = z.infer<typeof TrainingInputArtifactUploadSchema>;\nexport type TrainingInputArtifact = z.infer<typeof TrainingInputArtifactSchema>;\nexport type TrainingJob = z.infer<typeof TrainingJobSchema>;\nexport type TrainingJobPage = z.infer<typeof TrainingJobPageSchema>;\nexport type TrainingJobEvent = z.infer<typeof TrainingJobEventSchema>;\nexport type TrainingJobLog = z.infer<typeof TrainingJobLogSchema>;\nexport type TrainingJobOutput = z.infer<typeof TrainingJobOutputSchema>;\nexport type TrainingJobOutputs = z.infer<typeof TrainingJobOutputsSchema>;\nexport type TrainingExecutionReceipt = z.infer<typeof TrainingExecutionReceiptSchema>;\nexport type TrainingCapabilities = z.infer<typeof TrainingCapabilitiesSchema>;\n\nexport function createTrainingClient(input: {\n baseUrl: string;\n fetch?: typeof fetch;\n headers?: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);\n}) {\n const request = createTrainingRequest(input);\n\n return {\n postTraining: createPostTrainingClient({ request }),\n ...createTrainingPreparationClient(request),\n ...createTrainingEstimateClient(request),\n ...createTrainingAcceptanceClient(request),\n ...createTrainingHardwareClient(request),\n ...createTrainingHarnessSourceClient(request),\n ...createTrainingCandidateDecisionClient(request),\n async capabilities() {\n return TrainingCapabilitiesSchema.parse(\n unwrapObject(await request(\"/v1/training/capabilities\"), \"capabilities\"),\n );\n },\n async gpuCatalog() {\n return TrainingGpuCatalogSchema.parse(unwrapObject(await request(\"/v1/training/gpu-catalog\"), \"catalog\"));\n },\n async stageArtifact(upload: TrainingInputArtifactUpload) {\n const parsed = await parseAndVerifyTrainingInputArtifactUpload(upload);\n return TrainingInputArtifactSchema.parse(\n unwrapObject(\n await request(\"/v1/training/artifacts\", {\n method: \"POST\",\n body: JSON.stringify(parsed),\n }),\n \"artifact\",\n ),\n );\n },\n async createJob(submission: TrainingJobSubmission) {\n const parsed = await parseAndVerifyTrainingJobSubmission(submission);\n return TrainingJobSchema.parse(\n unwrapObject(\n await request(\"/v1/training/jobs\", {\n method: \"POST\",\n body: JSON.stringify(parsed),\n }),\n \"job\",\n ),\n );\n },\n async listJobs(\n options: {\n modelProjectId?: string;\n cursor?: string;\n limit?: number;\n } = {},\n ) {\n const parameters = new URLSearchParams();\n if (options.modelProjectId) {\n parameters.set(\"modelProjectId\", IdSchema.parse(options.modelProjectId));\n }\n if (options.cursor) {\n parameters.set(\"cursor\", z.string().trim().min(1).max(2_000).parse(options.cursor));\n }\n if (options.limit !== undefined) {\n parameters.set(\"limit\", String(z.number().int().min(1).max(1_000).parse(options.limit)));\n }\n const query = parameters.size > 0 ? `?${parameters.toString()}` : \"\";\n return TrainingJobPageSchema.parse(await request(`/v1/training/jobs${query}`));\n },\n async getJob(jobId: string) {\n return TrainingJobSchema.parse(\n unwrapObject(\n await request(`/v1/training/jobs/${encodeURIComponent(IdSchema.parse(jobId))}`),\n \"job\",\n ),\n );\n },\n async cancelJob(jobId: string, expectedVersion: number) {\n const control = TrainingJobControlRequestSchema.parse({ expectedVersion });\n return TrainingJobSchema.parse(\n unwrapObject(\n await request(`/v1/training/jobs/${encodeURIComponent(IdSchema.parse(jobId))}/cancel`, {\n method: \"POST\",\n body: JSON.stringify(control),\n }),\n \"job\",\n ),\n );\n },\n async stopAfterGroup(jobId: string, expectedVersion: number) {\n const control = TrainingJobControlRequestSchema.parse({ expectedVersion });\n return TrainingJobSchema.parse(\n unwrapObject(\n await request(\n `/v1/training/jobs/${encodeURIComponent(IdSchema.parse(jobId))}/stop-after-group`,\n { method: \"POST\", body: JSON.stringify(control) },\n ),\n \"job\",\n ),\n );\n },\n async recoverCheckpoint(jobId: string, input: z.input<typeof TrainingCheckpointRecoveryRequestSchema>) {\n const recovery = TrainingCheckpointRecoveryRequestSchema.parse(input);\n if (recovery.resourceApproval) {\n const { approvalHash, ...body } = recovery.resourceApproval;\n if (body.sourceJobId !== jobId || await canonicalSha256(body) !== approvalHash)\n throw new OpenPondProtocolError(\"content_hash_mismatch\", \"Recovery resource approval does not bind this source request.\");\n }\n return TrainingJobSchema.parse(unwrapObject(await request(\n `/v1/training/jobs/${encodeURIComponent(IdSchema.parse(jobId))}/recover`,\n { method: \"POST\", body: JSON.stringify(recovery) },\n ), \"job\"));\n },\n async events(jobId: string) {\n return z\n .array(TrainingJobEventSchema)\n .parse(\n unwrapObject(\n await request(`/v1/training/jobs/${encodeURIComponent(IdSchema.parse(jobId))}/events`),\n \"events\",\n ),\n );\n },\n async outputs(jobId: string) {\n return TrainingJobOutputsSchema.parse(\n await request(`/v1/training/jobs/${encodeURIComponent(IdSchema.parse(jobId))}/outputs`),\n );\n },\n async evaluationTasks(\n jobId: string,\n evaluation: { id: string; contentHash: string },\n options: { cursor?: string; limit?: number } = {},\n ) {\n const id = IdSchema.parse(jobId);\n const reference = ModelProjectImmutableRefSchema.parse(evaluation);\n const parameters = new URLSearchParams();\n const cursor =\n options.cursor === undefined\n ? undefined\n : z\n .string()\n .regex(/^[1-9]\\d*$/)\n .parse(options.cursor);\n const offset =\n cursor === undefined ? 0 : z.number().int().min(1).max(9_999).parse(Number(cursor));\n if (cursor !== undefined) parameters.set(\"cursor\", cursor);\n if (options.limit !== undefined)\n parameters.set(\"limit\", String(z.number().int().min(1).max(100).parse(options.limit)));\n const query = parameters.size ? `?${parameters.toString()}` : \"\";\n return parseAndVerifyTrainingEvaluationTaskPage(\n await request(\n `/v1/training/jobs/${encodeURIComponent(id)}/evaluations/${encodeURIComponent(reference.id)}/tasks${query}`,\n ),\n { jobId: id, evaluation: reference, offset },\n );\n },\n async logs(jobId: string) {\n return z\n .array(TrainingJobLogSchema)\n .max(100_000)\n .parse(\n unwrapObject(\n await request(`/v1/training/jobs/${encodeURIComponent(IdSchema.parse(jobId))}/logs`),\n \"logs\",\n ),\n );\n },\n };\n}\n\nfunction unwrapObject(value: unknown, key: string): unknown {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return value;\n return key in value ? (value as Record<string, unknown>)[key] : value;\n}\n","import { z } from \"zod\";\nimport { canonicalSha256 } from \"./protocol.js\";\n\nconst id = z.string().trim().min(1).max(191);\nconst hash = z.string().regex(/^[a-f0-9]{64}$/);\nconst ApprovalBodySchema = z\n .object({\n schemaVersion: z.literal(\"openpond.checkpointRecoveryResourceApproval.v1\"),\n ownerUserId: id,\n teamId: id,\n sourceJobId: id,\n sourceJobVersion: z.number().int().positive(),\n sourceInputManifestSha256: hash,\n checkpointId: id,\n adapterSha256: hash,\n resumeSha256: hash,\n idempotencyKey: z.string().trim().min(16).max(191),\n approvedAt: z.iso.datetime({ offset: true }),\n maximumSpendUsd: z\n .number()\n .positive()\n .finite()\n .max(30)\n .refine(\n (value) => Number(value.toFixed(6)) === value,\n \"Recovery spend must use whole microdollars\",\n ),\n maximumGpuSeconds: z.number().int().positive().max(21_600),\n maximumWallSeconds: z.number().int().positive().max(21_600),\n })\n .strict();\n\nexport const TrainingCheckpointRecoveryResourceApprovalSchema = ApprovalBodySchema.extend({\n approvalHash: hash,\n})\n .strict()\n .superRefine((value, context) => {\n if (value.maximumGpuSeconds > value.maximumWallSeconds)\n context.addIssue({\n code: \"custom\",\n path: [\"maximumGpuSeconds\"],\n message: \"Recovery GPU duration exceeds its wall\",\n });\n });\n\n/** The authenticated source owner's funded request is consent; this hash binds its exact scope. */\nexport async function createTrainingCheckpointRecoveryResourceApproval(\n input: z.input<typeof ApprovalBodySchema>,\n) {\n const body = ApprovalBodySchema.parse(input);\n return TrainingCheckpointRecoveryResourceApprovalSchema.parse({\n ...body,\n approvalHash: await canonicalSha256(body),\n });\n}\n\n/** Exact execution recovery; a continual-training optimizer reset is separate. */\nexport const TrainingCheckpointRecoveryRequestSchema = z\n .object({\n resourceApproval: TrainingCheckpointRecoveryResourceApprovalSchema.optional(),\n mode: z.literal(\"evaluation_only\").optional(),\n evaluationGpuType: z\n .enum([\"NVIDIA A100 80GB PCIe\", \"NVIDIA A100-SXM4-80GB\", \"NVIDIA H100 80GB HBM3\"])\n .optional(),\n expectedVersion: z.number().int().positive(),\n checkpointId: id,\n idempotencyKey: z.string().trim().min(16).max(191),\n maximumSpendUsd: z.number().positive().finite(),\n maximumWallSeconds: z.number().int().positive().max(21_600),\n })\n .strict()\n .superRefine((value, context) => {\n if (value.evaluationGpuType && value.mode !== \"evaluation_only\")\n context.addIssue({\n code: \"custom\",\n path: [\"evaluationGpuType\"],\n message: \"GPU substitution requires explicit evaluation-only recovery\",\n });\n const a = value.resourceApproval;\n if (\n a &&\n (a.sourceJobVersion !== value.expectedVersion ||\n a.checkpointId !== value.checkpointId ||\n a.idempotencyKey !== value.idempotencyKey ||\n a.maximumSpendUsd !== value.maximumSpendUsd ||\n a.maximumWallSeconds !== value.maximumWallSeconds)\n )\n context.addIssue({\n code: \"custom\",\n path: [\"resourceApproval\"],\n message: \"Recovery resource approval does not match its request\",\n });\n });\n","import { z } from \"zod\";\n\n/** Placement authority only: a fresh learner never inherits the source Policy. */\nexport const TrainingPhysicalPlacementSchema = z.object({\n mode: z.literal(\"reuse_only\"),\n physicalWorkerId: z.string().trim().min(1).max(191),\n providerPodId: z.string().trim().min(1).max(191),\n workerImageDigest: z.string().regex(/^sha256:[a-f0-9]{64}$/),\n baseProfileSha256: z.string().regex(/^[a-f0-9]{64}$/),\n gpuType: z.string().trim().min(1).max(200),\n sourceJobId: z.string().trim().min(1).max(191),\n sourceInputManifestSha256: z.string().regex(/^[a-f0-9]{64}$/),\n ownerTeamId: z.string().trim().min(1).max(191),\n deadlineAt: z.string().datetime({ offset: true }),\n}).strict();\n\nexport type TrainingPhysicalPlacement = z.infer<typeof TrainingPhysicalPlacementSchema>;\n","import { TrainingHandoffOriginSchema } from \"./post-training.js\";\nimport { z } from \"zod\";\nimport { ModelProjectVersionedRefSchema } from \"./model-projects.js\";\nimport { TrainingJobSourceSchema } from \"./training.js\";\nimport { TrainingPhysicalPlacementSchema } from \"./training-physical-placement.js\";\nimport { canonicalSha256, OpenPondProtocolError } from \"./protocol.js\";\nimport { TrainingEstimateReviewSchema, TrainingGpuSelectionSchema } from \"./training-compute-selection.js\";\n\nconst Id = z.string().trim().min(1).max(191);\nconst Hash = z.string().regex(/^[a-f0-9]{64}$/);\n\n/** Manual training compiles an already reviewed batch. It creates no recurring policy. */\nexport const TrainingPreparationRequestSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.trainingPreparationRequest.v1\"),\n teamId: Id,\n operationId: Id,\n projectId: Id.nullable(),\n configuration: z\n .object({ id: Id, expectedRevision: z.number().int().positive(), expectedEtag: Hash })\n .strict(),\n origin: TrainingHandoffOriginSchema.optional(),\n batch: ModelProjectVersionedRefSchema,\n name: z.string().trim().min(1).max(191),\n maximumSpendUsd: z.number().finite().positive().max(1_000_000),\n gpuSelection: TrainingGpuSelectionSchema.optional(),\n physicalPlacement: TrainingPhysicalPlacementSchema.optional(),\n })\n .strict();\nexport const TrainingPreparationPlanContentSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.trainingPreparationPlan.v1\"),\n id: Id,\n creatorUserId: Id,\n request: TrainingPreparationRequestSchema,\n requestHash: Hash,\n source: z.lazy(() => TrainingJobSourceSchema),\n submissionHash: Hash,\n createdAt: z.string().datetime({ offset: true }),\n })\n .strict();\nexport const TrainingPreparationPlanSchema = TrainingPreparationPlanContentSchema.extend({\n contentHash: Hash,\n}).strict();\nexport const TrainingPreparationReceiptSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.trainingPreparationReceipt.v1\"),\n plan: TrainingPreparationPlanSchema,\n revision: z.number().int().positive(),\n state: z.enum([\"prepared\", \"submitted\", \"cancelled\"]),\n jobId: Id.nullable(),\n })\n .strict()\n .superRefine((value, context) => {\n if ((value.state === \"submitted\") !== Boolean(value.jobId))\n context.addIssue({\n code: \"custom\",\n path: [\"jobId\"],\n message: \"Only submitted preparations identify a job.\",\n });\n });\nexport const TrainingPreparationControlSchema = z\n .object({\n teamId: Id,\n planHash: Hash,\n expectedRevision: z.number().int().positive(),\n estimateReview: TrainingEstimateReviewSchema.optional(),\n })\n .strict();\nexport const TrainingPreparationListQuerySchema = z\n .object({\n projectId: Id.optional(),\n state: z.enum([\"prepared\", \"submitted\", \"cancelled\"]).optional(),\n afterId: Id.optional(),\n limit: z.number().int().min(1).max(100).default(25),\n })\n .strict();\nexport const TrainingPreparationPageSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.trainingPreparationPage.v1\"),\n teamId: Id,\n items: z.array(TrainingPreparationReceiptSchema).max(100),\n nextCursor: Id.nullable(),\n })\n .strict();\nexport type TrainingPreparationRequest = z.infer<typeof TrainingPreparationRequestSchema>;\nexport type TrainingPreparationPlan = z.infer<typeof TrainingPreparationPlanSchema>;\nexport type TrainingPreparationReceipt = z.infer<typeof TrainingPreparationReceiptSchema>;\nexport type TrainingPreparationControl = z.infer<typeof TrainingPreparationControlSchema>;\nexport type TrainingPreparationListQuery = z.input<typeof TrainingPreparationListQuerySchema>;\nexport type TrainingPreparationPage = z.infer<typeof TrainingPreparationPageSchema>;\n\nexport async function parseAndVerifyTrainingPreparationReceipt(value: unknown) {\n const receipt = TrainingPreparationReceiptSchema.parse(value);\n const { contentHash, ...plan } = receipt.plan;\n if (\n (await canonicalSha256(plan)) !== contentHash ||\n (await canonicalSha256(plan.request)) !== plan.requestHash ||\n plan.source.modelProject.id !== plan.request.configuration.id ||\n (await canonicalSha256(plan.source.origin ?? null)) !==\n (await canonicalSha256(plan.request.origin ?? null))\n ) {\n throw new OpenPondProtocolError(\n \"training_preparation_mismatch\",\n \"The prepared training inputs changed.\",\n );\n }\n return receipt;\n}\n\nexport function createTrainingPreparationClient(\n request: (path: string, init?: RequestInit) => Promise<unknown>,\n) {\n async function read(value: unknown, teamId: string, id?: string) {\n const receipt = await parseAndVerifyTrainingPreparationReceipt(value);\n if (receipt.plan.request.teamId !== teamId || (id && receipt.plan.id !== id))\n throw new OpenPondProtocolError(\n \"training_preparation_scope_mismatch\",\n \"The training preparation belongs to a different workspace or request.\",\n );\n return receipt;\n }\n return {\n /** Discover the authenticated user's retained preparations without creating jobs. */\n async listPreparations(teamId: string, input: TrainingPreparationListQuery = {}) {\n const scope = Id.parse(teamId);\n const query = TrainingPreparationListQuerySchema.parse(input);\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) params.set(key, String(value));\n const page = TrainingPreparationPageSchema.parse(\n await request(`/v1/training/preparations?${params}`),\n );\n if (\n page.teamId !== scope ||\n page.items.length > query.limit ||\n new Set(page.items.map((item) => item.plan.id)).size !== page.items.length ||\n (page.nextCursor !== null &&\n (page.nextCursor !== page.items.at(-1)?.plan.id || page.nextCursor === query.afterId))\n ) {\n throw new OpenPondProtocolError(\n \"training_preparation_page_mismatch\",\n \"The preparation page does not match its workspace or cursor.\",\n );\n }\n const items = await Promise.all(\n page.items.map(async (item) => {\n const receipt = await read(item, scope);\n if (\n (query.projectId && receipt.plan.request.projectId !== query.projectId) ||\n (query.state && receipt.state !== query.state)\n ) {\n throw new OpenPondProtocolError(\n \"training_preparation_page_mismatch\",\n \"A preparation does not match the requested Project or state.\",\n );\n }\n return receipt;\n }),\n );\n return { ...page, items };\n },\n async prepareRun(input: TrainingPreparationRequest) {\n const parsed = TrainingPreparationRequestSchema.parse(input);\n const receipt = await read(\n await request(\"/v1/training/preparations\", {\n method: \"POST\",\n body: JSON.stringify(parsed),\n }),\n parsed.teamId,\n );\n if (receipt.plan.requestHash !== (await canonicalSha256(parsed)))\n throw new OpenPondProtocolError(\n \"training_preparation_request_mismatch\",\n \"The preparation does not match the requested run.\",\n );\n return receipt;\n },\n async getPreparation(teamId: string, id: string) {\n return read(\n await request(`/v1/training/preparations/${encodeURIComponent(Id.parse(id))}`),\n Id.parse(teamId),\n id,\n );\n },\n async startPreparation(id: string, input: TrainingPreparationControl) {\n const parsed = TrainingPreparationControlSchema.parse(input);\n const receipt = await read(\n await request(`/v1/training/preparations/${encodeURIComponent(Id.parse(id))}/start`, {\n method: \"POST\",\n body: JSON.stringify(parsed),\n }),\n parsed.teamId,\n id,\n );\n if (receipt.plan.contentHash !== parsed.planHash || receipt.state !== \"submitted\")\n throw new OpenPondProtocolError(\n \"training_preparation_start_mismatch\",\n \"The submitted run does not match the approved preparation.\",\n );\n return receipt;\n },\n async cancelPreparation(id: string, input: TrainingPreparationControl) {\n const parsed = TrainingPreparationControlSchema.parse(input);\n const receipt = await read(\n await request(`/v1/training/preparations/${encodeURIComponent(Id.parse(id))}/cancel`, {\n method: \"POST\",\n body: JSON.stringify(parsed),\n }),\n parsed.teamId,\n id,\n );\n if (receipt.plan.contentHash !== parsed.planHash || receipt.state !== \"cancelled\")\n throw new OpenPondProtocolError(\n \"training_preparation_cancel_mismatch\",\n \"The preparation cancellation could not be verified.\",\n );\n return receipt;\n },\n };\n}\n","import { z } from \"zod\";\nimport { canonicalSha256, OpenPondProtocolError } from \"./protocol.js\";\nimport { ModelProjectVersionedRefSchema } from \"./model-projects.js\";\nimport { TrainingJobSubmissionSchema, parseAndVerifyTrainingJobSubmission } from \"./training.js\";\nimport { TrainingGpuSelectionSchema, TrainingEstimateReviewSchema } from \"./training-compute-selection.js\";\nexport { TrainingGpuSelectionSchema, TrainingEstimateReviewSchema,\n type TrainingGpuSelection, type TrainingEstimateReview } from \"./training-compute-selection.js\";\n\nconst Id = z.string().trim().min(1).max(191);\nconst Hash = z.string().regex(/^[a-f0-9]{64}$/);\nconst Timestamp = z.string().datetime({ offset: true });\nconst NonNegative = z.number().finite().nonnegative();\n\n/** Hardware choice and allocation sharing are independent decisions. An exact\n * offering is never silently replaced with a different GPU when stock changes. */\nexport const TrainingEstimateSourceSchema = z.discriminatedUnion(\"kind\", [\n z.object({ kind: z.literal(\"preparation\"), id: Id, planHash: Hash, expectedRevision: z.number().int().positive() }).strict(),\n z.object({\n kind: z.literal(\"configuration\"), id: Id,\n expectedRevision: z.number().int().positive(), expectedEtag: Hash,\n batch: ModelProjectVersionedRefSchema.nullable().default(null),\n }).strict(),\n z.object({ kind: z.literal(\"submission\"), submission: z.lazy(() => TrainingJobSubmissionSchema) }).strict(),\n]);\n\n/** An estimate has no approval flag or required spend cap. Existing prepared\n * submissions may carry their original cap, which this operation cannot raise. */\nexport const TrainingEstimateRequestSchema = z.object({\n schemaVersion: z.literal(\"openpond.trainingEstimateRequest.v1\"),\n teamId: Id,\n source: TrainingEstimateSourceSchema,\n gpuSelection: TrainingGpuSelectionSchema.optional(),\n}).strict();\n\nconst PlanningRange = z.object({ low: NonNegative, high: NonNegative }).strict()\n .refine(value => value.high >= value.low, \"Planning range must be ordered\");\n\nexport const TrainingEstimateComponentSchema = z.object({\n phase: z.enum([\n \"startup\", \"baseline_evaluation\", \"rollouts\", \"optimization\", \"checkpointing\",\n \"backbone_materialization\", \"final_evaluation\", \"publication\", \"cleanup\", \"retention\",\n ]),\n resource: z.enum([\"gpu\", \"cpu\", \"judge\", \"storage\", \"network\"]),\n expectedUsd: NonNegative.nullable(),\n expectedSeconds: NonNegative.nullable(),\n planningRangeUsd: PlanningRange.nullable(),\n evidence: z.enum([\"measured\", \"configured_rate\", \"unavailable\"]),\n reason: z.string().trim().min(1).max(1000).nullable(),\n}).strict();\n\n/** A signed review binds the exact workload/price identity. It reserves neither\n * capacity nor money, and submission still checks funding and current pricing. */\nexport function trainingEstimateSourceIdentity(source: z.infer<typeof TrainingEstimateSourceSchema>) {\n if (source.kind === \"submission\") return {\n kind: source.kind, id: source.submission.idempotencyKey, contentHash: source.submission.contentHash, revision: null,\n };\n if (source.kind === \"preparation\") return {\n kind: source.kind, id: source.id, contentHash: source.planHash, revision: source.expectedRevision,\n };\n return { kind: source.kind, id: source.id, contentHash: source.expectedEtag, revision: source.expectedRevision };\n}\n\nexport const TrainingEstimateSchema = z.object({\n schemaVersion: z.literal(\"openpond.trainingEstimate.v1\"),\n id: Id,\n teamId: Id,\n requestHash: Hash,\n inputHash: Hash,\n source: z.object({\n kind: z.enum([\"preparation\", \"configuration\", \"submission\"]), id: Id,\n contentHash: Hash, revision: z.number().int().positive().nullable(),\n }).strict(),\n status: z.enum([\"available\", \"partial\", \"insufficient_evidence\"]),\n currency: z.literal(\"USD\"),\n createdAt: Timestamp,\n expiresAt: Timestamp,\n estimatorVersion: Id,\n runtimeVersion: Id,\n pricing: z.object({ version: Id, quoteExpiresAt: Timestamp.nullable() }).strict(),\n gpu: z.object({\n requested: TrainingGpuSelectionSchema,\n resolved: z.object({ availabilityId: Id, gpuType: z.string().min(1).max(256), gpuCount: z.union([z.literal(1), z.literal(2)]) }).strict().nullable(),\n customerHourlyUsd: NonNegative.nullable(),\n availability: z.enum([\"available\", \"limited\", \"unavailable\", \"unknown\"]),\n }).strict(),\n configuration: z.object({\n modelId: Id,\n modelRevision: z.string().min(1).max(256),\n method: Id,\n loraRank: z.number().int().positive().nullable(),\n adapterMode: z.enum([\"residual_append\", \"shared\", \"sequential_merge\"]).nullable(),\n groups: z.number().int().nonnegative().nullable(),\n rolloutConcurrency: z.number().int().positive().nullable(),\n maxOutputTokens: z.number().int().positive().nullable(),\n trainingRows: z.number().int().nonnegative().nullable(),\n evaluationRows: z.number().int().nonnegative().nullable(),\n retentionDays: z.number().int().positive().nullable(),\n approvedMaximumUsd: NonNegative.nullable(),\n }).strict(),\n cost: z.object({\n expectedUsd: NonNegative.nullable(),\n planningRangeUsd: PlanningRange.nullable(),\n knownMinimumUsd: NonNegative,\n recommendedMaximumUsd: NonNegative.nullable(),\n minimumCleanupReserveUsd: NonNegative.nullable(),\n components: z.array(TrainingEstimateComponentSchema).max(50),\n }).strict(),\n executionSeconds: z.object({ expected: NonNegative.nullable(), planningRange: PlanningRange.nullable() }).strict(),\n queueWaitSeconds: z.object({ expected: NonNegative, planningRange: PlanningRange.nullable() }).strict().nullable(),\n calibration: z.object({\n version: Id,\n cohortHash: Hash,\n completedSamples: z.number().int().nonnegative(),\n partialSamples: z.number().int().nonnegative(),\n scope: z.enum([\"workspace\", \"authorized_aggregate\"]),\n }).strict(),\n assumptions: z.array(z.string().trim().min(1).max(1000)).max(50),\n unknowns: z.array(z.string().trim().min(1).max(1000)).max(50),\n review: TrainingEstimateReviewSchema,\n}).strict().superRefine((estimate, context) => {\n if (estimate.review.estimateId !== estimate.id || estimate.review.inputHash !== estimate.inputHash ||\n estimate.review.requestHash !== estimate.requestHash || estimate.review.pricingVersion !== estimate.pricing.version ||\n estimate.review.expiresAt !== estimate.expiresAt) {\n context.addIssue({ code: \"custom\", path: [\"review\"], message: \"Estimate review identity differs from the estimate\" });\n }\n if (Date.parse(estimate.expiresAt) <= Date.parse(estimate.createdAt)) {\n context.addIssue({ code: \"custom\", path: [\"expiresAt\"], message: \"Estimate must expire after its creation\" });\n }\n if (estimate.status === \"available\" &&\n (estimate.cost.expectedUsd === null || estimate.executionSeconds.expected === null || estimate.unknowns.length > 0)) {\n context.addIssue({ code: \"custom\", path: [\"status\"], message: \"An available estimate requires complete cost and duration coverage\" });\n }\n if (estimate.gpu.requested.mode === \"manual\" && estimate.gpu.resolved &&\n (estimate.gpu.requested.availabilityId !== estimate.gpu.resolved.availabilityId ||\n estimate.gpu.requested.gpuType !== estimate.gpu.resolved.gpuType)) {\n context.addIssue({ code: \"custom\", path: [\"gpu\"], message: \"An explicit GPU offering cannot be substituted\" });\n }\n if (estimate.gpu.resolved && estimate.gpu.resolved.gpuCount !== (estimate.gpu.requested.gpuCount ?? 1)) {\n context.addIssue({ code: \"custom\", path: [\"gpu\", \"resolved\", \"gpuCount\"], message: \"The resolved GPU count must match the requested count\" });\n }\n});\n\nexport type TrainingEstimateRequest = z.infer<typeof TrainingEstimateRequestSchema>;\nexport type TrainingEstimate = z.infer<typeof TrainingEstimateSchema>;\n\nexport function createTrainingEstimateClient(request: (path: string, init?: RequestInit) => Promise<unknown>) {\n return {\n async estimate(input: TrainingEstimateRequest): Promise<TrainingEstimate> {\n const parsed = TrainingEstimateRequestSchema.parse(input);\n if (parsed.source.kind === \"submission\") await parseAndVerifyTrainingJobSubmission(parsed.source.submission);\n const result = TrainingEstimateSchema.parse(await request(\"/v1/training/estimates\", {\n method: \"POST\", body: JSON.stringify(parsed),\n }));\n if (result.teamId !== parsed.teamId || result.requestHash !== await canonicalSha256(parsed) ||\n await canonicalSha256(result.source) !== await canonicalSha256(trainingEstimateSourceIdentity(parsed.source)) ||\n (parsed.gpuSelection && await canonicalSha256(result.gpu.requested) !== await canonicalSha256(parsed.gpuSelection))) {\n throw new OpenPondProtocolError(\"training_estimate_scope_mismatch\", \"The estimate does not match the requested workspace and exact configuration.\");\n }\n return result;\n },\n };\n}\n","import { z } from \"zod\";\n\nconst Timestamp = z.string().datetime({ offset: true });\n\n/** Customer status deliberately omits provider/internal capacity reasons. A\n * stable ticket identifies the request; current fair-queue position may change. */\nexport const TrainingQueueStatusSchema = z.object({\n ticketId: z.string().trim().min(1).max(191),\n ticketNumber: z.number().int().positive().max(Number.MAX_SAFE_INTEGER),\n label: z.literal(\"Waiting for resources\"),\n position: z.number().int().positive().nullable(),\n positionScope: z.literal(\"compatible_fair_queue\"),\n enqueuedAt: Timestamp,\n asOf: Timestamp,\n estimate: z.object({\n revision: z.number().int().nonnegative(),\n estimatedStartAt: Timestamp,\n expiresAt: Timestamp,\n evidence: z.enum([\"observed_capacity\", \"measured_bootstrap\", \"scheduled_release\"]),\n }).strict().nullable(),\n}).strict().superRefine((value, context) => {\n if (value.estimate && Date.parse(value.estimate.expiresAt) <= Date.parse(value.asOf))\n context.addIssue({ code: \"custom\", path: [\"estimate\"], message: \"An expired queue forecast must be returned as unavailable\" });\n});\n\nexport type TrainingQueueStatus = z.infer<typeof TrainingQueueStatusSchema>;\n","import { z } from \"zod\";\nimport { ImmutableReleaseRefSchema, validateHarnessSourcePackage, validateHarnessPolicySourcePackage, type HarnessPolicySourcePackage, type HarnessSourcePackage, type ImmutableReleaseRef } from \"@openpond/harness\";\nimport { assertCanonicalPayloadSize, TRAINING_INPUT_ARTIFACT_MAX_BYTES } from \"./protocol.js\";\n\nexport const TrainingHarnessSourcePublicationSchema = z.object({\n schemaVersion: z.literal(\"openpond.trainingHarnessSourcePublication.v1\"),\n harnessRelease: ImmutableReleaseRefSchema,\n sourcePackageHash: z.string().regex(/^[a-f0-9]{64}$/),\n sizeBytes: z.number().int().positive().max(TRAINING_INPUT_ARTIFACT_MAX_BYTES),\n}).strict();\n\n/** Publication stores immutable source only; it never starts training. */\nexport function createTrainingHarnessSourceClient(request: (path: string, init?: RequestInit, responseLimit?: number) => Promise<unknown>) {\n const route = (reference: ImmutableReleaseRef) => {\n const ref = ImmutableReleaseRefSchema.parse(reference);\n return `/v1/training/harness-sources/${encodeURIComponent(ref.id)}/${ref.contentHash}`;\n };\n return {\n async publishHarnessSource(value: HarnessSourcePackage | HarnessPolicySourcePackage) {\n assertCanonicalPayloadSize(value, TRAINING_INPUT_ARTIFACT_MAX_BYTES, \"Training Harness source\");\n const source = validateSource(value);\n const portability = source.agentSnapshot.portability;\n if (!portability.portable || portability.blockers.length || portability.localOnlyAssetRefs.length || portability.hostPrivateAssetRefs.length || (source.schemaVersion === \"openpond.harnessSourcePackage.v1\" && source.harnessRelease.files.some(file => file.visibility !== \"policy\"))) {\n throw new Error(\"Hosted training Harness publication requires portable, policy-visible source.\");\n }\n const result = TrainingHarnessSourcePublicationSchema.parse(await request(route({ id: source.harnessRelease.id, contentHash: source.harnessRelease.contentHash }), { method: \"PUT\", body: JSON.stringify(source) }));\n if (result.harnessRelease.id !== source.harnessRelease.id || result.harnessRelease.contentHash !== source.harnessRelease.contentHash || result.sourcePackageHash !== source.contentHash) {\n throw new Error(\"Published Harness source differs from the selected immutable package.\");\n }\n return result;\n },\n async getHarnessSource(reference: ImmutableReleaseRef) {\n const value = await request(route(reference), undefined, TRAINING_INPUT_ARTIFACT_MAX_BYTES);\n assertCanonicalPayloadSize(value, TRAINING_INPUT_ARTIFACT_MAX_BYTES, \"Training Harness source\");\n return validateSource(value, reference);\n },\n };\n}\n\nfunction validateSource(value: unknown, reference?: ImmutableReleaseRef) {\n return typeof value === \"object\" && value !== null\n && Reflect.get(value, \"schemaVersion\") === \"openpond.harnessPolicySourcePackage.v1\"\n ? validateHarnessPolicySourcePackage(value, reference)\n : validateHarnessSourcePackage(value, reference);\n}\n","import { z } from \"zod\";\nimport { ModelProjectImmutableRefSchema } from \"./model-projects.js\";\nimport {\n OpenPondProtocolError,\n assertCanonicalPayloadSize,\n canonicalSha256,\n} from \"./protocol.js\";\n\nconst IdSchema = /* @__PURE__ */ (() => z.string().trim().min(1).max(500))();\nconst HashSchema = /* @__PURE__ */ (() => z.string().regex(/^[a-f0-9]{64}$/))();\n\n/** A reviewed candidate decision never activates serving or alters training evidence. */\nexport const TrainingCandidateDecisionRequestSchema = /* @__PURE__ */ (() => z.object({\n schemaVersion: z.literal(\"openpond.trainingCandidateDecisionRequest.v1\"),\n teamId: IdSchema,\n jobId: IdSchema,\n artifact: ModelProjectImmutableRefSchema,\n evaluation: ModelProjectImmutableRefSchema,\n executionReceipt: ModelProjectImmutableRefSchema,\n decision: z.enum([\"accepted\", \"rejected\"]),\n reason: z.string().trim().min(1).max(5_000),\n idempotencyKey: IdSchema,\n expectedDecision: ModelProjectImmutableRefSchema.nullable(),\n}).strict())();\n\n/** Append-only, authenticated hosted record. Hash verification is not a signature. */\nexport const TrainingCandidateDecisionSchema = /* @__PURE__ */ (() => z.object({\n schemaVersion: z.literal(\"openpond.trainingCandidateDecision.v1\"),\n id: IdSchema,\n request: TrainingCandidateDecisionRequestSchema,\n revision: z.number().int().positive(),\n actor: z.object({ userId: IdSchema, kind: z.enum([\"user\", \"api_key\", \"agent_delegate\"]), id: IdSchema }).strict(),\n decidedAt: z.string().datetime({ offset: true }),\n contentHash: HashSchema,\n}).strict().superRefine((value, context) => {\n if ((value.revision === 1) !== (value.request.expectedDecision === null)) {\n context.addIssue({ code: \"custom\", path: [\"revision\"], message: \"A first decision has no predecessor; later decisions must reference the prior decision.\" });\n }\n if (value.request.expectedDecision?.id === value.id) {\n context.addIssue({ code: \"custom\", path: [\"request\", \"expectedDecision\"], message: \"A decision cannot supersede itself.\" });\n }\n}))();\n\nexport type TrainingCandidateDecisionRequest = z.infer<typeof TrainingCandidateDecisionRequestSchema>;\nexport type TrainingCandidateDecision = z.infer<typeof TrainingCandidateDecisionSchema>;\nexport type TrainingCandidateDecisionTarget = Pick<TrainingCandidateDecisionRequest, \"teamId\" | \"jobId\" | \"artifact\">;\n\nexport async function trainingCandidateDecisionHash(\n value: Omit<TrainingCandidateDecision, \"contentHash\"> | TrainingCandidateDecision,\n): Promise<string> {\n const { contentHash: _contentHash, ...content } = value as TrainingCandidateDecision;\n return canonicalSha256(content);\n}\n\nexport async function parseAndVerifyTrainingCandidateDecision(\n value: unknown,\n expected: TrainingCandidateDecisionTarget & { request?: TrainingCandidateDecisionRequest },\n): Promise<TrainingCandidateDecision> {\n assertCanonicalPayloadSize(value, 32_768, \"Training candidate decision\");\n const parsed = TrainingCandidateDecisionSchema.parse(value);\n if (parsed.contentHash !== await trainingCandidateDecisionHash(parsed)) {\n throw new OpenPondProtocolError(\"content_hash_mismatch\", \"Training candidate decision content hash does not match.\");\n }\n if (parsed.request.teamId !== expected.teamId || parsed.request.jobId !== expected.jobId\n || parsed.request.artifact.id !== expected.artifact.id\n || parsed.request.artifact.contentHash !== expected.artifact.contentHash) {\n throw new OpenPondProtocolError(\"candidate_decision_identity_mismatch\", \"Training candidate decision belongs to a different team, Job or artifact.\");\n }\n if (expected.request && await canonicalSha256(parsed.request) !== await canonicalSha256(TrainingCandidateDecisionRequestSchema.parse(expected.request))) {\n throw new OpenPondProtocolError(\"candidate_decision_request_mismatch\", \"Training candidate decision does not match the submitted review.\");\n }\n return parsed;\n}\n\nexport function createTrainingCandidateDecisionClient(\n request: (path: string, init?: RequestInit) => Promise<unknown>,\n) {\n function route(target: TrainingCandidateDecisionTarget) {\n return `/v1/training/jobs/${encodeURIComponent(IdSchema.parse(target.jobId))}/candidates/${encodeURIComponent(ModelProjectImmutableRefSchema.parse(target.artifact).id)}/decision`;\n }\n return {\n async candidateDecision(\n target: TrainingCandidateDecisionTarget,\n options: { decision?: { id: string; contentHash: string } } = {},\n ): Promise<TrainingCandidateDecision | null> {\n IdSchema.parse(target.teamId);\n const reference = options.decision ? ModelProjectImmutableRefSchema.parse(options.decision) : undefined;\n const query = reference ? `?decisionId=${encodeURIComponent(reference.id)}` : \"\";\n const response = z.object({ decision: z.unknown().nullable() }).strict().parse(await request(`${route(target)}${query}`));\n if (response.decision === null && !reference) return null;\n const decision = await parseAndVerifyTrainingCandidateDecision(response.decision, target);\n if (reference && (decision.id !== reference.id || decision.contentHash !== reference.contentHash)) {\n throw new OpenPondProtocolError(\"candidate_decision_identity_mismatch\", \"Training candidate decision does not match the requested history entry.\");\n }\n return decision;\n },\n async recordCandidateDecision(input: TrainingCandidateDecisionRequest): Promise<TrainingCandidateDecision> {\n const parsed = TrainingCandidateDecisionRequestSchema.parse(input);\n const response = await request(route(parsed), { method: \"POST\", body: JSON.stringify(parsed) });\n return parseAndVerifyTrainingCandidateDecision(response, { ...parsed, request: parsed });\n },\n };\n}\n","import { z } from \"zod\";\nimport { ModelProjectImmutableRefSchema, ModelProjectVersionedRefSchema } from \"./model-projects.js\";\nimport {\n OpenPondProtocolError,\n TRAINING_API_RESPONSE_MAX_BYTES,\n assertCanonicalPayloadSize,\n canonicalSha256,\n} from \"./protocol.js\";\n\nconst IdSchema = /* @__PURE__ */ (() => z.string().trim().min(1).max(500))();\nconst HashSchema = /* @__PURE__ */ (() => z.string().regex(/^[a-f0-9]{64}$/))();\n\n/** Reviewer-facing evidence only: never a worker response or training sample. */\nexport const TrainingEvaluationTaskResultSchema = /* @__PURE__ */ (() => z.object({\n taskId: IdSchema,\n taskSha256: HashSchema,\n resultSha256: HashSchema,\n input: z.object({\n instruction: z.string().max(1_000_000),\n context: z.record(z.string(), z.unknown()),\n }).strict(),\n output: z.string().max(1_000_000),\n outputSha256: HashSchema,\n score: z.number().finite().min(0).max(1),\n evidence: z.object({\n kind: z.enum([\"worker_command\", \"hosted_trace\", \"local_trace\"]),\n id: IdSchema,\n }).strict(),\n}).strict())();\n\n/** Supplements an existing evaluation; does not replace its terminal receipt. */\nexport const TrainingEvaluationTaskPageSchema = /* @__PURE__ */ (() => z.object({\n schemaVersion: z.literal(\"openpond.trainingEvaluationTaskPage.v1\"),\n jobId: IdSchema,\n teamId: IdSchema,\n evaluation: ModelProjectImmutableRefSchema,\n kind: z.enum([\"baseline\", \"candidate\"]),\n policyVersion: z.number().int().nonnegative(),\n taskset: ModelProjectVersionedRefSchema,\n panelSha256: HashSchema,\n offset: z.number().int().nonnegative(),\n total: z.number().int().min(1).max(10_000),\n tasks: z.array(TrainingEvaluationTaskResultSchema).min(1).max(100),\n nextCursor: z.string().regex(/^[1-9]\\d*$/).nullable(),\n contentHash: HashSchema,\n}).strict().superRefine((page, context) => {\n const end = page.offset + page.tasks.length;\n const expectedCursor = end < page.total ? String(end) : null;\n if (end > page.total || page.nextCursor !== expectedCursor) {\n context.addIssue({ code: \"custom\", path: [\"nextCursor\"], message: \"Evaluation pagination must cover consecutive task positions.\" });\n }\n if (new Set(page.tasks.map((task) => task.taskId)).size !== page.tasks.length) {\n context.addIssue({ code: \"custom\", path: [\"tasks\"], message: \"Evaluation task identities must be unique.\" });\n }\n}))();\n\nexport type TrainingEvaluationTaskResult = z.infer<typeof TrainingEvaluationTaskResultSchema>;\nexport type TrainingEvaluationTaskPage = z.infer<typeof TrainingEvaluationTaskPageSchema>;\n\nexport async function trainingEvaluationTaskPageHash(\n value: Omit<TrainingEvaluationTaskPage, \"contentHash\"> | TrainingEvaluationTaskPage,\n): Promise<string> {\n const { contentHash: _contentHash, ...content } = value as TrainingEvaluationTaskPage;\n return canonicalSha256(content);\n}\n\nexport async function parseAndVerifyTrainingEvaluationTaskPage(\n value: unknown,\n expected: {\n jobId: string;\n evaluation: { id: string; contentHash: string };\n offset?: number;\n teamId?: string;\n },\n): Promise<TrainingEvaluationTaskPage> {\n assertCanonicalPayloadSize(value, TRAINING_API_RESPONSE_MAX_BYTES, \"Training evaluation task page\");\n const page = TrainingEvaluationTaskPageSchema.parse(value);\n const reference = ModelProjectImmutableRefSchema.parse(expected.evaluation);\n if (page.jobId !== IdSchema.parse(expected.jobId)\n || page.evaluation.id !== reference.id\n || page.evaluation.contentHash !== reference.contentHash\n || page.offset !== (expected.offset ?? 0)\n || (expected.teamId !== undefined && page.teamId !== IdSchema.parse(expected.teamId))) {\n throw new OpenPondProtocolError(\"evaluation_page_identity_mismatch\", \"Evaluation results differ from the requested Job, evaluation, or page.\");\n }\n if (await trainingEvaluationTaskPageHash(page) !== page.contentHash) {\n throw new OpenPondProtocolError(\"evaluation_page_hash_mismatch\", \"Evaluation task page content hash did not match.\");\n }\n for (const task of page.tasks) {\n if (await canonicalSha256(task.output) !== task.outputSha256) {\n throw new OpenPondProtocolError(\"evaluation_output_hash_mismatch\", \"A retained evaluation output hash did not match.\");\n }\n }\n return page;\n}\n","import { z } from \"zod\";\nimport { compileBoundGraders, RewardBindingSchema, RewardReleaseSchema } from \"@openpond/evals/rewards\";\nimport { canonicalSha256 } from \"./protocol.js\";\n\nconst GradersSchema = z.array(z.object({ id: z.string().trim().min(1) }).catchall(z.unknown())).min(1).max(1_000);\nconst RewardExecutionSchema = z.object({\n binding: RewardBindingSchema,\n rewards: z.array(RewardReleaseSchema).min(1).max(100),\n}).strict();\n\n/**\n * The grader reference identifies the entire executed set, including order and\n * configuration. A bound plan additionally identifies its immutable composer,\n * whose sources pin roles, normalization, gates and required-score semantics.\n * Callers must obtain these inputs from their verified immutable bundle.\n */\nexport async function deterministicTrainingRewardSource(input: {\n graders: unknown;\n rewardExecution?: unknown;\n}) {\n const execution = input.rewardExecution ? RewardExecutionSchema.parse(input.rewardExecution) : null;\n const graders = GradersSchema.parse(execution\n ? compileBoundGraders(execution.binding, execution.rewards)\n : input.graders);\n if (new Set(graders.map(grader => grader.id)).size !== graders.length) {\n throw new Error(\"Training grader identities must be unique.\");\n }\n const hash = await canonicalSha256({ schemaVersion: \"openpond.trainingGraderSet.v1\", graders });\n return {\n kind: \"deterministic\" as const,\n grader: { id: `training-graders-${hash.slice(0, 32)}`, contentHash: hash },\n composer: execution ? { id: execution.binding.id, contentHash: execution.binding.contentHash } : null,\n };\n}\n","import { z } from \"zod\";\nimport { ModelProjectVersionedRefSchema } from \"./model-projects.js\";\nimport { canonicalSha256 } from \"./protocol.js\";\n\nexport const TRAINING_EVALUATION_SOURCE_PATH = \"evaluation-source.json\";\n\nconst TaskIdentitySchema = z.object({\n id: z.string().trim().min(1),\n clusterKey: z.string().trim().min(1),\n split: z.enum([\"train\", \"validation\", \"frozen_eval\"]),\n}).passthrough();\n\n/** Evaluator-only payload. The enclosing resolved bundle pins every byte. */\nexport const TrainingEvaluationSourceSchema = z.object({\n schemaVersion: z.literal(\"openpond.trainingEvaluationSource.v1\"),\n taskset: ModelProjectVersionedRefSchema,\n tasks: z.array(TaskIdentitySchema).min(1).max(10_000),\n assets: z.array(z.object({\n path: z.string().trim().min(1).max(2_000),\n sha256: z.string().regex(/^[a-f0-9]{64}$/),\n sizeBytes: z.number().int().nonnegative(),\n encoding: z.literal(\"base64\"),\n content: z.string().max(32 * 1024 * 1024),\n }).strict()).max(10_000),\n}).strict().superRefine((source, context) => {\n const ids = new Set<string>();\n source.tasks.forEach((task, index) => {\n if (task.split === \"train\") context.addIssue({ code: \"custom\", path: [\"tasks\", index, \"split\"], message: \"Evaluation sources require held-out tasks.\" });\n if (ids.has(task.id)) context.addIssue({ code: \"custom\", path: [\"tasks\", index, \"id\"], message: \"Evaluation task identities must be unique.\" });\n ids.add(task.id);\n });\n});\n\nexport type TrainingEvaluationSource = z.infer<typeof TrainingEvaluationSourceSchema>;\n\nexport function assertTrainingEvaluationIsolation(trainingTasks: unknown, evaluationTasks: unknown): void {\n const training = z.array(TaskIdentitySchema).min(1).max(10_000).parse(trainingTasks);\n const evaluation = z.array(TaskIdentitySchema).min(1).max(10_000).parse(evaluationTasks);\n const trainIds = new Set<string>();\n const trainFamilies = new Set<string>();\n for (const task of training) {\n if (task.split !== \"train\") throw new Error(\"The training population contains a held-out task.\");\n if (trainIds.has(task.id)) throw new Error(\"Training task identities must be unique.\");\n trainIds.add(task.id);\n trainFamilies.add(task.clusterKey);\n }\n const evaluationIds = new Set<string>();\n for (const task of evaluation) {\n if (task.split === \"train\") throw new Error(\"The evaluation population contains a training task.\");\n if (evaluationIds.has(task.id)) throw new Error(\"Evaluation task identities must be unique.\");\n if (trainIds.has(task.id) || trainFamilies.has(task.clusterKey)) {\n throw new Error(\"Training and evaluation tasks or families overlap.\");\n }\n evaluationIds.add(task.id);\n }\n}\n\nexport async function trainingEvaluationSourceRef(input: unknown) {\n const source = TrainingEvaluationSourceSchema.parse(input);\n const hash = await canonicalSha256(source);\n return { taskset: source.taskset, dataset: { id: `training-evaluation-${hash.slice(0, 32)}`, contentHash: hash } };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,SAAS;AAElB,IAAM,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAC3C,IAAM,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAKtC,IAAM,kBAAkB,EAAE,OAAO;AAAA,EACtC,eAAe,EAAE,QAAQ,uBAAuB;AAAA,EAChD,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACvB,kBAAkB,EAAE,QAAQ,MAAM;AAAA,EAClC,WAAW,EAAE,OAAO;AAAA,IAClB,IAAI;AAAA,IACJ,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,IAC1C,mBAAmB,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,IACnD,kBAAkB;AAAA,EACpB,CAAC;AAAA,EACD,SAAS,EAAE,OAAO;AAAA,IAChB,YAAY,EAAE,QAAQ,OAAO;AAAA,IAC7B,iBAAiB,EAAE,KAAK,CAAC,cAAc,aAAa,CAAC;AAAA,IACrD,gBAAgB,EAAE,QAAQ;AAAA,IAC1B,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,KAAM;AAAA,IACzD,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAO,EAAE,QAAQ,GAAK;AAAA,IACnE,mBAAmB,EAAE,QAAQ,mBAAmB,EAAE,QAAQ,mBAAmB;AAAA,IAC7E,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;AAAA,EAC5C,CAAC;AAAA,EACD,MAAM,EAAE,OAAO;AAAA,IACb,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG;AAAA,IACzC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,IAAK;AAAA,IACtC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,IAChC,eAAe,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC3C,CAAC;AAAA,EACD,WAAW,EAAE,OAAO;AAAA,IAClB,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,IAClC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,GAAG;AAAA,IACrC,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAS;AAAA,IACnD,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAM;AAAA,IACjD,2BAA2B,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAM;AAAA,IACjE,MAAM,EAAE,OAAO,EAAE,IAAI;AAAA,EACvB,CAAC;AAAA,EACD,gBAAgB,EAAE,OAAO;AAAA,IACvB,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG;AAAA,IAC/C,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,IACvC,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACxC,CAAC;AACH,CAAC;AAMM,IAAM,yBAAyB,gBAAgB,WAAW;AAAA,EAC/D,SAAS,gBAAgB,MAAM,QAAQ,WAAW;AAAA,IAChD,gBAAgB,EAAE,QAAQ,IAAI;AAAA,IAC9B,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI;AAAA,IACnD,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAI,EAAE,QAAQ,GAAI;AAAA,EAC7D,CAAC;AAAA,EACD,MAAM,gBAAgB,MAAM,KAAK,WAAW;AAAA,IAC1C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,IACpC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC;AAAA,IAC/B,eAAe,EACZ,MAAM,EAAE,KAAK,CAAC,UAAU,UAAU,UAAU,UAAU,aAAa,WAAW,WAAW,CAAC,CAAC,EAC3F,IAAI,CAAC,EACL,IAAI,CAAC;AAAA,EACV,CAAC;AAAA,EACD,WAAW,gBAAgB,MAAM,UAAU,WAAW;AAAA,IACpD,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,IAAK;AAAA,IAC7C,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;AAAA,IACpC,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,IACzC,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,IACzC,2BAA2B,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,IACzD,MAAM,EACH,OAAO,EACP,IAAI,EACJ,IAAI,EAAE,KAAK,GAAG,EACd,IAAI,KAAK,KAAK,CAAC;AAAA,EACpB,CAAC;AAAA,EACD,gBAAgB,gBAAgB,MAAM,eAAe,WAAW;AAAA,IAC9D,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAI,EAAE,IAAI,KAAU;AAAA,EACvD,CAAC;AACH,CAAC,EAAE,YAAY,CAAC,QAAQ,YAAY;AAClC,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,4BAA4B;AAC5E,YAAQ,SAAS;AAAA,MACf,MAAM;AAAA,MACN,MAAM,CAAC,WAAW;AAAA,MAClB,SAAS;AAAA,IACX,CAAC;AACH,MAAI,IAAI,IAAI,OAAO,KAAK,aAAa,EAAE,SAAS,OAAO,KAAK,cAAc;AACxE,YAAQ,SAAS;AAAA,MACf,MAAM;AAAA,MACN,MAAM,CAAC,QAAQ,eAAe;AAAA,MAC9B,SAAS;AAAA,IACX,CAAC;AACL,CAAC;;;AC9FD,SAAS,KAAAA,UAAS;AAClB,SAAS,+BAA+B,qCAAqC;AAI7E,IAAMC,MAAKC,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AACpC,IAAM,yCAAyC,+BAA+B,OAAO,EAAE,UAAUA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO;AACvI,IAAM,uCAAuC,uCAAuC,OAAO;AAAA,EAChG,QAAQD;AAAA,EAAI,OAAOA;AAAA,EACnB,MAAM;AAAA,EACN,UAAU;AAAA,EACV,WAAW;AAAA,EACX,OAAO,8BAA8B,MAAM;AAAA,EAC3C,WAAWC,GAAE,OAAO,EAAE,SAAS;AACjC,CAAC,EAAE,OAAO;AACH,IAAM,oCAAoCA,GAAE,OAAO;AAAA,EACxD,eAAeA,GAAE,QAAQ,yCAAyC;AAAA,EAClE,QAAQD;AAAA,EAAI,OAAOA;AAAA,EAAI,QAAQC,GAAE,MAAM,oCAAoC,EAAE,IAAI,GAAG;AAAA,EAAG,YAAYD,IAAG,SAAS;AACjH,CAAC,EAAE,OAAO;AACH,IAAM,qCAAqCC,GAAE,OAAO;AAAA,EACzD,QAAQD,IAAG,SAAS;AAAA,EAAG,OAAOC,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE;AAC3E,CAAC,EAAE,OAAO;AAQH,SAAS,+BAA+B,SAAiE;AAC9G,QAAM,QAAQ,CAAC,WAAqC;AAClD,IAAAD,IAAG,MAAM,OAAO,MAAM;AACtB,WAAO,qBAAqB,mBAAmBA,IAAG,MAAM,OAAO,KAAK,CAAC,CAAC;AAAA,EACxE;AACA,SAAO;AAAA,IACL,MAAM,iBAAiB,QAAkC,QAAsC,CAAC,GAAG;AACjG,YAAM,QAAQ,mCAAmC,MAAM,KAAK;AAC5D,YAAM,SAAS,IAAI,gBAAgB,EAAE,OAAO,OAAO,MAAM,KAAK,EAAE,CAAC;AACjE,UAAI,MAAM,OAAQ,QAAO,IAAI,UAAU,MAAM,MAAM;AACnD,YAAM,OAAO,kCAAkC,MAAM,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;AAChG,UAAI,KAAK,WAAW,OAAO,UAAU,KAAK,UAAU,OAAO,SAAS,KAAK,OAAO,SAAS,MAAM,SAC3F,KAAK,OAAO,KAAK,WAAS,MAAM,WAAW,OAAO,UAAU,MAAM,UAAU,OAAO,SAAU,MAAM,UAAU,MAAM,MAAM,MAAM,MAAO,KACtI,IAAI,IAAI,KAAK,OAAO,IAAI,WAAS,MAAM,EAAE,CAAC,EAAE,SAAS,KAAK,OAAO,UAChE,KAAK,eAAe,QAAQ,KAAK,eAAe,KAAK,OAAO,GAAG,EAAE,GAAG;AACvE,cAAM,IAAI,sBAAsB,mCAAmC,wEAAwE;AAC7I,aAAO;AAAA,IACT;AAAA,IACA,MAAM,gBAAgB,QAAkC,SAAiB,UAA6C;AACpH,YAAM,YAAY,WAAW,uCAAuC,MAAM,EAAE,IAAI,SAAS,IAAI,UAAU,SAAS,UAAU,aAAa,SAAS,YAAY,CAAC,IAAI;AACjK,UAAI,aAAa,UAAU,OAAO,QAAS,OAAM,IAAI,sBAAsB,sCAAsC,gEAAgE;AACjL,YAAM,SAAS,YAAY,aAAa,UAAU,QAAQ,KAAK;AAC/D,YAAM,WAAW,8BAA8B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,mBAAmBA,IAAG,MAAM,OAAO,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;AAClI,UAAI,SAAS,SAAS,WAAW,OAAO,UAAU,SAAS,SAAS,YAAY,OAAO,OAAO,SAAS,SAAS,SAAS,OAAO,WAC3H,cAAc,SAAS,aAAa,UAAU,YAAY,SAAS,gBAAgB,UAAU;AAChG,cAAM,IAAI,sBAAsB,sCAAsC,uFAAuF;AAC/J,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;ACpCA,SAAS,KAAAE,WAAS;;;ACtBlB,SAAS,KAAAC,UAAS;AAGlB,IAAM,KAAKC,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAC3C,IAAM,OAAOA,GAAE,OAAO,EAAE,MAAM,gBAAgB;AAC9C,IAAM,qBAAqBA,GACxB,OAAO;AAAA,EACN,eAAeA,GAAE,QAAQ,gDAAgD;AAAA,EACzE,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,kBAAkBA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAC5C,2BAA2B;AAAA,EAC3B,cAAc;AAAA,EACd,eAAe;AAAA,EACf,cAAc;AAAA,EACd,gBAAgBA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,GAAG;AAAA,EACjD,YAAYA,GAAE,IAAI,SAAS,EAAE,QAAQ,KAAK,CAAC;AAAA,EAC3C,iBAAiBA,GACd,OAAO,EACP,SAAS,EACT,OAAO,EACP,IAAI,EAAE,EACN;AAAA,IACC,CAAC,UAAU,OAAO,MAAM,QAAQ,CAAC,CAAC,MAAM;AAAA,IACxC;AAAA,EACF;AAAA,EACF,mBAAmBA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,KAAM;AAAA,EACzD,oBAAoBA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,KAAM;AAC5D,CAAC,EACA,OAAO;AAEH,IAAM,mDAAmD,mBAAmB,OAAO;AAAA,EACxF,cAAc;AAChB,CAAC,EACE,OAAO,EACP,YAAY,CAAC,OAAO,YAAY;AAC/B,MAAI,MAAM,oBAAoB,MAAM;AAClC,YAAQ,SAAS;AAAA,MACf,MAAM;AAAA,MACN,MAAM,CAAC,mBAAmB;AAAA,MAC1B,SAAS;AAAA,IACX,CAAC;AACL,CAAC;AAGH,eAAsB,iDACpB,OACA;AACA,QAAM,OAAO,mBAAmB,MAAM,KAAK;AAC3C,SAAO,iDAAiD,MAAM;AAAA,IAC5D,GAAG;AAAA,IACH,cAAc,MAAM,gBAAgB,IAAI;AAAA,EAC1C,CAAC;AACH;AAGO,IAAM,0CAA0CA,GACpD,OAAO;AAAA,EACN,kBAAkB,iDAAiD,SAAS;AAAA,EAC5E,MAAMA,GAAE,QAAQ,iBAAiB,EAAE,SAAS;AAAA,EAC5C,mBAAmBA,GAChB,KAAK,CAAC,yBAAyB,yBAAyB,uBAAuB,CAAC,EAChF,SAAS;AAAA,EACZ,iBAAiBA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAC3C,cAAc;AAAA,EACd,gBAAgBA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,GAAG;AAAA,EACjD,iBAAiBA,GAAE,OAAO,EAAE,SAAS,EAAE,OAAO;AAAA,EAC9C,oBAAoBA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,KAAM;AAC5D,CAAC,EACA,OAAO,EACP,YAAY,CAAC,OAAO,YAAY;AAC/B,MAAI,MAAM,qBAAqB,MAAM,SAAS;AAC5C,YAAQ,SAAS;AAAA,MACf,MAAM;AAAA,MACN,MAAM,CAAC,mBAAmB;AAAA,MAC1B,SAAS;AAAA,IACX,CAAC;AACH,QAAM,IAAI,MAAM;AAChB,MACE,MACC,EAAE,qBAAqB,MAAM,mBAC5B,EAAE,iBAAiB,MAAM,gBACzB,EAAE,mBAAmB,MAAM,kBAC3B,EAAE,oBAAoB,MAAM,mBAC5B,EAAE,uBAAuB,MAAM;AAEjC,YAAQ,SAAS;AAAA,MACf,MAAM;AAAA,MACN,MAAM,CAAC,kBAAkB;AAAA,MACzB,SAAS;AAAA,IACX,CAAC;AACL,CAAC;;;AC5FH,SAAS,KAAAC,UAAS;AAGX,IAAM,kCAAkCA,GAAE,OAAO;AAAA,EACtD,MAAMA,GAAE,QAAQ,YAAY;AAAA,EAC5B,kBAAkBA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAClD,eAAeA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC/C,mBAAmBA,GAAE,OAAO,EAAE,MAAM,uBAAuB;AAAA,EAC3D,mBAAmBA,GAAE,OAAO,EAAE,MAAM,gBAAgB;AAAA,EACpD,SAASA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACzC,aAAaA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC7C,2BAA2BA,GAAE,OAAO,EAAE,MAAM,gBAAgB;AAAA,EAC5D,aAAaA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC7C,YAAYA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC;AAClD,CAAC,EAAE,OAAO;;;ACbV,SAAS,KAAAC,UAAS;AAOlB,IAAMC,MAAKC,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAC3C,IAAMC,QAAOD,GAAE,OAAO,EAAE,MAAM,gBAAgB;AAGvC,IAAM,mCAAmCA,GAC7C,OAAO;AAAA,EACN,eAAeA,GAAE,QAAQ,wCAAwC;AAAA,EACjE,QAAQD;AAAA,EACR,aAAaA;AAAA,EACb,WAAWA,IAAG,SAAS;AAAA,EACvB,eAAeC,GACZ,OAAO,EAAE,IAAID,KAAI,kBAAkBC,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,cAAcC,MAAK,CAAC,EACpF,OAAO;AAAA,EACV,QAAQ,4BAA4B,SAAS;AAAA,EAC7C,OAAO;AAAA,EACP,MAAMD,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACtC,iBAAiBA,GAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,GAAS;AAAA,EAC7D,cAAc,2BAA2B,SAAS;AAAA,EAClD,mBAAmB,gCAAgC,SAAS;AAC9D,CAAC,EACA,OAAO;AACH,IAAM,uCAAuCA,GACjD,OAAO;AAAA,EACN,eAAeA,GAAE,QAAQ,qCAAqC;AAAA,EAC9D,IAAID;AAAA,EACJ,eAAeA;AAAA,EACf,SAAS;AAAA,EACT,aAAaE;AAAA,EACb,QAAQD,GAAE,KAAK,MAAM,uBAAuB;AAAA,EAC5C,gBAAgBC;AAAA,EAChB,WAAWD,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC;AACjD,CAAC,EACA,OAAO;AACH,IAAM,gCAAgC,qCAAqC,OAAO;AAAA,EACvF,aAAaC;AACf,CAAC,EAAE,OAAO;AACH,IAAM,mCAAmCD,GAC7C,OAAO;AAAA,EACN,eAAeA,GAAE,QAAQ,wCAAwC;AAAA,EACjE,MAAM;AAAA,EACN,UAAUA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACpC,OAAOA,GAAE,KAAK,CAAC,YAAY,aAAa,WAAW,CAAC;AAAA,EACpD,OAAOD,IAAG,SAAS;AACrB,CAAC,EACA,OAAO,EACP,YAAY,CAAC,OAAO,YAAY;AAC/B,MAAK,MAAM,UAAU,gBAAiB,QAAQ,MAAM,KAAK;AACvD,YAAQ,SAAS;AAAA,MACf,MAAM;AAAA,MACN,MAAM,CAAC,OAAO;AAAA,MACd,SAAS;AAAA,IACX,CAAC;AACL,CAAC;AACI,IAAM,mCAAmCC,GAC7C,OAAO;AAAA,EACN,QAAQD;AAAA,EACR,UAAUE;AAAA,EACV,kBAAkBD,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAC5C,gBAAgB,6BAA6B,SAAS;AACxD,CAAC,EACA,OAAO;AACH,IAAM,qCAAqCA,GAC/C,OAAO;AAAA,EACN,WAAWD,IAAG,SAAS;AAAA,EACvB,OAAOC,GAAE,KAAK,CAAC,YAAY,aAAa,WAAW,CAAC,EAAE,SAAS;AAAA,EAC/D,SAASD,IAAG,SAAS;AAAA,EACrB,OAAOC,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE;AACpD,CAAC,EACA,OAAO;AACH,IAAM,gCAAgCA,GAC1C,OAAO;AAAA,EACN,eAAeA,GAAE,QAAQ,qCAAqC;AAAA,EAC9D,QAAQD;AAAA,EACR,OAAOC,GAAE,MAAM,gCAAgC,EAAE,IAAI,GAAG;AAAA,EACxD,YAAYD,IAAG,SAAS;AAC1B,CAAC,EACA,OAAO;AAQV,eAAsB,yCAAyC,OAAgB;AAC7E,QAAM,UAAU,iCAAiC,MAAM,KAAK;AAC5D,QAAM,EAAE,aAAa,GAAG,KAAK,IAAI,QAAQ;AACzC,MACG,MAAM,gBAAgB,IAAI,MAAO,eACjC,MAAM,gBAAgB,KAAK,OAAO,MAAO,KAAK,eAC/C,KAAK,OAAO,aAAa,OAAO,KAAK,QAAQ,cAAc,MAC1D,MAAM,gBAAgB,KAAK,OAAO,UAAU,IAAI,MAC9C,MAAM,gBAAgB,KAAK,QAAQ,UAAU,IAAI,GACpD;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,gCACd,SACA;AACA,iBAAe,KAAK,OAAgB,QAAgBG,KAAa;AAC/D,UAAM,UAAU,MAAM,yCAAyC,KAAK;AACpE,QAAI,QAAQ,KAAK,QAAQ,WAAW,UAAWA,OAAM,QAAQ,KAAK,OAAOA;AACvE,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AACF,WAAO;AAAA,EACT;AACA,SAAO;AAAA;AAAA,IAEL,MAAM,iBAAiB,QAAgB,QAAsC,CAAC,GAAG;AAC/E,YAAM,QAAQH,IAAG,MAAM,MAAM;AAC7B,YAAM,QAAQ,mCAAmC,MAAM,KAAK;AAC5D,YAAM,SAAS,IAAI,gBAAgB;AACnC,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,EAAG,QAAO,IAAI,KAAK,OAAO,KAAK,CAAC;AAC/E,YAAM,OAAO,8BAA8B;AAAA,QACzC,MAAM,QAAQ,6BAA6B,MAAM,EAAE;AAAA,MACrD;AACA,UACE,KAAK,WAAW,SAChB,KAAK,MAAM,SAAS,MAAM,SAC1B,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC,EAAE,SAAS,KAAK,MAAM,UACnE,KAAK,eAAe,SAClB,KAAK,eAAe,KAAK,MAAM,GAAG,EAAE,GAAG,KAAK,MAAM,KAAK,eAAe,MAAM,UAC/E;AACA,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,YAAM,QAAQ,MAAM,QAAQ;AAAA,QAC1B,KAAK,MAAM,IAAI,OAAO,SAAS;AAC7B,gBAAM,UAAU,MAAM,KAAK,MAAM,KAAK;AACtC,cACG,MAAM,aAAa,QAAQ,KAAK,QAAQ,cAAc,MAAM,aAC5D,MAAM,SAAS,QAAQ,UAAU,MAAM,OACxC;AACA,kBAAM,IAAI;AAAA,cACR;AAAA,cACA;AAAA,YACF;AAAA,UACF;AACA,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AACA,aAAO,EAAE,GAAG,MAAM,MAAM;AAAA,IAC1B;AAAA,IACA,MAAM,WAAW,OAAmC;AAClD,YAAM,SAAS,iCAAiC,MAAM,KAAK;AAC3D,YAAM,UAAU,MAAM;AAAA,QACpB,MAAM,QAAQ,6BAA6B;AAAA,UACzC,QAAQ;AAAA,UACR,MAAM,KAAK,UAAU,MAAM;AAAA,QAC7B,CAAC;AAAA,QACD,OAAO;AAAA,MACT;AACA,UAAI,QAAQ,KAAK,gBAAiB,MAAM,gBAAgB,MAAM;AAC5D,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,QACF;AACF,aAAO;AAAA,IACT;AAAA,IACA,MAAM,eAAe,QAAgBG,KAAY;AAC/C,aAAO;AAAA,QACL,MAAM,QAAQ,6BAA6B,mBAAmBH,IAAG,MAAMG,GAAE,CAAC,CAAC,EAAE;AAAA,QAC7EH,IAAG,MAAM,MAAM;AAAA,QACfG;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,iBAAiBA,KAAY,OAAmC;AACpE,YAAM,SAAS,iCAAiC,MAAM,KAAK;AAC3D,YAAM,UAAU,MAAM;AAAA,QACpB,MAAM,QAAQ,6BAA6B,mBAAmBH,IAAG,MAAMG,GAAE,CAAC,CAAC,UAAU;AAAA,UACnF,QAAQ;AAAA,UACR,MAAM,KAAK,UAAU,MAAM;AAAA,QAC7B,CAAC;AAAA,QACD,OAAO;AAAA,QACPA;AAAA,MACF;AACA,UAAI,QAAQ,KAAK,gBAAgB,OAAO,YAAY,QAAQ,UAAU;AACpE,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,QACF;AACF,aAAO;AAAA,IACT;AAAA,IACA,MAAM,kBAAkBA,KAAY,OAAmC;AACrE,YAAM,SAAS,iCAAiC,MAAM,KAAK;AAC3D,YAAM,UAAU,MAAM;AAAA,QACpB,MAAM,QAAQ,6BAA6B,mBAAmBH,IAAG,MAAMG,GAAE,CAAC,CAAC,WAAW;AAAA,UACpF,QAAQ;AAAA,UACR,MAAM,KAAK,UAAU,MAAM;AAAA,QAC7B,CAAC;AAAA,QACD,OAAO;AAAA,QACPA;AAAA,MACF;AACA,UAAI,QAAQ,KAAK,gBAAgB,OAAO,YAAY,QAAQ,UAAU;AACpE,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,QACF;AACF,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;AC3NA,SAAS,KAAAC,UAAS;AAQlB,IAAMC,MAAKC,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAC3C,IAAMC,QAAOD,GAAE,OAAO,EAAE,MAAM,gBAAgB;AAC9C,IAAM,YAAYA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC;AACtD,IAAM,cAAcA,GAAE,OAAO,EAAE,OAAO,EAAE,YAAY;AAI7C,IAAM,+BAA+BA,GAAE,mBAAmB,QAAQ;AAAA,EACvEA,GAAE,OAAO,EAAE,MAAMA,GAAE,QAAQ,aAAa,GAAG,IAAID,KAAI,UAAUE,OAAM,kBAAkBD,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO;AAAA,EAC3HA,GAAE,OAAO;AAAA,IACP,MAAMA,GAAE,QAAQ,eAAe;AAAA,IAAG,IAAID;AAAA,IACtC,kBAAkBC,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,IAAG,cAAcC;AAAA,IAC7D,OAAO,+BAA+B,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC/D,CAAC,EAAE,OAAO;AAAA,EACVD,GAAE,OAAO,EAAE,MAAMA,GAAE,QAAQ,YAAY,GAAG,YAAYA,GAAE,KAAK,MAAM,2BAA2B,EAAE,CAAC,EAAE,OAAO;AAC5G,CAAC;AAIM,IAAM,gCAAgCA,GAAE,OAAO;AAAA,EACpD,eAAeA,GAAE,QAAQ,qCAAqC;AAAA,EAC9D,QAAQD;AAAA,EACR,QAAQ;AAAA,EACR,cAAc,2BAA2B,SAAS;AACpD,CAAC,EAAE,OAAO;AAEV,IAAM,gBAAgBC,GAAE,OAAO,EAAE,KAAK,aAAa,MAAM,YAAY,CAAC,EAAE,OAAO,EAC5E,OAAO,WAAS,MAAM,QAAQ,MAAM,KAAK,gCAAgC;AAErE,IAAM,kCAAkCA,GAAE,OAAO;AAAA,EACtD,OAAOA,GAAE,KAAK;AAAA,IACZ;AAAA,IAAW;AAAA,IAAuB;AAAA,IAAY;AAAA,IAAgB;AAAA,IAC9D;AAAA,IAA4B;AAAA,IAAoB;AAAA,IAAe;AAAA,IAAW;AAAA,EAC5E,CAAC;AAAA,EACD,UAAUA,GAAE,KAAK,CAAC,OAAO,OAAO,SAAS,WAAW,SAAS,CAAC;AAAA,EAC9D,aAAa,YAAY,SAAS;AAAA,EAClC,iBAAiB,YAAY,SAAS;AAAA,EACtC,kBAAkB,cAAc,SAAS;AAAA,EACzC,UAAUA,GAAE,KAAK,CAAC,YAAY,mBAAmB,aAAa,CAAC;AAAA,EAC/D,QAAQA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAI,EAAE,SAAS;AACtD,CAAC,EAAE,OAAO;AAIH,SAAS,+BAA+B,QAAsD;AACnG,MAAI,OAAO,SAAS,aAAc,QAAO;AAAA,IACvC,MAAM,OAAO;AAAA,IAAM,IAAI,OAAO,WAAW;AAAA,IAAgB,aAAa,OAAO,WAAW;AAAA,IAAa,UAAU;AAAA,EACjH;AACA,MAAI,OAAO,SAAS,cAAe,QAAO;AAAA,IACxC,MAAM,OAAO;AAAA,IAAM,IAAI,OAAO;AAAA,IAAI,aAAa,OAAO;AAAA,IAAU,UAAU,OAAO;AAAA,EACnF;AACA,SAAO,EAAE,MAAM,OAAO,MAAM,IAAI,OAAO,IAAI,aAAa,OAAO,cAAc,UAAU,OAAO,iBAAiB;AACjH;AAEO,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EAC7C,eAAeA,GAAE,QAAQ,8BAA8B;AAAA,EACvD,IAAID;AAAA,EACJ,QAAQA;AAAA,EACR,aAAaE;AAAA,EACb,WAAWA;AAAA,EACX,QAAQD,GAAE,OAAO;AAAA,IACf,MAAMA,GAAE,KAAK,CAAC,eAAe,iBAAiB,YAAY,CAAC;AAAA,IAAG,IAAID;AAAA,IAClE,aAAaE;AAAA,IAAM,UAAUD,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACpE,CAAC,EAAE,OAAO;AAAA,EACV,QAAQA,GAAE,KAAK,CAAC,aAAa,WAAW,uBAAuB,CAAC;AAAA,EAChE,UAAUA,GAAE,QAAQ,KAAK;AAAA,EACzB,WAAW;AAAA,EACX,WAAW;AAAA,EACX,kBAAkBD;AAAA,EAClB,gBAAgBA;AAAA,EAChB,SAASC,GAAE,OAAO,EAAE,SAASD,KAAI,gBAAgB,UAAU,SAAS,EAAE,CAAC,EAAE,OAAO;AAAA,EAChF,KAAKC,GAAE,OAAO;AAAA,IACZ,WAAW;AAAA,IACX,UAAUA,GAAE,OAAO,EAAE,gBAAgBD,KAAI,SAASC,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,GAAG,UAAUA,GAAE,MAAM,CAACA,GAAE,QAAQ,CAAC,GAAGA,GAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS;AAAA,IACnJ,mBAAmB,YAAY,SAAS;AAAA,IACxC,cAAcA,GAAE,KAAK,CAAC,aAAa,WAAW,eAAe,SAAS,CAAC;AAAA,EACzE,CAAC,EAAE,OAAO;AAAA,EACV,eAAeA,GAAE,OAAO;AAAA,IACtB,SAASD;AAAA,IACT,eAAeC,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,IACxC,QAAQD;AAAA,IACR,UAAUC,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,IAC/C,aAAaA,GAAE,KAAK,CAAC,mBAAmB,UAAU,kBAAkB,CAAC,EAAE,SAAS;AAAA,IAChF,QAAQA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,IAChD,oBAAoBA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,IACzD,iBAAiBA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,IACtD,cAAcA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,IACtD,gBAAgBA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,IACxD,eAAeA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,IACpD,oBAAoB,YAAY,SAAS;AAAA,EAC3C,CAAC,EAAE,OAAO;AAAA,EACV,MAAMA,GAAE,OAAO;AAAA,IACb,aAAa,YAAY,SAAS;AAAA,IAClC,kBAAkB,cAAc,SAAS;AAAA,IACzC,iBAAiB;AAAA,IACjB,uBAAuB,YAAY,SAAS;AAAA,IAC5C,0BAA0B,YAAY,SAAS;AAAA,IAC/C,YAAYA,GAAE,MAAM,+BAA+B,EAAE,IAAI,EAAE;AAAA,EAC7D,CAAC,EAAE,OAAO;AAAA,EACV,kBAAkBA,GAAE,OAAO,EAAE,UAAU,YAAY,SAAS,GAAG,eAAe,cAAc,SAAS,EAAE,CAAC,EAAE,OAAO;AAAA,EACjH,kBAAkBA,GAAE,OAAO,EAAE,UAAU,aAAa,eAAe,cAAc,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS;AAAA,EACjH,aAAaA,GAAE,OAAO;AAAA,IACpB,SAASD;AAAA,IACT,YAAYE;AAAA,IACZ,kBAAkBD,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IAC/C,gBAAgBA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IAC7C,OAAOA,GAAE,KAAK,CAAC,aAAa,sBAAsB,CAAC;AAAA,EACrD,CAAC,EAAE,OAAO;AAAA,EACV,aAAaA,GAAE,MAAMA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAI,CAAC,EAAE,IAAI,EAAE;AAAA,EAC/D,UAAUA,GAAE,MAAMA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAI,CAAC,EAAE,IAAI,EAAE;AAAA,EAC5D,QAAQ;AACV,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,UAAU,YAAY;AAC7C,MAAI,SAAS,OAAO,eAAe,SAAS,MAAM,SAAS,OAAO,cAAc,SAAS,aACrF,SAAS,OAAO,gBAAgB,SAAS,eAAe,SAAS,OAAO,mBAAmB,SAAS,QAAQ,WAC5G,SAAS,OAAO,cAAc,SAAS,WAAW;AACpD,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,QAAQ,GAAG,SAAS,qDAAqD,CAAC;AAAA,EACtH;AACA,MAAI,KAAK,MAAM,SAAS,SAAS,KAAK,KAAK,MAAM,SAAS,SAAS,GAAG;AACpE,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,WAAW,GAAG,SAAS,0CAA0C,CAAC;AAAA,EAC9G;AACA,MAAI,SAAS,WAAW,gBACnB,SAAS,KAAK,gBAAgB,QAAQ,SAAS,iBAAiB,aAAa,QAAQ,SAAS,SAAS,SAAS,IAAI;AACvH,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,QAAQ,GAAG,SAAS,qEAAqE,CAAC;AAAA,EACtI;AACA,MAAI,SAAS,IAAI,UAAU,SAAS,YAAY,SAAS,IAAI,aACxD,SAAS,IAAI,UAAU,mBAAmB,SAAS,IAAI,SAAS,kBAChE,SAAS,IAAI,UAAU,YAAY,SAAS,IAAI,SAAS,UAAU;AACtE,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,KAAK,GAAG,SAAS,iDAAiD,CAAC;AAAA,EAC/G;AACA,MAAI,SAAS,IAAI,YAAY,SAAS,IAAI,SAAS,cAAc,SAAS,IAAI,UAAU,YAAY,IAAI;AACtG,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,OAAO,YAAY,UAAU,GAAG,SAAS,wDAAwD,CAAC;AAAA,EAC9I;AACF,CAAC;AAKM,SAAS,6BAA6B,SAAiE;AAC5G,SAAO;AAAA,IACL,MAAM,SAAS,OAA2D;AACxE,YAAM,SAAS,8BAA8B,MAAM,KAAK;AACxD,UAAI,OAAO,OAAO,SAAS,aAAc,OAAM,oCAAoC,OAAO,OAAO,UAAU;AAC3G,YAAM,SAAS,uBAAuB,MAAM,MAAM,QAAQ,0BAA0B;AAAA,QAClF,QAAQ;AAAA,QAAQ,MAAM,KAAK,UAAU,MAAM;AAAA,MAC7C,CAAC,CAAC;AACF,UAAI,OAAO,WAAW,OAAO,UAAU,OAAO,gBAAgB,MAAM,gBAAgB,MAAM,KACtF,MAAM,gBAAgB,OAAO,MAAM,MAAM,MAAM,gBAAgB,+BAA+B,OAAO,MAAM,CAAC,KAC3G,OAAO,gBAAgB,MAAM,gBAAgB,OAAO,IAAI,SAAS,MAAM,MAAM,gBAAgB,OAAO,YAAY,GAAI;AACvH,cAAM,IAAI,sBAAsB,oCAAoC,8EAA8E;AAAA,MACpJ;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;ACjKA,SAAS,KAAAE,UAAS;AAElB,IAAMC,aAAYD,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC;AAI/C,IAAM,4BAA4BA,GAAE,OAAO;AAAA,EAChD,UAAUA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC1C,cAAcA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,OAAO,gBAAgB;AAAA,EACrE,OAAOA,GAAE,QAAQ,uBAAuB;AAAA,EACxC,UAAUA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,eAAeA,GAAE,QAAQ,uBAAuB;AAAA,EAChD,YAAYC;AAAA,EACZ,MAAMA;AAAA,EACN,UAAUD,GAAE,OAAO;AAAA,IACjB,UAAUA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IACvC,kBAAkBC;AAAA,IAClB,WAAWA;AAAA,IACX,UAAUD,GAAE,KAAK,CAAC,qBAAqB,sBAAsB,mBAAmB,CAAC;AAAA,EACnF,CAAC,EAAE,OAAO,EAAE,SAAS;AACvB,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,YAAY;AAC1C,MAAI,MAAM,YAAY,KAAK,MAAM,MAAM,SAAS,SAAS,KAAK,KAAK,MAAM,MAAM,IAAI;AACjF,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,UAAU,GAAG,SAAS,4DAA4D,CAAC;AACjI,CAAC;;;ACvBD,SAAS,KAAAE,UAAS;AAIX,IAAM,yCAAyCC,GAAE,OAAO;AAAA,EAC7D,eAAeA,GAAE,QAAQ,8CAA8C;AAAA,EACvE,gBAAgB;AAAA,EAChB,mBAAmBA,GAAE,OAAO,EAAE,MAAM,gBAAgB;AAAA,EACpD,WAAWA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,iCAAiC;AAC9E,CAAC,EAAE,OAAO;AAGH,SAAS,kCAAkC,SAAyF;AACzI,QAAM,QAAQ,CAAC,cAAmC;AAChD,UAAM,MAAM,0BAA0B,MAAM,SAAS;AACrD,WAAO,gCAAgC,mBAAmB,IAAI,EAAE,CAAC,IAAI,IAAI,WAAW;AAAA,EACtF;AACA,SAAO;AAAA,IACL,MAAM,qBAAqB,OAA0D;AACnF,iCAA2B,OAAO,mCAAmC,yBAAyB;AAC9F,YAAM,SAAS,eAAe,KAAK;AACnC,YAAM,cAAc,OAAO,cAAc;AACzC,UAAI,CAAC,YAAY,YAAY,YAAY,SAAS,UAAU,YAAY,mBAAmB,UAAU,YAAY,qBAAqB,UAAW,OAAO,kBAAkB,sCAAsC,OAAO,eAAe,MAAM,KAAK,UAAQ,KAAK,eAAe,QAAQ,GAAI;AACvR,cAAM,IAAI,MAAM,+EAA+E;AAAA,MACjG;AACA,YAAM,SAAS,uCAAuC,MAAM,MAAM,QAAQ,MAAM,EAAE,IAAI,OAAO,eAAe,IAAI,aAAa,OAAO,eAAe,YAAY,CAAC,GAAG,EAAE,QAAQ,OAAO,MAAM,KAAK,UAAU,MAAM,EAAE,CAAC,CAAC;AACnN,UAAI,OAAO,eAAe,OAAO,OAAO,eAAe,MAAM,OAAO,eAAe,gBAAgB,OAAO,eAAe,eAAe,OAAO,sBAAsB,OAAO,aAAa;AACvL,cAAM,IAAI,MAAM,uEAAuE;AAAA,MACzF;AACA,aAAO;AAAA,IACT;AAAA,IACA,MAAM,iBAAiB,WAAgC;AACrD,YAAM,QAAQ,MAAM,QAAQ,MAAM,SAAS,GAAG,QAAW,iCAAiC;AAC1F,iCAA2B,OAAO,mCAAmC,yBAAyB;AAC9F,aAAO,eAAe,OAAO,SAAS;AAAA,IACxC;AAAA,EACF;AACF;AAEA,SAAS,eAAe,OAAgB,WAAiC;AACvE,SAAO,OAAO,UAAU,YAAY,UAAU,QACzC,QAAQ,IAAI,OAAO,eAAe,MAAM,2CACzC,mCAAmC,OAAO,SAAS,IACnD,6BAA6B,OAAO,SAAS;AACnD;;;AC5CA,SAAS,KAAAC,UAAS;AAQlB,IAAM,WAA4B,uBAAMC,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,GAAG;AAC3E,IAAM,aAA8B,uBAAMA,GAAE,OAAO,EAAE,MAAM,gBAAgB,GAAG;AAGvE,IAAM,yCAA0D,uBAAMA,GAAE,OAAO;AAAA,EACpF,eAAeA,GAAE,QAAQ,8CAA8C;AAAA,EACvE,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,UAAUA,GAAE,KAAK,CAAC,YAAY,UAAU,CAAC;AAAA,EACzC,QAAQA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK;AAAA,EAC1C,gBAAgB;AAAA,EAChB,kBAAkB,+BAA+B,SAAS;AAC5D,CAAC,EAAE,OAAO,GAAG;AAGN,IAAM,kCAAmD,uBAAMA,GAAE,OAAO;AAAA,EAC7E,eAAeA,GAAE,QAAQ,uCAAuC;AAAA,EAChE,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,UAAUA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACpC,OAAOA,GAAE,OAAO,EAAE,QAAQ,UAAU,MAAMA,GAAE,KAAK,CAAC,QAAQ,WAAW,gBAAgB,CAAC,GAAG,IAAI,SAAS,CAAC,EAAE,OAAO;AAAA,EAChH,WAAWA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC;AAAA,EAC/C,aAAa;AACf,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,YAAY;AAC1C,MAAK,MAAM,aAAa,OAAQ,MAAM,QAAQ,qBAAqB,OAAO;AACxE,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,UAAU,GAAG,SAAS,0FAA0F,CAAC;AAAA,EAC7J;AACA,MAAI,MAAM,QAAQ,kBAAkB,OAAO,MAAM,IAAI;AACnD,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,WAAW,kBAAkB,GAAG,SAAS,sCAAsC,CAAC;AAAA,EAC5H;AACF,CAAC,GAAG;AAMJ,eAAsB,8BACpB,OACiB;AACjB,QAAM,EAAE,aAAa,cAAc,GAAG,QAAQ,IAAI;AAClD,SAAO,gBAAgB,OAAO;AAChC;AAEA,eAAsB,wCACpB,OACA,UACoC;AACpC,6BAA2B,OAAO,OAAQ,6BAA6B;AACvE,QAAM,SAAS,gCAAgC,MAAM,KAAK;AAC1D,MAAI,OAAO,gBAAgB,MAAM,8BAA8B,MAAM,GAAG;AACtE,UAAM,IAAI,sBAAsB,yBAAyB,0DAA0D;AAAA,EACrH;AACA,MAAI,OAAO,QAAQ,WAAW,SAAS,UAAU,OAAO,QAAQ,UAAU,SAAS,SAC9E,OAAO,QAAQ,SAAS,OAAO,SAAS,SAAS,MACjD,OAAO,QAAQ,SAAS,gBAAgB,SAAS,SAAS,aAAa;AAC1E,UAAM,IAAI,sBAAsB,wCAAwC,2EAA2E;AAAA,EACrJ;AACA,MAAI,SAAS,WAAW,MAAM,gBAAgB,OAAO,OAAO,MAAM,MAAM,gBAAgB,uCAAuC,MAAM,SAAS,OAAO,CAAC,GAAG;AACvJ,UAAM,IAAI,sBAAsB,uCAAuC,kEAAkE;AAAA,EAC3I;AACA,SAAO;AACT;AAEO,SAAS,sCACd,SACA;AACA,WAAS,MAAM,QAAyC;AACtD,WAAO,qBAAqB,mBAAmB,SAAS,MAAM,OAAO,KAAK,CAAC,CAAC,eAAe,mBAAmB,+BAA+B,MAAM,OAAO,QAAQ,EAAE,EAAE,CAAC;AAAA,EACzK;AACA,SAAO;AAAA,IACL,MAAM,kBACJ,QACA,UAA8D,CAAC,GACpB;AAC3C,eAAS,MAAM,OAAO,MAAM;AAC5B,YAAM,YAAY,QAAQ,WAAW,+BAA+B,MAAM,QAAQ,QAAQ,IAAI;AAC9F,YAAM,QAAQ,YAAY,eAAe,mBAAmB,UAAU,EAAE,CAAC,KAAK;AAC9E,YAAM,WAAWA,GAAE,OAAO,EAAE,UAAUA,GAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;AACxH,UAAI,SAAS,aAAa,QAAQ,CAAC,UAAW,QAAO;AACrD,YAAM,WAAW,MAAM,wCAAwC,SAAS,UAAU,MAAM;AACxF,UAAI,cAAc,SAAS,OAAO,UAAU,MAAM,SAAS,gBAAgB,UAAU,cAAc;AACjG,cAAM,IAAI,sBAAsB,wCAAwC,yEAAyE;AAAA,MACnJ;AACA,aAAO;AAAA,IACT;AAAA,IACA,MAAM,wBAAwB,OAA6E;AACzG,YAAM,SAAS,uCAAuC,MAAM,KAAK;AACjE,YAAM,WAAW,MAAM,QAAQ,MAAM,MAAM,GAAG,EAAE,QAAQ,QAAQ,MAAM,KAAK,UAAU,MAAM,EAAE,CAAC;AAC9F,aAAO,wCAAwC,UAAU,EAAE,GAAG,QAAQ,SAAS,OAAO,CAAC;AAAA,IACzF;AAAA,EACF;AACF;;;ACtGA,SAAS,KAAAC,WAAS;AASlB,IAAMC,YAA4B,uBAAMC,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,GAAG;AAC3E,IAAMC,cAA8B,uBAAMD,IAAE,OAAO,EAAE,MAAM,gBAAgB,GAAG;AAGvE,IAAM,qCAAsD,uBAAMA,IAAE,OAAO;AAAA,EAChF,QAAQD;AAAA,EACR,YAAYE;AAAA,EACZ,cAAcA;AAAA,EACd,OAAOD,IAAE,OAAO;AAAA,IACd,aAAaA,IAAE,OAAO,EAAE,IAAI,GAAS;AAAA,IACrC,SAASA,IAAE,OAAOA,IAAE,OAAO,GAAGA,IAAE,QAAQ,CAAC;AAAA,EAC3C,CAAC,EAAE,OAAO;AAAA,EACV,QAAQA,IAAE,OAAO,EAAE,IAAI,GAAS;AAAA,EAChC,cAAcC;AAAA,EACd,OAAOD,IAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EACvC,UAAUA,IAAE,OAAO;AAAA,IACjB,MAAMA,IAAE,KAAK,CAAC,kBAAkB,gBAAgB,aAAa,CAAC;AAAA,IAC9D,IAAID;AAAA,EACN,CAAC,EAAE,OAAO;AACZ,CAAC,EAAE,OAAO,GAAG;AAGN,IAAM,mCAAoD,uBAAMC,IAAE,OAAO;AAAA,EAC9E,eAAeA,IAAE,QAAQ,wCAAwC;AAAA,EACjE,OAAOD;AAAA,EACP,QAAQA;AAAA,EACR,YAAY;AAAA,EACZ,MAAMC,IAAE,KAAK,CAAC,YAAY,WAAW,CAAC;AAAA,EACtC,eAAeA,IAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAC5C,SAAS;AAAA,EACT,aAAaC;AAAA,EACb,QAAQD,IAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACrC,OAAOA,IAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAM;AAAA,EACzC,OAAOA,IAAE,MAAM,kCAAkC,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACjE,YAAYA,IAAE,OAAO,EAAE,MAAM,YAAY,EAAE,SAAS;AAAA,EACpD,aAAaC;AACf,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,MAAM,YAAY;AACzC,QAAM,MAAM,KAAK,SAAS,KAAK,MAAM;AACrC,QAAM,iBAAiB,MAAM,KAAK,QAAQ,OAAO,GAAG,IAAI;AACxD,MAAI,MAAM,KAAK,SAAS,KAAK,eAAe,gBAAgB;AAC1D,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,YAAY,GAAG,SAAS,+DAA+D,CAAC;AAAA,EACpI;AACA,MAAI,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,EAAE,SAAS,KAAK,MAAM,QAAQ;AAC7E,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,OAAO,GAAG,SAAS,6CAA6C,CAAC;AAAA,EAC7G;AACF,CAAC,GAAG;AAKJ,eAAsB,+BACpB,OACiB;AACjB,QAAM,EAAE,aAAa,cAAc,GAAG,QAAQ,IAAI;AAClD,SAAO,gBAAgB,OAAO;AAChC;AAEA,eAAsB,yCACpB,OACA,UAMqC;AACrC,6BAA2B,OAAO,iCAAiC,+BAA+B;AAClG,QAAM,OAAO,iCAAiC,MAAM,KAAK;AACzD,QAAM,YAAY,+BAA+B,MAAM,SAAS,UAAU;AAC1E,MAAI,KAAK,UAAUF,UAAS,MAAM,SAAS,KAAK,KAC3C,KAAK,WAAW,OAAO,UAAU,MACjC,KAAK,WAAW,gBAAgB,UAAU,eAC1C,KAAK,YAAY,SAAS,UAAU,MACnC,SAAS,WAAW,UAAa,KAAK,WAAWA,UAAS,MAAM,SAAS,MAAM,GAAI;AACvF,UAAM,IAAI,sBAAsB,qCAAqC,wEAAwE;AAAA,EAC/I;AACA,MAAI,MAAM,+BAA+B,IAAI,MAAM,KAAK,aAAa;AACnE,UAAM,IAAI,sBAAsB,iCAAiC,kDAAkD;AAAA,EACrH;AACA,aAAW,QAAQ,KAAK,OAAO;AAC7B,QAAI,MAAM,gBAAgB,KAAK,MAAM,MAAM,KAAK,cAAc;AAC5D,YAAM,IAAI,sBAAsB,mCAAmC,kDAAkD;AAAA,IACvH;AAAA,EACF;AACA,SAAO;AACT;;;AC9FA,SAAS,KAAAG,WAAS;AAClB,SAAS,qBAAqB,qBAAqB,2BAA2B;AAG9E,IAAM,gBAAgBC,IAAE,MAAMA,IAAE,OAAO,EAAE,IAAIA,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,SAASA,IAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK;AAChH,IAAM,wBAAwBA,IAAE,OAAO;AAAA,EACrC,SAAS;AAAA,EACT,SAASA,IAAE,MAAM,mBAAmB,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AACtD,CAAC,EAAE,OAAO;AAQV,eAAsB,kCAAkC,OAGrD;AACD,QAAM,YAAY,MAAM,kBAAkB,sBAAsB,MAAM,MAAM,eAAe,IAAI;AAC/F,QAAM,UAAU,cAAc,MAAM,YAChC,oBAAoB,UAAU,SAAS,UAAU,OAAO,IACxD,MAAM,OAAO;AACjB,MAAI,IAAI,IAAI,QAAQ,IAAI,YAAU,OAAO,EAAE,CAAC,EAAE,SAAS,QAAQ,QAAQ;AACrE,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AACA,QAAMC,QAAO,MAAM,gBAAgB,EAAE,eAAe,iCAAiC,QAAQ,CAAC;AAC9F,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,EAAE,IAAI,oBAAoBA,MAAK,MAAM,GAAG,EAAE,CAAC,IAAI,aAAaA,MAAK;AAAA,IACzE,UAAU,YAAY,EAAE,IAAI,UAAU,QAAQ,IAAI,aAAa,UAAU,QAAQ,YAAY,IAAI;AAAA,EACnG;AACF;;;ACjCA,SAAS,KAAAC,WAAS;AAIX,IAAM,kCAAkC;AAE/C,IAAM,qBAAqBC,IAAE,OAAO;AAAA,EAClC,IAAIA,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;AAAA,EAC3B,YAAYA,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;AAAA,EACnC,OAAOA,IAAE,KAAK,CAAC,SAAS,cAAc,aAAa,CAAC;AACtD,CAAC,EAAE,YAAY;AAGR,IAAM,iCAAiCA,IAAE,OAAO;AAAA,EACrD,eAAeA,IAAE,QAAQ,sCAAsC;AAAA,EAC/D,SAAS;AAAA,EACT,OAAOA,IAAE,MAAM,kBAAkB,EAAE,IAAI,CAAC,EAAE,IAAI,GAAM;AAAA,EACpD,QAAQA,IAAE,MAAMA,IAAE,OAAO;AAAA,IACvB,MAAMA,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK;AAAA,IACxC,QAAQA,IAAE,OAAO,EAAE,MAAM,gBAAgB;AAAA,IACzC,WAAWA,IAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IACxC,UAAUA,IAAE,QAAQ,QAAQ;AAAA,IAC5B,SAASA,IAAE,OAAO,EAAE,IAAI,KAAK,OAAO,IAAI;AAAA,EAC1C,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,GAAM;AACzB,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,YAAY;AAC3C,QAAM,MAAM,oBAAI,IAAY;AAC5B,SAAO,MAAM,QAAQ,CAAC,MAAM,UAAU;AACpC,QAAI,KAAK,UAAU,QAAS,SAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,SAAS,OAAO,OAAO,GAAG,SAAS,6CAA6C,CAAC;AACvJ,QAAI,IAAI,IAAI,KAAK,EAAE,EAAG,SAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,SAAS,OAAO,IAAI,GAAG,SAAS,6CAA6C,CAAC;AAC9I,QAAI,IAAI,KAAK,EAAE;AAAA,EACjB,CAAC;AACH,CAAC;AAIM,SAAS,kCAAkC,eAAwB,iBAAgC;AACxG,QAAM,WAAWA,IAAE,MAAM,kBAAkB,EAAE,IAAI,CAAC,EAAE,IAAI,GAAM,EAAE,MAAM,aAAa;AACnF,QAAM,aAAaA,IAAE,MAAM,kBAAkB,EAAE,IAAI,CAAC,EAAE,IAAI,GAAM,EAAE,MAAM,eAAe;AACvF,QAAM,WAAW,oBAAI,IAAY;AACjC,QAAM,gBAAgB,oBAAI,IAAY;AACtC,aAAW,QAAQ,UAAU;AAC3B,QAAI,KAAK,UAAU,QAAS,OAAM,IAAI,MAAM,mDAAmD;AAC/F,QAAI,SAAS,IAAI,KAAK,EAAE,EAAG,OAAM,IAAI,MAAM,0CAA0C;AACrF,aAAS,IAAI,KAAK,EAAE;AACpB,kBAAc,IAAI,KAAK,UAAU;AAAA,EACnC;AACA,QAAM,gBAAgB,oBAAI,IAAY;AACtC,aAAW,QAAQ,YAAY;AAC7B,QAAI,KAAK,UAAU,QAAS,OAAM,IAAI,MAAM,qDAAqD;AACjG,QAAI,cAAc,IAAI,KAAK,EAAE,EAAG,OAAM,IAAI,MAAM,4CAA4C;AAC5F,QAAI,SAAS,IAAI,KAAK,EAAE,KAAK,cAAc,IAAI,KAAK,UAAU,GAAG;AAC/D,YAAM,IAAI,MAAM,oDAAoD;AAAA,IACtE;AACA,kBAAc,IAAI,KAAK,EAAE;AAAA,EAC3B;AACF;AAEA,eAAsB,4BAA4B,OAAgB;AAChE,QAAM,SAAS,+BAA+B,MAAM,KAAK;AACzD,QAAMC,QAAO,MAAM,gBAAgB,MAAM;AACzC,SAAO,EAAE,SAAS,OAAO,SAAS,SAAS,EAAE,IAAI,uBAAuBA,MAAK,MAAM,GAAG,EAAE,CAAC,IAAI,aAAaA,MAAK,EAAE;AACnH;;;AV+DA,IAAMC,YAAWC,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AACjD,IAAMC,cAAaD,IAAE,OAAO,EAAE,MAAM,gBAAgB;AACpD,IAAM,kBAAkBA,IAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC;AAQrD,IAAM,oCAAoCA,IAC9C,OAAO;AAAA,EACN,eAAeA,IAAE,QAAQ,yCAAyC;AAAA,EAClE,MAAMA,IAAE,KAAK,CAAC,4BAA4B,sBAAsB,CAAC;AAAA,EACjE,gBAAgBA,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAChD,gBAAgB;AAAA,EAChB,SAASA,IAAE,QAAQ;AAAA,EACnB,aAAaC;AACf,CAAC,EACA,OAAO;AAEH,IAAM,8BAA8BD,IACxC,OAAO;AAAA,EACN,eAAeA,IAAE,QAAQ,mCAAmC;AAAA,EAC5D,MAAMA,IAAE,KAAK,CAAC,4BAA4B,sBAAsB,CAAC;AAAA,EACjE,gBAAgB;AAAA,EAChB,aAAaA,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK;AAAA,EAC/C,aAAaC;AAAA,EACb,WAAWD,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACrC,WAAW;AACb,CAAC,EACA,OAAO;AAEV,eAAsB,gCACpB,QACiB;AACjB,QAAM,EAAE,aAAa,cAAc,GAAG,QAAQ,IAAI;AAClD,SAAO,gBAAgB,OAAO;AAChC;AAEA,eAAsB,0CACpB,OACsC;AACtC,6BAA2B,OAAO,mCAAmC,yBAAyB;AAC9F,QAAM,SAAS,kCAAkC,MAAM,KAAK;AAC5D,QAAM,eAAe,MAAM,gCAAgC,MAAM;AACjE,MAAI,OAAO,gBAAgB,cAAc;AACvC,UAAM,IAAI;AAAA,MACR;AAAA,MACA,uCAAuC,OAAO,WAAW,mBAAmB,YAAY;AAAA,IAC1F;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAM,wBAAwBA,IAAE,KAAK,CAAC,sBAAsB,iBAAiB,CAAC;AAE9E,IAAM,yBAAyBA,IAAE,KAAK;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,IAAM,sCAAsCA,IAChD,OAAO;AAAA,EACN,IAAID;AAAA,EACJ,SAASC,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAClE,UAAUA,IAAE,QAAQ,EAAE,QAAQ,IAAI;AACpC,CAAC,EACA,OAAO;AAEH,IAAM,0BAA0BA,IACpC,OAAO;AAAA,EACN,QAAQ,4BAA4B,SAAS;AAAA,EAC7C,cAAcA,IACX,OAAO;AAAA,IACN,IAAID;AAAA,IACJ,mBAAmBA;AAAA,IACnB,UAAUC,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,IACpC,aAAaC;AAAA,EACf,CAAC,EACA,OAAO;AAAA,EACV,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,YAAYD,IACT,OAAO;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,EACX,CAAC,EACA,OAAO,EACP,SAAS,EACT,SAAS;AAAA,EACZ,SAAS;AAAA,EACT,cAAcA,IAAE,MAAM,8BAA8B,EAAE,IAAI,GAAM;AAClE,CAAC,EACA,OAAO;AAEH,IAAM,mCAAmCA,IAC7C,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,oBAAoB;AAAA,EACpC,WAAW;AAAA,EACX,0BAA0B;AAAA,EAC1B,kBAAkB;AAAA,EAClB,QAAQA,IACL,OAAO;AAAA,IACN,eAAeA,IAAE,QAAQ,+BAA+B;AAAA,IACxD,QAAQA,IAAE,QAAQ,cAAc;AAAA,IAChC,kBAAkBA,IAAE,QAAQ,uBAAuB;AAAA,EACrD,CAAC,EACA,SAASA,IAAE,QAAQ,CAAC;AACzB,CAAC,EACA,OAAO;AAEV,IAAM,kCAAkCA,IACrC,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,eAAe;AAAA,EAC/B,QAAQ;AAAA,EACR,UAAU,+BAA+B,SAAS,EAAE,QAAQ,IAAI;AAClE,CAAC,EACA,OAAO;AAEV,IAAM,4BAA4BA,IAC/B,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,gBAAgB;AAAA,EAChC,oBAAoB;AAAA,EACpB,qBAAqB,+BAA+B,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC3E,sBAAsBA,IAAE,MAAM,8BAA8B,EAAE,IAAI,GAAK,EAAE,QAAQ,CAAC,CAAC;AAAA,EACnF,gBAAgBA,IACb,OAAO;AAAA,IACN,aAAaA,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK;AAAA,IAC/C,aAAaC;AAAA,IACb,kBAAkB;AAAA,EACpB,CAAC,EACA,OAAO;AAAA,EACV,kBAAkB;AAAA,EAClB,uBAAuB;AACzB,CAAC,EACA,OAAO;AAEH,IAAM,uCAAuC,4BAA4B,OAAO;AAAA,EACrF,UAAUD,IAAE,OAAO,EAAE,MAAM,mBAAmB;AAAA,EAC9C,mBAAmBA,IAAE,OAAO,EAAE,MAAM,mBAAmB;AAAA,EACvD,kBAAkBC;AACpB,CAAC,EAAE,OAAO;AAEH,IAAM,kCAAkCD,IAC5C,OAAO;AAAA,EACN,MAAMA,IAAE,QAAQ,iBAAiB;AAAA;AAAA,EAEjC,eAAeA,IAAE,QAAQ,eAAe,EAAE,SAAS;AAAA,EACnD,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,cAAcA,IAAE,mBAAmB,QAAQ;AAAA,IACzC;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,YAAY,+BAA+B,SAAS,EAAE,QAAQ,IAAI;AACpE,CAAC,EACA,OAAO,EACP,YAAY,CAAC,KAAK,YAAY;AAC7B,MAAI,IAAI,OAAO,WAAW,MAAO;AACjC,QAAM,SAAS,gBAAgB,UAAU,IAAI,MAAM;AACnD,MAAI,CAAC,OAAO,SAAS;AACnB,YAAQ,SAAS;AAAA,MACf,MAAM;AAAA,MACN,MAAM,CAAC,QAAQ;AAAA,MACf,SAAS;AAAA,IACX,CAAC;AACD;AAAA,EACF;AACA,MAAI,IAAI,iBAAiB,IAAI,cAAc,kBAAkB,IAAI;AAC/D,YAAQ,SAAS;AAAA,MACf,MAAM;AAAA,MACN,SACE;AAAA,IACJ,CAAC;AACH,MACE,OAAO,KAAK,UAAU,OAAO,IAAI,UAAU,WAC3C,OAAO,KAAK,UAAU,aAAa,IAAI,UAAU,YACjD,OAAO,KAAK,UAAU,sBAAsB,IAAI,UAAU,qBAC1D,OAAO,KAAK,UAAU,qBAAqB,IAAI,UAAU;AAEzD,YAAQ,SAAS;AAAA,MACf,MAAM;AAAA,MACN,MAAM,CAAC,WAAW;AAAA,MAClB,SAAS;AAAA,IACX,CAAC;AACL,CAAC;AAEI,IAAM,2BAA2BA,IAAE,mBAAmB,QAAQ;AAAA,EACnE;AAAA,EACA;AACF,CAAC;AAEM,IAAM,4BAA4BA,IACtC,OAAO;AAAA,EACN,cAAcC;AAAA,EACd,YAAY;AAAA,EACZ,gBAAgBD,IAAE,QAAQ;AAAA,EAC1B,iBAAiBA,IAAE,OAAO,EAAE,YAAY;AAAA,EACxC,eAAeA,IAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EACvD,QAAQA,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,QAAQ,IAAI;AACnE,CAAC,EACA,OAAO;AAEH,IAAM,8BAA8BA,IACxC,OAAO;AAAA,EACN,eAAeA,IAAE,QAAQ,mCAAmC;AAAA,EAC5D,gBAAgBA,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAChD,MAAMA,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACtC,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,uBAAuBA,IAAE,MAAM,mCAAmC,EAAE,IAAI,GAAK;AAAA,EAC7E,oBAAoBA,IAAE,KAAK,CAAC,QAAQ,YAAY,YAAY,CAAC;AAAA,EAC7D,cAAc,2BAA2B,SAAS;AAAA,EAClD,mBAAmB,gCAAgC,SAAS;AAAA,EAC5D,QAAQA,IACL,OAAO;AAAA,IACN,iBAAiBA,IAAE,OAAO,EAAE,YAAY;AAAA,IACxC,oBAAoBA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAChD,CAAC,EACA,OAAO;AAAA,EACV,UAAU;AAAA,EACV,aAAaC;AACf,CAAC,EACA,OAAO,EACP,YAAY,CAAC,YAAY,YAAY;AACpC,QAAM,eAAe,WAAW,cAAc,YAAY,OAAO;AACjE,QAAM,yBAAyB,WAAW,sBAAsB,KAAK,iBACnE,YAAY,OAAO,qCAAqC,YAAY,YAAY,OAAO,YAAY,QAAQ;AAC7G,MAAI,gBAAgB,wBAAwB;AAC1C,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,uBAAuB,GAAG,SAAS,uGAAuG,CAAC;AAAA,EACvL;AACA,MAAI,gBAAgB,WAAW,IAAI,SAAS,qBAAqB,WAAW,IAAI,iBAC9E,WAAW,IAAI,OAAO,WAAW,UAAU,WAAW,oBAAoB;AAC1E,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,cAAc,GAAG,SAAS,6DAA6D,CAAC;AAAA,EACpI;AACA,MAAI,WAAW,sBAAsB,WAAW,IAAI,SAAS,qBAC3D,WAAW,IAAI,cAAc,WAAW,IAAI,iBAAiB,WAAW,IAAI,OAAO,iBAAiB,SAAY;AAChH,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,mBAAmB,GAAG,SAAS,iFAAiF,CAAC;AAAA,EAC7J;AACA,MAAI,WAAW,IAAI,SAAS,qBAAqB,WAAW,IAAI,kBAAkB,iBAAiB;AACjG,UAAM,MAAM,WAAW;AACvB,QAAI,CAAC,qCAAqC,UAAU,IAAI,SAAS,EAAE,SAAS;AAC1E,cAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,OAAO,WAAW,GAAG,SAAS,kGAAkG,CAAC;AAAA,IAC7K;AACA,QAAI,IAAI,cAAc,IAAI,OAAO,iBAAiB,UAAa,IAAI,aAAa,SAAS,mBAAmB,IAAI,OAAO,WAAW,QAAQ;AACxI,cAAQ,SAAS;AAAA,QACf,MAAM;AAAA,QAAU,MAAM,CAAC,KAAK;AAAA,QAC5B,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA,QAAI,CAAC,WAAW,sBAAsB,KAAK,iBAAe,YAAY,YAAY,YAAY,OAAO,qCAAqC,YAAY,YAAY,GAAG,GAAG;AACtK,cAAQ,SAAS;AAAA,QACf,MAAM;AAAA,QAAU,MAAM,CAAC,uBAAuB;AAAA,QAC9C,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AACA,MAAI,WAAW,SAAS,oBAAoB,WAAW,OAAO,iBAAiB;AAC7E,YAAQ,SAAS;AAAA,MACf,MAAM;AAAA,MACN,MAAM,CAAC,YAAY,iBAAiB;AAAA,MACpC,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF,CAAC;AAEH,eAAsB,0BACpB,YACiB;AACjB,QAAM,EAAE,aAAa,cAAc,GAAG,QAAQ,IAAI;AAClD,SAAO,gBAAgB,OAAO;AAChC;AAEA,eAAsB,oCACpB,OACgC;AAChC,6BAA2B,OAAO,mCAAmC,yBAAyB;AAC9F,QAAM,SAAS,4BAA4B,MAAM,KAAK;AACtD,QAAM,eAAe,MAAM,0BAA0B,MAAM;AAC3D,MAAI,OAAO,gBAAgB,cAAc;AACvC,UAAM,IAAI;AAAA,MACR;AAAA,MACA,4BAA4B,OAAO,WAAW,mBAAmB,YAAY;AAAA,IAC/E;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAM,4BAA4BD,IAAE,OAAO;AAAA,EAChD,kBAAkB,iDAAiD,SAAS;AAAA,EAC5E,MAAMA,IAAE,QAAQ,iBAAiB,EAAE,SAAS;AAAA,EAC5C,0BAA0BA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC/C,aAAaD;AAAA,EACb,cAAcA;AAAA,EACd,eAAeC,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACzC,iBAAiBA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAC3C,eAAeA,IAAE,QAAQ,UAAU;AACrC,CAAC,EAAE,OAAO;AAEH,IAAM,oBAAoBA,IAC9B,OAAO;AAAA,EACN,eAAeA,IAAE,QAAQ,yBAAyB;AAAA,EAClD,IAAID;AAAA,EACJ,QAAQA;AAAA,EACR,MAAM;AAAA,EACN,eAAeC,IAAE,QAAQ,eAAe,EAAE,SAAS;AAAA,EACnD,UAAU,0BAA0B,SAAS;AAAA,EAC7C,gBAAgBD;AAAA,EAChB,mBAAmBA;AAAA,EACnB,uBAAuBC,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACjD,gBAAgBC;AAAA,EAChB,OAAO;AAAA,EACP,OAAO,0BAA0B,SAAS;AAAA,EAC1C,OAAOD,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACvC,SAASA,IAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACtC,UAAUA,IAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EACjC,iBAAiBA,IACd,OAAO;AAAA,IACN,iBAAiBA,IAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IAC9C,cAAcA,IAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IAC3C,yBAAyBA,IAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IACtD,yBAAyBA,IAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACxD,CAAC,EACA,OAAO;AAAA,EACV,iBAAiBA,IAAE,OAAO,EAAE,YAAY;AAAA,EACxC,gBAAgBA,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK,EAAE,SAAS;AAAA,EAC7D,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa,gBAAgB,SAAS;AACxC,CAAC,EACA,OAAO;AAEH,IAAM,wBAAwBA,IAClC,OAAO;AAAA,EACN,eAAeA,IAAE,QAAQ,6BAA6B;AAAA,EACtD,MAAMA,IAAE,MAAM,iBAAiB,EAAE,IAAI,GAAK;AAAA,EAC1C,YAAYA,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK,EAAE,SAAS;AAC3D,CAAC,EACA,OAAO;AAEH,IAAM,yBAAyBA,IACnC,OAAO;AAAA,EACN,eAAeA,IAAE,QAAQ,8BAA8B;AAAA,EACvD,IAAID;AAAA,EACJ,OAAOA;AAAA,EACP,UAAUC,IAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACvC,MAAMD;AAAA,EACN,OAAOC,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACvC,SAASA,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK,EAAE,SAAS;AAAA,EACtD,MAAMA,IAAE,OAAOA,IAAE,OAAO,GAAGA,IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EAClD,WAAW;AACb,CAAC,EACA,OAAO;AAEH,IAAM,uBAAuBA,IACjC,OAAO;AAAA,EACN,eAAeA,IAAE,QAAQ,4BAA4B;AAAA,EACrD,OAAOD;AAAA,EACP,UAAUC,IAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACvC,OAAOA,IAAE,KAAK,CAAC,SAAS,QAAQ,WAAW,OAAO,CAAC;AAAA,EACnD,SAASA,IAAE,OAAO,EAAE,IAAI,GAAM;AAAA,EAC9B,WAAW;AACb,CAAC,EACA,OAAO;AAEH,IAAM,kCAAkCA,IAC5C,OAAO,EAAE,iBAAiBA,IAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAC1D,OAAO;AAEH,IAAM,0BAA0BA,IACpC,OAAO;AAAA,EACN,eAAeA,IAAE,QAAQ,+BAA+B;AAAA,EACxD,IAAID;AAAA,EACJ,OAAOA;AAAA,EACP,MAAMC,IAAE,KAAK,CAAC,cAAc,WAAW,UAAU,WAAW,cAAc,SAAS,SAAS,CAAC;AAAA,EAC7F,aAAaA,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK;AAAA,EAC/C,aAAaC;AAAA,EACb,WAAWD,IAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACxC,UAAUA,IAAE,OAAOA,IAAE,OAAO,GAAGA,IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACtD,WAAW;AACb,CAAC,EACA,OAAO;AAGH,IAAM,sCAAsCA,IAAE,OAAO;AAAA,EAC1D,eAAeA,IAAE,QAAQ,2CAA2C;AAAA,EACpE,WAAW;AAAA,EACX,OAAO;AAAA,EACP,iBAAiBA,IAAE,MAAM,8BAA8B,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK;AAAA,EACzE,oBAAoBC;AAAA,EACpB,iBAAiBD,IAAE,QAAQ,CAAC;AAAA,EAC5B,yBAAyBA,IAAE,QAAQ,CAAC;AAAA,EACpC,yBAAyBA,IAAE,QAAQ,CAAC;AAAA,EACpC,sBAAsBA,IAAE,QAAQ,CAAC;AAAA,EACjC,oBAAoBA,IAAE,QAAQ,CAAC;AAAA,EAC/B,kBAAkBA,IAAE,QAAQ,CAAC;AAC/B,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,UAAU,YAAY;AAC7C,MAAI,IAAI,IAAI,SAAS,gBAAgB,IAAI,aAAW,QAAQ,EAAE,CAAC,EAAE,SAAS,SAAS,gBAAgB,QAAQ;AACzG,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,iBAAiB,GAAG,SAAS,2DAA2D,CAAC;AAAA,EACrI;AACF,CAAC;AAEM,IAAM,iCAAiCA,IAC3C,OAAO;AAAA,EACN,eAAeA,IAAE,QAAQ,sCAAsC;AAAA,EAC/D,IAAID;AAAA,EACJ,QAAQA;AAAA,EACR,OAAOA;AAAA,EACP,gBAAgBE;AAAA,EAChB,cAAcA;AAAA,EACd,YAAYA;AAAA,EACZ,gBAAgBA;AAAA,EAChB,gBAAgB;AAAA,EAChB,QAAQD,IAAE,MAAM,8BAA8B,EAAE,IAAI,GAAM;AAAA,EAC1D,SAASA,IAAE,MAAM,8BAA8B,EAAE,IAAI,GAAM;AAAA,EAC3D,UAAUA,IAAE,OAAO,EAAE,YAAY;AAAA,EACjC,iBAAiBA,IAAE,OAAO,EAAE,YAAY;AAAA,EACxC,iBAAiBA,IAAE,QAAQ;AAAA,EAC3B,eAAe,oCAAoC,SAAS;AAAA,EAC5D,QAAQD;AAAA,EACR,UAAU;AAAA,EACV,WAAWC,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAM,EAAE,SAAS;AAC3D,CAAC,EACA,OAAO;AAEV,eAAsB,6BACpB,SACiB;AACjB,SAAO,gBAAgB,+BAA+B,MAAM,OAAO,CAAC;AACtE;AAEA,eAAsB,uCACpB,OACA,UASmC;AACnC,QAAM,UAAU,+BAA+B,MAAM,KAAK;AAC1D,QAAM,aAAaD,UAAS,MAAM,SAAS,EAAE;AAC7C,QAAM,eAAeE,YAAW,MAAM,SAAS,WAAW;AAC1D,QAAM,aAAa,MAAM,6BAA6B,OAAO;AAC7D,MAAI,QAAQ,OAAO,cAAc,eAAe,cAAc;AAC5D,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,SAAS,WAAW,UAAa,QAAQ,WAAWF,UAAS,MAAM,SAAS,MAAM,GAAG;AACvF,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,SAAS,UAAU,UAAa,QAAQ,UAAUA,UAAS,MAAM,SAAS,KAAK,GAAG;AACpF,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,OAAK,SAAS,kBAAkB,SAAS,CAAC,QAAQ,iBAAiB;AACjE,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,SAAS,yBAAyB;AACpC,UAAM,aAAa,MAAM,oCAAoC,SAAS,uBAAuB;AAC7F,QAAI,WAAW,IAAI,SAAS,qBAAqB,WAAW,IAAI,kBAAkB,iBAAiB;AACjG,YAAM,IAAI,sBAAsB,qCAAqC,iDAAiD;AAAA,IACxH;AACA,UAAM,mCAAmC,SAAS,EAAE,gBAAgB,WAAW,aAAa,WAAW,WAAW,IAAI,WAAW,SAAS,SAAS,QAAQ,CAAC;AAAA,EAC9J;AACA,SAAO;AACT;AAEA,eAAsB,mCACpB,SACA,UACe;AACf,QAAM,WAAW,oCAAoC,MAAM,QAAQ,aAAa;AAChF,MAAI,QAAQ,mBAAmB,SAAS,kBAAkB,CAAC,QAAQ,iBAAiB;AAClF,UAAM,IAAI,sBAAsB,kCAAkC,yEAAyE;AAAA,EAC7I;AACA,MAAI,SAAS,aAAa,MAAM,gBAAgB,SAAS,SAAS,MAAM,MAAM,gBAAgB,SAAS,SAAS,GAAG;AACjH,UAAM,IAAI,sBAAsB,kCAAkC,+DAA+D;AAAA,EACnI;AACA,MAAI,SAAS,SAAS,KAAK,YAAU,CAAC,cAAc,WAAW,QAAQ,EAAE,SAAS,OAAO,IAAI,CAAC,GAAG;AAC/F,UAAM,IAAI,sBAAsB,kCAAkC,kEAAkE;AAAA,EACtI;AACF;AAEO,IAAM,2BAA2BC,IACrC,OAAO;AAAA,EACN,eAAeA,IAAE,QAAQ,gCAAgC;AAAA,EACzD,SAASA,IAAE,MAAM,uBAAuB,EAAE,IAAI,GAAM;AAAA,EACpD,SAAS,+BAA+B,SAAS;AACnD,CAAC,EACA,OAAO;AAEH,IAAM,uCAAuCA,IAAE,OAAO;AAAA,EAC3D,mBAAmBA,IAAE,OAAO,EAAE,MAAM,uBAAuB;AAAA,EAC3D,cAAcA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG;AAAA,EACjD,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG;AAAA,EACrE,eAAeA,IAAE,OAAO,EAAE,aAAaA,IAAE,OAAO,EAAE,IAAI,CAAC,GAAG,gBAAgBC,YAAW,CAAC,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1G,cAAcD,IAAE,OAAO;AAAA,IACrB,wBAAwBA,IAAE,QAAQ,IAAI;AAAA,IACtC,wBAAwBA,IAAE,QAAQ,IAAI;AAAA,IACtC,oCAAoCA,IAAE,QAAQ,IAAI;AAAA,IAClD,gBAAgBA,IAAE,QAAQ,OAAO;AAAA,IACjC,8BAA8BA,IAAE,QAAQ,SAAS;AAAA,EACnD,CAAC,EAAE,OAAO;AACZ,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,YAAY;AAC1C,MAAI,IAAI,IAAI,MAAM,cAAc,EAAE,SAAS,MAAM,eAAe,UAAU,MAAM,eAAe,KAAK,UAAQ,OAAO,MAAM,YAAY;AACnI,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,gBAAgB,GAAG,SAAS,wEAAwE,CAAC;AACjJ,MAAI,MAAM,eAAe,UAAU,CAAC,MAAM;AACxC,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,eAAe,GAAG,SAAS,mEAAmE,CAAC;AAC7I,CAAC;AAGM,SAAS,+BAA+B,cAA8C,MAC3F,cAAgH;AAChH,MAAI,CAAC,aAAa,eAAe,SAAS,IAAI,EAAG,QAAO;AACxD,MAAI,CAAC,aAAc,QAAO;AAC1B,SAAO,aAAa,SAAS,oBACzB,aAAa,oBAAoB,QAAQ,aAAa,eACtD,aAAa,sBAAsB;AACzC;AAEO,IAAM,6BAA6BA,IACvC,OAAO;AAAA,EACN,eAAeA,IAAE,QAAQ,kCAAkC;AAAA,EAC3D,gBAAgBC;AAAA,EAChB,UAAUD,IAAE,MAAM,qBAAqB;AAAA,EACvC,SAASA,IAAE,MAAMA,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC;AAAA,EAClD,gBAAgBA,IAAE,MAAMA,IAAE,KAAK,CAAC,YAAY,eAAe,CAAC,CAAC,EAAE,SAAS;AAAA,EACxE,YAAY,qCAAqC,SAAS;AAAA,EAC1D,oBAAoBA,IAAE,OAAO;AAAA,IAC3B,YAAYA,IAAE,QAAQ,iCAAiC;AAAA,IACvD,SAASA,IAAE,QAAQ,GAAG;AAAA,IACtB,UAAUA,IAAE,QAAQ,CAAC;AAAA,IACrB,WAAWA,IAAE,QAAQ,CAAC;AAAA,IACtB,SAASA,IAAE,QAAQ,MAAM;AAAA,IACzB,gBAAgBA,IAAE,QAAQ,WAAW;AAAA,IACrC,mBAAmBA,IAAE,OAAO,EAAE,MAAM,uBAAuB;AAAA,EAC7D,CAAC,EAAE,OAAO,EAAE,SAAS;AAAA,EACrB,mBAAmBA,IAAE,OAAO;AAAA,IAC1B,YAAYA,IAAE,QAAQ,2BAA2B;AAAA,IACjD,oBAAoBC;AAAA,IACpB,iBAAiBA;AAAA,IACjB,YAAYA;AAAA,IACZ,cAAcA;AAAA,IACd,qBAAqBD,IAAE,QAAQ,IAAI;AAAA,IACnC,sBAAsBA,IAAE,QAAQ,IAAI;AAAA,EACtC,CAAC,EAAE,OAAO,EAAE,SAAS;AAAA,EACrB,YAAYA,IAAE,MAAMA,IAAE,KAAK,CAAC,SAAS,UAAU,aAAa,iBAAiB,CAAC,CAAC;AAAA,EAC/E,UAAUA,IACP,OAAO;AAAA,IACN,QAAQA,IAAE,QAAQ;AAAA,IAClB,gBAAgBA,IAAE,QAAQ;AAAA,IAC1B,sBAAsBA,IAAE,QAAQ;AAAA,EAClC,CAAC,EACA,OAAO;AAAA,EACV,WAAWA,IAAE,OAAO,EAAE,eAAeA,IAAE,QAAQ,8BAA8B,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS;AAAA,EACpG,QAAQA,IACL,OAAO;AAAA,IACN,iBAAiBA,IAAE,OAAO,EAAE,YAAY;AAAA,IACxC,oBAAoBA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,IAC9C,sBAAsBA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAClD,CAAC,EACA,OAAO;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AACb,CAAC,EACA,OAAO;AAeH,SAAS,qBAAqB,OAIlC;AACD,QAAM,UAAU,sBAAsB,KAAK;AAE3C,SAAO;AAAA,IACL,cAAc,yBAAyB,EAAE,QAAQ,CAAC;AAAA,IAClD,GAAG,gCAAgC,OAAO;AAAA,IAC1C,GAAG,6BAA6B,OAAO;AAAA,IACvC,GAAG,+BAA+B,OAAO;AAAA,IACzC,GAAG,6BAA6B,OAAO;AAAA,IACvC,GAAG,kCAAkC,OAAO;AAAA,IAC5C,GAAG,sCAAsC,OAAO;AAAA,IAChD,MAAM,eAAe;AACnB,aAAO,2BAA2B;AAAA,QAChC,aAAa,MAAM,QAAQ,2BAA2B,GAAG,cAAc;AAAA,MACzE;AAAA,IACF;AAAA,IACA,MAAM,aAAa;AACjB,aAAO,yBAAyB,MAAM,aAAa,MAAM,QAAQ,0BAA0B,GAAG,SAAS,CAAC;AAAA,IAC1G;AAAA,IACA,MAAM,cAAc,QAAqC;AACvD,YAAM,SAAS,MAAM,0CAA0C,MAAM;AACrE,aAAO,4BAA4B;AAAA,QACjC;AAAA,UACE,MAAM,QAAQ,0BAA0B;AAAA,YACtC,QAAQ;AAAA,YACR,MAAM,KAAK,UAAU,MAAM;AAAA,UAC7B,CAAC;AAAA,UACD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,UAAU,YAAmC;AACjD,YAAM,SAAS,MAAM,oCAAoC,UAAU;AACnE,aAAO,kBAAkB;AAAA,QACvB;AAAA,UACE,MAAM,QAAQ,qBAAqB;AAAA,YACjC,QAAQ;AAAA,YACR,MAAM,KAAK,UAAU,MAAM;AAAA,UAC7B,CAAC;AAAA,UACD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,SACJ,UAII,CAAC,GACL;AACA,YAAM,aAAa,IAAI,gBAAgB;AACvC,UAAI,QAAQ,gBAAgB;AAC1B,mBAAW,IAAI,kBAAkBD,UAAS,MAAM,QAAQ,cAAc,CAAC;AAAA,MACzE;AACA,UAAI,QAAQ,QAAQ;AAClB,mBAAW,IAAI,UAAUC,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK,EAAE,MAAM,QAAQ,MAAM,CAAC;AAAA,MACpF;AACA,UAAI,QAAQ,UAAU,QAAW;AAC/B,mBAAW,IAAI,SAAS,OAAOA,IAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK,EAAE,MAAM,QAAQ,KAAK,CAAC,CAAC;AAAA,MACzF;AACA,YAAM,QAAQ,WAAW,OAAO,IAAI,IAAI,WAAW,SAAS,CAAC,KAAK;AAClE,aAAO,sBAAsB,MAAM,MAAM,QAAQ,oBAAoB,KAAK,EAAE,CAAC;AAAA,IAC/E;AAAA,IACA,MAAM,OAAO,OAAe;AAC1B,aAAO,kBAAkB;AAAA,QACvB;AAAA,UACE,MAAM,QAAQ,qBAAqB,mBAAmBD,UAAS,MAAM,KAAK,CAAC,CAAC,EAAE;AAAA,UAC9E;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,UAAU,OAAe,iBAAyB;AACtD,YAAM,UAAU,gCAAgC,MAAM,EAAE,gBAAgB,CAAC;AACzE,aAAO,kBAAkB;AAAA,QACvB;AAAA,UACE,MAAM,QAAQ,qBAAqB,mBAAmBA,UAAS,MAAM,KAAK,CAAC,CAAC,WAAW;AAAA,YACrF,QAAQ;AAAA,YACR,MAAM,KAAK,UAAU,OAAO;AAAA,UAC9B,CAAC;AAAA,UACD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,eAAe,OAAe,iBAAyB;AAC3D,YAAM,UAAU,gCAAgC,MAAM,EAAE,gBAAgB,CAAC;AACzE,aAAO,kBAAkB;AAAA,QACvB;AAAA,UACE,MAAM;AAAA,YACJ,qBAAqB,mBAAmBA,UAAS,MAAM,KAAK,CAAC,CAAC;AAAA,YAC9D,EAAE,QAAQ,QAAQ,MAAM,KAAK,UAAU,OAAO,EAAE;AAAA,UAClD;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,kBAAkB,OAAeG,QAAgE;AACrG,YAAM,WAAW,wCAAwC,MAAMA,MAAK;AACpE,UAAI,SAAS,kBAAkB;AAC7B,cAAM,EAAE,cAAc,GAAG,KAAK,IAAI,SAAS;AAC3C,YAAI,KAAK,gBAAgB,SAAS,MAAM,gBAAgB,IAAI,MAAM;AAChE,gBAAM,IAAI,sBAAsB,yBAAyB,+DAA+D;AAAA,MAC5H;AACA,aAAO,kBAAkB,MAAM,aAAa,MAAM;AAAA,QAChD,qBAAqB,mBAAmBH,UAAS,MAAM,KAAK,CAAC,CAAC;AAAA,QAC9D,EAAE,QAAQ,QAAQ,MAAM,KAAK,UAAU,QAAQ,EAAE;AAAA,MACnD,GAAG,KAAK,CAAC;AAAA,IACX;AAAA,IACA,MAAM,OAAO,OAAe;AAC1B,aAAOC,IACJ,MAAM,sBAAsB,EAC5B;AAAA,QACC;AAAA,UACE,MAAM,QAAQ,qBAAqB,mBAAmBD,UAAS,MAAM,KAAK,CAAC,CAAC,SAAS;AAAA,UACrF;AAAA,QACF;AAAA,MACF;AAAA,IACJ;AAAA,IACA,MAAM,QAAQ,OAAe;AAC3B,aAAO,yBAAyB;AAAA,QAC9B,MAAM,QAAQ,qBAAqB,mBAAmBA,UAAS,MAAM,KAAK,CAAC,CAAC,UAAU;AAAA,MACxF;AAAA,IACF;AAAA,IACA,MAAM,gBACJ,OACA,YACA,UAA+C,CAAC,GAChD;AACA,YAAMI,MAAKJ,UAAS,MAAM,KAAK;AAC/B,YAAM,YAAY,+BAA+B,MAAM,UAAU;AACjE,YAAM,aAAa,IAAI,gBAAgB;AACvC,YAAM,SACJ,QAAQ,WAAW,SACf,SACAC,IACG,OAAO,EACP,MAAM,YAAY,EAClB,MAAM,QAAQ,MAAM;AAC7B,YAAM,SACJ,WAAW,SAAY,IAAIA,IAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,IAAK,EAAE,MAAM,OAAO,MAAM,CAAC;AACpF,UAAI,WAAW,OAAW,YAAW,IAAI,UAAU,MAAM;AACzD,UAAI,QAAQ,UAAU;AACpB,mBAAW,IAAI,SAAS,OAAOA,IAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,MAAM,QAAQ,KAAK,CAAC,CAAC;AACvF,YAAM,QAAQ,WAAW,OAAO,IAAI,WAAW,SAAS,CAAC,KAAK;AAC9D,aAAO;AAAA,QACL,MAAM;AAAA,UACJ,qBAAqB,mBAAmBG,GAAE,CAAC,gBAAgB,mBAAmB,UAAU,EAAE,CAAC,SAAS,KAAK;AAAA,QAC3G;AAAA,QACA,EAAE,OAAOA,KAAI,YAAY,WAAW,OAAO;AAAA,MAC7C;AAAA,IACF;AAAA,IACA,MAAM,KAAK,OAAe;AACxB,aAAOH,IACJ,MAAM,oBAAoB,EAC1B,IAAI,GAAO,EACX;AAAA,QACC;AAAA,UACE,MAAM,QAAQ,qBAAqB,mBAAmBD,UAAS,MAAM,KAAK,CAAC,CAAC,OAAO;AAAA,UACnF;AAAA,QACF;AAAA,MACF;AAAA,IACJ;AAAA,EACF;AACF;AAEA,SAAS,aAAa,OAAgB,KAAsB;AAC1D,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,SAAO,OAAO,QAAS,MAAkC,GAAG,IAAI;AAClE;","names":["z","Id","z","z","z","z","z","z","Id","z","Hash","id","z","Id","z","Hash","z","Timestamp","z","z","z","z","z","IdSchema","z","HashSchema","z","z","hash","z","z","hash","IdSchema","z","HashSchema","input","id"]}
@@ -0,0 +1,108 @@
1
+ import {
2
+ OPENPOND_TRAINING_MEDIA_TYPE,
3
+ OpenPondProtocolError,
4
+ TRAINING_API_RESPONSE_MAX_BYTES,
5
+ readBoundedJsonResponse
6
+ } from "./chunk-B3ZHJ2KK.js";
7
+
8
+ // src/training-transport.ts
9
+ import { z } from "zod";
10
+ var TrainingApiErrorSchema = z.object({
11
+ schemaVersion: z.literal("openpond.trainingApiError.v2"),
12
+ code: z.string().trim().min(1).max(200),
13
+ message: z.string().trim().min(1).max(5e3),
14
+ retryable: z.boolean().default(false),
15
+ requestId: z.string().trim().min(1).max(500).nullable().default(null),
16
+ details: z.record(z.string(), z.unknown()).default({})
17
+ }).strict();
18
+ var OpenPondTrainingApiError = class extends Error {
19
+ status;
20
+ code;
21
+ retryable;
22
+ requestId;
23
+ details;
24
+ constructor(status, error) {
25
+ super(error.message);
26
+ this.name = "OpenPondTrainingApiError";
27
+ this.status = status;
28
+ this.code = error.code;
29
+ this.retryable = error.retryable;
30
+ this.requestId = error.requestId;
31
+ this.details = error.details;
32
+ }
33
+ };
34
+ function headersRecord(headers) {
35
+ const result = {};
36
+ new Headers(headers).forEach((value, key) => {
37
+ result[key] = value;
38
+ });
39
+ return result;
40
+ }
41
+ function createTrainingRequest(input) {
42
+ const fetchImpl = input.fetch ?? fetch;
43
+ const baseUrl = input.baseUrl.replace(/\/$/, "");
44
+ async function request(pathname, init, responseLimit = TRAINING_API_RESPONSE_MAX_BYTES) {
45
+ const readOnly = init?.method === void 0 || init.method.toUpperCase() === "GET";
46
+ const maximumAttempts = readOnly ? 3 : 1;
47
+ for (let attempt = 1; attempt <= maximumAttempts; attempt += 1) {
48
+ let response;
49
+ try {
50
+ const configuredHeaders = typeof input.headers === "function" ? await input.headers() : input.headers ?? {};
51
+ response = await fetchImpl(`${baseUrl}${pathname}`, {
52
+ ...init,
53
+ headers: {
54
+ accept: OPENPOND_TRAINING_MEDIA_TYPE,
55
+ ...init?.body ? { "content-type": OPENPOND_TRAINING_MEDIA_TYPE } : {},
56
+ ...headersRecord(configuredHeaders),
57
+ ...headersRecord(init?.headers)
58
+ }
59
+ });
60
+ } catch (error2) {
61
+ if (attempt === maximumAttempts || init?.signal?.aborted || !trainingReadFailureIsRetryable(null, error2)) {
62
+ throw error2;
63
+ }
64
+ await new Promise((resolve) => setTimeout(resolve, 250 * 2 ** (attempt - 1)));
65
+ continue;
66
+ }
67
+ const body = await readBoundedJsonResponse(response, responseLimit, "Training API response");
68
+ if (response.ok) return body;
69
+ const error = trainingApiError(body, response.status);
70
+ if (attempt === maximumAttempts || !trainingReadFailureIsRetryable(response.status, error)) {
71
+ throw error;
72
+ }
73
+ await new Promise((resolve) => setTimeout(resolve, 250 * 2 ** (attempt - 1)));
74
+ }
75
+ throw new OpenPondProtocolError(
76
+ "training_read_retry_exhausted",
77
+ "Training read retry loop exhausted without a response."
78
+ );
79
+ }
80
+ return request;
81
+ }
82
+ function trainingReadFailureIsRetryable(status, error) {
83
+ if (status !== null) {
84
+ return status === 408 || status === 429 || status >= 500;
85
+ }
86
+ if (error instanceof OpenPondTrainingApiError) return error.retryable;
87
+ if (error instanceof OpenPondProtocolError) {
88
+ return error.code === "invalid_error_response";
89
+ }
90
+ return error instanceof TypeError;
91
+ }
92
+ function trainingApiError(value, status) {
93
+ const parsed = TrainingApiErrorSchema.safeParse(value);
94
+ if (parsed.success) {
95
+ return new OpenPondTrainingApiError(status, parsed.data);
96
+ }
97
+ return new OpenPondProtocolError(
98
+ "invalid_error_response",
99
+ `Training request failed with HTTP ${status} and an invalid error envelope.`
100
+ );
101
+ }
102
+
103
+ export {
104
+ TrainingApiErrorSchema,
105
+ OpenPondTrainingApiError,
106
+ createTrainingRequest
107
+ };
108
+ //# sourceMappingURL=chunk-GX6KMHW2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/training-transport.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n OPENPOND_TRAINING_MEDIA_TYPE,\n TRAINING_API_RESPONSE_MAX_BYTES,\n OpenPondProtocolError,\n readBoundedJsonResponse,\n} from \"./protocol.js\";\n\nexport const TrainingApiErrorSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.trainingApiError.v2\"),\n code: z.string().trim().min(1).max(200),\n message: z.string().trim().min(1).max(5_000),\n retryable: z.boolean().default(false),\n requestId: z.string().trim().min(1).max(500).nullable().default(null),\n details: z.record(z.string(), z.unknown()).default({}),\n })\n .strict();\n\nexport class OpenPondTrainingApiError extends Error {\n readonly status: number;\n readonly code: string;\n readonly retryable: boolean;\n readonly requestId: string | null;\n readonly details: Record<string, unknown>;\n\n constructor(status: number, error: z.infer<typeof TrainingApiErrorSchema>) {\n super(error.message);\n this.name = \"OpenPondTrainingApiError\";\n this.status = status;\n this.code = error.code;\n this.retryable = error.retryable;\n this.requestId = error.requestId;\n this.details = error.details;\n }\n}\n\nfunction headersRecord(headers: HeadersInit | undefined): Record<string, string> {\n const result: Record<string, string> = {};\n new Headers(headers).forEach((value, key) => {\n result[key] = value;\n });\n return result;\n}\n\nexport type TrainingTransportOptions = {\n baseUrl: string;\n fetch?: typeof fetch;\n headers?: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);\n};\nexport function createTrainingRequest(input: TrainingTransportOptions) {\n const fetchImpl = input.fetch ?? fetch;\n const baseUrl = input.baseUrl.replace(/\\/$/, \"\");\n\n async function request(\n pathname: string,\n init?: RequestInit,\n responseLimit = TRAINING_API_RESPONSE_MAX_BYTES,\n ): Promise<unknown> {\n const readOnly = init?.method === undefined || init.method.toUpperCase() === \"GET\";\n const maximumAttempts = readOnly ? 3 : 1;\n for (let attempt = 1; attempt <= maximumAttempts; attempt += 1) {\n let response: Response;\n try {\n const configuredHeaders =\n typeof input.headers === \"function\" ? await input.headers() : (input.headers ?? {});\n response = await fetchImpl(`${baseUrl}${pathname}`, {\n ...init,\n headers: {\n accept: OPENPOND_TRAINING_MEDIA_TYPE,\n ...(init?.body ? { \"content-type\": OPENPOND_TRAINING_MEDIA_TYPE } : {}),\n ...headersRecord(configuredHeaders),\n ...headersRecord(init?.headers),\n },\n });\n } catch (error) {\n if (\n attempt === maximumAttempts ||\n init?.signal?.aborted ||\n !trainingReadFailureIsRetryable(null, error)\n ) {\n throw error;\n }\n await new Promise((resolve) => setTimeout(resolve, 250 * 2 ** (attempt - 1)));\n continue;\n }\n const body = await readBoundedJsonResponse(response, responseLimit, \"Training API response\");\n if (response.ok) return body;\n const error = trainingApiError(body, response.status);\n if (attempt === maximumAttempts || !trainingReadFailureIsRetryable(response.status, error)) {\n throw error;\n }\n await new Promise((resolve) => setTimeout(resolve, 250 * 2 ** (attempt - 1)));\n }\n throw new OpenPondProtocolError(\n \"training_read_retry_exhausted\",\n \"Training read retry loop exhausted without a response.\",\n );\n }\n\n return request;\n}\n\nfunction trainingReadFailureIsRetryable(status: number | null, error: unknown): boolean {\n if (status !== null) {\n return status === 408 || status === 429 || status >= 500;\n }\n if (error instanceof OpenPondTrainingApiError) return error.retryable;\n if (error instanceof OpenPondProtocolError) {\n return error.code === \"invalid_error_response\";\n }\n return error instanceof TypeError;\n}\n\nfunction trainingApiError(value: unknown, status: number): Error {\n const parsed = TrainingApiErrorSchema.safeParse(value);\n if (parsed.success) {\n return new OpenPondTrainingApiError(status, parsed.data);\n }\n return new OpenPondProtocolError(\n \"invalid_error_response\",\n `Training request failed with HTTP ${status} and an invalid error envelope.`,\n );\n}\n"],"mappings":";;;;;;;;AAAA,SAAS,SAAS;AAQX,IAAM,yBAAyB,EACnC,OAAO;AAAA,EACN,eAAe,EAAE,QAAQ,8BAA8B;AAAA,EACvD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACtC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK;AAAA,EAC3C,WAAW,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACpC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EACpE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC,EACA,OAAO;AAEH,IAAM,2BAAN,cAAuC,MAAM;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAgB,OAA+C;AACzE,UAAM,MAAM,OAAO;AACnB,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,OAAO,MAAM;AAClB,SAAK,YAAY,MAAM;AACvB,SAAK,YAAY,MAAM;AACvB,SAAK,UAAU,MAAM;AAAA,EACvB;AACF;AAEA,SAAS,cAAc,SAA0D;AAC/E,QAAM,SAAiC,CAAC;AACxC,MAAI,QAAQ,OAAO,EAAE,QAAQ,CAAC,OAAO,QAAQ;AAC3C,WAAO,GAAG,IAAI;AAAA,EAChB,CAAC;AACD,SAAO;AACT;AAOO,SAAS,sBAAsB,OAAiC;AACrE,QAAM,YAAY,MAAM,SAAS;AACjC,QAAM,UAAU,MAAM,QAAQ,QAAQ,OAAO,EAAE;AAE/C,iBAAe,QACb,UACA,MACA,gBAAgB,iCACE;AAClB,UAAM,WAAW,MAAM,WAAW,UAAa,KAAK,OAAO,YAAY,MAAM;AAC7E,UAAM,kBAAkB,WAAW,IAAI;AACvC,aAAS,UAAU,GAAG,WAAW,iBAAiB,WAAW,GAAG;AAC9D,UAAI;AACJ,UAAI;AACF,cAAM,oBACJ,OAAO,MAAM,YAAY,aAAa,MAAM,MAAM,QAAQ,IAAK,MAAM,WAAW,CAAC;AACnF,mBAAW,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,IAAI;AAAA,UAClD,GAAG;AAAA,UACH,SAAS;AAAA,YACP,QAAQ;AAAA,YACR,GAAI,MAAM,OAAO,EAAE,gBAAgB,6BAA6B,IAAI,CAAC;AAAA,YACrE,GAAG,cAAc,iBAAiB;AAAA,YAClC,GAAG,cAAc,MAAM,OAAO;AAAA,UAChC;AAAA,QACF,CAAC;AAAA,MACH,SAASA,QAAO;AACd,YACE,YAAY,mBACZ,MAAM,QAAQ,WACd,CAAC,+BAA+B,MAAMA,MAAK,GAC3C;AACA,gBAAMA;AAAA,QACR;AACA,cAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,MAAM,MAAM,UAAU,EAAE,CAAC;AAC5E;AAAA,MACF;AACA,YAAM,OAAO,MAAM,wBAAwB,UAAU,eAAe,uBAAuB;AAC3F,UAAI,SAAS,GAAI,QAAO;AACxB,YAAM,QAAQ,iBAAiB,MAAM,SAAS,MAAM;AACpD,UAAI,YAAY,mBAAmB,CAAC,+BAA+B,SAAS,QAAQ,KAAK,GAAG;AAC1F,cAAM;AAAA,MACR;AACA,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,MAAM,MAAM,UAAU,EAAE,CAAC;AAAA,IAC9E;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,+BAA+B,QAAuB,OAAyB;AACtF,MAAI,WAAW,MAAM;AACnB,WAAO,WAAW,OAAO,WAAW,OAAO,UAAU;AAAA,EACvD;AACA,MAAI,iBAAiB,yBAA0B,QAAO,MAAM;AAC5D,MAAI,iBAAiB,uBAAuB;AAC1C,WAAO,MAAM,SAAS;AAAA,EACxB;AACA,SAAO,iBAAiB;AAC1B;AAEA,SAAS,iBAAiB,OAAgB,QAAuB;AAC/D,QAAM,SAAS,uBAAuB,UAAU,KAAK;AACrD,MAAI,OAAO,SAAS;AAClB,WAAO,IAAI,yBAAyB,QAAQ,OAAO,IAAI;AAAA,EACzD;AACA,SAAO,IAAI;AAAA,IACT;AAAA,IACA,qCAAqC,MAAM;AAAA,EAC7C;AACF;","names":["error"]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-3B5KSH3V.js";
4
4
  import {
5
5
  RunExperimentSchema
6
- } from "./chunk-UWM2ZPGS.js";
6
+ } from "./chunk-K54BDIKL.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-BWFG46HX.js.map
174
+ //# sourceMappingURL=chunk-HAQPGTQ4.js.map
@@ -5,9 +5,11 @@ import {
5
5
  ChatModelRefSchema
6
6
  } from "./chunk-H3367ISL.js";
7
7
  import {
8
- ModelProjectVersionedRefSchema,
8
+ ModelProjectVersionedRefSchema
9
+ } from "./chunk-UOV2LEXS.js";
10
+ import {
9
11
  canonicalJson as canonicalJson2
10
- } from "./chunk-YSEYPMQ3.js";
12
+ } from "./chunk-B3ZHJ2KK.js";
11
13
  import {
12
14
  ImmutableAssetRefSchema,
13
15
  ImmutableReleaseRefSchema,
@@ -8940,4 +8942,4 @@ export {
8940
8942
  createTasksetPackage,
8941
8943
  resolveTasksetWorkOutputs
8942
8944
  };
8943
- //# sourceMappingURL=chunk-RFKZSSLB.js.map
8945
+ //# sourceMappingURL=chunk-IFBCLRBM.js.map