openpond-sdk 0.9.1 → 0.9.3
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 +2 -0
- package/README.md +16 -0
- package/dist/chunk-KLX6OVHR.js +359 -0
- package/dist/chunk-KLX6OVHR.js.map +7 -0
- package/dist/{chunk-QABCKPW6.js → chunk-TQ5ASK7D.js} +4 -4
- package/dist/{chunk-IKTZ2CD4.js → chunk-XR6CLSCS.js} +85 -43
- package/dist/chunk-XR6CLSCS.js.map +7 -0
- package/dist/chunk-ZV2BLO3D.js +123 -0
- package/dist/chunk-ZV2BLO3D.js.map +7 -0
- package/dist/dataset-workspaces.js +3 -3
- package/dist/experiments.js +50 -0
- package/dist/experiments.js.map +7 -0
- package/dist/index.js +12 -3
- package/dist/index.js.map +2 -2
- package/dist/learning.js +3 -3
- package/dist/model-starter-attempts.js +3 -1
- package/dist/model-taskset-runs.js +19 -113
- package/dist/model-taskset-runs.js.map +4 -4
- package/dist/taskset-drafts.js +2 -2
- package/dist/taskset-packages.js +2 -2
- package/dist/types/packages/sdk/src/experiment-client.d.ts +2002 -0
- package/dist/types/packages/sdk/src/experiment-client.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-contracts.d.ts +256 -0
- package/dist/types/packages/sdk/src/experiment-contracts.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-field-mappings.d.ts +43 -0
- package/dist/types/packages/sdk/src/experiment-field-mappings.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-grading-contracts.d.ts +79 -0
- package/dist/types/packages/sdk/src/experiment-grading-contracts.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-scoring-contracts.d.ts +192 -0
- package/dist/types/packages/sdk/src/experiment-scoring-contracts.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiments.d.ts +6 -0
- package/dist/types/packages/sdk/src/experiments.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/index.d.ts +2 -0
- package/dist/types/packages/sdk/src/index.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts +1 -0
- package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starter-attempts.d.ts +123 -0
- package/dist/types/packages/sdk/src/model-starter-attempts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starter-catalog.d.ts +1 -0
- package/dist/types/packages/sdk/src/model-starter-catalog.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starters.d.ts +2 -0
- package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts +1 -0
- package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts +7 -0
- package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +9 -0
- package/dist/types/packages/sdk/src/model-taskset-runs.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts +2 -0
- package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-client.d.ts +3 -0
- package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts +2 -0
- package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +1 -0
- package/dist/types/packages/sdk/src/taskset-package-projection.d.ts.map +1 -1
- package/package.json +6 -2
- package/dist/chunk-IKTZ2CD4.js.map +0 -7
- /package/dist/{chunk-QABCKPW6.js.map → chunk-TQ5ASK7D.js.map} +0 -0
|
@@ -3,9 +3,13 @@ import {
|
|
|
3
3
|
canonicalJson,
|
|
4
4
|
canonicalSha256
|
|
5
5
|
} from "./chunk-TCHAWJMB.js";
|
|
6
|
+
import {
|
|
7
|
+
FailureClassSchema,
|
|
8
|
+
contentHash
|
|
9
|
+
} from "./chunk-QUOW6URQ.js";
|
|
6
10
|
|
|
7
11
|
// src/model-starter-attempts.ts
|
|
8
|
-
import { z as
|
|
12
|
+
import { z as z3 } from "zod";
|
|
9
13
|
|
|
10
14
|
// src/evaluation-project-context.ts
|
|
11
15
|
import { z } from "zod";
|
|
@@ -25,71 +29,108 @@ var EvaluationMessagesSchema = z.array(z.object({
|
|
|
25
29
|
|
|
26
30
|
// src/model-starter-attempts.ts
|
|
27
31
|
import { RewardCompositionSchema } from "@openpond/evals/rewards";
|
|
32
|
+
import { TaskGradeSchema as TaskGradeSchema2 } from "@openpond/evals/graders";
|
|
33
|
+
|
|
34
|
+
// src/experiment-grading-contracts.ts
|
|
35
|
+
import { z as z2 } from "zod";
|
|
28
36
|
import { TaskGradeSchema } from "@openpond/evals/graders";
|
|
29
|
-
var
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
var ExperimentAttemptGradeSchema = z2.object({
|
|
38
|
+
schemaVersion: z2.literal("openpond.experimentAttemptGrade.v1"),
|
|
39
|
+
selectionHash: z2.string().regex(/^[a-f0-9]{64}$/),
|
|
40
|
+
grades: z2.array(TaskGradeSchema).min(1).max(100),
|
|
41
|
+
score: z2.number().min(0).max(1).nullable(),
|
|
42
|
+
passed: z2.boolean(),
|
|
43
|
+
rewardEligible: z2.boolean(),
|
|
44
|
+
gradingStatus: z2.enum(["scored", "unscorable", "not_configured"]),
|
|
45
|
+
failureClass: FailureClassSchema.nullable(),
|
|
46
|
+
contentHash: z2.string().regex(/^[a-f0-9]{64}$/)
|
|
47
|
+
}).strict().superRefine((grade, context) => {
|
|
48
|
+
const { contentHash: actual, ...body } = grade;
|
|
49
|
+
if (contentHash(body) !== actual) context.addIssue({ code: "custom", message: "Experiment grading integrity failed." });
|
|
50
|
+
const components = grade.grades.flatMap((value) => value.components);
|
|
51
|
+
if (components.length !== grade.grades.length || new Set(components.map((component) => component.graderId)).size !== components.length)
|
|
52
|
+
context.addIssue({ code: "custom", message: "Each selected criterion requires exactly one distinct grader result." });
|
|
53
|
+
for (const item of grade.grades) {
|
|
54
|
+
const { contentHash: itemHash, ...itemBody } = item;
|
|
55
|
+
if (contentHash(itemBody) !== itemHash) context.addIssue({ code: "custom", message: "A retained criterion changed." });
|
|
56
|
+
for (const component of item.components) {
|
|
57
|
+
const { contentHash: componentHash, ...componentBody } = component;
|
|
58
|
+
if (contentHash(componentBody) !== componentHash) context.addIssue({ code: "custom", message: "A retained grader result changed." });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
// src/model-starter-attempts.ts
|
|
64
|
+
var IdSchema = z3.string().trim().min(1).max(200);
|
|
65
|
+
var HashSchema = z3.string().regex(/^[a-f0-9]{64}$/);
|
|
66
|
+
var ModelStarterAttemptPolicySchema = z3.discriminatedUnion("kind", [
|
|
67
|
+
z3.object({ kind: z3.literal("hosted_chat"), modelId: IdSchema, messages: EvaluationMessagesSchema.optional(), maxOutputTokens: z3.number().int().min(1).max(4096).default(1024), temperature: z3.number().min(0).max(2).default(0), topP: z3.number().gt(0).max(1).default(1) }).strict(),
|
|
68
|
+
z3.object({ kind: z3.literal("fixture"), fixtureId: IdSchema }).strict()
|
|
34
69
|
]);
|
|
35
|
-
var ModelStarterAttemptRequestSchema =
|
|
36
|
-
schemaVersion:
|
|
70
|
+
var ModelStarterAttemptRequestSchema = z3.object({
|
|
71
|
+
schemaVersion: z3.literal("openpond.modelStarterAttemptRequest.v1"),
|
|
37
72
|
operationId: IdSchema,
|
|
38
73
|
teamId: IdSchema,
|
|
39
74
|
modelProjectId: IdSchema.nullable(),
|
|
40
75
|
project: EvaluationProjectContextSchema.optional(),
|
|
41
76
|
taskset: ModelProjectVersionedRefSchema,
|
|
42
77
|
taskId: IdSchema,
|
|
43
|
-
environmentSeed:
|
|
78
|
+
environmentSeed: z3.number().int().min(0).max(2147483647).default(0),
|
|
44
79
|
policy: ModelStarterAttemptPolicySchema
|
|
45
80
|
}).strict();
|
|
46
|
-
var ModelStarterAttemptChoicesQuerySchema =
|
|
47
|
-
var ModelStarterAttemptChoicesSchema =
|
|
81
|
+
var ModelStarterAttemptChoicesQuerySchema = z3.object({ modelProjectId: IdSchema.nullable(), taskset: ModelProjectVersionedRefSchema, afterTaskId: IdSchema.optional(), limit: z3.number().int().min(1).max(100).default(25) }).strict();
|
|
82
|
+
var ModelStarterAttemptChoicesSchema = z3.object({
|
|
48
83
|
modelProjectId: IdSchema.nullable(),
|
|
49
84
|
taskset: ModelProjectVersionedRefSchema,
|
|
50
|
-
available:
|
|
51
|
-
unavailableReason:
|
|
52
|
-
models:
|
|
53
|
-
tasks:
|
|
85
|
+
available: z3.boolean(),
|
|
86
|
+
unavailableReason: z3.string().max(1e3).nullable(),
|
|
87
|
+
models: z3.array(z3.object({ id: IdSchema, name: z3.string().max(500) }).strict()).max(200),
|
|
88
|
+
tasks: z3.array(z3.object({ id: IdSchema, split: z3.enum(["train", "validation", "frozen_eval"]), inputPreview: z3.string().max(500), fixtures: z3.array(z3.object({ id: IdSchema, label: z3.string().max(200) }).strict()).max(1e3) }).strict()).max(100),
|
|
54
89
|
nextCursor: IdSchema.nullable()
|
|
55
90
|
}).strict();
|
|
56
|
-
var ModelStarterAttemptSummarySchema =
|
|
57
|
-
schemaVersion:
|
|
91
|
+
var ModelStarterAttemptSummarySchema = z3.object({
|
|
92
|
+
schemaVersion: z3.literal("openpond.modelStarterAttemptSummary.v1"),
|
|
58
93
|
id: IdSchema,
|
|
59
|
-
revision:
|
|
94
|
+
revision: z3.number().int().positive(),
|
|
60
95
|
request: ModelStarterAttemptRequestSchema,
|
|
61
|
-
status:
|
|
62
|
-
policySnapshot:
|
|
63
|
-
createdAt:
|
|
64
|
-
startedAt:
|
|
65
|
-
completedAt:
|
|
66
|
-
cleanupComplete:
|
|
67
|
-
resultAvailable:
|
|
68
|
-
score:
|
|
69
|
-
gradingStatus:
|
|
70
|
-
passed:
|
|
71
|
-
outputPreview:
|
|
72
|
-
error:
|
|
96
|
+
status: z3.enum(["queued", "running", "cancelling", "completed", "failed", "cancelled"]),
|
|
97
|
+
policySnapshot: z3.object({ modelId: IdSchema, provider: IdSchema, upstreamModelId: z3.string().min(1).max(500), configurationHash: HashSchema }).strict().nullable(),
|
|
98
|
+
createdAt: z3.iso.datetime(),
|
|
99
|
+
startedAt: z3.iso.datetime().nullable(),
|
|
100
|
+
completedAt: z3.iso.datetime().nullable(),
|
|
101
|
+
cleanupComplete: z3.boolean(),
|
|
102
|
+
resultAvailable: z3.boolean(),
|
|
103
|
+
score: z3.number().min(0).max(1).nullable(),
|
|
104
|
+
gradingStatus: z3.enum(["not_started", "scored", "unscorable", "not_configured"]).default("not_started"),
|
|
105
|
+
passed: z3.boolean().nullable(),
|
|
106
|
+
outputPreview: z3.string().max(500).nullable(),
|
|
107
|
+
error: z3.object({ code: IdSchema, message: z3.string().max(2e3) }).strict().nullable()
|
|
73
108
|
}).strict().superRefine((value, context) => {
|
|
74
109
|
if (value.request.policy.kind === "fixture" !== (value.policySnapshot === null)) context.addIssue({ code: "custom", path: ["policySnapshot"], message: "Fixture execution must not claim a model identity." });
|
|
75
110
|
if (value.status === "completed" && (!value.cleanupComplete || !value.resultAvailable || !value.completedAt)) context.addIssue({ code: "custom", message: "Completed attempts require retained results and confirmed cleanup." });
|
|
76
111
|
});
|
|
77
|
-
var ModelStarterAttemptListQuerySchema =
|
|
78
|
-
var ModelStarterAttemptPageSchema =
|
|
79
|
-
var ModelStarterAttemptResultSchema =
|
|
80
|
-
schemaVersion:
|
|
112
|
+
var ModelStarterAttemptListQuerySchema = z3.object({ modelProjectId: IdSchema, afterId: IdSchema.optional(), limit: z3.number().int().min(1).max(100).default(25) }).strict();
|
|
113
|
+
var ModelStarterAttemptPageSchema = z3.object({ items: z3.array(ModelStarterAttemptSummarySchema).max(100), nextCursor: IdSchema.nullable() }).strict();
|
|
114
|
+
var ModelStarterAttemptResultSchema = z3.object({
|
|
115
|
+
schemaVersion: z3.literal("openpond.modelStarterAttemptResult.v1"),
|
|
81
116
|
attempt: ModelStarterAttemptSummarySchema,
|
|
82
|
-
output:
|
|
117
|
+
output: z3.string().max(1048576).nullable(),
|
|
83
118
|
// Only model-facing messages, never the private environment snapshot.
|
|
84
|
-
messages:
|
|
119
|
+
messages: z3.array(z3.record(z3.string(), z3.unknown())).max(4002),
|
|
85
120
|
composition: RewardCompositionSchema.nullable(),
|
|
86
121
|
// Ordinary Tasksets have no Reward binding. Absence preserves the hash of
|
|
87
122
|
// already retained v1 results; new producers explicitly return null or a grade.
|
|
88
|
-
grade:
|
|
89
|
-
|
|
90
|
-
|
|
123
|
+
grade: TaskGradeSchema2.nullable().optional(),
|
|
124
|
+
experimentGrade: ExperimentAttemptGradeSchema.nullable().optional(),
|
|
125
|
+
environment: z3.object({ status: z3.enum(["completed", "budget_exhausted", "cancelled", "timed_out", "policy_failure", "environment_failure"]), collected: z3.boolean(), definition: ModelProjectVersionedRefSchema, initialStateHash: HashSchema.nullable(), finalStateHash: HashSchema.nullable(), attemptHash: HashSchema }).strict(),
|
|
126
|
+
providerRequestIds: z3.array(IdSchema).max(1001),
|
|
91
127
|
contentHash: HashSchema
|
|
92
128
|
}).strict().superRefine((value, context) => {
|
|
129
|
+
if (value.experimentGrade) {
|
|
130
|
+
if (value.grade || value.composition) context.addIssue({ code: "custom", message: "Selected Experiment grading cannot claim another grade population." });
|
|
131
|
+
if (!["completed", "failed"].includes(value.attempt.status) || !value.attempt.resultAvailable || value.attempt.score !== value.experimentGrade.score || value.attempt.gradingStatus !== value.experimentGrade.gradingStatus || value.attempt.passed !== (value.experimentGrade.score === null ? null : value.experimentGrade.passed))
|
|
132
|
+
context.addIssue({ code: "custom", message: "Experiment grading differs from its retained attempt summary." });
|
|
133
|
+
}
|
|
93
134
|
if (!value.grade) return;
|
|
94
135
|
if (value.composition) context.addIssue({ code: "custom", path: ["grade"], message: "An ordinary grade cannot also claim a Reward composition." });
|
|
95
136
|
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." });
|
|
@@ -135,8 +176,8 @@ var OpenPondModelStarterAttemptsClient = class {
|
|
|
135
176
|
async result(id, options = {}) {
|
|
136
177
|
const value = ModelStarterAttemptResultSchema.parse(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}/result`, "GET", void 0, options.signal));
|
|
137
178
|
this.#summary(value.attempt, id);
|
|
138
|
-
const { contentHash, ...content } = value;
|
|
139
|
-
if (!value.attempt.resultAvailable || await canonicalSha256(content) !==
|
|
179
|
+
const { contentHash: contentHash2, ...content } = value;
|
|
180
|
+
if (!value.attempt.resultAvailable || await canonicalSha256(content) !== contentHash2) throw new OpenPondModelStarterAttemptError(502, "attempt_result_integrity", "Attempt result integrity failed.");
|
|
140
181
|
return value;
|
|
141
182
|
}
|
|
142
183
|
async list(value, options = {}) {
|
|
@@ -174,7 +215,7 @@ var OpenPondModelStarterAttemptsClient = class {
|
|
|
174
215
|
}
|
|
175
216
|
const value = JSON.parse(text);
|
|
176
217
|
if (!response.ok) {
|
|
177
|
-
const error =
|
|
218
|
+
const error = z3.object({ code: IdSchema, message: z3.string().max(2e3) }).safeParse(value);
|
|
178
219
|
throw new OpenPondModelStarterAttemptError(response.status, error.success ? error.data.code : "attempt_request_failed", error.success ? error.data.message : "Attempt request failed.");
|
|
179
220
|
}
|
|
180
221
|
return value;
|
|
@@ -184,6 +225,7 @@ var OpenPondModelStarterAttemptsClient = class {
|
|
|
184
225
|
export {
|
|
185
226
|
EvaluationProjectContextSchema,
|
|
186
227
|
EvaluationMessagesSchema,
|
|
228
|
+
ExperimentAttemptGradeSchema,
|
|
187
229
|
ModelStarterAttemptPolicySchema,
|
|
188
230
|
ModelStarterAttemptRequestSchema,
|
|
189
231
|
ModelStarterAttemptChoicesQuerySchema,
|
|
@@ -195,4 +237,4 @@ export {
|
|
|
195
237
|
OpenPondModelStarterAttemptError,
|
|
196
238
|
OpenPondModelStarterAttemptsClient
|
|
197
239
|
};
|
|
198
|
-
//# sourceMappingURL=chunk-
|
|
240
|
+
//# sourceMappingURL=chunk-XR6CLSCS.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/model-starter-attempts.ts", "../src/evaluation-project-context.ts", "../src/experiment-grading-contracts.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\nimport { EvaluationProjectContextSchema, EvaluationMessagesSchema } from \"./evaluation-project-context.js\";\nexport { EvaluationProjectContextSchema, EvaluationMessagesSchema, type EvaluationProjectContext } from \"./evaluation-project-context.js\";\nimport { RewardCompositionSchema } from \"@openpond/evals/rewards\";\nimport { TaskGradeSchema } from \"@openpond/evals/graders\";\nimport { ExperimentAttemptGradeSchema } from \"./experiment-grading-contracts.js\";\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, messages: EvaluationMessagesSchema.optional(), 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.nullable(),\n project: EvaluationProjectContextSchema.optional(),\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.nullable(), taskset: ModelProjectVersionedRefSchema, afterTaskId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();\nexport const ModelStarterAttemptChoicesSchema = z.object({\n modelProjectId: IdSchema.nullable(), 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 experimentGrade: ExperimentAttemptGradeSchema.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.experimentGrade) {\n if (value.grade || value.composition) context.addIssue({ code: \"custom\", message: \"Selected Experiment grading cannot claim another grade population.\" });\n if (![\"completed\", \"failed\"].includes(value.attempt.status) || !value.attempt.resultAvailable || value.attempt.score !== value.experimentGrade.score\n || value.attempt.gradingStatus !== value.experimentGrade.gradingStatus || value.attempt.passed !== (value.experimentGrade.score === null ? null : value.experimentGrade.passed))\n context.addIssue({ code: \"custom\", message: \"Experiment grading differs from its retained attempt summary.\" });\n }\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({ ...(query.modelProjectId ? { 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", "import { z } from \"zod\";\n\n/** The selected Project revision is retained independently of model artifacts.\n * Hosts resolve and authorize this reference before admitting execution. */\nexport const EvaluationProjectContextSchema = z.object({\n id: z.string().trim().min(1).max(240),\n revision: z.number().int().positive(),\n contentHash: z.string().regex(/^[a-f0-9]{64}$/),\n targetId: z.string().trim().min(1).max(240).nullable(),\n}).strict();\nexport type EvaluationProjectContext = z.infer<typeof EvaluationProjectContextSchema>;\n\nexport const EvaluationMessagesSchema = z.array(z.object({\n role: z.enum([\"system\", \"user\", \"assistant\"]),\n content: z.string().max(100_000),\n}).strict()).max(100).superRefine((messages, context) => {\n if (messages.reduce((total, message) => total + message.content.length, 0) > 100_000)\n context.addIssue({ code: \"custom\", message: \"Evaluation prompt exceeds 100,000 characters.\" });\n});\n", "import { z } from \"zod\";\nimport { FailureClassSchema, contentHash } from \"@openpond/harness\";\nimport { TaskGradeSchema } from \"@openpond/evals/graders\";\n\nexport const ExperimentAttemptGradeSchema = z.object({\n schemaVersion: z.literal(\"openpond.experimentAttemptGrade.v1\"), selectionHash: z.string().regex(/^[a-f0-9]{64}$/),\n grades: z.array(TaskGradeSchema).min(1).max(100), score: z.number().min(0).max(1).nullable(),\n passed: z.boolean(), rewardEligible: z.boolean(), gradingStatus: z.enum([\"scored\", \"unscorable\", \"not_configured\"]),\n failureClass: FailureClassSchema.nullable(), contentHash: z.string().regex(/^[a-f0-9]{64}$/),\n}).strict().superRefine((grade, context) => {\n const { contentHash: actual, ...body } = grade;\n if (contentHash(body) !== actual) context.addIssue({ code: \"custom\", message: \"Experiment grading integrity failed.\" });\n const components = grade.grades.flatMap(value => value.components);\n if (components.length !== grade.grades.length || new Set(components.map(component => component.graderId)).size !== components.length)\n context.addIssue({ code: \"custom\", message: \"Each selected criterion requires exactly one distinct grader result.\" });\n for (const item of grade.grades) {\n const { contentHash: itemHash, ...itemBody } = item;\n if (contentHash(itemBody) !== itemHash) context.addIssue({ code: \"custom\", message: \"A retained criterion changed.\" });\n for (const component of item.components) {\n const { contentHash: componentHash, ...componentBody } = component;\n if (contentHash(componentBody) !== componentHash) context.addIssue({ code: \"custom\", message: \"A retained grader result changed.\" });\n }\n }\n});\nexport type ExperimentAttemptGrade = z.infer<typeof ExperimentAttemptGradeSchema>;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["z", "TaskGradeSchema", "z", "z", "z", "TaskGradeSchema", "contentHash"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EvaluationProjectContextSchema,
|
|
3
|
+
ModelStarterAttemptPolicySchema,
|
|
4
|
+
ModelStarterAttemptSummarySchema
|
|
5
|
+
} from "./chunk-XR6CLSCS.js";
|
|
6
|
+
import {
|
|
7
|
+
ModelProjectVersionedRefSchema,
|
|
8
|
+
canonicalJson,
|
|
9
|
+
canonicalSha256
|
|
10
|
+
} from "./chunk-TCHAWJMB.js";
|
|
11
|
+
import {
|
|
12
|
+
assertContentHash
|
|
13
|
+
} from "./chunk-QUOW6URQ.js";
|
|
14
|
+
|
|
15
|
+
// src/model-taskset-runs-contracts.ts
|
|
16
|
+
import { z } from "zod";
|
|
17
|
+
import { TasksetRunManifestSchema, TasksetRunMemberSchema, TasksetMetricResultSchema, assertTasksetMetricResult, orderTasksetRunReceipts } from "@openpond/evals/metrics";
|
|
18
|
+
import { AttemptReceiptSchema } from "@openpond/evals/runs";
|
|
19
|
+
var IdSchema = z.string().trim().min(1).max(200);
|
|
20
|
+
var HashSchema = z.string().regex(/^[a-f0-9]{64}$/);
|
|
21
|
+
var ModelTasksetRunPolicySchema = z.discriminatedUnion("kind", [
|
|
22
|
+
ModelStarterAttemptPolicySchema.options[0],
|
|
23
|
+
z.object({ kind: z.literal("fixture") }).strict()
|
|
24
|
+
]);
|
|
25
|
+
var ModelTasksetRunRequestSchema = z.object({
|
|
26
|
+
schemaVersion: z.literal("openpond.modelTasksetRunRequest.v1"),
|
|
27
|
+
operationId: IdSchema,
|
|
28
|
+
teamId: IdSchema,
|
|
29
|
+
modelProjectId: IdSchema.nullable(),
|
|
30
|
+
name: z.string().trim().min(1).max(200).optional(),
|
|
31
|
+
project: EvaluationProjectContextSchema.optional(),
|
|
32
|
+
taskset: ModelProjectVersionedRefSchema,
|
|
33
|
+
policy: ModelTasksetRunPolicySchema,
|
|
34
|
+
population: z.array(TasksetRunMemberSchema).min(1).max(1e4)
|
|
35
|
+
}).strict().superRefine((value, context) => {
|
|
36
|
+
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." });
|
|
37
|
+
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." });
|
|
38
|
+
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." });
|
|
39
|
+
});
|
|
40
|
+
var ModelTasksetRunSummarySchema = z.object({
|
|
41
|
+
schemaVersion: z.literal("openpond.modelTasksetRunSummary.v1"),
|
|
42
|
+
id: IdSchema,
|
|
43
|
+
revision: z.number().int().positive(),
|
|
44
|
+
teamId: IdSchema,
|
|
45
|
+
modelProjectId: IdSchema.nullable(),
|
|
46
|
+
name: z.string().trim().min(1).max(200).optional(),
|
|
47
|
+
project: EvaluationProjectContextSchema.optional(),
|
|
48
|
+
operationId: IdSchema,
|
|
49
|
+
taskset: ModelProjectVersionedRefSchema,
|
|
50
|
+
policyKind: z.enum(["hosted_chat", "fixture"]),
|
|
51
|
+
manifestHash: HashSchema,
|
|
52
|
+
status: z.enum(["queued", "running", "cancelling", "completed", "failed", "cancelled"]),
|
|
53
|
+
totalCount: z.number().int().min(1).max(1e4),
|
|
54
|
+
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(),
|
|
55
|
+
createdAt: z.iso.datetime(),
|
|
56
|
+
startedAt: z.iso.datetime().nullable(),
|
|
57
|
+
completedAt: z.iso.datetime().nullable(),
|
|
58
|
+
cleanupComplete: z.boolean(),
|
|
59
|
+
resultAvailable: z.boolean(),
|
|
60
|
+
score: z.number().min(0).max(1).nullable(),
|
|
61
|
+
metricName: z.string().min(1).max(240),
|
|
62
|
+
error: z.object({ code: IdSchema, message: z.string().max(2e3) }).strict().nullable()
|
|
63
|
+
}).strict().superRefine((value, context) => {
|
|
64
|
+
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." });
|
|
65
|
+
if (value.status !== "completed" && value.score !== null) context.addIssue({ code: "custom", path: ["score"], message: "Only completed evaluations publish a metric value." });
|
|
66
|
+
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." });
|
|
67
|
+
if (value.status === "cancelled" && !value.cleanupComplete) context.addIssue({ code: "custom", message: "Cancelled runs require confirmed cleanup." });
|
|
68
|
+
if (value.resultAvailable && !["completed", "failed", "cancelled"].includes(value.status)) context.addIssue({ code: "custom", message: "Run results require terminal population accounting." });
|
|
69
|
+
if (value.status === "completed" && (!value.cleanupComplete || !value.resultAvailable)) context.addIssue({ code: "custom", message: "Completed evaluations require retained results and confirmed cleanup." });
|
|
70
|
+
});
|
|
71
|
+
var ModelTasksetRunDetailsSchema = z.object({
|
|
72
|
+
summary: ModelTasksetRunSummarySchema,
|
|
73
|
+
request: ModelTasksetRunRequestSchema,
|
|
74
|
+
manifest: TasksetRunManifestSchema,
|
|
75
|
+
policySnapshot: ModelStarterAttemptSummarySchema.shape.policySnapshot
|
|
76
|
+
}).strict();
|
|
77
|
+
var ModelTasksetRunListQuerySchema = z.object({ modelProjectId: IdSchema.optional(), projectId: EvaluationProjectContextSchema.shape.id.optional(), afterId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();
|
|
78
|
+
var ModelTasksetRunPageSchema = z.object({ items: z.array(ModelTasksetRunSummarySchema).max(100), nextCursor: IdSchema.nullable() }).strict();
|
|
79
|
+
var ModelTasksetRunResultSchema = z.object({
|
|
80
|
+
schemaVersion: z.literal("openpond.modelTasksetRunResult.v1"),
|
|
81
|
+
run: ModelTasksetRunDetailsSchema,
|
|
82
|
+
receipts: z.array(AttemptReceiptSchema).min(1).max(1e4),
|
|
83
|
+
metric: TasksetMetricResultSchema.nullable(),
|
|
84
|
+
contentHash: HashSchema
|
|
85
|
+
}).strict();
|
|
86
|
+
async function verifyModelTasksetRunDetails(value) {
|
|
87
|
+
const result = ModelTasksetRunDetailsSchema.parse(value);
|
|
88
|
+
const { summary, request, manifest, policySnapshot } = result;
|
|
89
|
+
assertContentHash(manifest, "Taskset run manifest");
|
|
90
|
+
if (manifest.contentHash !== summary.manifestHash || manifest.id !== summary.id || manifest.createdAt !== summary.createdAt || summary.teamId !== request.teamId || summary.modelProjectId !== request.modelProjectId || canonicalJson(summary.project ?? null) !== canonicalJson(request.project ?? null) || canonicalJson(manifest.metadata.project ?? null) !== canonicalJson(request.project ?? null) || (summary.name ?? null) !== (request.name ?? null) || 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.");
|
|
91
|
+
if (request.policy.kind === "fixture") {
|
|
92
|
+
if (manifest.policy.kind !== "fixture" || policySnapshot !== null) throw new Error("Fixture checks cannot claim a model identity.");
|
|
93
|
+
} 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.");
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
async function verifyModelTasksetRunResult(value) {
|
|
97
|
+
const result = ModelTasksetRunResultSchema.parse(value);
|
|
98
|
+
const { contentHash: actual, ...content } = result;
|
|
99
|
+
if (await canonicalSha256(content) !== actual) throw new Error("Evaluation result integrity failed.");
|
|
100
|
+
const { summary, manifest } = await verifyModelTasksetRunDetails(result.run);
|
|
101
|
+
if (!summary.resultAvailable || !["completed", "failed", "cancelled"].includes(summary.status)) throw new Error("Evaluation result is not terminal.");
|
|
102
|
+
const ordered = orderTasksetRunReceipts(manifest, result.receipts);
|
|
103
|
+
if (canonicalJson(ordered) !== canonicalJson(result.receipts)) throw new Error("Evaluation receipts differ from the admitted order.");
|
|
104
|
+
if (summary.status === "completed" !== (result.metric !== null)) throw new Error("Only completed evaluations retain a metric.");
|
|
105
|
+
if (result.metric) {
|
|
106
|
+
assertTasksetMetricResult(result.metric);
|
|
107
|
+
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.");
|
|
108
|
+
}
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export {
|
|
113
|
+
ModelTasksetRunPolicySchema,
|
|
114
|
+
ModelTasksetRunRequestSchema,
|
|
115
|
+
ModelTasksetRunSummarySchema,
|
|
116
|
+
ModelTasksetRunDetailsSchema,
|
|
117
|
+
ModelTasksetRunListQuerySchema,
|
|
118
|
+
ModelTasksetRunPageSchema,
|
|
119
|
+
ModelTasksetRunResultSchema,
|
|
120
|
+
verifyModelTasksetRunDetails,
|
|
121
|
+
verifyModelTasksetRunResult
|
|
122
|
+
};
|
|
123
|
+
//# sourceMappingURL=chunk-ZV2BLO3D.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/model-taskset-runs-contracts.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\nimport { EvaluationProjectContextSchema } from \"./evaluation-project-context.js\";\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.nullable(),\n name: z.string().trim().min(1).max(200).optional(),\n project: EvaluationProjectContextSchema.optional(),\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.nullable(),\n name: z.string().trim().min(1).max(200).optional(),\n project: EvaluationProjectContextSchema.optional(),\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.optional(), projectId: EvaluationProjectContextSchema.shape.id.optional(), 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 || canonicalJson(summary.project ?? null) !== canonicalJson(request.project ?? null)\n || canonicalJson(manifest.metadata.project ?? null) !== canonicalJson(request.project ?? null)\n || (summary.name ?? null) !== (request.name ?? null)\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": []
|
|
7
|
+
}
|
|
@@ -5,6 +5,9 @@ import {
|
|
|
5
5
|
TasksetDraftWorkspaceSchema,
|
|
6
6
|
validateTasksetDraftWorkspace
|
|
7
7
|
} from "./chunk-32H2EJRA.js";
|
|
8
|
+
import {
|
|
9
|
+
TasksetCatalogReleaseRefSchema
|
|
10
|
+
} from "./chunk-A4ZDOZKP.js";
|
|
8
11
|
import "./chunk-DT7FRNIZ.js";
|
|
9
12
|
import "./chunk-LGEF4S5I.js";
|
|
10
13
|
import "./chunk-WOPM32SE.js";
|
|
@@ -12,9 +15,6 @@ import "./chunk-2U54EOXJ.js";
|
|
|
12
15
|
import "./chunk-JCPLAIZL.js";
|
|
13
16
|
import "./chunk-TCHAWJMB.js";
|
|
14
17
|
import "./chunk-3KXDH6OB.js";
|
|
15
|
-
import {
|
|
16
|
-
TasksetCatalogReleaseRefSchema
|
|
17
|
-
} from "./chunk-A4ZDOZKP.js";
|
|
18
18
|
import "./chunk-Y4NGWGTA.js";
|
|
19
19
|
import "./chunk-QUOW6URQ.js";
|
|
20
20
|
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ExperimentDefinitionRefSchema,
|
|
3
|
+
ExperimentDefinitionSchema,
|
|
4
|
+
ExperimentExecutionContextSchema,
|
|
5
|
+
ExperimentFieldMappingSchema,
|
|
6
|
+
ExperimentFieldMappingsSchema,
|
|
7
|
+
ExperimentGraderPinSchema,
|
|
8
|
+
ExperimentGraderSelectionSchema,
|
|
9
|
+
ExperimentListQuerySchema,
|
|
10
|
+
ExperimentScoringPassSchema,
|
|
11
|
+
ExperimentScoringRequestSchema,
|
|
12
|
+
OpenPondExperimentError,
|
|
13
|
+
OpenPondExperimentsClient,
|
|
14
|
+
SaveExperimentSchema,
|
|
15
|
+
StartExperimentSchema,
|
|
16
|
+
experimentDefinitionRef,
|
|
17
|
+
mapExperimentGradingFields,
|
|
18
|
+
verifyExperimentDefinition,
|
|
19
|
+
verifyExperimentScoringPass
|
|
20
|
+
} from "./chunk-KLX6OVHR.js";
|
|
21
|
+
import "./chunk-ZV2BLO3D.js";
|
|
22
|
+
import {
|
|
23
|
+
ExperimentAttemptGradeSchema
|
|
24
|
+
} from "./chunk-XR6CLSCS.js";
|
|
25
|
+
import "./chunk-TCHAWJMB.js";
|
|
26
|
+
import "./chunk-3KXDH6OB.js";
|
|
27
|
+
import "./chunk-Y4NGWGTA.js";
|
|
28
|
+
import "./chunk-QUOW6URQ.js";
|
|
29
|
+
export {
|
|
30
|
+
ExperimentAttemptGradeSchema,
|
|
31
|
+
ExperimentDefinitionRefSchema,
|
|
32
|
+
ExperimentDefinitionSchema,
|
|
33
|
+
ExperimentExecutionContextSchema,
|
|
34
|
+
ExperimentFieldMappingSchema,
|
|
35
|
+
ExperimentFieldMappingsSchema,
|
|
36
|
+
ExperimentGraderPinSchema,
|
|
37
|
+
ExperimentGraderSelectionSchema,
|
|
38
|
+
ExperimentListQuerySchema,
|
|
39
|
+
ExperimentScoringPassSchema,
|
|
40
|
+
ExperimentScoringRequestSchema,
|
|
41
|
+
OpenPondExperimentError,
|
|
42
|
+
OpenPondExperimentsClient,
|
|
43
|
+
SaveExperimentSchema,
|
|
44
|
+
StartExperimentSchema,
|
|
45
|
+
experimentDefinitionRef,
|
|
46
|
+
mapExperimentGradingFields,
|
|
47
|
+
verifyExperimentDefinition,
|
|
48
|
+
verifyExperimentScoringPass
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=experiments.js.map
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
|
+
import {
|
|
2
|
+
OpenPondWorkflowsClient
|
|
3
|
+
} from "./chunk-MEKWESBF.js";
|
|
1
4
|
import "./chunk-LXXQVGQY.js";
|
|
2
5
|
import {
|
|
3
6
|
OpenPondLearningClient,
|
|
4
7
|
OpenPondLearningError
|
|
5
8
|
} from "./chunk-K4C5QOSV.js";
|
|
9
|
+
import {
|
|
10
|
+
OpenPondExperimentsClient
|
|
11
|
+
} from "./chunk-KLX6OVHR.js";
|
|
12
|
+
import "./chunk-ZV2BLO3D.js";
|
|
13
|
+
import "./chunk-XR6CLSCS.js";
|
|
14
|
+
import "./chunk-TCHAWJMB.js";
|
|
15
|
+
import "./chunk-3KXDH6OB.js";
|
|
6
16
|
import "./chunk-Y4NGWGTA.js";
|
|
7
17
|
import {
|
|
8
18
|
DEFAULT_REFINER_REVIEW_PROFILE,
|
|
@@ -23,9 +33,6 @@ import {
|
|
|
23
33
|
import {
|
|
24
34
|
OpenPondProfileActionsClient
|
|
25
35
|
} from "./chunk-2DMYAJLS.js";
|
|
26
|
-
import {
|
|
27
|
-
OpenPondWorkflowsClient
|
|
28
|
-
} from "./chunk-MEKWESBF.js";
|
|
29
36
|
import {
|
|
30
37
|
OpenPondApiError,
|
|
31
38
|
apiFetch,
|
|
@@ -2464,6 +2471,7 @@ var OpenPondClient = class {
|
|
|
2464
2471
|
actions;
|
|
2465
2472
|
profileActions;
|
|
2466
2473
|
learning;
|
|
2474
|
+
experiments;
|
|
2467
2475
|
constructor(options) {
|
|
2468
2476
|
const apiKey = options.apiKey?.trim() ?? "";
|
|
2469
2477
|
if (!apiKey && (!options.sandbox || !options.model))
|
|
@@ -2480,6 +2488,7 @@ var OpenPondClient = class {
|
|
|
2480
2488
|
} : void 0;
|
|
2481
2489
|
const apiBaseUrl = options.baseUrl?.trim() || "https://api.openpond.ai";
|
|
2482
2490
|
this.learning = (scope) => new OpenPondLearningClient({ apiKey, baseUrl: apiBaseUrl, scope });
|
|
2491
|
+
this.experiments = (teamId) => new OpenPondExperimentsClient({ apiKey, baseUrl: apiBaseUrl, teamId });
|
|
2483
2492
|
this.sandboxes = createOpenPondSandboxClient({
|
|
2484
2493
|
apiKey: sandbox?.apiKey ?? apiKey,
|
|
2485
2494
|
baseUrl: apiBaseUrl,
|