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
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  RunExperimentSchema
3
- } from "./chunk-UWM2ZPGS.js";
3
+ } from "./chunk-K54BDIKL.js";
4
4
  import {
5
5
  contentHash
6
6
  } from "./chunk-H3JZ3P5T.js";
@@ -136,4 +136,4 @@ export {
136
136
  CandidateEvaluationPreparationSchema,
137
137
  CandidateEvaluationControlSchema
138
138
  };
139
- //# sourceMappingURL=chunk-GGG6H4MK.js.map
139
+ //# sourceMappingURL=chunk-CNREFTAV.js.map
@@ -0,0 +1,161 @@
1
+ import {
2
+ createTrainingRequest
3
+ } from "./chunk-GX6KMHW2.js";
4
+ import {
5
+ OpenPondProtocolError
6
+ } from "./chunk-B3ZHJ2KK.js";
7
+
8
+ // src/training-hardware.ts
9
+ import { z } from "zod";
10
+ var Id = z.string().min(1).max(191);
11
+ var Timestamp = z.string().datetime({ offset: true });
12
+ var Text = z.string().min(1).max(512);
13
+ var Counter = z.number().finite().min(0).max(Number.MAX_SAFE_INTEGER);
14
+ var MissingMetric = z.object({
15
+ status: z.enum(["unavailable", "unsupported", "permissionDenied", "error"]),
16
+ reason: Text
17
+ }).strict();
18
+ var metric = (value) => z.union([z.object({ status: z.literal("available"), value }).strict(), MissingMetric]);
19
+ var NumberMetric = metric(Counter);
20
+ var PercentMetric = metric(z.number().finite().min(0).max(100));
21
+ var StringMetric = metric(Text);
22
+ var HardwareAvailabilitySchema = z.union([
23
+ z.object({ status: z.literal("available") }).strict(),
24
+ MissingMetric
25
+ ]);
26
+ var HardwareGpuObservationSchema = z.object({
27
+ index: z.number().int().min(0).max(4294967295),
28
+ uuid: StringMetric,
29
+ name: StringMetric,
30
+ pciBusId: StringMetric,
31
+ memoryTotalBytes: NumberMetric,
32
+ memoryUsedBytes: NumberMetric,
33
+ utilizationPercent: PercentMetric,
34
+ memoryUtilizationPercent: PercentMetric,
35
+ temperatureCelsius: NumberMetric,
36
+ powerWatts: NumberMetric,
37
+ powerLimitWatts: NumberMetric,
38
+ graphicsClockMhz: NumberMetric,
39
+ memoryClockMhz: NumberMetric,
40
+ eccCorrectedErrors: NumberMetric,
41
+ eccUncorrectedErrors: NumberMetric
42
+ }).strict();
43
+ var HardwareObservationSchema = z.object({
44
+ schemaVersion: z.literal(1),
45
+ collectorVersion: Text,
46
+ sessionId: z.string().uuid(),
47
+ sequence: Counter.int().min(1),
48
+ observedAt: Timestamp,
49
+ monotonicMs: Counter.int(),
50
+ sampleIntervalMs: z.number().int().min(100).max(6e4),
51
+ scope: z.enum(["container", "host", "guest", "unknown"]),
52
+ cpu: z.object({
53
+ logicalCores: NumberMetric,
54
+ utilizationPercent: PercentMetric,
55
+ cgroupCpuLimitCores: NumberMetric,
56
+ cgroupUsageUsec: NumberMetric
57
+ }).strict(),
58
+ memory: z.object({
59
+ hostTotalBytes: NumberMetric,
60
+ hostAvailableBytes: NumberMetric,
61
+ cgroupLimitBytes: NumberMetric,
62
+ cgroupCurrentBytes: NumberMetric
63
+ }).strict(),
64
+ driverVersion: StringMetric,
65
+ gpus: z.array(HardwareGpuObservationSchema).max(32),
66
+ capabilities: z.object({
67
+ cpu: HardwareAvailabilitySchema,
68
+ memory: HardwareAvailabilitySchema,
69
+ nvml: HardwareAvailabilitySchema
70
+ }).strict()
71
+ }).strict().superRefine((value, context) => {
72
+ const indices = /* @__PURE__ */ new Set();
73
+ const uuids = /* @__PURE__ */ new Set();
74
+ value.gpus.forEach((gpu, index) => {
75
+ if (indices.has(gpu.index) || gpu.uuid.status === "available" && uuids.has(gpu.uuid.value)) {
76
+ context.addIssue({
77
+ code: "custom",
78
+ path: ["gpus", index],
79
+ message: "GPU identity must be unique within an observation."
80
+ });
81
+ }
82
+ indices.add(gpu.index);
83
+ if (gpu.uuid.status === "available") uuids.add(gpu.uuid.value);
84
+ });
85
+ });
86
+ var HardwareFleetSnapshotSchema = z.object({
87
+ schemaVersion: z.literal(1),
88
+ teamId: Id,
89
+ observedAt: Timestamp,
90
+ nextCursor: Id.nullable(),
91
+ workers: z.array(
92
+ z.object({
93
+ workerId: Id,
94
+ provider: Id,
95
+ state: Id,
96
+ jobIds: z.array(Id).max(128),
97
+ receivedAt: Timestamp.nullable(),
98
+ observation: HardwareObservationSchema.nullable(),
99
+ freshness: z.enum(["missing", "fresh", "stale"])
100
+ }).strict()
101
+ ).max(50)
102
+ }).strict().superRefine((value, context) => {
103
+ const workers = /* @__PURE__ */ new Set();
104
+ value.workers.forEach((worker, index) => {
105
+ if (workers.has(worker.workerId))
106
+ context.addIssue({
107
+ code: "custom",
108
+ path: ["workers", index, "workerId"],
109
+ message: "Duplicate worker identity."
110
+ });
111
+ workers.add(worker.workerId);
112
+ if (worker.observation === null !== (worker.receivedAt === null) || worker.observation === null !== (worker.freshness === "missing")) {
113
+ context.addIssue({
114
+ code: "custom",
115
+ path: ["workers", index],
116
+ message: "Observation, receive time and freshness must describe the same evidence."
117
+ });
118
+ }
119
+ });
120
+ });
121
+ function createTrainingHardwareClient(request) {
122
+ return {
123
+ async hardwareObservations(query) {
124
+ const teamId = Id.parse(query.teamId);
125
+ const params = new URLSearchParams();
126
+ if (query.workerId !== void 0) params.set("workerId", Id.parse(query.workerId));
127
+ if (query.jobId !== void 0) params.set("jobId", Id.parse(query.jobId));
128
+ if (query.cursor !== void 0) params.set("cursor", Id.parse(query.cursor));
129
+ const limit = z.number().int().min(1).max(50).parse(query.limit ?? 25);
130
+ params.set("limit", String(limit));
131
+ const suffix = params.size ? `?${params}` : "";
132
+ const snapshot = HardwareFleetSnapshotSchema.parse(
133
+ await request(`/v1/managed-rl/hardware-observations${suffix}`, {
134
+ headers: { "x-openpond-team-id": teamId }
135
+ })
136
+ );
137
+ if (snapshot.teamId !== teamId || snapshot.workers.length > limit || snapshot.workers.some(
138
+ (worker) => query.workerId !== void 0 && worker.workerId !== query.workerId || query.jobId !== void 0 && !worker.jobIds.includes(query.jobId) || query.cursor !== void 0 && worker.workerId <= query.cursor
139
+ ) || snapshot.nextCursor !== null && snapshot.nextCursor !== snapshot.workers.at(-1)?.workerId) {
140
+ throw new OpenPondProtocolError(
141
+ "hardware_observation_scope_mismatch",
142
+ "Hardware observations do not match the requested workspace, worker or job."
143
+ );
144
+ }
145
+ return snapshot;
146
+ }
147
+ };
148
+ }
149
+ function createHardwareObservationClient(input) {
150
+ return createTrainingHardwareClient(createTrainingRequest(input));
151
+ }
152
+
153
+ export {
154
+ HardwareAvailabilitySchema,
155
+ HardwareGpuObservationSchema,
156
+ HardwareObservationSchema,
157
+ HardwareFleetSnapshotSchema,
158
+ createTrainingHardwareClient,
159
+ createHardwareObservationClient
160
+ };
161
+ //# sourceMappingURL=chunk-EZME7DV4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/training-hardware.ts"],"sourcesContent":["import { createTrainingRequest, type TrainingTransportOptions } from \"./training-transport.js\";\nexport { OpenPondTrainingApiError } from \"./training-transport.js\";\nimport { z } from \"zod\";\nimport { OpenPondProtocolError } from \"./protocol.js\";\n\n// Read-only hardware observation wire contract. The producer and ingestion\n// service supply bounded, explicitly scoped observations;\n// observation freshness never establishes worker liveness or scheduling readiness.\nconst Id = z.string().min(1).max(191);\nconst Timestamp = z.string().datetime({ offset: true });\nconst Text = z.string().min(1).max(512);\nconst Counter = z.number().finite().min(0).max(Number.MAX_SAFE_INTEGER);\nconst MissingMetric = z\n .object({\n status: z.enum([\"unavailable\", \"unsupported\", \"permissionDenied\", \"error\"]),\n reason: Text,\n })\n .strict();\nconst metric = <T extends z.ZodType>(value: T) =>\n z.union([z.object({ status: z.literal(\"available\"), value }).strict(), MissingMetric]);\nconst NumberMetric = metric(Counter);\nconst PercentMetric = metric(z.number().finite().min(0).max(100));\nconst StringMetric = metric(Text);\nexport const HardwareAvailabilitySchema = z.union([\n z.object({ status: z.literal(\"available\") }).strict(),\n MissingMetric,\n]);\nexport const HardwareGpuObservationSchema = z\n .object({\n index: z.number().int().min(0).max(4_294_967_295),\n uuid: StringMetric,\n name: StringMetric,\n pciBusId: StringMetric,\n memoryTotalBytes: NumberMetric,\n memoryUsedBytes: NumberMetric,\n utilizationPercent: PercentMetric,\n memoryUtilizationPercent: PercentMetric,\n temperatureCelsius: NumberMetric,\n powerWatts: NumberMetric,\n powerLimitWatts: NumberMetric,\n graphicsClockMhz: NumberMetric,\n memoryClockMhz: NumberMetric,\n eccCorrectedErrors: NumberMetric,\n eccUncorrectedErrors: NumberMetric,\n })\n .strict();\nexport const HardwareObservationSchema = z\n .object({\n schemaVersion: z.literal(1),\n collectorVersion: Text,\n sessionId: z.string().uuid(),\n sequence: Counter.int().min(1),\n observedAt: Timestamp,\n monotonicMs: Counter.int(),\n sampleIntervalMs: z.number().int().min(100).max(60_000),\n scope: z.enum([\"container\", \"host\", \"guest\", \"unknown\"]),\n cpu: z\n .object({\n logicalCores: NumberMetric,\n utilizationPercent: PercentMetric,\n cgroupCpuLimitCores: NumberMetric,\n cgroupUsageUsec: NumberMetric,\n })\n .strict(),\n memory: z\n .object({\n hostTotalBytes: NumberMetric,\n hostAvailableBytes: NumberMetric,\n cgroupLimitBytes: NumberMetric,\n cgroupCurrentBytes: NumberMetric,\n })\n .strict(),\n driverVersion: StringMetric,\n gpus: z.array(HardwareGpuObservationSchema).max(32),\n capabilities: z\n .object({\n cpu: HardwareAvailabilitySchema,\n memory: HardwareAvailabilitySchema,\n nvml: HardwareAvailabilitySchema,\n })\n .strict(),\n })\n .strict()\n .superRefine((value, context) => {\n const indices = new Set<number>();\n const uuids = new Set<string>();\n value.gpus.forEach((gpu, index) => {\n if (\n indices.has(gpu.index) ||\n (gpu.uuid.status === \"available\" && uuids.has(gpu.uuid.value))\n ) {\n context.addIssue({\n code: \"custom\",\n path: [\"gpus\", index],\n message: \"GPU identity must be unique within an observation.\",\n });\n }\n indices.add(gpu.index);\n if (gpu.uuid.status === \"available\") uuids.add(gpu.uuid.value);\n });\n });\nexport const HardwareFleetSnapshotSchema = z\n .object({\n schemaVersion: z.literal(1),\n teamId: Id,\n observedAt: Timestamp,\n nextCursor: Id.nullable(),\n workers: z\n .array(\n z\n .object({\n workerId: Id,\n provider: Id,\n state: Id,\n jobIds: z.array(Id).max(128),\n receivedAt: Timestamp.nullable(),\n observation: HardwareObservationSchema.nullable(),\n freshness: z.enum([\"missing\", \"fresh\", \"stale\"]),\n })\n .strict(),\n )\n .max(50),\n })\n .strict()\n .superRefine((value, context) => {\n const workers = new Set<string>();\n value.workers.forEach((worker, index) => {\n if (workers.has(worker.workerId))\n context.addIssue({\n code: \"custom\",\n path: [\"workers\", index, \"workerId\"],\n message: \"Duplicate worker identity.\",\n });\n workers.add(worker.workerId);\n if (\n (worker.observation === null) !== (worker.receivedAt === null) ||\n (worker.observation === null) !== (worker.freshness === \"missing\")\n ) {\n context.addIssue({\n code: \"custom\",\n path: [\"workers\", index],\n message: \"Observation, receive time and freshness must describe the same evidence.\",\n });\n }\n });\n });\nexport type HardwareObservation = z.infer<typeof HardwareObservationSchema>;\nexport type HardwareFleetSnapshot = z.infer<typeof HardwareFleetSnapshotSchema>;\nexport type HardwareObservationQuery = {\n teamId: string;\n workerId?: string;\n jobId?: string;\n cursor?: string;\n limit?: number;\n};\n\nexport function createTrainingHardwareClient(\n request: (path: string, init?: RequestInit) => Promise<unknown>,\n) {\n return {\n async hardwareObservations(query: HardwareObservationQuery): Promise<HardwareFleetSnapshot> {\n const teamId = Id.parse(query.teamId);\n const params = new URLSearchParams();\n if (query.workerId !== undefined) params.set(\"workerId\", Id.parse(query.workerId));\n if (query.jobId !== undefined) params.set(\"jobId\", Id.parse(query.jobId));\n if (query.cursor !== undefined) params.set(\"cursor\", Id.parse(query.cursor));\n const limit = z\n .number()\n .int()\n .min(1)\n .max(50)\n .parse(query.limit ?? 25);\n params.set(\"limit\", String(limit));\n const suffix = params.size ? `?${params}` : \"\";\n const snapshot = HardwareFleetSnapshotSchema.parse(\n await request(`/v1/managed-rl/hardware-observations${suffix}`, {\n headers: { \"x-openpond-team-id\": teamId },\n }),\n );\n if (\n snapshot.teamId !== teamId ||\n snapshot.workers.length > limit ||\n snapshot.workers.some(\n (worker) =>\n (query.workerId !== undefined && worker.workerId !== query.workerId) ||\n (query.jobId !== undefined && !worker.jobIds.includes(query.jobId)) ||\n (query.cursor !== undefined && worker.workerId <= query.cursor),\n ) ||\n (snapshot.nextCursor !== null && snapshot.nextCursor !== snapshot.workers.at(-1)?.workerId)\n ) {\n throw new OpenPondProtocolError(\n \"hardware_observation_scope_mismatch\",\n \"Hardware observations do not match the requested workspace, worker or job.\",\n );\n }\n return snapshot;\n },\n };\n}\n\n/** Focused read-only client; avoids loading unrelated training contracts. */\nexport function createHardwareObservationClient(input: TrainingTransportOptions) {\n return createTrainingHardwareClient(createTrainingRequest(input));\n}\n"],"mappings":"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","names":[]}
@@ -11,7 +11,7 @@ import {
11
11
  TasksetPreferenceComparisonBindingSchema,
12
12
  TasksetPurposeSchema,
13
13
  TasksetSourceRefSchema
14
- } from "./chunk-RFKZSSLB.js";
14
+ } from "./chunk-IFBCLRBM.js";
15
15
  import {
16
16
  ModelTasksetDraftPreparationSchema
17
17
  } from "./chunk-TK3DXH7A.js";
@@ -910,4 +910,4 @@ export {
910
910
  computeTasksetHash,
911
911
  validatePortability
912
912
  };
913
- //# sourceMappingURL=chunk-IOZCYSJ6.js.map
913
+ //# sourceMappingURL=chunk-GHPCQXG5.js.map