openpond-sdk 0.4.0 → 0.5.0
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/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/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 +3 -3
- package/dist/taskset-packages.js +3 -3
- 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/package.json +7 -3
- /package/dist/{chunk-LLHE4BOD.js.map → chunk-25TBEGXB.js.map} +0 -0
- /package/dist/{chunk-AZUCY3E5.js.map → chunk-6LGGLXAM.js.map} +0 -0
|
@@ -1,166 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
};
|
|
2
|
+
ModelStarterAttemptChoicesQuerySchema,
|
|
3
|
+
ModelStarterAttemptChoicesSchema,
|
|
4
|
+
ModelStarterAttemptListQuerySchema,
|
|
5
|
+
ModelStarterAttemptPageSchema,
|
|
6
|
+
ModelStarterAttemptPolicySchema,
|
|
7
|
+
ModelStarterAttemptRequestSchema,
|
|
8
|
+
ModelStarterAttemptResultSchema,
|
|
9
|
+
ModelStarterAttemptSummarySchema,
|
|
10
|
+
OpenPondModelStarterAttemptError,
|
|
11
|
+
OpenPondModelStarterAttemptsClient
|
|
12
|
+
} from "./chunk-EPJM7VEV.js";
|
|
13
|
+
import "./chunk-5PRP457R.js";
|
|
164
14
|
export {
|
|
165
15
|
ModelStarterAttemptChoicesQuerySchema,
|
|
166
16
|
ModelStarterAttemptChoicesSchema,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": [
|
|
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": "
|
|
3
|
+
"sources": [],
|
|
4
|
+
"sourcesContent": [],
|
|
5
|
+
"mappings": "",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ModelStarterAttemptPolicySchema,
|
|
3
|
+
ModelStarterAttemptSummarySchema
|
|
4
|
+
} from "./chunk-EPJM7VEV.js";
|
|
5
|
+
import "./chunk-EV4PKJWN.js";
|
|
6
|
+
import {
|
|
7
|
+
assertContentHash
|
|
8
|
+
} from "./chunk-NF63YMOL.js";
|
|
9
|
+
import {
|
|
10
|
+
ModelProjectVersionedRefSchema,
|
|
11
|
+
canonicalJson,
|
|
12
|
+
canonicalSha256
|
|
13
|
+
} from "./chunk-5PRP457R.js";
|
|
14
|
+
|
|
15
|
+
// src/model-taskset-runs.ts
|
|
16
|
+
import { z as z2 } from "zod";
|
|
17
|
+
|
|
18
|
+
// src/model-taskset-runs-contracts.ts
|
|
19
|
+
import { z } from "zod";
|
|
20
|
+
import { TasksetRunManifestSchema, TasksetRunMemberSchema, TasksetMetricResultSchema, assertTasksetMetricResult, orderTasksetRunReceipts } from "@openpond/evals/metrics";
|
|
21
|
+
import { AttemptReceiptSchema } from "@openpond/evals/runs";
|
|
22
|
+
var IdSchema = z.string().trim().min(1).max(200);
|
|
23
|
+
var HashSchema = z.string().regex(/^[a-f0-9]{64}$/);
|
|
24
|
+
var ModelTasksetRunPolicySchema = z.discriminatedUnion("kind", [
|
|
25
|
+
ModelStarterAttemptPolicySchema.options[0],
|
|
26
|
+
z.object({ kind: z.literal("fixture") }).strict()
|
|
27
|
+
]);
|
|
28
|
+
var ModelTasksetRunRequestSchema = z.object({
|
|
29
|
+
schemaVersion: z.literal("openpond.modelTasksetRunRequest.v1"),
|
|
30
|
+
operationId: IdSchema,
|
|
31
|
+
teamId: IdSchema,
|
|
32
|
+
modelProjectId: IdSchema,
|
|
33
|
+
taskset: ModelProjectVersionedRefSchema,
|
|
34
|
+
policy: ModelTasksetRunPolicySchema,
|
|
35
|
+
population: z.array(TasksetRunMemberSchema).min(1).max(1e4)
|
|
36
|
+
}).strict().superRefine((value, context) => {
|
|
37
|
+
if (new Set(value.population.map((member) => member.receiptId)).size !== value.population.length) context.addIssue({ code: "custom", path: ["population"], message: "Run receipt identities must be unique." });
|
|
38
|
+
if (value.population.some((member) => member.fixtureId !== null !== (value.policy.kind === "fixture"))) context.addIssue({ code: "custom", path: ["population"], message: "Only fixture runs require a fixture identity for every member." });
|
|
39
|
+
if (value.population.some((member) => !/^(0|[1-9][0-9]*)$/.test(member.seed) || Number(member.seed) > 2147483647)) context.addIssue({ code: "custom", path: ["population"], message: "Hosted environment seeds must be integers from 0 to 2147483647." });
|
|
40
|
+
});
|
|
41
|
+
var ModelTasksetRunSummarySchema = z.object({
|
|
42
|
+
schemaVersion: z.literal("openpond.modelTasksetRunSummary.v1"),
|
|
43
|
+
id: IdSchema,
|
|
44
|
+
revision: z.number().int().positive(),
|
|
45
|
+
teamId: IdSchema,
|
|
46
|
+
modelProjectId: IdSchema,
|
|
47
|
+
operationId: IdSchema,
|
|
48
|
+
taskset: ModelProjectVersionedRefSchema,
|
|
49
|
+
policyKind: z.enum(["hosted_chat", "fixture"]),
|
|
50
|
+
manifestHash: HashSchema,
|
|
51
|
+
status: z.enum(["queued", "running", "cancelling", "completed", "failed", "cancelled"]),
|
|
52
|
+
totalCount: z.number().int().min(1).max(1e4),
|
|
53
|
+
counts: z.object({ pending: z.number().int().nonnegative(), running: z.number().int().nonnegative(), completed: z.number().int().nonnegative(), failed: z.number().int().nonnegative(), cancelled: z.number().int().nonnegative() }).strict(),
|
|
54
|
+
createdAt: z.iso.datetime(),
|
|
55
|
+
startedAt: z.iso.datetime().nullable(),
|
|
56
|
+
completedAt: z.iso.datetime().nullable(),
|
|
57
|
+
cleanupComplete: z.boolean(),
|
|
58
|
+
resultAvailable: z.boolean(),
|
|
59
|
+
score: z.number().min(0).max(1).nullable(),
|
|
60
|
+
metricName: z.string().min(1).max(240),
|
|
61
|
+
error: z.object({ code: IdSchema, message: z.string().max(2e3) }).strict().nullable()
|
|
62
|
+
}).strict().superRefine((value, context) => {
|
|
63
|
+
if (Object.values(value.counts).reduce((sum, count) => sum + count, 0) !== value.totalCount) context.addIssue({ code: "custom", path: ["counts"], message: "Run counts must account for the complete population." });
|
|
64
|
+
if (value.status !== "completed" && value.score !== null) context.addIssue({ code: "custom", path: ["score"], message: "Only completed evaluations publish a metric value." });
|
|
65
|
+
if (["completed", "failed", "cancelled"].includes(value.status) && (!value.completedAt || value.counts.pending || value.counts.running)) context.addIssue({ code: "custom", message: "Terminal runs require complete population accounting." });
|
|
66
|
+
if (value.status === "cancelled" && !value.cleanupComplete) context.addIssue({ code: "custom", message: "Cancelled runs require confirmed cleanup." });
|
|
67
|
+
if (value.resultAvailable && !["completed", "failed", "cancelled"].includes(value.status)) context.addIssue({ code: "custom", message: "Run results require terminal population accounting." });
|
|
68
|
+
if (value.status === "completed" && (!value.cleanupComplete || !value.resultAvailable)) context.addIssue({ code: "custom", message: "Completed evaluations require retained results and confirmed cleanup." });
|
|
69
|
+
});
|
|
70
|
+
var ModelTasksetRunDetailsSchema = z.object({
|
|
71
|
+
summary: ModelTasksetRunSummarySchema,
|
|
72
|
+
request: ModelTasksetRunRequestSchema,
|
|
73
|
+
manifest: TasksetRunManifestSchema,
|
|
74
|
+
policySnapshot: ModelStarterAttemptSummarySchema.shape.policySnapshot
|
|
75
|
+
}).strict();
|
|
76
|
+
var ModelTasksetRunListQuerySchema = z.object({ modelProjectId: IdSchema, afterId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();
|
|
77
|
+
var ModelTasksetRunPageSchema = z.object({ items: z.array(ModelTasksetRunSummarySchema).max(100), nextCursor: IdSchema.nullable() }).strict();
|
|
78
|
+
var ModelTasksetRunResultSchema = z.object({
|
|
79
|
+
schemaVersion: z.literal("openpond.modelTasksetRunResult.v1"),
|
|
80
|
+
run: ModelTasksetRunDetailsSchema,
|
|
81
|
+
receipts: z.array(AttemptReceiptSchema).min(1).max(1e4),
|
|
82
|
+
metric: TasksetMetricResultSchema.nullable(),
|
|
83
|
+
contentHash: HashSchema
|
|
84
|
+
}).strict();
|
|
85
|
+
async function verifyModelTasksetRunDetails(value) {
|
|
86
|
+
const result = ModelTasksetRunDetailsSchema.parse(value);
|
|
87
|
+
const { summary, request, manifest, policySnapshot } = result;
|
|
88
|
+
assertContentHash(manifest, "Taskset run manifest");
|
|
89
|
+
if (manifest.contentHash !== summary.manifestHash || manifest.id !== summary.id || manifest.createdAt !== summary.createdAt || summary.teamId !== request.teamId || summary.modelProjectId !== request.modelProjectId || summary.operationId !== request.operationId || summary.policyKind !== request.policy.kind || summary.totalCount !== request.population.length || summary.metricName !== manifest.metricPolicy.primaryMetric || canonicalJson(summary.taskset) !== canonicalJson(request.taskset) || manifest.tasksetRelease.id !== request.taskset.id || manifest.tasksetRelease.contentHash !== request.taskset.contentHash || canonicalJson(manifest.population) !== canonicalJson(request.population)) throw new Error("Evaluation run differs from its admitted request or manifest.");
|
|
90
|
+
if (request.policy.kind === "fixture") {
|
|
91
|
+
if (manifest.policy.kind !== "fixture" || policySnapshot !== null) throw new Error("Fixture checks cannot claim a model identity.");
|
|
92
|
+
} else if (manifest.policy.kind !== "model" || !policySnapshot || policySnapshot.modelId !== request.policy.modelId || manifest.policy.model.provider !== policySnapshot.provider || manifest.policy.model.model !== policySnapshot.upstreamModelId || manifest.policy.model.revision !== null || manifest.policy.model.artifactHash !== null || manifest.policy.model.tokenizerRevision !== null || manifest.policy.model.chatTemplateHash !== null || manifest.policy.configurationHash !== await canonicalSha256({ policy: request.policy, snapshot: policySnapshot })) throw new Error("Evaluation model differs from its admitted policy.");
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
async function verifyModelTasksetRunResult(value) {
|
|
96
|
+
const result = ModelTasksetRunResultSchema.parse(value);
|
|
97
|
+
const { contentHash: actual, ...content } = result;
|
|
98
|
+
if (await canonicalSha256(content) !== actual) throw new Error("Evaluation result integrity failed.");
|
|
99
|
+
const { summary, manifest } = await verifyModelTasksetRunDetails(result.run);
|
|
100
|
+
if (!summary.resultAvailable || !["completed", "failed", "cancelled"].includes(summary.status)) throw new Error("Evaluation result is not terminal.");
|
|
101
|
+
const ordered = orderTasksetRunReceipts(manifest, result.receipts);
|
|
102
|
+
if (canonicalJson(ordered) !== canonicalJson(result.receipts)) throw new Error("Evaluation receipts differ from the admitted order.");
|
|
103
|
+
if (summary.status === "completed" !== (result.metric !== null)) throw new Error("Only completed evaluations retain a metric.");
|
|
104
|
+
if (result.metric) {
|
|
105
|
+
assertTasksetMetricResult(result.metric);
|
|
106
|
+
if (result.metric.runManifest.id !== manifest.id || result.metric.runManifest.contentHash !== manifest.contentHash || canonicalJson(result.metric.tasksetRelease) !== canonicalJson(manifest.tasksetRelease) || canonicalJson(result.metric.policy) !== canonicalJson(manifest.metricPolicy) || canonicalJson(result.metric.receiptRefs) !== canonicalJson(result.receipts.map(({ id, contentHash }) => ({ id, contentHash }))) || result.metric.value !== summary.score) throw new Error("Evaluation metric differs from its admitted run or receipt population.");
|
|
107
|
+
}
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// src/model-taskset-runs.ts
|
|
112
|
+
var IdSchema2 = z2.string().trim().min(1).max(200);
|
|
113
|
+
var OpenPondModelTasksetRunError = class extends Error {
|
|
114
|
+
constructor(status, code, message) {
|
|
115
|
+
super(message);
|
|
116
|
+
this.status = status;
|
|
117
|
+
this.code = code;
|
|
118
|
+
this.name = "OpenPondModelTasksetRunError";
|
|
119
|
+
}
|
|
120
|
+
status;
|
|
121
|
+
code;
|
|
122
|
+
};
|
|
123
|
+
var OpenPondModelTasksetRunsClient = class {
|
|
124
|
+
#options;
|
|
125
|
+
constructor(options) {
|
|
126
|
+
const url = new URL(options.baseUrl);
|
|
127
|
+
if (!options.apiKey.trim() || !options.teamId.trim() || !["https:", "http:"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error("Evaluation runs require an HTTP(S) endpoint and workspace credentials.");
|
|
128
|
+
this.#options = { ...options, baseUrl: url.toString().replace(/\/+$/, "") };
|
|
129
|
+
}
|
|
130
|
+
async create(value, options = {}) {
|
|
131
|
+
const request = ModelTasksetRunRequestSchema.parse(value);
|
|
132
|
+
if (request.teamId !== this.#options.teamId) throw new Error("Evaluation belongs to another workspace.");
|
|
133
|
+
const result = await verifyModelTasksetRunDetails(await this.#request("", "POST", request, options.signal));
|
|
134
|
+
this.#scope(result.summary);
|
|
135
|
+
if (canonicalJson(result.request) !== canonicalJson(request)) throw new OpenPondModelTasksetRunError(502, "evaluation_request_mismatch", "Evaluation differs from the submitted request.");
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
async get(id, options = {}) {
|
|
139
|
+
const result = await verifyModelTasksetRunDetails(await this.#request(`/${encodeURIComponent(IdSchema2.parse(id))}`, "GET", void 0, options.signal));
|
|
140
|
+
this.#scope(result.summary, id);
|
|
141
|
+
return result;
|
|
142
|
+
}
|
|
143
|
+
async cancel(id, options = {}) {
|
|
144
|
+
const result = await verifyModelTasksetRunDetails(await this.#request(`/${encodeURIComponent(IdSchema2.parse(id))}/cancel`, "POST", void 0, options.signal));
|
|
145
|
+
this.#scope(result.summary, id);
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
async result(id, options = {}) {
|
|
149
|
+
const result = await verifyModelTasksetRunResult(await this.#request(`/${encodeURIComponent(IdSchema2.parse(id))}/result`, "GET", void 0, options.signal));
|
|
150
|
+
this.#scope(result.run.summary, id);
|
|
151
|
+
return result;
|
|
152
|
+
}
|
|
153
|
+
async list(value, options = {}) {
|
|
154
|
+
const query = ModelTasksetRunListQuerySchema.parse(value);
|
|
155
|
+
const params = new URLSearchParams({ modelProjectId: query.modelProjectId, limit: String(query.limit) });
|
|
156
|
+
if (query.afterId) params.set("afterId", query.afterId);
|
|
157
|
+
const result = ModelTasksetRunPageSchema.parse(await this.#request(`?${params}`, "GET", void 0, options.signal));
|
|
158
|
+
if (result.items.length > query.limit || new Set(result.items.map((item) => item.id)).size !== result.items.length || result.items.some((item) => {
|
|
159
|
+
this.#scope(item);
|
|
160
|
+
return item.modelProjectId !== query.modelProjectId;
|
|
161
|
+
})) throw new OpenPondModelTasksetRunError(502, "evaluation_page_mismatch", "Evaluation page differs from the selected model.");
|
|
162
|
+
return result;
|
|
163
|
+
}
|
|
164
|
+
#scope(summary, id) {
|
|
165
|
+
if (summary.teamId !== this.#options.teamId || id && summary.id !== id) throw new OpenPondModelTasksetRunError(502, "evaluation_identity_mismatch", "Evaluation belongs to another identity or workspace.");
|
|
166
|
+
}
|
|
167
|
+
async #request(path, method, body, signal) {
|
|
168
|
+
const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/model-taskset-runs${path}`, {
|
|
169
|
+
method,
|
|
170
|
+
headers: { Authorization: `Bearer ${this.#options.apiKey}`, "X-OpenPond-Team-Id": this.#options.teamId, "Content-Type": "application/json", Accept: "application/json" },
|
|
171
|
+
...body === void 0 ? {} : { body: JSON.stringify(body) },
|
|
172
|
+
signal,
|
|
173
|
+
redirect: "error"
|
|
174
|
+
});
|
|
175
|
+
const value = await response.json();
|
|
176
|
+
if (!response.ok) {
|
|
177
|
+
const error = z2.object({ code: z2.string(), message: z2.string() }).safeParse(value);
|
|
178
|
+
throw new OpenPondModelTasksetRunError(response.status, error.success ? error.data.code : "evaluation_request_failed", error.success ? error.data.message : "Evaluation request failed.");
|
|
179
|
+
}
|
|
180
|
+
return value;
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
export {
|
|
184
|
+
ModelTasksetRunDetailsSchema,
|
|
185
|
+
ModelTasksetRunListQuerySchema,
|
|
186
|
+
ModelTasksetRunPageSchema,
|
|
187
|
+
ModelTasksetRunPolicySchema,
|
|
188
|
+
ModelTasksetRunRequestSchema,
|
|
189
|
+
ModelTasksetRunResultSchema,
|
|
190
|
+
ModelTasksetRunSummarySchema,
|
|
191
|
+
OpenPondModelTasksetRunError,
|
|
192
|
+
OpenPondModelTasksetRunsClient,
|
|
193
|
+
verifyModelTasksetRunDetails,
|
|
194
|
+
verifyModelTasksetRunResult
|
|
195
|
+
};
|
|
196
|
+
//# sourceMappingURL=model-taskset-runs.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/model-taskset-runs.ts", "../src/model-taskset-runs-contracts.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\nimport { canonicalJson } from \"./protocol.js\";\nimport { ModelTasksetRunRequestSchema, ModelTasksetRunListQuerySchema, ModelTasksetRunPageSchema, verifyModelTasksetRunDetails, verifyModelTasksetRunResult, type ModelTasksetRunSummary } from \"./model-taskset-runs-contracts.js\";\nexport * from \"./model-taskset-runs-contracts.js\";\n\nconst IdSchema = z.string().trim().min(1).max(200);\nexport class OpenPondModelTasksetRunError extends Error {\n constructor(readonly status: number, readonly code: string, message: string) { super(message); this.name = \"OpenPondModelTasksetRunError\"; }\n}\n\nexport class OpenPondModelTasksetRunsClient {\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(\"Evaluation runs require an HTTP(S) endpoint and workspace credentials.\");\n this.#options = { ...options, baseUrl: url.toString().replace(/\\/+$/, \"\") };\n }\n async create(value: z.input<typeof ModelTasksetRunRequestSchema>, options: { signal?: AbortSignal } = {}) {\n const request = ModelTasksetRunRequestSchema.parse(value);\n if (request.teamId !== this.#options.teamId) throw new Error(\"Evaluation belongs to another workspace.\");\n const result = await verifyModelTasksetRunDetails(await this.#request(\"\", \"POST\", request, options.signal));\n this.#scope(result.summary);\n if (canonicalJson(result.request) !== canonicalJson(request)) throw new OpenPondModelTasksetRunError(502, \"evaluation_request_mismatch\", \"Evaluation differs from the submitted request.\");\n return result;\n }\n async get(id: string, options: { signal?: AbortSignal } = {}) {\n const result = await verifyModelTasksetRunDetails(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}`, \"GET\", undefined, options.signal));\n this.#scope(result.summary, id);\n return result;\n }\n async cancel(id: string, options: { signal?: AbortSignal } = {}) {\n const result = await verifyModelTasksetRunDetails(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}/cancel`, \"POST\", undefined, options.signal));\n this.#scope(result.summary, id);\n return result;\n }\n async result(id: string, options: { signal?: AbortSignal } = {}) {\n const result = await verifyModelTasksetRunResult(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}/result`, \"GET\", undefined, options.signal));\n this.#scope(result.run.summary, id);\n return result;\n }\n async list(value: z.input<typeof ModelTasksetRunListQuerySchema>, options: { signal?: AbortSignal } = {}) {\n const query = ModelTasksetRunListQuerySchema.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 result = ModelTasksetRunPageSchema.parse(await this.#request(`?${params}`, \"GET\", undefined, options.signal));\n if (result.items.length > query.limit || new Set(result.items.map(item => item.id)).size !== result.items.length || result.items.some(item => { this.#scope(item); return item.modelProjectId !== query.modelProjectId; })) throw new OpenPondModelTasksetRunError(502, \"evaluation_page_mismatch\", \"Evaluation page differs from the selected model.\");\n return result;\n }\n #scope(summary: ModelTasksetRunSummary, id?: string) {\n if (summary.teamId !== this.#options.teamId || (id && summary.id !== id)) throw new OpenPondModelTasksetRunError(502, \"evaluation_identity_mismatch\", \"Evaluation belongs to another identity or workspace.\");\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-taskset-runs${path}`, {\n method, headers: { Authorization: `Bearer ${this.#options.apiKey}`, \"X-OpenPond-Team-Id\": this.#options.teamId, \"Content-Type\": \"application/json\", Accept: \"application/json\" },\n ...(body === undefined ? {} : { body: JSON.stringify(body) }), signal, redirect: \"error\",\n });\n const value = await response.json();\n if (!response.ok) {\n const error = z.object({ code: z.string(), message: z.string() }).safeParse(value);\n throw new OpenPondModelTasksetRunError(response.status, error.success ? error.data.code : \"evaluation_request_failed\", error.success ? error.data.message : \"Evaluation request failed.\");\n }\n return value;\n }\n}\n", "import { z } from \"zod\";\nimport { assertContentHash } from \"@openpond/harness\";\nimport { TasksetRunManifestSchema, TasksetRunMemberSchema, TasksetMetricResultSchema, assertTasksetMetricResult, orderTasksetRunReceipts } from \"@openpond/evals/metrics\";\nimport { AttemptReceiptSchema } from \"@openpond/evals/runs\";\nimport { ModelProjectVersionedRefSchema } from \"./model-projects.js\";\nimport { ModelStarterAttemptPolicySchema, ModelStarterAttemptSummarySchema } from \"./model-starter-attempts.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 ModelTasksetRunPolicySchema = z.discriminatedUnion(\"kind\", [\n ModelStarterAttemptPolicySchema.options[0],\n z.object({ kind: z.literal(\"fixture\") }).strict(),\n]);\nexport const ModelTasksetRunRequestSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelTasksetRunRequest.v1\"),\n operationId: IdSchema, teamId: IdSchema, modelProjectId: IdSchema,\n taskset: ModelProjectVersionedRefSchema, policy: ModelTasksetRunPolicySchema,\n population: z.array(TasksetRunMemberSchema).min(1).max(10_000),\n}).strict().superRefine((value, context) => {\n if (new Set(value.population.map(member => member.receiptId)).size !== value.population.length) context.addIssue({ code: \"custom\", path: [\"population\"], message: \"Run receipt identities must be unique.\" });\n if (value.population.some(member => (member.fixtureId !== null) !== (value.policy.kind === \"fixture\"))) context.addIssue({ code: \"custom\", path: [\"population\"], message: \"Only fixture runs require a fixture identity for every member.\" });\n if (value.population.some(member => !/^(0|[1-9][0-9]*)$/.test(member.seed) || Number(member.seed) > 2_147_483_647)) context.addIssue({ code: \"custom\", path: [\"population\"], message: \"Hosted environment seeds must be integers from 0 to 2147483647.\" });\n});\nexport type ModelTasksetRunRequest = z.infer<typeof ModelTasksetRunRequestSchema>;\nexport const ModelTasksetRunSummarySchema = z.object({\n schemaVersion: z.literal(\"openpond.modelTasksetRunSummary.v1\"),\n id: IdSchema, revision: z.number().int().positive(), teamId: IdSchema, modelProjectId: IdSchema,\n operationId: IdSchema, taskset: ModelProjectVersionedRefSchema, policyKind: z.enum([\"hosted_chat\", \"fixture\"]),\n manifestHash: HashSchema,\n status: z.enum([\"queued\", \"running\", \"cancelling\", \"completed\", \"failed\", \"cancelled\"]),\n totalCount: z.number().int().min(1).max(10_000),\n counts: z.object({ pending: z.number().int().nonnegative(), running: z.number().int().nonnegative(), completed: z.number().int().nonnegative(), failed: z.number().int().nonnegative(), cancelled: z.number().int().nonnegative() }).strict(),\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 metricName: z.string().min(1).max(240),\n error: z.object({ code: IdSchema, message: z.string().max(2_000) }).strict().nullable(),\n}).strict().superRefine((value, context) => {\n if (Object.values(value.counts).reduce((sum, count) => sum + count, 0) !== value.totalCount) context.addIssue({ code: \"custom\", path: [\"counts\"], message: \"Run counts must account for the complete population.\" });\n if (value.status !== \"completed\" && value.score !== null) context.addIssue({ code: \"custom\", path: [\"score\"], message: \"Only completed evaluations publish a metric value.\" });\n if ([\"completed\", \"failed\", \"cancelled\"].includes(value.status) && (!value.completedAt || value.counts.pending || value.counts.running)) context.addIssue({ code: \"custom\", message: \"Terminal runs require complete population accounting.\" });\n if (value.status === \"cancelled\" && !value.cleanupComplete) context.addIssue({ code: \"custom\", message: \"Cancelled runs require confirmed cleanup.\" });\n if (value.resultAvailable && ![\"completed\", \"failed\", \"cancelled\"].includes(value.status)) context.addIssue({ code: \"custom\", message: \"Run results require terminal population accounting.\" });\n if (value.status === \"completed\" && (!value.cleanupComplete || !value.resultAvailable)) context.addIssue({ code: \"custom\", message: \"Completed evaluations require retained results and confirmed cleanup.\" });\n});\nexport type ModelTasksetRunSummary = z.infer<typeof ModelTasksetRunSummarySchema>;\nexport const ModelTasksetRunDetailsSchema = z.object({\n summary: ModelTasksetRunSummarySchema,\n request: ModelTasksetRunRequestSchema,\n manifest: TasksetRunManifestSchema,\n policySnapshot: ModelStarterAttemptSummarySchema.shape.policySnapshot,\n}).strict();\nexport type ModelTasksetRunDetails = z.infer<typeof ModelTasksetRunDetailsSchema>;\nexport const ModelTasksetRunListQuerySchema = z.object({ modelProjectId: IdSchema, afterId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();\nexport const ModelTasksetRunPageSchema = z.object({ items: z.array(ModelTasksetRunSummarySchema).max(100), nextCursor: IdSchema.nullable() }).strict();\nexport const ModelTasksetRunResultSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelTasksetRunResult.v1\"),\n run: ModelTasksetRunDetailsSchema,\n receipts: z.array(AttemptReceiptSchema).min(1).max(10_000),\n metric: TasksetMetricResultSchema.nullable(),\n contentHash: HashSchema,\n}).strict();\nexport type ModelTasksetRunResult = z.infer<typeof ModelTasksetRunResultSchema>;\n\n/** Server artifact ownership authenticates the producer. These checks bind all\n * portable projections to the admitted request, population and policy. */\nexport async function verifyModelTasksetRunDetails(value: unknown): Promise<ModelTasksetRunDetails> {\n const result = ModelTasksetRunDetailsSchema.parse(value);\n const { summary, request, manifest, policySnapshot } = result;\n assertContentHash(manifest, \"Taskset run manifest\");\n if (manifest.contentHash !== summary.manifestHash\n || manifest.id !== summary.id || manifest.createdAt !== summary.createdAt || summary.teamId !== request.teamId || summary.modelProjectId !== request.modelProjectId\n || summary.operationId !== request.operationId || summary.policyKind !== request.policy.kind\n || summary.totalCount !== request.population.length || summary.metricName !== manifest.metricPolicy.primaryMetric\n || canonicalJson(summary.taskset) !== canonicalJson(request.taskset)\n || manifest.tasksetRelease.id !== request.taskset.id || manifest.tasksetRelease.contentHash !== request.taskset.contentHash\n || canonicalJson(manifest.population) !== canonicalJson(request.population)) throw new Error(\"Evaluation run differs from its admitted request or manifest.\");\n if (request.policy.kind === \"fixture\") {\n if (manifest.policy.kind !== \"fixture\" || policySnapshot !== null) throw new Error(\"Fixture checks cannot claim a model identity.\");\n } else if (manifest.policy.kind !== \"model\" || !policySnapshot || policySnapshot.modelId !== request.policy.modelId\n || manifest.policy.model.provider !== policySnapshot.provider || manifest.policy.model.model !== policySnapshot.upstreamModelId\n || manifest.policy.model.revision !== null || manifest.policy.model.artifactHash !== null || manifest.policy.model.tokenizerRevision !== null || manifest.policy.model.chatTemplateHash !== null\n || manifest.policy.configurationHash !== await canonicalSha256({ policy: request.policy, snapshot: policySnapshot })) throw new Error(\"Evaluation model differs from its admitted policy.\");\n return result;\n}\n\nexport async function verifyModelTasksetRunResult(value: unknown): Promise<ModelTasksetRunResult> {\n const result = ModelTasksetRunResultSchema.parse(value);\n const { contentHash: actual, ...content } = result;\n if (await canonicalSha256(content) !== actual) throw new Error(\"Evaluation result integrity failed.\");\n const { summary, manifest } = await verifyModelTasksetRunDetails(result.run);\n if (!summary.resultAvailable || ![\"completed\", \"failed\", \"cancelled\"].includes(summary.status)) throw new Error(\"Evaluation result is not terminal.\");\n const ordered = orderTasksetRunReceipts(manifest, result.receipts);\n if (canonicalJson(ordered) !== canonicalJson(result.receipts)) throw new Error(\"Evaluation receipts differ from the admitted order.\");\n if ((summary.status === \"completed\") !== (result.metric !== null)) throw new Error(\"Only completed evaluations retain a metric.\");\n if (result.metric) {\n assertTasksetMetricResult(result.metric);\n if (result.metric.runManifest.id !== manifest.id || result.metric.runManifest.contentHash !== manifest.contentHash\n || canonicalJson(result.metric.tasksetRelease) !== canonicalJson(manifest.tasksetRelease)\n || canonicalJson(result.metric.policy) !== canonicalJson(manifest.metricPolicy)\n || canonicalJson(result.metric.receiptRefs) !== canonicalJson(result.receipts.map(({ id, contentHash }) => ({ id, contentHash })))\n || result.metric.value !== summary.score) throw new Error(\"Evaluation metric differs from its admitted run or receipt population.\");\n }\n return result;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["z", "IdSchema", "z"]
|
|
7
|
+
}
|
package/dist/refiner.js
CHANGED
package/dist/taskset-drafts.js
CHANGED
|
@@ -95,7 +95,7 @@ import {
|
|
|
95
95
|
validatePortability,
|
|
96
96
|
validateTaskset,
|
|
97
97
|
validateTasksetDraftWorkspace
|
|
98
|
-
} from "./chunk-
|
|
98
|
+
} from "./chunk-6LGGLXAM.js";
|
|
99
99
|
import {
|
|
100
100
|
ModelTasksetDraftRequestSchema,
|
|
101
101
|
TasksetDraftFileInfoSchema,
|
|
@@ -106,11 +106,11 @@ import {
|
|
|
106
106
|
import "./chunk-AVW35YOH.js";
|
|
107
107
|
import "./chunk-A4ZDOZKP.js";
|
|
108
108
|
import "./chunk-65D4C7HP.js";
|
|
109
|
-
import "./chunk-
|
|
109
|
+
import "./chunk-EV4PKJWN.js";
|
|
110
110
|
import {
|
|
111
111
|
contentHash,
|
|
112
112
|
sha256
|
|
113
|
-
} from "./chunk-
|
|
113
|
+
} from "./chunk-NF63YMOL.js";
|
|
114
114
|
import "./chunk-5PRP457R.js";
|
|
115
115
|
|
|
116
116
|
// src/taskset-drafts.ts
|
package/dist/taskset-packages.js
CHANGED
|
@@ -41,7 +41,7 @@ import {
|
|
|
41
41
|
validateTasksetDraftWorkspace,
|
|
42
42
|
validateTasksetLearningResources,
|
|
43
43
|
validateTasksetPackage
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-6LGGLXAM.js";
|
|
45
45
|
import {
|
|
46
46
|
ModelTasksetAuthoringOwnerSchema,
|
|
47
47
|
ModelTasksetAuthoringSchema,
|
|
@@ -62,12 +62,12 @@ import {
|
|
|
62
62
|
import {
|
|
63
63
|
CapabilityRequirementSchema,
|
|
64
64
|
ToolDeclarationSchema
|
|
65
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-EV4PKJWN.js";
|
|
66
66
|
import {
|
|
67
67
|
ImmutableAssetRefSchema,
|
|
68
68
|
contentHash,
|
|
69
69
|
sha256
|
|
70
|
-
} from "./chunk-
|
|
70
|
+
} from "./chunk-NF63YMOL.js";
|
|
71
71
|
import "./chunk-5PRP457R.js";
|
|
72
72
|
|
|
73
73
|
// src/model-batch-review.ts
|