openpond-sdk 0.12.9 → 0.12.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/TRAINING_PROTOCOL.md +40 -0
- package/dist/advanced-refiner-evaluations.js +8 -7
- package/dist/candidate-evaluations.js +7 -6
- package/dist/{chunk-MGFI4226.js → chunk-2DK7UBAG.js} +3 -3
- package/dist/{chunk-U4QIGSP5.js → chunk-4L556MYM.js} +3 -3
- package/dist/{chunk-MRUDFIB6.js → chunk-5QMREXMU.js} +6 -4
- package/dist/{chunk-MRUDFIB6.js.map → chunk-5QMREXMU.js.map} +1 -1
- package/dist/{chunk-UWM2ZPGS.js → chunk-7FYPFHCQ.js} +3 -3
- package/dist/{chunk-RFKZSSLB.js → chunk-7WKCQ4V5.js} +5 -3
- package/dist/{chunk-RFKZSSLB.js.map → chunk-7WKCQ4V5.js.map} +1 -1
- package/dist/chunk-B3ZHJ2KK.js +152 -0
- package/dist/chunk-B3ZHJ2KK.js.map +1 -0
- package/dist/{chunk-YSEYPMQ3.js → chunk-BQ2C2Y54.js} +12 -154
- package/dist/chunk-BQ2C2Y54.js.map +1 -0
- package/dist/{chunk-HYCHLMP7.js → chunk-DMN6EF3R.js} +2 -2
- package/dist/{chunk-QVLJFJBU.js → chunk-ESW25WSD.js} +6 -6
- package/dist/chunk-EZME7DV4.js +161 -0
- package/dist/chunk-EZME7DV4.js.map +1 -0
- package/dist/{chunk-UMK6DH75.js → chunk-FC56EMHT.js} +6 -4
- package/dist/{chunk-UMK6DH75.js.map → chunk-FC56EMHT.js.map} +1 -1
- package/dist/{chunk-YP5DXGGC.js → chunk-GIEST52U.js} +2 -2
- package/dist/{chunk-BWFG46HX.js → chunk-GRQWKATA.js} +2 -2
- package/dist/chunk-GX6KMHW2.js +108 -0
- package/dist/chunk-GX6KMHW2.js.map +1 -0
- package/dist/{chunk-WYR3MZHU.js → chunk-HDKP6KE2.js} +2 -2
- package/dist/{chunk-EEZ5YHJQ.js → chunk-ICFFZ4WC.js} +3 -3
- package/dist/{chunk-EWRWGFKD.js → chunk-IIQENUOK.js} +6 -4
- package/dist/{chunk-EWRWGFKD.js.map → chunk-IIQENUOK.js.map} +1 -1
- package/dist/{chunk-LUFOAMN5.js → chunk-LKKKTBLL.js} +2 -2
- package/dist/{chunk-CJDEVI3T.js → chunk-LT2YQCZI.js} +5 -3
- package/dist/{chunk-CJDEVI3T.js.map → chunk-LT2YQCZI.js.map} +1 -1
- package/dist/{chunk-QHCY4MBG.js → chunk-PKW3II5M.js} +2 -2
- package/dist/{chunk-XL44IXBO.js → chunk-PT72OARU.js} +5 -5
- package/dist/{chunk-TWJYL5YF.js → chunk-QQ444G6A.js} +5 -5
- package/dist/{chunk-D3WOJTUY.js → chunk-RYDUAY52.js} +4 -14
- package/dist/chunk-RYDUAY52.js.map +1 -0
- package/dist/chunk-U2KGUAIS.js +18 -0
- package/dist/chunk-U2KGUAIS.js.map +1 -0
- package/dist/{chunk-IOZCYSJ6.js → chunk-UAYXORU5.js} +2 -2
- package/dist/{chunk-TZREEZ4C.js → chunk-WEL535AI.js} +9 -9
- package/dist/{chunk-EYMZQML2.js → chunk-WOD72SFI.js} +525 -484
- package/dist/chunk-WOD72SFI.js.map +1 -0
- package/dist/{chunk-GGG6H4MK.js → chunk-XJKGCU2K.js} +2 -2
- package/dist/{chunk-GZSQIOAH.js → chunk-XNRM3QGR.js} +6 -6
- package/dist/{chunk-CZXN63A4.js → chunk-ZZZU6XER.js} +2 -2
- package/dist/connected-evidence.js +18 -15
- package/dist/dataset-workspaces.js +21 -18
- package/dist/dataset-workspaces.js.map +1 -1
- package/dist/errors.js +13 -0
- package/dist/errors.js.map +1 -0
- package/dist/experiment-evaluation-schedules.js +22 -19
- package/dist/experiment-improvements.js +9 -8
- package/dist/experiments.js +22 -19
- package/dist/index.js +63 -58
- package/dist/index.js.map +1 -1
- package/dist/learning.js +4 -2
- package/dist/learning.js.map +1 -1
- package/dist/model-projects.js +6 -4
- package/dist/model-starter-attempts.js +3 -2
- package/dist/model-starter-catalog.js +13 -10
- package/dist/model-starter-catalog.js.map +1 -1
- package/dist/model-starters.js +13 -10
- package/dist/model-taskset-runs.js +4 -3
- package/dist/model-taskset-runs.js.map +1 -1
- package/dist/post-training.js +7 -6
- package/dist/taskset-drafts.js +17 -14
- package/dist/taskset-drafts.js.map +1 -1
- package/dist/taskset-packages.js +24 -21
- package/dist/tool-learning-local-store.js +202 -0
- package/dist/tool-learning-local-store.js.map +1 -0
- package/dist/tool-learning.js +3 -0
- package/dist/tool-learning.js.map +1 -0
- package/dist/training-bundle.js +31 -16
- package/dist/training-bundle.js.map +1 -1
- package/dist/training-hardware.js +23 -0
- package/dist/training-hardware.js.map +1 -0
- package/dist/training.js +30 -12
- package/dist/types/packages/sdk/src/connected-evidence-client.d.ts +40 -40
- package/dist/types/packages/sdk/src/dataset-preparation-workspace.d.ts +20 -20
- package/dist/types/packages/sdk/src/errors.d.ts +3 -0
- package/dist/types/packages/sdk/src/errors.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-client.d.ts +636 -636
- package/dist/types/packages/sdk/src/experiment-improvement-client.d.ts +1622 -1622
- package/dist/types/packages/sdk/src/experiment-run-details.d.ts +54 -54
- package/dist/types/packages/sdk/src/learning-client.d.ts +1 -6
- package/dist/types/packages/sdk/src/learning-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/learning-error.d.ts +7 -0
- package/dist/types/packages/sdk/src/learning-error.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/managed-training-preparation.d.ts +2 -0
- package/dist/types/packages/sdk/src/managed-training-preparation.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-projects.d.ts +24 -0
- package/dist/types/packages/sdk/src/model-projects.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starters.d.ts +6 -0
- package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/post-training.d.ts +58 -54
- package/dist/types/packages/sdk/src/post-training.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-authored-files.d.ts +20 -20
- package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +2 -0
- package/dist/types/packages/sdk/src/taskset-draft-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-client.d.ts +6 -0
- package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +20 -20
- package/dist/types/packages/sdk/src/tool-learning-local-store.d.ts +72 -0
- package/dist/types/packages/sdk/src/tool-learning-local-store.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/tool-learning.d.ts +3 -0
- package/dist/types/packages/sdk/src/tool-learning.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-compute-selection.d.ts +2 -0
- package/dist/types/packages/sdk/src/training-compute-selection.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-estimates.d.ts +9 -1
- package/dist/types/packages/sdk/src/training-estimates.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-hardware.d.ts +886 -0
- package/dist/types/packages/sdk/src/training-hardware.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-preparations.d.ts +22 -0
- package/dist/types/packages/sdk/src/training-preparations.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts +2 -0
- package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-supervised.d.ts +101 -0
- package/dist/types/packages/sdk/src/training-supervised.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-transport.d.ts +24 -0
- package/dist/types/packages/sdk/src/training-transport.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training.d.ts +34 -16
- package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
- package/package.json +18 -2
- package/dist/chunk-D3WOJTUY.js.map +0 -1
- package/dist/chunk-EYMZQML2.js.map +0 -1
- package/dist/chunk-YSEYPMQ3.js.map +0 -1
- /package/dist/{chunk-MGFI4226.js.map → chunk-2DK7UBAG.js.map} +0 -0
- /package/dist/{chunk-U4QIGSP5.js.map → chunk-4L556MYM.js.map} +0 -0
- /package/dist/{chunk-UWM2ZPGS.js.map → chunk-7FYPFHCQ.js.map} +0 -0
- /package/dist/{chunk-HYCHLMP7.js.map → chunk-DMN6EF3R.js.map} +0 -0
- /package/dist/{chunk-QVLJFJBU.js.map → chunk-ESW25WSD.js.map} +0 -0
- /package/dist/{chunk-YP5DXGGC.js.map → chunk-GIEST52U.js.map} +0 -0
- /package/dist/{chunk-BWFG46HX.js.map → chunk-GRQWKATA.js.map} +0 -0
- /package/dist/{chunk-WYR3MZHU.js.map → chunk-HDKP6KE2.js.map} +0 -0
- /package/dist/{chunk-EEZ5YHJQ.js.map → chunk-ICFFZ4WC.js.map} +0 -0
- /package/dist/{chunk-LUFOAMN5.js.map → chunk-LKKKTBLL.js.map} +0 -0
- /package/dist/{chunk-QHCY4MBG.js.map → chunk-PKW3II5M.js.map} +0 -0
- /package/dist/{chunk-XL44IXBO.js.map → chunk-PT72OARU.js.map} +0 -0
- /package/dist/{chunk-TWJYL5YF.js.map → chunk-QQ444G6A.js.map} +0 -0
- /package/dist/{chunk-IOZCYSJ6.js.map → chunk-UAYXORU5.js.map} +0 -0
- /package/dist/{chunk-TZREEZ4C.js.map → chunk-WEL535AI.js.map} +0 -0
- /package/dist/{chunk-GGG6H4MK.js.map → chunk-XJKGCU2K.js.map} +0 -0
- /package/dist/{chunk-GZSQIOAH.js.map → chunk-XNRM3QGR.js.map} +0 -0
- /package/dist/{chunk-CZXN63A4.js.map → chunk-ZZZU6XER.js.map} +0 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
// src/protocol.ts
|
|
2
|
+
var OPENPOND_TRAINING_PROTOCOL_MAJOR = 2;
|
|
3
|
+
var OPENPOND_TRAINING_MEDIA_TYPE = "application/vnd.openpond.training+json;version=2";
|
|
4
|
+
var OPENPOND_MODEL_PROJECT_MEDIA_TYPE = "application/vnd.openpond.model-project+json;version=2";
|
|
5
|
+
var TRAINING_JOB_SUBMISSION_MAX_BYTES = 1048576;
|
|
6
|
+
var TRAINING_INPUT_ARTIFACT_MAX_BYTES = 67108864;
|
|
7
|
+
var TRAINING_API_RESPONSE_MAX_BYTES = 8388608;
|
|
8
|
+
var MODEL_PROJECT_SYNC_MAX_BYTES = 524288;
|
|
9
|
+
var MODEL_PROJECT_API_RESPONSE_MAX_BYTES = 8388608;
|
|
10
|
+
var OpenPondProtocolError = class extends Error {
|
|
11
|
+
code;
|
|
12
|
+
constructor(code, message) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.name = "OpenPondProtocolError";
|
|
15
|
+
this.code = code;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
function canonicalJson(value) {
|
|
19
|
+
return JSON.stringify(normalizeCanonicalJson(value));
|
|
20
|
+
}
|
|
21
|
+
function canonicalJsonByteLength(value) {
|
|
22
|
+
return new TextEncoder().encode(canonicalJson(value)).byteLength;
|
|
23
|
+
}
|
|
24
|
+
async function canonicalSha256(value) {
|
|
25
|
+
const bytes = new TextEncoder().encode(canonicalJson(value));
|
|
26
|
+
const digest = await globalThis.crypto.subtle.digest("SHA-256", bytes);
|
|
27
|
+
return Array.from(
|
|
28
|
+
new Uint8Array(digest),
|
|
29
|
+
(byte) => byte.toString(16).padStart(2, "0")
|
|
30
|
+
).join("");
|
|
31
|
+
}
|
|
32
|
+
function assertCanonicalPayloadSize(value, maximumBytes, label) {
|
|
33
|
+
const actualBytes = canonicalJsonByteLength(value);
|
|
34
|
+
if (actualBytes > maximumBytes) {
|
|
35
|
+
throw new OpenPondProtocolError(
|
|
36
|
+
"payload_too_large",
|
|
37
|
+
`${label} is ${actualBytes} bytes; the maximum is ${maximumBytes} bytes.`
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function parseBoundedJson(text, maximumBytes, label) {
|
|
42
|
+
const actualBytes = new TextEncoder().encode(text).byteLength;
|
|
43
|
+
if (actualBytes > maximumBytes) {
|
|
44
|
+
throw new OpenPondProtocolError(
|
|
45
|
+
"response_too_large",
|
|
46
|
+
`${label} is ${actualBytes} bytes; the maximum is ${maximumBytes} bytes.`
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
return JSON.parse(text);
|
|
51
|
+
} catch {
|
|
52
|
+
throw new OpenPondProtocolError(
|
|
53
|
+
"invalid_json",
|
|
54
|
+
`${label} was not valid JSON.`
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async function readBoundedJsonResponse(response, maximumBytes, label) {
|
|
59
|
+
const reader = response.body?.getReader();
|
|
60
|
+
if (!reader) return parseBoundedJson("", maximumBytes, label);
|
|
61
|
+
const decoder = new TextDecoder();
|
|
62
|
+
let bytes = 0;
|
|
63
|
+
let text = "";
|
|
64
|
+
try {
|
|
65
|
+
for (; ; ) {
|
|
66
|
+
const chunk = await reader.read();
|
|
67
|
+
if (chunk.done) break;
|
|
68
|
+
bytes += chunk.value.byteLength;
|
|
69
|
+
if (bytes > maximumBytes) {
|
|
70
|
+
throw new OpenPondProtocolError(
|
|
71
|
+
"response_too_large",
|
|
72
|
+
`${label} exceeds the maximum of ${maximumBytes} bytes.`
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
text += decoder.decode(chunk.value, { stream: true });
|
|
76
|
+
}
|
|
77
|
+
text += decoder.decode();
|
|
78
|
+
return parseBoundedJson(text, maximumBytes, label);
|
|
79
|
+
} catch (error) {
|
|
80
|
+
try {
|
|
81
|
+
await reader.cancel();
|
|
82
|
+
} catch {
|
|
83
|
+
}
|
|
84
|
+
throw error;
|
|
85
|
+
} finally {
|
|
86
|
+
try {
|
|
87
|
+
reader.releaseLock();
|
|
88
|
+
} catch {
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function normalizeCanonicalJson(value) {
|
|
93
|
+
if (value === null || typeof value === "string" || typeof value === "boolean") {
|
|
94
|
+
return value;
|
|
95
|
+
}
|
|
96
|
+
if (typeof value === "number") {
|
|
97
|
+
if (!Number.isFinite(value)) {
|
|
98
|
+
throw new OpenPondProtocolError(
|
|
99
|
+
"non_json_value",
|
|
100
|
+
"Canonical JSON cannot contain a non-finite number."
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
return Object.is(value, -0) ? 0 : value;
|
|
104
|
+
}
|
|
105
|
+
if (Array.isArray(value)) {
|
|
106
|
+
return value.map((entry) => normalizeCanonicalJson(entry));
|
|
107
|
+
}
|
|
108
|
+
if (typeof value === "object") {
|
|
109
|
+
const prototype = Object.getPrototypeOf(value);
|
|
110
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
111
|
+
throw new OpenPondProtocolError(
|
|
112
|
+
"non_json_value",
|
|
113
|
+
"Canonical JSON accepts only plain objects."
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
const result = /* @__PURE__ */ Object.create(null);
|
|
117
|
+
for (const key of Object.keys(value).sort()) {
|
|
118
|
+
const entry = value[key];
|
|
119
|
+
if (entry === void 0 || typeof entry === "function" || typeof entry === "symbol") {
|
|
120
|
+
throw new OpenPondProtocolError(
|
|
121
|
+
"non_json_value",
|
|
122
|
+
`Canonical JSON cannot contain ${typeof entry} at ${key}.`
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
result[key] = normalizeCanonicalJson(entry);
|
|
126
|
+
}
|
|
127
|
+
return result;
|
|
128
|
+
}
|
|
129
|
+
throw new OpenPondProtocolError(
|
|
130
|
+
"non_json_value",
|
|
131
|
+
`Canonical JSON cannot contain ${typeof value}.`
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export {
|
|
136
|
+
OPENPOND_TRAINING_PROTOCOL_MAJOR,
|
|
137
|
+
OPENPOND_TRAINING_MEDIA_TYPE,
|
|
138
|
+
OPENPOND_MODEL_PROJECT_MEDIA_TYPE,
|
|
139
|
+
TRAINING_JOB_SUBMISSION_MAX_BYTES,
|
|
140
|
+
TRAINING_INPUT_ARTIFACT_MAX_BYTES,
|
|
141
|
+
TRAINING_API_RESPONSE_MAX_BYTES,
|
|
142
|
+
MODEL_PROJECT_SYNC_MAX_BYTES,
|
|
143
|
+
MODEL_PROJECT_API_RESPONSE_MAX_BYTES,
|
|
144
|
+
OpenPondProtocolError,
|
|
145
|
+
canonicalJson,
|
|
146
|
+
canonicalJsonByteLength,
|
|
147
|
+
canonicalSha256,
|
|
148
|
+
assertCanonicalPayloadSize,
|
|
149
|
+
parseBoundedJson,
|
|
150
|
+
readBoundedJsonResponse
|
|
151
|
+
};
|
|
152
|
+
//# sourceMappingURL=chunk-B3ZHJ2KK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/protocol.ts"],"sourcesContent":["export type CanonicalJsonValue =\n | null\n | boolean\n | number\n | string\n | CanonicalJsonValue[]\n | { [key: string]: CanonicalJsonValue };\n\nexport const OPENPOND_TRAINING_PROTOCOL_MAJOR = 2 as const;\nexport const OPENPOND_TRAINING_MEDIA_TYPE =\n \"application/vnd.openpond.training+json;version=2\" as const;\nexport const OPENPOND_MODEL_PROJECT_MEDIA_TYPE =\n \"application/vnd.openpond.model-project+json;version=2\" as const;\n\nexport const TRAINING_JOB_SUBMISSION_MAX_BYTES = 1_048_576;\nexport const TRAINING_INPUT_ARTIFACT_MAX_BYTES = 67_108_864;\nexport const TRAINING_API_RESPONSE_MAX_BYTES = 8_388_608;\nexport const MODEL_PROJECT_SYNC_MAX_BYTES = 524_288;\nexport const MODEL_PROJECT_API_RESPONSE_MAX_BYTES = 8_388_608;\n\nexport class OpenPondProtocolError extends Error {\n readonly code: string;\n\n constructor(code: string, message: string) {\n super(message);\n this.name = \"OpenPondProtocolError\";\n this.code = code;\n }\n}\n\n/**\n * Deterministic JSON used for content-addressed OpenPond protocol objects.\n * Object keys are sorted by Unicode code point, arrays retain their authored\n * order, and non-JSON/non-finite values are rejected rather than coerced.\n */\nexport function canonicalJson(value: unknown): string {\n return JSON.stringify(normalizeCanonicalJson(value));\n}\n\nexport function canonicalJsonByteLength(value: unknown): number {\n return new TextEncoder().encode(canonicalJson(value)).byteLength;\n}\n\nexport async function canonicalSha256(value: unknown): Promise<string> {\n const bytes = new TextEncoder().encode(canonicalJson(value));\n const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", bytes);\n return Array.from(new Uint8Array(digest), (byte) =>\n byte.toString(16).padStart(2, \"0\"),\n ).join(\"\");\n}\n\nexport function assertCanonicalPayloadSize(\n value: unknown,\n maximumBytes: number,\n label: string,\n): void {\n const actualBytes = canonicalJsonByteLength(value);\n if (actualBytes > maximumBytes) {\n throw new OpenPondProtocolError(\n \"payload_too_large\",\n `${label} is ${actualBytes} bytes; the maximum is ${maximumBytes} bytes.`,\n );\n }\n}\n\nexport function parseBoundedJson(\n text: string,\n maximumBytes: number,\n label: string,\n): unknown {\n const actualBytes = new TextEncoder().encode(text).byteLength;\n if (actualBytes > maximumBytes) {\n throw new OpenPondProtocolError(\n \"response_too_large\",\n `${label} is ${actualBytes} bytes; the maximum is ${maximumBytes} bytes.`,\n );\n }\n try {\n return JSON.parse(text) as unknown;\n } catch {\n throw new OpenPondProtocolError(\n \"invalid_json\",\n `${label} was not valid JSON.`,\n );\n }\n}\n\n/** Bound the wire body while consuming it, before allocating the complete JSON\n * string. Reader cleanup must never replace the original transport/JSON error. */\nexport async function readBoundedJsonResponse(\n response: Response,\n maximumBytes: number,\n label: string,\n): Promise<unknown> {\n const reader = response.body?.getReader();\n if (!reader) return parseBoundedJson(\"\", maximumBytes, label);\n const decoder = new TextDecoder();\n let bytes = 0;\n let text = \"\";\n try {\n for (;;) {\n const chunk = await reader.read();\n if (chunk.done) break;\n bytes += chunk.value.byteLength;\n if (bytes > maximumBytes) {\n throw new OpenPondProtocolError(\n \"response_too_large\",\n `${label} exceeds the maximum of ${maximumBytes} bytes.`,\n );\n }\n text += decoder.decode(chunk.value, { stream: true });\n }\n text += decoder.decode();\n return parseBoundedJson(text, maximumBytes, label);\n } catch (error) {\n try { await reader.cancel(); } catch { /* Preserve the primary failure. */ }\n throw error;\n } finally {\n try { reader.releaseLock(); } catch { /* Never mask a transport/parse failure. */ }\n }\n}\n\nfunction normalizeCanonicalJson(value: unknown): CanonicalJsonValue {\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new OpenPondProtocolError(\n \"non_json_value\",\n \"Canonical JSON cannot contain a non-finite number.\",\n );\n }\n return Object.is(value, -0) ? 0 : value;\n }\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeCanonicalJson(entry));\n }\n if (typeof value === \"object\") {\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new OpenPondProtocolError(\n \"non_json_value\",\n \"Canonical JSON accepts only plain objects.\",\n );\n }\n const result: Record<string, CanonicalJsonValue> = Object.create(null);\n for (const key of Object.keys(value as Record<string, unknown>).sort()) {\n const entry = (value as Record<string, unknown>)[key];\n if (entry === undefined || typeof entry === \"function\" || typeof entry === \"symbol\") {\n throw new OpenPondProtocolError(\n \"non_json_value\",\n `Canonical JSON cannot contain ${typeof entry} at ${key}.`,\n );\n }\n result[key] = normalizeCanonicalJson(entry);\n }\n return result;\n }\n throw new OpenPondProtocolError(\n \"non_json_value\",\n `Canonical JSON cannot contain ${typeof value}.`,\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MODEL_PROJECT_API_RESPONSE_MAX_BYTES,
|
|
3
|
+
MODEL_PROJECT_SYNC_MAX_BYTES,
|
|
4
|
+
OPENPOND_MODEL_PROJECT_MEDIA_TYPE,
|
|
5
|
+
OpenPondProtocolError,
|
|
6
|
+
assertCanonicalPayloadSize,
|
|
7
|
+
canonicalSha256,
|
|
8
|
+
readBoundedJsonResponse
|
|
9
|
+
} from "./chunk-B3ZHJ2KK.js";
|
|
1
10
|
import {
|
|
2
11
|
ModelInitialLearningSchema
|
|
3
12
|
} from "./chunk-CL3IOOVL.js";
|
|
@@ -10,8 +19,8 @@ import { z } from "zod";
|
|
|
10
19
|
var Id = z.string().trim().min(1).max(191);
|
|
11
20
|
var Hash = z.string().regex(/^[a-f0-9]{64}$/);
|
|
12
21
|
var TrainingGpuSelectionSchema = z.discriminatedUnion("mode", [
|
|
13
|
-
z.object({ mode: z.literal("automatic"), objective: z.enum(["balanced", "fast", "economical"]) }).strict(),
|
|
14
|
-
z.object({ mode: z.literal("manual"), availabilityId: Id, gpuType: z.string().trim().min(1).max(256) }).strict()
|
|
22
|
+
z.object({ mode: z.literal("automatic"), objective: z.enum(["balanced", "fast", "economical"]), gpuCount: z.union([z.literal(1), z.literal(2)]).optional() }).strict(),
|
|
23
|
+
z.object({ mode: z.literal("manual"), availabilityId: Id, gpuType: z.string().trim().min(1).max(256), gpuCount: z.union([z.literal(1), z.literal(2)]).optional() }).strict()
|
|
15
24
|
]);
|
|
16
25
|
var TrainingEstimateReviewSchema = z.object({
|
|
17
26
|
estimateId: Id,
|
|
@@ -45,142 +54,6 @@ var TrainingGpuCatalogSchema = z.object({
|
|
|
45
54
|
|
|
46
55
|
// src/model-projects.ts
|
|
47
56
|
import { assertBoundedTaskJson } from "@openpond/evals/task-schema";
|
|
48
|
-
|
|
49
|
-
// src/protocol.ts
|
|
50
|
-
var OPENPOND_TRAINING_PROTOCOL_MAJOR = 2;
|
|
51
|
-
var OPENPOND_TRAINING_MEDIA_TYPE = "application/vnd.openpond.training+json;version=2";
|
|
52
|
-
var OPENPOND_MODEL_PROJECT_MEDIA_TYPE = "application/vnd.openpond.model-project+json;version=2";
|
|
53
|
-
var TRAINING_JOB_SUBMISSION_MAX_BYTES = 1048576;
|
|
54
|
-
var TRAINING_INPUT_ARTIFACT_MAX_BYTES = 67108864;
|
|
55
|
-
var TRAINING_API_RESPONSE_MAX_BYTES = 8388608;
|
|
56
|
-
var MODEL_PROJECT_SYNC_MAX_BYTES = 524288;
|
|
57
|
-
var MODEL_PROJECT_API_RESPONSE_MAX_BYTES = 8388608;
|
|
58
|
-
var OpenPondProtocolError = class extends Error {
|
|
59
|
-
code;
|
|
60
|
-
constructor(code, message) {
|
|
61
|
-
super(message);
|
|
62
|
-
this.name = "OpenPondProtocolError";
|
|
63
|
-
this.code = code;
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
function canonicalJson(value) {
|
|
67
|
-
return JSON.stringify(normalizeCanonicalJson(value));
|
|
68
|
-
}
|
|
69
|
-
function canonicalJsonByteLength(value) {
|
|
70
|
-
return new TextEncoder().encode(canonicalJson(value)).byteLength;
|
|
71
|
-
}
|
|
72
|
-
async function canonicalSha256(value) {
|
|
73
|
-
const bytes = new TextEncoder().encode(canonicalJson(value));
|
|
74
|
-
const digest = await globalThis.crypto.subtle.digest("SHA-256", bytes);
|
|
75
|
-
return Array.from(
|
|
76
|
-
new Uint8Array(digest),
|
|
77
|
-
(byte) => byte.toString(16).padStart(2, "0")
|
|
78
|
-
).join("");
|
|
79
|
-
}
|
|
80
|
-
function assertCanonicalPayloadSize(value, maximumBytes, label) {
|
|
81
|
-
const actualBytes = canonicalJsonByteLength(value);
|
|
82
|
-
if (actualBytes > maximumBytes) {
|
|
83
|
-
throw new OpenPondProtocolError(
|
|
84
|
-
"payload_too_large",
|
|
85
|
-
`${label} is ${actualBytes} bytes; the maximum is ${maximumBytes} bytes.`
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
function parseBoundedJson(text, maximumBytes, label) {
|
|
90
|
-
const actualBytes = new TextEncoder().encode(text).byteLength;
|
|
91
|
-
if (actualBytes > maximumBytes) {
|
|
92
|
-
throw new OpenPondProtocolError(
|
|
93
|
-
"response_too_large",
|
|
94
|
-
`${label} is ${actualBytes} bytes; the maximum is ${maximumBytes} bytes.`
|
|
95
|
-
);
|
|
96
|
-
}
|
|
97
|
-
try {
|
|
98
|
-
return JSON.parse(text);
|
|
99
|
-
} catch {
|
|
100
|
-
throw new OpenPondProtocolError(
|
|
101
|
-
"invalid_json",
|
|
102
|
-
`${label} was not valid JSON.`
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
async function readBoundedJsonResponse(response, maximumBytes, label) {
|
|
107
|
-
const reader = response.body?.getReader();
|
|
108
|
-
if (!reader) return parseBoundedJson("", maximumBytes, label);
|
|
109
|
-
const decoder = new TextDecoder();
|
|
110
|
-
let bytes = 0;
|
|
111
|
-
let text = "";
|
|
112
|
-
try {
|
|
113
|
-
for (; ; ) {
|
|
114
|
-
const chunk = await reader.read();
|
|
115
|
-
if (chunk.done) break;
|
|
116
|
-
bytes += chunk.value.byteLength;
|
|
117
|
-
if (bytes > maximumBytes) {
|
|
118
|
-
throw new OpenPondProtocolError(
|
|
119
|
-
"response_too_large",
|
|
120
|
-
`${label} exceeds the maximum of ${maximumBytes} bytes.`
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
text += decoder.decode(chunk.value, { stream: true });
|
|
124
|
-
}
|
|
125
|
-
text += decoder.decode();
|
|
126
|
-
return parseBoundedJson(text, maximumBytes, label);
|
|
127
|
-
} catch (error) {
|
|
128
|
-
try {
|
|
129
|
-
await reader.cancel();
|
|
130
|
-
} catch {
|
|
131
|
-
}
|
|
132
|
-
throw error;
|
|
133
|
-
} finally {
|
|
134
|
-
try {
|
|
135
|
-
reader.releaseLock();
|
|
136
|
-
} catch {
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
function normalizeCanonicalJson(value) {
|
|
141
|
-
if (value === null || typeof value === "string" || typeof value === "boolean") {
|
|
142
|
-
return value;
|
|
143
|
-
}
|
|
144
|
-
if (typeof value === "number") {
|
|
145
|
-
if (!Number.isFinite(value)) {
|
|
146
|
-
throw new OpenPondProtocolError(
|
|
147
|
-
"non_json_value",
|
|
148
|
-
"Canonical JSON cannot contain a non-finite number."
|
|
149
|
-
);
|
|
150
|
-
}
|
|
151
|
-
return Object.is(value, -0) ? 0 : value;
|
|
152
|
-
}
|
|
153
|
-
if (Array.isArray(value)) {
|
|
154
|
-
return value.map((entry) => normalizeCanonicalJson(entry));
|
|
155
|
-
}
|
|
156
|
-
if (typeof value === "object") {
|
|
157
|
-
const prototype = Object.getPrototypeOf(value);
|
|
158
|
-
if (prototype !== Object.prototype && prototype !== null) {
|
|
159
|
-
throw new OpenPondProtocolError(
|
|
160
|
-
"non_json_value",
|
|
161
|
-
"Canonical JSON accepts only plain objects."
|
|
162
|
-
);
|
|
163
|
-
}
|
|
164
|
-
const result = /* @__PURE__ */ Object.create(null);
|
|
165
|
-
for (const key of Object.keys(value).sort()) {
|
|
166
|
-
const entry = value[key];
|
|
167
|
-
if (entry === void 0 || typeof entry === "function" || typeof entry === "symbol") {
|
|
168
|
-
throw new OpenPondProtocolError(
|
|
169
|
-
"non_json_value",
|
|
170
|
-
`Canonical JSON cannot contain ${typeof entry} at ${key}.`
|
|
171
|
-
);
|
|
172
|
-
}
|
|
173
|
-
result[key] = normalizeCanonicalJson(entry);
|
|
174
|
-
}
|
|
175
|
-
return result;
|
|
176
|
-
}
|
|
177
|
-
throw new OpenPondProtocolError(
|
|
178
|
-
"non_json_value",
|
|
179
|
-
`Canonical JSON cannot contain ${typeof value}.`
|
|
180
|
-
);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
// src/model-projects.ts
|
|
184
57
|
var IdSchema = z2.string().trim().min(1).max(500);
|
|
185
58
|
var HashSchema = z2.string().regex(/^[a-f0-9]{64}$/);
|
|
186
59
|
var TimestampSchema = z2.string().datetime({ offset: true });
|
|
@@ -539,21 +412,6 @@ export {
|
|
|
539
412
|
TrainingGpuSelectionSchema,
|
|
540
413
|
TrainingEstimateReviewSchema,
|
|
541
414
|
TrainingGpuCatalogSchema,
|
|
542
|
-
OPENPOND_TRAINING_PROTOCOL_MAJOR,
|
|
543
|
-
OPENPOND_TRAINING_MEDIA_TYPE,
|
|
544
|
-
OPENPOND_MODEL_PROJECT_MEDIA_TYPE,
|
|
545
|
-
TRAINING_JOB_SUBMISSION_MAX_BYTES,
|
|
546
|
-
TRAINING_INPUT_ARTIFACT_MAX_BYTES,
|
|
547
|
-
TRAINING_API_RESPONSE_MAX_BYTES,
|
|
548
|
-
MODEL_PROJECT_SYNC_MAX_BYTES,
|
|
549
|
-
MODEL_PROJECT_API_RESPONSE_MAX_BYTES,
|
|
550
|
-
OpenPondProtocolError,
|
|
551
|
-
canonicalJson,
|
|
552
|
-
canonicalJsonByteLength,
|
|
553
|
-
canonicalSha256,
|
|
554
|
-
assertCanonicalPayloadSize,
|
|
555
|
-
parseBoundedJson,
|
|
556
|
-
readBoundedJsonResponse,
|
|
557
415
|
ModelProjectImmutableRefSchema,
|
|
558
416
|
ModelProjectVersionedRefSchema,
|
|
559
417
|
ModelProjectBaseModelSchema,
|
|
@@ -581,4 +439,4 @@ export {
|
|
|
581
439
|
OpenPondModelProjectApiError,
|
|
582
440
|
createModelProjectsClient
|
|
583
441
|
};
|
|
584
|
-
//# sourceMappingURL=chunk-
|
|
442
|
+
//# sourceMappingURL=chunk-BQ2C2Y54.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/model-projects.ts","../src/training-compute-selection.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { TrainingGpuSelectionSchema } from \"./training-compute-selection.js\";\nimport { ModelInitialLearningSchema, type ModelInitialLearning } from \"./model-learning-intent.js\";\nexport { ModelInitialLearningSchema, type ModelInitialLearning } from \"./model-learning-intent.js\";\nimport { assertBoundedTaskJson } from \"@openpond/evals/task-schema\";\n\nimport {\n MODEL_PROJECT_API_RESPONSE_MAX_BYTES,\n MODEL_PROJECT_SYNC_MAX_BYTES,\n OPENPOND_MODEL_PROJECT_MEDIA_TYPE,\n OpenPondProtocolError,\n assertCanonicalPayloadSize,\n canonicalSha256,\n readBoundedJsonResponse,\n} from \"./protocol.js\";\n\nexport {\n MODEL_PROJECT_API_RESPONSE_MAX_BYTES,\n MODEL_PROJECT_SYNC_MAX_BYTES,\n OPENPOND_MODEL_PROJECT_MEDIA_TYPE,\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\nexport const ModelProjectImmutableRefSchema = z\n .object({\n id: IdSchema,\n contentHash: HashSchema,\n })\n .strict();\n\nexport const ModelProjectVersionedRefSchema =\n ModelProjectImmutableRefSchema.extend({\n revision: z.number().int().positive(),\n }).strict();\n\nexport const ModelProjectBaseModelSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.baseModelPreference.v1\"),\n modelId: IdSchema,\n revision: z.string().trim().min(1).max(256).nullable(),\n tokenizerRevision: z.string().trim().min(1).max(256).nullable(),\n chatTemplateHash: z.string().trim().min(8).max(256).nullable(),\n modelAssetId: IdSchema.nullable(),\n source: z.enum([\"managed\", \"local\", \"builtin\"]),\n })\n .strict();\n\nexport const ModelProjectTrainingMethodSchema = z.enum([\n \"sft\",\n \"dpo\",\n \"grpo\",\n \"ppo\",\n \"sdft\",\n \"opd\",\n \"opsd\",\n \"sdpo\",\n]);\n\n/**\n * A versioned recipe document stored while a Project is still mutable.\n * The training endpoint validates the selected recipe version in full before\n * accepting an immutable Job; Project sync preserves newer recipe fields.\n */\nexport const ModelProjectRecipeDocumentSchema = z\n .object({\n schemaVersion: z.string().regex(/^openpond\\.[A-Za-z0-9]+Recipe\\.v\\d+$/),\n method: ModelProjectTrainingMethodSchema,\n parameterization: z.enum([\"lora\", \"full\"]),\n })\n .catchall(z.unknown());\n\n/** The published Profile source selected for this Model's Harness. */\nexport const ModelProfileSourceSelectionSchema = z.object({\n profileProjectId: IdSchema,\n sourceRevision: z.string().regex(/^[a-f0-9]{40,64}$/),\n harnessRelease: ModelProjectImmutableRefSchema,\n}).strict();\n\n/** A held-out check selected from an exact released Profile catalog. Its\n * Taskset and grader stay in the evaluation runtime, outside training input. */\nexport const ModelProfileEvaluationSelectionSchema = z.object({\n profileProjectId: IdSchema,\n sourceRevision: z.string().regex(/^[a-f0-9]{40,64}$/),\n catalogHash: HashSchema,\n definitionId: IdSchema,\n harnessRelease: ModelProjectImmutableRefSchema,\n tasksetRelease: ModelProjectImmutableRefSchema,\n}).strict();\n\nexport const ModelProjectTrainingSetupSchema = z\n .object({\n tasksetRef: ModelProjectVersionedRefSchema.nullable().default(null),\n evaluationTasksetRef: ModelProjectVersionedRefSchema.nullable().optional(),\n profileSource: ModelProfileSourceSelectionSchema.nullable().optional(),\n profileEvaluation: ModelProfileEvaluationSelectionSchema.nullable().optional(),\n rewardBindingRef: ModelProjectVersionedRefSchema.nullable().optional(),\n tasksetRelease: ModelProjectImmutableRefSchema.nullable().default(null),\n harnessRelease: ModelProjectImmutableRefSchema.nullable().default(null),\n baseModel: ModelProjectBaseModelSchema.nullable().default(null),\n method: ModelProjectTrainingMethodSchema.nullable().default(null),\n destinationId: IdSchema.nullable().default(null),\n managedRolloutPlacement: z\n .enum([\"local\", \"remote\"])\n .default(\"remote\"),\n managedGpuPlacementObjective: z\n .enum([\"fast\", \"balanced\", \"economical\"])\n .default(\"balanced\"),\n managedGpuSelection: TrainingGpuSelectionSchema.optional(),\n continuationAdapterMode: z.enum([\"residual_append\", \"shared\", \"sequential_merge\"]).optional(),\n managedGpuRequirement: z\n .enum([\"any\", \"h100_hbm3\"])\n .default(\"any\"),\n runPreset: z\n .enum([\"small\", \"standard\", \"custom\", \"small_experiment\"])\n .nullable()\n .default(null),\n recipe: ModelProjectRecipeDocumentSchema.nullable().default(null),\n preferredMaximumSpendUsd: z.number().nonnegative().nullable().default(null),\n preferredRetentionDays: z\n .number()\n .int()\n .nonnegative()\n .nullable()\n .default(null),\n })\n .strict();\n\nexport const HostedModelProjectTrainingSetupSchema =\n ModelProjectTrainingSetupSchema;\n\nexport const HostedModelProjectLinkSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.hostedModelProjectLink.v1\"),\n apiOrigin: z.string().url().refine(value => new URL(value).origin === value, \"Use a canonical API origin.\").nullable().default(null),\n teamId: IdSchema,\n projectId: IdSchema,\n portableProjectId: IdSchema,\n revision: z.number().int().positive(),\n etag: HashSchema,\n syncedSourceRevision: z.number().int().positive(),\n syncedAt: TimestampSchema,\n tasksets: z\n .array(\n z\n .object({\n localTasksetId: IdSchema,\n localTasksetHash: HashSchema.nullable().default(null),\n releaseId: IdSchema,\n releaseRevision: z.number().int().positive(),\n releaseHash: HashSchema,\n packageHash: HashSchema.nullable().default(null),\n hostedTasksetId: IdSchema,\n syncedAt: TimestampSchema,\n })\n .strict(),\n )\n .max(10_000)\n .default([]),\n })\n .strict();\n\nexport const ModelProjectTasksetSyncSchema = z\n .object({\n localTasksetId: IdSchema,\n releaseId: IdSchema,\n releaseRevision: z.number().int().positive(),\n releaseHash: HashSchema,\n state: z.enum([\"syncing\", \"synced\", \"sync_failed\"]),\n hostedTasksetId: IdSchema.nullable().default(null),\n lastAttemptAt: TimestampSchema,\n syncedAt: TimestampSchema.nullable().default(null),\n lastError: z.string().trim().min(1).max(5_000).nullable().default(null),\n })\n .strict();\n\nexport const ModelProjectSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.modelProject.v2\"),\n id: IdSchema,\n profileId: IdSchema,\n revision: z.number().int().positive().default(1),\n name: z.string().trim().min(1).max(200),\n objective: z.string().trim().max(5_000).nullable(),\n defaultBaseModel: ModelProjectBaseModelSchema.nullable(),\n defaultDestinationId: IdSchema.nullable(),\n trainingSetup: ModelProjectTrainingSetupSchema,\n hosted: HostedModelProjectLinkSchema.nullable().default(null),\n tasksetSyncs: z\n .array(ModelProjectTasksetSyncSchema)\n .max(10_000)\n .default([]),\n createdAt: TimestampSchema,\n updatedAt: TimestampSchema,\n })\n .strict();\n\n/** User-editable configuration. Execution and hosting receipts are server-owned. */\nexport const ModelProjectEditableSchema = ModelProjectSchema.pick({\n id: true,\n profileId: true,\n name: true,\n objective: true,\n defaultBaseModel: true,\n defaultDestinationId: true,\n trainingSetup: true,\n});\n\n/** Zero creates a new Model; a positive revision updates that exact revision. */\nexport const ModelProjectSaveRequestSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelProjectSave.v1\"),\n operationId: IdSchema,\n expectedRevision: z.number().int().nonnegative(),\n project: ModelProjectEditableSchema,\n learning: ModelInitialLearningSchema.optional(),\n}).strict().superRefine((value, context) => {\n if (value.learning && value.expectedRevision !== 0) context.addIssue({ code: \"custom\", path: [\"learning\"], message: \"Use learning settings to edit an existing Model's policy.\" });\n});\n\nexport type ModelProjectSaveRequest = z.infer<typeof ModelProjectSaveRequestSchema>;\n\n/** A read-only configuration check; it does not establish training or grader quality. */\nexport const ModelProjectConfigurationCheckSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelProjectConfigurationCheck.v1\"),\n configurationHash: HashSchema,\n projectId: IdSchema,\n expectedRevision: z.number().int().nonnegative(),\n checkedAt: TimestampSchema,\n canSave: z.boolean(),\n deferred: z.array(z.enum([\"base_model\", \"taskset\"])).max(2),\n findings: z.array(z.object({\n code: IdSchema,\n severity: z.enum([\"error\", \"warning\"]),\n message: z.string().min(1).max(5000),\n field: z.string().min(1).max(500).nullable(),\n }).strict()).max(100),\n}).strict();\n\nexport type ModelProjectConfigurationCheck = z.infer<typeof ModelProjectConfigurationCheckSchema>;\n\nexport const ModelProjectBaseModelCandidateSchema = z.object({\n id: IdSchema, name: z.string().min(1).max(500), available: z.boolean(), preference: ModelProjectBaseModelSchema,\n}).strict();\n\nexport async function modelProjectConfigurationHash(request: ModelProjectSaveRequest): Promise<string> {\n const parsed = parseModelProjectSaveRequest(request);\n return canonicalSha256({ project: parsed.project, expectedRevision: parsed.expectedRevision, ...(parsed.learning ? { learning: parsed.learning } : {}) });\n}\n\nexport function parseModelProjectSaveRequest(value: unknown): ModelProjectSaveRequest {\n try {\n assertBoundedTaskJson(value, MODEL_PROJECT_SYNC_MAX_BYTES);\n } catch {\n throw new OpenPondModelProjectApiError(400, {\n schemaVersion: \"openpond.modelProjectApiError.v2\", code: \"model_configuration_json_invalid\",\n message: \"Model configuration must be bounded JSON data.\", retryable: false, requestId: null, details: {},\n });\n }\n return ModelProjectSaveRequestSchema.parse(value);\n}\n\n/** Stable across transport retries; excludes server-owned revision/timestamps. */\nexport async function createModelProjectSaveRequest(\n project: z.input<typeof ModelProjectEditableSchema>,\n expectedRevision: number,\n learning?: ModelInitialLearning,\n): Promise<ModelProjectSaveRequest> {\n assertBoundedTaskJson(project, MODEL_PROJECT_SYNC_MAX_BYTES);\n const editable = ModelProjectEditableSchema.parse(project);\n assertCanonicalPayloadSize(editable, MODEL_PROJECT_SYNC_MAX_BYTES, \"Model configuration\");\n const initialLearning = learning ? ModelInitialLearningSchema.parse(learning) : undefined;\n const hash = await canonicalSha256({ project: editable, expectedRevision, ...(initialLearning ? { learning: initialLearning } : {}) });\n return parseModelProjectSaveRequest({\n schemaVersion: \"openpond.modelProjectSave.v1\",\n operationId: `model-save:${hash}`,\n expectedRevision,\n project: editable,\n ...(initialLearning ? { learning: initialLearning } : {}),\n });\n}\n\nexport const HostedModelProjectSyncSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.hostedModelProjectSync.v2\"),\n portableProjectId: IdSchema,\n name: z.string().trim().min(1).max(200),\n objective: z.string().trim().max(5_000).nullable(),\n defaultBaseModel: ModelProjectBaseModelSchema.nullable(),\n defaultDestinationId: IdSchema.nullable(),\n trainingSetup: HostedModelProjectTrainingSetupSchema,\n sourceRevision: z.number().int().positive(),\n sourceUpdatedAt: TimestampSchema,\n expectedEtag: HashSchema.nullable().default(null),\n })\n .strict();\n\nexport const HostedModelProjectSummarySchema = z\n .object({\n id: IdSchema,\n teamId: IdSchema,\n portableProjectId: IdSchema,\n name: z.string().trim().min(1).max(200),\n objective: z.string().trim().max(5_000).nullable(),\n defaultBaseModel: ModelProjectBaseModelSchema.nullable(),\n defaultDestinationId: IdSchema.nullable(),\n trainingSetup: HostedModelProjectTrainingSetupSchema,\n sourceRevision: z.number().int().positive(),\n sourceUpdatedAt: TimestampSchema,\n revision: z.number().int().positive(),\n etag: HashSchema,\n createdAt: TimestampSchema,\n updatedAt: TimestampSchema,\n })\n .strict();\n\nexport const ModelProjectResourceSummarySchema = z\n .object({\n kind: z.enum([\n \"taskset_release\",\n \"harness_release\",\n \"dataset_release\",\n \"evidence_set\",\n \"model_version\",\n \"reward_model_version\",\n \"evaluation_receipt\",\n ]),\n ref: ModelProjectImmutableRefSchema,\n role: z.string().trim().min(1).max(200).nullable().default(null),\n updatedAt: TimestampSchema,\n })\n .strict();\n\nexport const HostedModelProjectDetailSchema = z\n .object({\n project: HostedModelProjectSummarySchema,\n resources: z.array(ModelProjectResourceSummarySchema).max(10_000),\n jobCount: z.number().int().nonnegative(),\n latestJobIds: z.array(IdSchema).max(100),\n })\n .strict();\n\nexport const ModelProjectApiErrorSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.modelProjectApiError.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 OpenPondModelProjectApiError 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 ModelProjectApiErrorSchema>) {\n super(error.message);\n this.name = \"OpenPondModelProjectApiError\";\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\nexport type ModelProject = z.infer<typeof ModelProjectSchema>;\nexport type ModelProjectTrainingSetup = z.infer<\n typeof ModelProjectTrainingSetupSchema\n>;\nexport type HostedModelProjectSync = z.infer<\n typeof HostedModelProjectSyncSchema\n>;\nexport type HostedModelProjectSummary = z.infer<\n typeof HostedModelProjectSummarySchema\n>;\nexport type HostedModelProjectDetail = z.infer<\n typeof HostedModelProjectDetailSchema\n>;\n\ntype ModelProjectsFetch = typeof fetch;\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 function createModelProjectsClient(input: {\n baseUrl: string;\n fetch?: ModelProjectsFetch;\n headers?: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);\n}) {\n const fetchImpl = input.fetch ?? fetch;\n const baseUrl = input.baseUrl.replace(/\\/$/, \"\");\n\n async function request(pathname: string, init?: RequestInit): Promise<unknown> {\n const configuredHeaders =\n typeof input.headers === \"function\"\n ? await input.headers()\n : (input.headers ?? {});\n const response = await fetchImpl(`${baseUrl}${pathname}`, {\n ...init,\n headers: {\n accept: OPENPOND_MODEL_PROJECT_MEDIA_TYPE,\n ...(init?.body\n ? { \"content-type\": OPENPOND_MODEL_PROJECT_MEDIA_TYPE }\n : {}),\n ...headersRecord(configuredHeaders),\n ...headersRecord(init?.headers),\n },\n });\n const body = await readBoundedJsonResponse(\n response,\n MODEL_PROJECT_API_RESPONSE_MAX_BYTES,\n \"Model Project API response\",\n );\n if (!response.ok) {\n const parsed = ModelProjectApiErrorSchema.safeParse(body);\n if (parsed.success) {\n throw new OpenPondModelProjectApiError(response.status, parsed.data);\n }\n throw new OpenPondProtocolError(\n \"invalid_error_response\",\n `Model Project request failed with HTTP ${response.status} and an invalid error envelope.`,\n );\n }\n return body;\n }\n\n return {\n async configurationCandidates() {\n return z.object({ candidates: z.array(ModelProjectBaseModelCandidateSchema).max(1000) }).strict().parse(\n await request(\"/v1/model-projects/configuration/candidates\", { headers: { accept: \"application/json\" } }),\n ).candidates;\n },\n async checkConfiguration(value: ModelProjectSaveRequest) {\n const parsed = parseModelProjectSaveRequest(value);\n return ModelProjectConfigurationCheckSchema.parse(await request(\"/v1/model-projects/configuration/check\", {\n method: \"POST\", headers: { accept: \"application/json\", \"content-type\": \"application/json\" }, body: JSON.stringify(parsed),\n }));\n },\n async saveConfiguration(value: ModelProjectSaveRequest) {\n const parsed = parseModelProjectSaveRequest(value);\n return HostedModelProjectSummarySchema.parse(await request(\"/v1/model-projects/configuration/save\", {\n method: \"POST\", headers: { accept: \"application/json\", \"content-type\": \"application/json\" }, body: JSON.stringify(parsed),\n }));\n },\n async upsert(project: HostedModelProjectSync) {\n assertCanonicalPayloadSize(\n project,\n MODEL_PROJECT_SYNC_MAX_BYTES,\n \"Model Project sync\",\n );\n const parsed = HostedModelProjectSyncSchema.parse(project);\n const body = await request(\n `/v1/model-projects/${encodeURIComponent(parsed.portableProjectId)}`,\n { method: \"PUT\", body: JSON.stringify(parsed) },\n );\n return HostedModelProjectSummarySchema.parse(\n unwrapObject(body, \"project\"),\n );\n },\n async list() {\n const body = await request(\"/v1/model-projects\");\n return z\n .array(HostedModelProjectSummarySchema)\n .parse(unwrapObject(body, \"projects\"));\n },\n async get(projectId: string) {\n const body = await request(\n `/v1/model-projects/${encodeURIComponent(IdSchema.parse(projectId))}`,\n );\n return HostedModelProjectDetailSchema.parse(body);\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\";\n\nconst Id = z.string().trim().min(1).max(191);\nconst Hash = z.string().regex(/^[a-f0-9]{64}$/);\n\nexport const TrainingGpuSelectionSchema = z.discriminatedUnion(\"mode\", [\n z.object({ mode: z.literal(\"automatic\"), objective: z.enum([\"balanced\", \"fast\", \"economical\"]), gpuCount: z.union([z.literal(1), z.literal(2)]).optional() }).strict(),\n z.object({ mode: z.literal(\"manual\"), availabilityId: Id, gpuType: z.string().trim().min(1).max(256), gpuCount: z.union([z.literal(1), z.literal(2)]).optional() }).strict(),\n]);\n\n/** This token binds a reviewed workload and price, without reserving resources\n * or approving the estimate's recommended budget. */\nexport const TrainingEstimateReviewSchema = z.object({\n estimateId: Id,\n inputHash: Hash,\n requestHash: Hash,\n pricingVersion: Id,\n expiresAt: z.string().datetime({ offset: true }),\n token: z.string().min(1).max(8192),\n}).strict();\n\nexport type TrainingGpuSelection = z.infer<typeof TrainingGpuSelectionSchema>;\nexport type TrainingEstimateReview = z.infer<typeof TrainingEstimateReviewSchema>;\n\nexport const TrainingGpuCatalogSchema = z.object({\n schemaVersion: z.literal(\"openpond.trainingGpuCatalog.v1\"),\n observedAt: z.string().datetime({ offset: true }),\n expiresAt: z.string().datetime({ offset: true }),\n workerImageDigest: z.string().regex(/^sha256:[a-f0-9]{64}$/),\n supportedLoraRanks: z.array(z.number().int().positive()),\n pricingBasis: z.literal(\"accepted_compute_and_disk_hourly_before_credits\"),\n offerings: z.array(z.object({\n availabilityId: Id, gpuType: z.string().min(1).max(256), provider: Id,\n region: z.string().min(1), dataCenterId: z.string().nullable(),\n gpuCount: z.number().int().positive(), gpuMemoryGb: z.number().positive(),\n stockStatus: z.enum([\"High\", \"Medium\", \"Low\"]),\n computeHourlyUsd: z.number().nonnegative(), diskHourlyUsd: z.number().nonnegative(), totalHourlyUsd: z.number().nonnegative(),\n }).strict()).max(1000),\n}).strict();\nexport type TrainingGpuCatalog = z.infer<typeof TrainingGpuCatalogSchema>;\n"],"mappings":"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","names":["z","z"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TasksetDraftWorkspaceSchema
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4L556MYM.js";
|
|
4
4
|
import {
|
|
5
5
|
TasksetCatalogReleaseRefSchema
|
|
6
6
|
} from "./chunk-Z252BNAZ.js";
|
|
@@ -178,4 +178,4 @@ export {
|
|
|
178
178
|
ConnectedStartingAssetsReceiptSchema,
|
|
179
179
|
verifyConnectedStartingAssetsReceipt
|
|
180
180
|
};
|
|
181
|
-
//# sourceMappingURL=chunk-
|
|
181
|
+
//# sourceMappingURL=chunk-DMN6EF3R.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
validateTasksetPackage
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-7WKCQ4V5.js";
|
|
4
4
|
import {
|
|
5
5
|
RunExperimentSchema
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-7FYPFHCQ.js";
|
|
7
7
|
import {
|
|
8
8
|
ExperimentScoringRequestSchema,
|
|
9
9
|
verifyExperimentScoringPass
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-GIEST52U.js";
|
|
11
11
|
import {
|
|
12
12
|
fetchConnectedJson
|
|
13
13
|
} from "./chunk-O6FKHAWN.js";
|
|
@@ -18,13 +18,13 @@ import {
|
|
|
18
18
|
ExperimentListQuerySchema,
|
|
19
19
|
PrepareHarnessExperimentSchema,
|
|
20
20
|
PreparedHarnessExperimentSchema
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-HDKP6KE2.js";
|
|
22
22
|
import {
|
|
23
23
|
ModelTasksetRunDetailsSchema,
|
|
24
24
|
ModelTasksetRunRequestSchema,
|
|
25
25
|
verifyHarnessExperimentManifest,
|
|
26
26
|
verifyModelTasksetRunDetails
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-IIQENUOK.js";
|
|
28
28
|
import {
|
|
29
29
|
ImmutableReleaseRefSchema,
|
|
30
30
|
contentHash
|
|
@@ -652,4 +652,4 @@ export {
|
|
|
652
652
|
ProfileEvaluationDiscoveryRequestSchema,
|
|
653
653
|
OpenPondProfileEvaluationDiscoveryClient
|
|
654
654
|
};
|
|
655
|
-
//# sourceMappingURL=chunk-
|
|
655
|
+
//# sourceMappingURL=chunk-ESW25WSD.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
|