openpond-sdk 0.4.0 → 0.5.1
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/MODEL_STARTERS.md +26 -0
- package/TRAINING_PROTOCOL.md +18 -0
- package/dist/{chunk-LLHE4BOD.js → chunk-25TBEGXB.js} +2 -2
- package/dist/{chunk-AZUCY3E5.js → chunk-6LGGLXAM.js} +3 -3
- package/dist/chunk-EPJM7VEV.js +177 -0
- package/dist/chunk-EPJM7VEV.js.map +7 -0
- package/dist/{chunk-IVEXCIHO.js → chunk-EV4PKJWN.js} +10 -10
- package/dist/{chunk-IVEXCIHO.js.map → chunk-EV4PKJWN.js.map} +1 -1
- package/dist/{chunk-ZPCK222K.js → chunk-NF63YMOL.js} +14 -7
- package/dist/{chunk-ZPCK222K.js.map → chunk-NF63YMOL.js.map} +2 -2
- package/dist/{chunk-AVW35YOH.js → chunk-ODTLCYUT.js} +151 -126
- package/dist/chunk-ODTLCYUT.js.map +7 -0
- package/dist/index.js +3 -3
- package/dist/learning.js +3 -3
- package/dist/model-starter-attempts.js +12 -162
- package/dist/model-starter-attempts.js.map +3 -3
- package/dist/model-taskset-runs.js +196 -0
- package/dist/model-taskset-runs.js.map +7 -0
- package/dist/refiner.js +1 -1
- package/dist/taskset-drafts.js +4 -4
- package/dist/taskset-packages.js +4 -4
- package/dist/training.js +3 -1
- package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts +568 -0
- package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +722 -0
- package/dist/types/packages/sdk/src/model-taskset-runs.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-grading-plan.d.ts +21 -0
- package/dist/types/packages/sdk/src/training-grading-plan.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training.d.ts +1 -0
- package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
- package/package.json +7 -3
- package/dist/chunk-AVW35YOH.js.map +0 -7
- /package/dist/{chunk-LLHE4BOD.js.map → chunk-25TBEGXB.js.map} +0 -0
- /package/dist/{chunk-AZUCY3E5.js.map → chunk-6LGGLXAM.js.map} +0 -0
package/MODEL_STARTERS.md
CHANGED
|
@@ -119,3 +119,29 @@ Keep hidden case inputs and expected results in the private initial-state asset.
|
|
|
119
119
|
Ordinary task input is policy-visible. The service passes only each hidden case's
|
|
120
120
|
explicit `input` to candidate code; expected results stay with the authored grader.
|
|
121
121
|
See the Evals JavaScript environment contract for service fields and Node execution.
|
|
122
|
+
|
|
123
|
+
### Complete Taskset evaluation runs
|
|
124
|
+
|
|
125
|
+
`OpenPondModelTasksetRunsClient` from `openpond-sdk/model-taskset-runs` exposes
|
|
126
|
+
`create`, `get`, `list`, `cancel` and `result` through
|
|
127
|
+
`/v1/model-taskset-runs`. A request pins a Model attachment and an ordered
|
|
128
|
+
population of `{ receiptId, taskId, seed, fixtureId }` members. Receipt IDs are
|
|
129
|
+
unique within the run; hosted seeds are canonical integer strings between
|
|
130
|
+
`0` and `2147483647`. Requests support up to 10,000 members and never accept
|
|
131
|
+
replacement world state, verifier bytes or caller-generated scores.
|
|
132
|
+
|
|
133
|
+
Use `{ kind: "fixture" }` with each member's authored fixture ID to check a
|
|
134
|
+
package without claiming model execution. Use a `hosted_chat` policy with a
|
|
135
|
+
model ID and sampling/output limits for a model evaluation; those members
|
|
136
|
+
have `fixtureId: null`. A model evaluation pins both the provider snapshot and
|
|
137
|
+
the requested sampling configuration. Reusing an operation ID must return the
|
|
138
|
+
same admitted request or report a conflict.
|
|
139
|
+
|
|
140
|
+
Details retain the request, immutable public run manifest, policy snapshot and
|
|
141
|
+
current summary. Terminal results retain canonical receipts in admitted order
|
|
142
|
+
and the authored metric only for completed evaluations. Failed and cancelled
|
|
143
|
+
runs cannot publish a metric value; completed but entirely unscorable runs
|
|
144
|
+
retain a null metric value. The client verifies workspace, manifest,
|
|
145
|
+
population, grading role, metric references and result hashes on readback.
|
|
146
|
+
Hosts remain responsible for owner-authenticated evidence and durable
|
|
147
|
+
dispatch/cancellation; a content hash is not producer authentication.
|
package/TRAINING_PROTOCOL.md
CHANGED
|
@@ -78,6 +78,24 @@ checkpoint inventory or qualification metrics, when the portable client needs
|
|
|
78
78
|
that evidence to validate the artifact. This metadata is immutable output
|
|
79
79
|
evidence, not private worker-control, lease, or provider state.
|
|
80
80
|
|
|
81
|
+
## Deterministic grading identity
|
|
82
|
+
|
|
83
|
+
For portable training bundles, derive `job.rewardSource` with
|
|
84
|
+
`deterministicTrainingRewardSource({ graders, rewardExecution })` from the
|
|
85
|
+
verified bundle's `graders.json` and optional `reward-binding.json`. The grader
|
|
86
|
+
reference identifies the entire ordered set, including configuration, using the
|
|
87
|
+
canonical hash of `{ schemaVersion: "openpond.trainingGraderSet.v1", graders }`.
|
|
88
|
+
Its ID is `training-graders-` followed by the first 32 hash characters.
|
|
89
|
+
|
|
90
|
+
When a Reward binding exists, the helper compiles its verified releases to the
|
|
91
|
+
executed grader set and uses the binding's immutable ID/hash as `composer`.
|
|
92
|
+
This pins role, normalization, membership, weights, required sources and hard
|
|
93
|
+
gates even when those changes leave grader code unchanged. An unbound plan has
|
|
94
|
+
a null composer. Providers must recompute both references from the admitted
|
|
95
|
+
bundle before provisioning and retain both in receipt inputs when non-null.
|
|
96
|
+
Identity validation does not establish that a provider can execute a grader;
|
|
97
|
+
providers must also reject unsupported execution configurations at admission.
|
|
98
|
+
|
|
81
99
|
## Conformance
|
|
82
100
|
|
|
83
101
|
Published fixtures live in `fixtures/training/v2`. Providers should:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ReleaseIdSchema
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-NF63YMOL.js";
|
|
4
4
|
|
|
5
5
|
// src/learning-credentials.ts
|
|
6
6
|
import { z } from "zod";
|
|
@@ -217,4 +217,4 @@ export {
|
|
|
217
217
|
OpenPondLearningError,
|
|
218
218
|
OpenPondLearningClient
|
|
219
219
|
};
|
|
220
|
-
//# sourceMappingURL=chunk-
|
|
220
|
+
//# sourceMappingURL=chunk-25TBEGXB.js.map
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
} from "./chunk-65D4C7HP.js";
|
|
19
19
|
import {
|
|
20
20
|
ChatModelRefSchema
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-EV4PKJWN.js";
|
|
22
22
|
import {
|
|
23
23
|
ImmutableAssetRefSchema,
|
|
24
24
|
ImmutableReleaseRefSchema,
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
canonicalJson,
|
|
29
29
|
contentHash,
|
|
30
30
|
sha256
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-NF63YMOL.js";
|
|
32
32
|
import {
|
|
33
33
|
HostedModelProjectSummarySchema,
|
|
34
34
|
HostedModelProjectSyncSchema,
|
|
@@ -2392,4 +2392,4 @@ export {
|
|
|
2392
2392
|
saveTasksetDraftWorkspaceFile,
|
|
2393
2393
|
decodeTasksetDraftWorkspaceFile
|
|
2394
2394
|
};
|
|
2395
|
-
//# sourceMappingURL=chunk-
|
|
2395
|
+
//# sourceMappingURL=chunk-6LGGLXAM.js.map
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ModelProjectVersionedRefSchema,
|
|
3
|
+
canonicalJson,
|
|
4
|
+
canonicalSha256
|
|
5
|
+
} from "./chunk-5PRP457R.js";
|
|
6
|
+
|
|
7
|
+
// src/model-starter-attempts.ts
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
import { RewardCompositionSchema } from "@openpond/evals/rewards";
|
|
10
|
+
import { TaskGradeSchema } from "@openpond/evals/graders";
|
|
11
|
+
var IdSchema = z.string().trim().min(1).max(200);
|
|
12
|
+
var HashSchema = z.string().regex(/^[a-f0-9]{64}$/);
|
|
13
|
+
var ModelStarterAttemptPolicySchema = z.discriminatedUnion("kind", [
|
|
14
|
+
z.object({ kind: z.literal("hosted_chat"), modelId: IdSchema, maxOutputTokens: z.number().int().min(1).max(4096).default(1024), temperature: z.number().min(0).max(2).default(0), topP: z.number().gt(0).max(1).default(1) }).strict(),
|
|
15
|
+
z.object({ kind: z.literal("fixture"), fixtureId: IdSchema }).strict()
|
|
16
|
+
]);
|
|
17
|
+
var ModelStarterAttemptRequestSchema = z.object({
|
|
18
|
+
schemaVersion: z.literal("openpond.modelStarterAttemptRequest.v1"),
|
|
19
|
+
operationId: IdSchema,
|
|
20
|
+
teamId: IdSchema,
|
|
21
|
+
modelProjectId: IdSchema,
|
|
22
|
+
taskset: ModelProjectVersionedRefSchema,
|
|
23
|
+
taskId: IdSchema,
|
|
24
|
+
environmentSeed: z.number().int().min(0).max(2147483647).default(0),
|
|
25
|
+
policy: ModelStarterAttemptPolicySchema
|
|
26
|
+
}).strict();
|
|
27
|
+
var ModelStarterAttemptChoicesQuerySchema = z.object({ modelProjectId: IdSchema, taskset: ModelProjectVersionedRefSchema, afterTaskId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();
|
|
28
|
+
var ModelStarterAttemptChoicesSchema = z.object({
|
|
29
|
+
modelProjectId: IdSchema,
|
|
30
|
+
taskset: ModelProjectVersionedRefSchema,
|
|
31
|
+
available: z.boolean(),
|
|
32
|
+
unavailableReason: z.string().max(1e3).nullable(),
|
|
33
|
+
models: z.array(z.object({ id: IdSchema, name: z.string().max(500) }).strict()).max(200),
|
|
34
|
+
tasks: z.array(z.object({ id: IdSchema, split: z.enum(["train", "validation", "frozen_eval"]), inputPreview: z.string().max(500), fixtures: z.array(z.object({ id: IdSchema, label: z.string().max(200) }).strict()).max(1e3) }).strict()).max(100),
|
|
35
|
+
nextCursor: IdSchema.nullable()
|
|
36
|
+
}).strict();
|
|
37
|
+
var ModelStarterAttemptSummarySchema = z.object({
|
|
38
|
+
schemaVersion: z.literal("openpond.modelStarterAttemptSummary.v1"),
|
|
39
|
+
id: IdSchema,
|
|
40
|
+
revision: z.number().int().positive(),
|
|
41
|
+
request: ModelStarterAttemptRequestSchema,
|
|
42
|
+
status: z.enum(["queued", "running", "cancelling", "completed", "failed", "cancelled"]),
|
|
43
|
+
policySnapshot: z.object({ modelId: IdSchema, provider: IdSchema, upstreamModelId: z.string().min(1).max(500), configurationHash: HashSchema }).strict().nullable(),
|
|
44
|
+
createdAt: z.iso.datetime(),
|
|
45
|
+
startedAt: z.iso.datetime().nullable(),
|
|
46
|
+
completedAt: z.iso.datetime().nullable(),
|
|
47
|
+
cleanupComplete: z.boolean(),
|
|
48
|
+
resultAvailable: z.boolean(),
|
|
49
|
+
score: z.number().min(0).max(1).nullable(),
|
|
50
|
+
gradingStatus: z.enum(["not_started", "scored", "unscorable", "not_configured"]).default("not_started"),
|
|
51
|
+
passed: z.boolean().nullable(),
|
|
52
|
+
outputPreview: z.string().max(500).nullable(),
|
|
53
|
+
error: z.object({ code: IdSchema, message: z.string().max(2e3) }).strict().nullable()
|
|
54
|
+
}).strict().superRefine((value, context) => {
|
|
55
|
+
if (value.request.policy.kind === "fixture" !== (value.policySnapshot === null)) context.addIssue({ code: "custom", path: ["policySnapshot"], message: "Fixture execution must not claim a model identity." });
|
|
56
|
+
if (value.status === "completed" && (!value.cleanupComplete || !value.resultAvailable || !value.completedAt)) context.addIssue({ code: "custom", message: "Completed attempts require retained results and confirmed cleanup." });
|
|
57
|
+
});
|
|
58
|
+
var ModelStarterAttemptListQuerySchema = z.object({ modelProjectId: IdSchema, afterId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();
|
|
59
|
+
var ModelStarterAttemptPageSchema = z.object({ items: z.array(ModelStarterAttemptSummarySchema).max(100), nextCursor: IdSchema.nullable() }).strict();
|
|
60
|
+
var ModelStarterAttemptResultSchema = z.object({
|
|
61
|
+
schemaVersion: z.literal("openpond.modelStarterAttemptResult.v1"),
|
|
62
|
+
attempt: ModelStarterAttemptSummarySchema,
|
|
63
|
+
output: z.string().max(1048576).nullable(),
|
|
64
|
+
// Only model-facing messages, never the private environment snapshot.
|
|
65
|
+
messages: z.array(z.record(z.string(), z.unknown())).max(4002),
|
|
66
|
+
composition: RewardCompositionSchema.nullable(),
|
|
67
|
+
// Ordinary Tasksets have no Reward binding. Absence preserves the hash of
|
|
68
|
+
// already retained v1 results; new producers explicitly return null or a grade.
|
|
69
|
+
grade: TaskGradeSchema.nullable().optional(),
|
|
70
|
+
environment: z.object({ status: z.enum(["completed", "budget_exhausted", "cancelled", "timed_out", "policy_failure", "environment_failure"]), collected: z.boolean(), definition: ModelProjectVersionedRefSchema, initialStateHash: HashSchema.nullable(), finalStateHash: HashSchema.nullable(), attemptHash: HashSchema }).strict(),
|
|
71
|
+
providerRequestIds: z.array(IdSchema).max(1001),
|
|
72
|
+
contentHash: HashSchema
|
|
73
|
+
}).strict().superRefine((value, context) => {
|
|
74
|
+
if (!value.grade) return;
|
|
75
|
+
if (value.composition) context.addIssue({ code: "custom", path: ["grade"], message: "An ordinary grade cannot also claim a Reward composition." });
|
|
76
|
+
if (!["completed", "failed"].includes(value.attempt.status) || !value.attempt.resultAvailable || value.attempt.score !== value.grade.score || value.attempt.gradingStatus !== value.grade.gradingStatus || value.attempt.passed !== (value.grade.score === null ? null : value.grade.passed)) context.addIssue({ code: "custom", path: ["grade"], message: "Ordinary grade differs from its terminal attempt summary." });
|
|
77
|
+
});
|
|
78
|
+
var OpenPondModelStarterAttemptError = class extends Error {
|
|
79
|
+
constructor(status, code, message) {
|
|
80
|
+
super(message);
|
|
81
|
+
this.status = status;
|
|
82
|
+
this.code = code;
|
|
83
|
+
this.name = "OpenPondModelStarterAttemptError";
|
|
84
|
+
}
|
|
85
|
+
status;
|
|
86
|
+
code;
|
|
87
|
+
};
|
|
88
|
+
var OpenPondModelStarterAttemptsClient = class {
|
|
89
|
+
#options;
|
|
90
|
+
constructor(options) {
|
|
91
|
+
const url = new URL(options.baseUrl);
|
|
92
|
+
if (!options.apiKey.trim() || !options.teamId.trim() || !["https:", "http:"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error("Starter attempts require an HTTP(S) endpoint and workspace credentials.");
|
|
93
|
+
this.#options = { ...options, baseUrl: url.toString().replace(/\/+$/, "") };
|
|
94
|
+
}
|
|
95
|
+
async create(value, options = {}) {
|
|
96
|
+
const request = ModelStarterAttemptRequestSchema.parse(value);
|
|
97
|
+
if (request.teamId !== this.#options.teamId) throw new Error("Attempt belongs to another workspace.");
|
|
98
|
+
const result = this.#summary(await this.#request("", "POST", request, options.signal));
|
|
99
|
+
if (canonicalJson(result.request) !== canonicalJson(request)) throw new OpenPondModelStarterAttemptError(502, "attempt_request_mismatch", "Attempt receipt differs from the submitted request.");
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
async get(id, options = {}) {
|
|
103
|
+
return this.#summary(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}`, "GET", void 0, options.signal), id);
|
|
104
|
+
}
|
|
105
|
+
async choices(value, options = {}) {
|
|
106
|
+
const query = ModelStarterAttemptChoicesQuerySchema.parse(value);
|
|
107
|
+
const params = new URLSearchParams({ modelProjectId: query.modelProjectId, tasksetId: query.taskset.id, revision: String(query.taskset.revision), contentHash: query.taskset.contentHash, limit: String(query.limit) });
|
|
108
|
+
if (query.afterTaskId) params.set("afterTaskId", query.afterTaskId);
|
|
109
|
+
const result = ModelStarterAttemptChoicesSchema.parse(await this.#request(`/choices?${params}`, "GET", void 0, options.signal));
|
|
110
|
+
if (result.modelProjectId !== query.modelProjectId || canonicalJson(result.taskset) !== canonicalJson(query.taskset) || result.tasks.length > query.limit || new Set(result.tasks.map((task) => task.id)).size !== result.tasks.length) throw new OpenPondModelStarterAttemptError(502, "attempt_choices_mismatch", "Attempt choices differ from the selected model or Taskset.");
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
async cancel(id, options = {}) {
|
|
114
|
+
return this.#summary(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}/cancel`, "POST", void 0, options.signal), id);
|
|
115
|
+
}
|
|
116
|
+
async result(id, options = {}) {
|
|
117
|
+
const value = ModelStarterAttemptResultSchema.parse(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}/result`, "GET", void 0, options.signal));
|
|
118
|
+
this.#summary(value.attempt, id);
|
|
119
|
+
const { contentHash, ...content } = value;
|
|
120
|
+
if (!value.attempt.resultAvailable || await canonicalSha256(content) !== contentHash) throw new OpenPondModelStarterAttemptError(502, "attempt_result_integrity", "Attempt result integrity failed.");
|
|
121
|
+
return value;
|
|
122
|
+
}
|
|
123
|
+
async list(value, options = {}) {
|
|
124
|
+
const query = ModelStarterAttemptListQuerySchema.parse(value);
|
|
125
|
+
const params = new URLSearchParams({ modelProjectId: query.modelProjectId, limit: String(query.limit) });
|
|
126
|
+
if (query.afterId) params.set("afterId", query.afterId);
|
|
127
|
+
const page = ModelStarterAttemptPageSchema.parse(await this.#request(`?${params}`, "GET", void 0, options.signal));
|
|
128
|
+
if (page.items.length > query.limit || new Set(page.items.map((item) => item.id)).size !== page.items.length || page.items.some((item) => this.#summary(item).request.modelProjectId !== query.modelProjectId)) throw new OpenPondModelStarterAttemptError(502, "attempt_page_mismatch", "Attempt page differs from the selected model.");
|
|
129
|
+
return page;
|
|
130
|
+
}
|
|
131
|
+
#summary(value, id) {
|
|
132
|
+
const result = ModelStarterAttemptSummarySchema.parse(value);
|
|
133
|
+
if (result.request.teamId !== this.#options.teamId || id && result.id !== id) throw new OpenPondModelStarterAttemptError(502, "attempt_identity_mismatch", "Attempt receipt belongs to another identity or workspace.");
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
async #request(path, method, body, signal) {
|
|
137
|
+
const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/model-starter-attempts${path}`, { method, headers: { Authorization: `Bearer ${this.#options.apiKey}`, "X-OpenPond-Team-Id": this.#options.teamId, "Content-Type": "application/json", Accept: "application/json" }, ...body === void 0 ? {} : { body: JSON.stringify(body) }, signal, redirect: "error" });
|
|
138
|
+
const reader = response.body?.getReader();
|
|
139
|
+
if (!reader) throw new OpenPondModelStarterAttemptError(response.status, "attempt_empty_response", "Attempt response was empty.");
|
|
140
|
+
let bytes = 0;
|
|
141
|
+
let text = "";
|
|
142
|
+
const decoder = new TextDecoder();
|
|
143
|
+
try {
|
|
144
|
+
while (true) {
|
|
145
|
+
const chunk = await reader.read();
|
|
146
|
+
if (chunk.done) break;
|
|
147
|
+
bytes += chunk.value.byteLength;
|
|
148
|
+
if (bytes > 16777216) throw new OpenPondModelStarterAttemptError(502, "attempt_response_too_large", "Attempt response exceeded its byte limit.");
|
|
149
|
+
text += decoder.decode(chunk.value, { stream: true });
|
|
150
|
+
}
|
|
151
|
+
text += decoder.decode();
|
|
152
|
+
} finally {
|
|
153
|
+
await reader.cancel();
|
|
154
|
+
reader.releaseLock();
|
|
155
|
+
}
|
|
156
|
+
const value = JSON.parse(text);
|
|
157
|
+
if (!response.ok) {
|
|
158
|
+
const error = z.object({ code: IdSchema, message: z.string().max(2e3) }).safeParse(value);
|
|
159
|
+
throw new OpenPondModelStarterAttemptError(response.status, error.success ? error.data.code : "attempt_request_failed", error.success ? error.data.message : "Attempt request failed.");
|
|
160
|
+
}
|
|
161
|
+
return value;
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
export {
|
|
166
|
+
ModelStarterAttemptPolicySchema,
|
|
167
|
+
ModelStarterAttemptRequestSchema,
|
|
168
|
+
ModelStarterAttemptChoicesQuerySchema,
|
|
169
|
+
ModelStarterAttemptChoicesSchema,
|
|
170
|
+
ModelStarterAttemptSummarySchema,
|
|
171
|
+
ModelStarterAttemptListQuerySchema,
|
|
172
|
+
ModelStarterAttemptPageSchema,
|
|
173
|
+
ModelStarterAttemptResultSchema,
|
|
174
|
+
OpenPondModelStarterAttemptError,
|
|
175
|
+
OpenPondModelStarterAttemptsClient
|
|
176
|
+
};
|
|
177
|
+
//# sourceMappingURL=chunk-EPJM7VEV.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/model-starter-attempts.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\nimport { RewardCompositionSchema } from \"@openpond/evals/rewards\";\nimport { TaskGradeSchema } from \"@openpond/evals/graders\";\nimport { ModelProjectVersionedRefSchema } from \"./model-projects.js\";\nimport { canonicalJson, canonicalSha256 } from \"./protocol.js\";\n\nconst IdSchema = z.string().trim().min(1).max(200);\nconst HashSchema = z.string().regex(/^[a-f0-9]{64}$/);\nexport const ModelStarterAttemptPolicySchema = z.discriminatedUnion(\"kind\", [\n z.object({ kind: z.literal(\"hosted_chat\"), modelId: IdSchema, maxOutputTokens: z.number().int().min(1).max(4_096).default(1_024), temperature: z.number().min(0).max(2).default(0), topP: z.number().gt(0).max(1).default(1) }).strict(),\n z.object({ kind: z.literal(\"fixture\"), fixtureId: IdSchema }).strict(),\n]);\n/** The server resolves task input, private state, verifier and fixture script.\n * A caller can select releases, but cannot submit replacement execution bytes. */\nexport const ModelStarterAttemptRequestSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelStarterAttemptRequest.v1\"),\n operationId: IdSchema, teamId: IdSchema, modelProjectId: IdSchema,\n taskset: ModelProjectVersionedRefSchema, taskId: IdSchema,\n environmentSeed: z.number().int().min(0).max(2_147_483_647).default(0),\n policy: ModelStarterAttemptPolicySchema,\n}).strict();\nexport type ModelStarterAttemptRequest = z.infer<typeof ModelStarterAttemptRequestSchema>;\nexport const ModelStarterAttemptChoicesQuerySchema = z.object({ modelProjectId: IdSchema, taskset: ModelProjectVersionedRefSchema, afterTaskId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();\nexport const ModelStarterAttemptChoicesSchema = z.object({\n modelProjectId: IdSchema, taskset: ModelProjectVersionedRefSchema, available: z.boolean(), unavailableReason: z.string().max(1_000).nullable(),\n models: z.array(z.object({ id: IdSchema, name: z.string().max(500) }).strict()).max(200),\n tasks: z.array(z.object({ id: IdSchema, split: z.enum([\"train\", \"validation\", \"frozen_eval\"]), inputPreview: z.string().max(500), fixtures: z.array(z.object({ id: IdSchema, label: z.string().max(200) }).strict()).max(1_000) }).strict()).max(100),\n nextCursor: IdSchema.nullable(),\n}).strict();\nexport const ModelStarterAttemptSummarySchema = z.object({\n schemaVersion: z.literal(\"openpond.modelStarterAttemptSummary.v1\"),\n id: IdSchema, revision: z.number().int().positive(), request: ModelStarterAttemptRequestSchema,\n status: z.enum([\"queued\", \"running\", \"cancelling\", \"completed\", \"failed\", \"cancelled\"]),\n policySnapshot: z.object({ modelId: IdSchema, provider: IdSchema, upstreamModelId: z.string().min(1).max(500), configurationHash: HashSchema }).strict().nullable(),\n createdAt: z.iso.datetime(), startedAt: z.iso.datetime().nullable(), completedAt: z.iso.datetime().nullable(),\n cleanupComplete: z.boolean(), resultAvailable: z.boolean(), score: z.number().min(0).max(1).nullable(),\n gradingStatus: z.enum([\"not_started\", \"scored\", \"unscorable\", \"not_configured\"]).default(\"not_started\"),\n passed: z.boolean().nullable(), outputPreview: z.string().max(500).nullable(),\n error: z.object({ code: IdSchema, message: z.string().max(2_000) }).strict().nullable(),\n}).strict().superRefine((value, context) => {\n if ((value.request.policy.kind === \"fixture\") !== (value.policySnapshot === null)) context.addIssue({ code: \"custom\", path: [\"policySnapshot\"], message: \"Fixture execution must not claim a model identity.\" });\n if (value.status === \"completed\" && (!value.cleanupComplete || !value.resultAvailable || !value.completedAt)) context.addIssue({ code: \"custom\", message: \"Completed attempts require retained results and confirmed cleanup.\" });\n});\nexport type ModelStarterAttemptSummary = z.infer<typeof ModelStarterAttemptSummarySchema>;\nexport const ModelStarterAttemptListQuerySchema = z.object({ modelProjectId: IdSchema, afterId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();\nexport const ModelStarterAttemptPageSchema = z.object({ items: z.array(ModelStarterAttemptSummarySchema).max(100), nextCursor: IdSchema.nullable() }).strict();\nexport const ModelStarterAttemptResultSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelStarterAttemptResult.v1\"),\n attempt: ModelStarterAttemptSummarySchema,\n output: z.string().max(1_048_576).nullable(),\n // Only model-facing messages, never the private environment snapshot.\n messages: z.array(z.record(z.string(), z.unknown())).max(4_002),\n composition: RewardCompositionSchema.nullable(),\n // Ordinary Tasksets have no Reward binding. Absence preserves the hash of\n // already retained v1 results; new producers explicitly return null or a grade.\n grade: TaskGradeSchema.nullable().optional(),\n environment: z.object({ status: z.enum([\"completed\", \"budget_exhausted\", \"cancelled\", \"timed_out\", \"policy_failure\", \"environment_failure\"]), collected: z.boolean(), definition: ModelProjectVersionedRefSchema, initialStateHash: HashSchema.nullable(), finalStateHash: HashSchema.nullable(), attemptHash: HashSchema }).strict(),\n providerRequestIds: z.array(IdSchema).max(1_001),\n contentHash: HashSchema,\n}).strict().superRefine((value, context) => {\n if (!value.grade) return;\n if (value.composition) context.addIssue({ code: \"custom\", path: [\"grade\"], message: \"An ordinary grade cannot also claim a Reward composition.\" });\n if (![\"completed\", \"failed\"].includes(value.attempt.status) || !value.attempt.resultAvailable || value.attempt.score !== value.grade.score || value.attempt.gradingStatus !== value.grade.gradingStatus || value.attempt.passed !== (value.grade.score === null ? null : value.grade.passed)) context.addIssue({ code: \"custom\", path: [\"grade\"], message: \"Ordinary grade differs from its terminal attempt summary.\" });\n});\nexport type ModelStarterAttemptResult = z.infer<typeof ModelStarterAttemptResultSchema>;\n\nexport class OpenPondModelStarterAttemptError extends Error {\n constructor(readonly status: number, readonly code: string, message: string) { super(message); this.name = \"OpenPondModelStarterAttemptError\"; }\n}\n\nexport class OpenPondModelStarterAttemptsClient {\n readonly #options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof globalThis.fetch };\n constructor(options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof globalThis.fetch }) {\n const url = new URL(options.baseUrl);\n if (!options.apiKey.trim() || !options.teamId.trim() || ![\"https:\", \"http:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error(\"Starter attempts require an HTTP(S) endpoint and workspace credentials.\");\n this.#options = { ...options, baseUrl: url.toString().replace(/\\/+$/, \"\") };\n }\n async create(value: z.input<typeof ModelStarterAttemptRequestSchema>, options: { signal?: AbortSignal } = {}) {\n const request = ModelStarterAttemptRequestSchema.parse(value);\n if (request.teamId !== this.#options.teamId) throw new Error(\"Attempt belongs to another workspace.\");\n const result = this.#summary(await this.#request(\"\", \"POST\", request, options.signal));\n if (canonicalJson(result.request) !== canonicalJson(request)) throw new OpenPondModelStarterAttemptError(502, \"attempt_request_mismatch\", \"Attempt receipt differs from the submitted request.\");\n return result;\n }\n async get(id: string, options: { signal?: AbortSignal } = {}) { return this.#summary(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}`, \"GET\", undefined, options.signal), id); }\n async choices(value: z.input<typeof ModelStarterAttemptChoicesQuerySchema>, options: { signal?: AbortSignal } = {}) {\n const query = ModelStarterAttemptChoicesQuerySchema.parse(value);\n const params = new URLSearchParams({ modelProjectId: query.modelProjectId, tasksetId: query.taskset.id, revision: String(query.taskset.revision), contentHash: query.taskset.contentHash, limit: String(query.limit) });\n if (query.afterTaskId) params.set(\"afterTaskId\", query.afterTaskId);\n const result = ModelStarterAttemptChoicesSchema.parse(await this.#request(`/choices?${params}`, \"GET\", undefined, options.signal));\n if (result.modelProjectId !== query.modelProjectId || canonicalJson(result.taskset) !== canonicalJson(query.taskset) || result.tasks.length > query.limit || new Set(result.tasks.map(task => task.id)).size !== result.tasks.length) throw new OpenPondModelStarterAttemptError(502, \"attempt_choices_mismatch\", \"Attempt choices differ from the selected model or Taskset.\");\n return result;\n }\n async cancel(id: string, options: { signal?: AbortSignal } = {}) { return this.#summary(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}/cancel`, \"POST\", undefined, options.signal), id); }\n async result(id: string, options: { signal?: AbortSignal } = {}) {\n const value = ModelStarterAttemptResultSchema.parse(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}/result`, \"GET\", undefined, options.signal));\n this.#summary(value.attempt, id);\n const { contentHash, ...content } = value;\n if (!value.attempt.resultAvailable || await canonicalSha256(content) !== contentHash) throw new OpenPondModelStarterAttemptError(502, \"attempt_result_integrity\", \"Attempt result integrity failed.\");\n return value;\n }\n async list(value: z.input<typeof ModelStarterAttemptListQuerySchema>, options: { signal?: AbortSignal } = {}) {\n const query = ModelStarterAttemptListQuerySchema.parse(value);\n const params = new URLSearchParams({ modelProjectId: query.modelProjectId, limit: String(query.limit) });\n if (query.afterId) params.set(\"afterId\", query.afterId);\n const page = ModelStarterAttemptPageSchema.parse(await this.#request(`?${params}`, \"GET\", undefined, options.signal));\n if (page.items.length > query.limit || new Set(page.items.map(item => item.id)).size !== page.items.length || page.items.some(item => this.#summary(item).request.modelProjectId !== query.modelProjectId)) throw new OpenPondModelStarterAttemptError(502, \"attempt_page_mismatch\", \"Attempt page differs from the selected model.\");\n return page;\n }\n #summary(value: unknown, id?: string): ModelStarterAttemptSummary {\n const result = ModelStarterAttemptSummarySchema.parse(value);\n if (result.request.teamId !== this.#options.teamId || (id && result.id !== id)) throw new OpenPondModelStarterAttemptError(502, \"attempt_identity_mismatch\", \"Attempt receipt belongs to another identity or workspace.\");\n return result;\n }\n async #request(path: string, method: string, body: unknown, signal?: AbortSignal): Promise<unknown> {\n const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/model-starter-attempts${path}`, { method, headers: { Authorization: `Bearer ${this.#options.apiKey}`, \"X-OpenPond-Team-Id\": this.#options.teamId, \"Content-Type\": \"application/json\", Accept: \"application/json\" }, ...(body === undefined ? {} : { body: JSON.stringify(body) }), signal, redirect: \"error\" });\n const reader = response.body?.getReader();\n if (!reader) throw new OpenPondModelStarterAttemptError(response.status, \"attempt_empty_response\", \"Attempt response was empty.\");\n let bytes = 0; let text = \"\"; const decoder = new TextDecoder();\n try {\n while (true) {\n const chunk = await reader.read(); if (chunk.done) break;\n bytes += chunk.value.byteLength;\n if (bytes > 16_777_216) throw new OpenPondModelStarterAttemptError(502, \"attempt_response_too_large\", \"Attempt response exceeded its byte limit.\");\n text += decoder.decode(chunk.value, { stream: true });\n }\n text += decoder.decode();\n } finally { await reader.cancel(); reader.releaseLock(); }\n const value: unknown = JSON.parse(text);\n if (!response.ok) {\n const error = z.object({ code: IdSchema, message: z.string().max(2_000) }).safeParse(value);\n throw new OpenPondModelStarterAttemptError(response.status, error.success ? error.data.code : \"attempt_request_failed\", error.success ? error.data.message : \"Attempt request failed.\");\n }\n return value;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -10,9 +10,9 @@ import {
|
|
|
10
10
|
ReleaseIdSchema,
|
|
11
11
|
ReleaseTimestampSchema,
|
|
12
12
|
contentHash
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-NF63YMOL.js";
|
|
14
14
|
|
|
15
|
-
//
|
|
15
|
+
// ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/tools.js
|
|
16
16
|
import { z } from "zod";
|
|
17
17
|
var ToolDeclarationSchema = z.object({
|
|
18
18
|
name: z.string().trim().min(1).max(64).regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/),
|
|
@@ -29,7 +29,7 @@ var CapabilityRequirementSchema = z.object({
|
|
|
29
29
|
portability: z.enum(["portable", "host_adapter", "local_only", "hosted_only"])
|
|
30
30
|
}).strict();
|
|
31
31
|
|
|
32
|
-
//
|
|
32
|
+
// ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/models.js
|
|
33
33
|
import { z as z2 } from "zod";
|
|
34
34
|
var ModelRefSchema = z2.object({
|
|
35
35
|
provider: ReleaseIdSchema,
|
|
@@ -60,7 +60,7 @@ var ChatModelRefSchema = z2.object({
|
|
|
60
60
|
modelId: z2.string().trim().min(1).max(300)
|
|
61
61
|
});
|
|
62
62
|
|
|
63
|
-
//
|
|
63
|
+
// ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/evaluation-review.js
|
|
64
64
|
import { z as z3 } from "zod";
|
|
65
65
|
var BoundedTextSchema = z3.string().trim().min(1).max(1e5);
|
|
66
66
|
var HarnessEvaluationReviewClassificationSchema = z3.enum([
|
|
@@ -316,7 +316,7 @@ var HarnessEvaluationReviewNavigationDecisionSchema = z3.object({
|
|
|
316
316
|
reason: BoundedTextSchema
|
|
317
317
|
}).strict();
|
|
318
318
|
|
|
319
|
-
//
|
|
319
|
+
// ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/harness.js
|
|
320
320
|
import { z as z4 } from "zod";
|
|
321
321
|
var PortabilityReportSchema = z4.object({
|
|
322
322
|
portable: z4.boolean(),
|
|
@@ -398,10 +398,10 @@ var HarnessTraceSchema = z4.object({
|
|
|
398
398
|
contentHash: ReleaseHashSchema
|
|
399
399
|
}).strict();
|
|
400
400
|
|
|
401
|
-
//
|
|
401
|
+
// ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/harness-improvements.js
|
|
402
402
|
import { z as z6 } from "zod";
|
|
403
403
|
|
|
404
|
-
//
|
|
404
|
+
// ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/harness-workspaces.js
|
|
405
405
|
import { z as z5 } from "zod";
|
|
406
406
|
var MetadataSchema2 = z5.record(z5.string(), z5.unknown()).default({});
|
|
407
407
|
var RevisionSchema = z5.number().int().nonnegative();
|
|
@@ -705,7 +705,7 @@ var HarnessOverlayMergeReceiptSchema = HarnessOverlayMergeReceiptContentSchema.e
|
|
|
705
705
|
contentHash: ReleaseHashSchema
|
|
706
706
|
}).strict();
|
|
707
707
|
|
|
708
|
-
//
|
|
708
|
+
// ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/harness-improvements.js
|
|
709
709
|
var BoundedTextSchema3 = z6.string().trim().min(1).max(1e5);
|
|
710
710
|
var MetadataSchema3 = z6.record(z6.string(), z6.unknown()).default({});
|
|
711
711
|
var ImprovementSafeBoundaryKindSchema = z6.enum([
|
|
@@ -963,7 +963,7 @@ var ImprovementApplyReceiptSchema = ImprovementApplyReceiptContentSchema.extend(
|
|
|
963
963
|
contentHash: ReleaseHashSchema
|
|
964
964
|
}).strict();
|
|
965
965
|
|
|
966
|
-
//
|
|
966
|
+
// ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/refinement-lifecycle.js
|
|
967
967
|
import { z as z7 } from "zod";
|
|
968
968
|
var ShortTextSchema = z7.string().trim().min(1).max(2e3);
|
|
969
969
|
var BoundedTextSchema4 = z7.string().trim().min(1).max(1e5);
|
|
@@ -1370,4 +1370,4 @@ export {
|
|
|
1370
1370
|
CapabilityRequirementSchema,
|
|
1371
1371
|
ChatModelRefSchema
|
|
1372
1372
|
};
|
|
1373
|
-
//# sourceMappingURL=chunk-
|
|
1373
|
+
//# sourceMappingURL=chunk-EV4PKJWN.js.map
|