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.
Files changed (59) hide show
  1. package/MODEL_STARTERS.md +2 -0
  2. package/README.md +16 -0
  3. package/dist/chunk-KLX6OVHR.js +359 -0
  4. package/dist/chunk-KLX6OVHR.js.map +7 -0
  5. package/dist/{chunk-QABCKPW6.js → chunk-TQ5ASK7D.js} +4 -4
  6. package/dist/{chunk-IKTZ2CD4.js → chunk-XR6CLSCS.js} +85 -43
  7. package/dist/chunk-XR6CLSCS.js.map +7 -0
  8. package/dist/chunk-ZV2BLO3D.js +123 -0
  9. package/dist/chunk-ZV2BLO3D.js.map +7 -0
  10. package/dist/dataset-workspaces.js +3 -3
  11. package/dist/experiments.js +50 -0
  12. package/dist/experiments.js.map +7 -0
  13. package/dist/index.js +12 -3
  14. package/dist/index.js.map +2 -2
  15. package/dist/learning.js +3 -3
  16. package/dist/model-starter-attempts.js +3 -1
  17. package/dist/model-taskset-runs.js +19 -113
  18. package/dist/model-taskset-runs.js.map +4 -4
  19. package/dist/taskset-drafts.js +2 -2
  20. package/dist/taskset-packages.js +2 -2
  21. package/dist/types/packages/sdk/src/experiment-client.d.ts +2002 -0
  22. package/dist/types/packages/sdk/src/experiment-client.d.ts.map +1 -0
  23. package/dist/types/packages/sdk/src/experiment-contracts.d.ts +256 -0
  24. package/dist/types/packages/sdk/src/experiment-contracts.d.ts.map +1 -0
  25. package/dist/types/packages/sdk/src/experiment-field-mappings.d.ts +43 -0
  26. package/dist/types/packages/sdk/src/experiment-field-mappings.d.ts.map +1 -0
  27. package/dist/types/packages/sdk/src/experiment-grading-contracts.d.ts +79 -0
  28. package/dist/types/packages/sdk/src/experiment-grading-contracts.d.ts.map +1 -0
  29. package/dist/types/packages/sdk/src/experiment-scoring-contracts.d.ts +192 -0
  30. package/dist/types/packages/sdk/src/experiment-scoring-contracts.d.ts.map +1 -0
  31. package/dist/types/packages/sdk/src/experiments.d.ts +6 -0
  32. package/dist/types/packages/sdk/src/experiments.d.ts.map +1 -0
  33. package/dist/types/packages/sdk/src/index.d.ts +2 -0
  34. package/dist/types/packages/sdk/src/index.d.ts.map +1 -1
  35. package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts +1 -0
  36. package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts.map +1 -1
  37. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts +123 -0
  38. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts.map +1 -1
  39. package/dist/types/packages/sdk/src/model-starter-catalog.d.ts +1 -0
  40. package/dist/types/packages/sdk/src/model-starter-catalog.d.ts.map +1 -1
  41. package/dist/types/packages/sdk/src/model-starters.d.ts +2 -0
  42. package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -1
  43. package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts +1 -0
  44. package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts.map +1 -1
  45. package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts +7 -0
  46. package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts.map +1 -1
  47. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +9 -0
  48. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts.map +1 -1
  49. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts +2 -0
  50. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts.map +1 -1
  51. package/dist/types/packages/sdk/src/taskset-package-client.d.ts +3 -0
  52. package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
  53. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts +2 -0
  54. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts.map +1 -1
  55. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +1 -0
  56. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts.map +1 -1
  57. package/package.json +6 -2
  58. package/dist/chunk-IKTZ2CD4.js.map +0 -7
  59. /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 z2 } from "zod";
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 IdSchema = z2.string().trim().min(1).max(200);
30
- var HashSchema = z2.string().regex(/^[a-f0-9]{64}$/);
31
- var ModelStarterAttemptPolicySchema = z2.discriminatedUnion("kind", [
32
- z2.object({ kind: z2.literal("hosted_chat"), modelId: IdSchema, messages: EvaluationMessagesSchema.optional(), maxOutputTokens: z2.number().int().min(1).max(4096).default(1024), temperature: z2.number().min(0).max(2).default(0), topP: z2.number().gt(0).max(1).default(1) }).strict(),
33
- z2.object({ kind: z2.literal("fixture"), fixtureId: IdSchema }).strict()
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 = z2.object({
36
- schemaVersion: z2.literal("openpond.modelStarterAttemptRequest.v1"),
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: z2.number().int().min(0).max(2147483647).default(0),
78
+ environmentSeed: z3.number().int().min(0).max(2147483647).default(0),
44
79
  policy: ModelStarterAttemptPolicySchema
45
80
  }).strict();
46
- var ModelStarterAttemptChoicesQuerySchema = z2.object({ modelProjectId: IdSchema.nullable(), taskset: ModelProjectVersionedRefSchema, afterTaskId: IdSchema.optional(), limit: z2.number().int().min(1).max(100).default(25) }).strict();
47
- var ModelStarterAttemptChoicesSchema = z2.object({
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: z2.boolean(),
51
- unavailableReason: z2.string().max(1e3).nullable(),
52
- models: z2.array(z2.object({ id: IdSchema, name: z2.string().max(500) }).strict()).max(200),
53
- tasks: z2.array(z2.object({ id: IdSchema, split: z2.enum(["train", "validation", "frozen_eval"]), inputPreview: z2.string().max(500), fixtures: z2.array(z2.object({ id: IdSchema, label: z2.string().max(200) }).strict()).max(1e3) }).strict()).max(100),
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 = z2.object({
57
- schemaVersion: z2.literal("openpond.modelStarterAttemptSummary.v1"),
91
+ var ModelStarterAttemptSummarySchema = z3.object({
92
+ schemaVersion: z3.literal("openpond.modelStarterAttemptSummary.v1"),
58
93
  id: IdSchema,
59
- revision: z2.number().int().positive(),
94
+ revision: z3.number().int().positive(),
60
95
  request: ModelStarterAttemptRequestSchema,
61
- status: z2.enum(["queued", "running", "cancelling", "completed", "failed", "cancelled"]),
62
- policySnapshot: z2.object({ modelId: IdSchema, provider: IdSchema, upstreamModelId: z2.string().min(1).max(500), configurationHash: HashSchema }).strict().nullable(),
63
- createdAt: z2.iso.datetime(),
64
- startedAt: z2.iso.datetime().nullable(),
65
- completedAt: z2.iso.datetime().nullable(),
66
- cleanupComplete: z2.boolean(),
67
- resultAvailable: z2.boolean(),
68
- score: z2.number().min(0).max(1).nullable(),
69
- gradingStatus: z2.enum(["not_started", "scored", "unscorable", "not_configured"]).default("not_started"),
70
- passed: z2.boolean().nullable(),
71
- outputPreview: z2.string().max(500).nullable(),
72
- error: z2.object({ code: IdSchema, message: z2.string().max(2e3) }).strict().nullable()
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 = z2.object({ modelProjectId: IdSchema, afterId: IdSchema.optional(), limit: z2.number().int().min(1).max(100).default(25) }).strict();
78
- var ModelStarterAttemptPageSchema = z2.object({ items: z2.array(ModelStarterAttemptSummarySchema).max(100), nextCursor: IdSchema.nullable() }).strict();
79
- var ModelStarterAttemptResultSchema = z2.object({
80
- schemaVersion: z2.literal("openpond.modelStarterAttemptResult.v1"),
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: z2.string().max(1048576).nullable(),
117
+ output: z3.string().max(1048576).nullable(),
83
118
  // Only model-facing messages, never the private environment snapshot.
84
- messages: z2.array(z2.record(z2.string(), z2.unknown())).max(4002),
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: TaskGradeSchema.nullable().optional(),
89
- environment: z2.object({ status: z2.enum(["completed", "budget_exhausted", "cancelled", "timed_out", "policy_failure", "environment_failure"]), collected: z2.boolean(), definition: ModelProjectVersionedRefSchema, initialStateHash: HashSchema.nullable(), finalStateHash: HashSchema.nullable(), attemptHash: HashSchema }).strict(),
90
- providerRequestIds: z2.array(IdSchema).max(1001),
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) !== contentHash) throw new OpenPondModelStarterAttemptError(502, "attempt_result_integrity", "Attempt result integrity failed.");
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 = z2.object({ code: IdSchema, message: z2.string().max(2e3) }).safeParse(value);
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-IKTZ2CD4.js.map
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": ";;;;;;;;;;;;;;;AAAA,SAAS,SAAS;AAGlB,SAAS,0BAA0B,wBAAwB,2BAA2B,2BAA2B,+BAA+B;AAChJ,SAAS,4BAA4B;AAKrC,IAAM,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AACjD,IAAM,aAAa,EAAE,OAAO,EAAE,MAAM,gBAAgB;AAC7C,IAAM,8BAA8B,EAAE,mBAAmB,QAAQ;AAAA,EACtE,gCAAgC,QAAQ,CAAC;AAAA,EACzC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAS,EAAE,CAAC,EAAE,OAAO;AAClD,CAAC;AACM,IAAM,+BAA+B,EAAE,OAAO;AAAA,EACnD,eAAe,EAAE,QAAQ,oCAAoC;AAAA,EAC7D,aAAa;AAAA,EAAU,QAAQ;AAAA,EAAU,gBAAgB,SAAS,SAAS;AAAA,EAC3E,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACjD,SAAS,+BAA+B,SAAS;AAAA,EACjD,SAAS;AAAA,EAAgC,QAAQ;AAAA,EACjD,YAAY,EAAE,MAAM,sBAAsB,EAAE,IAAI,CAAC,EAAE,IAAI,GAAM;AAC/D,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,YAAY;AAC1C,MAAI,IAAI,IAAI,MAAM,WAAW,IAAI,YAAU,OAAO,SAAS,CAAC,EAAE,SAAS,MAAM,WAAW,OAAQ,SAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,YAAY,GAAG,SAAS,yCAAyC,CAAC;AAC5M,MAAI,MAAM,WAAW,KAAK,YAAW,OAAO,cAAc,UAAW,MAAM,OAAO,SAAS,UAAU,EAAG,SAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,YAAY,GAAG,SAAS,iEAAiE,CAAC;AAC5O,MAAI,MAAM,WAAW,KAAK,YAAU,CAAC,oBAAoB,KAAK,OAAO,IAAI,KAAK,OAAO,OAAO,IAAI,IAAI,UAAa,EAAG,SAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,YAAY,GAAG,SAAS,kEAAkE,CAAC;AAC3P,CAAC;AAEM,IAAM,+BAA+B,EAAE,OAAO;AAAA,EACnD,eAAe,EAAE,QAAQ,oCAAoC;AAAA,EAC7D,IAAI;AAAA,EAAU,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAAG,QAAQ;AAAA,EAAU,gBAAgB,SAAS,SAAS;AAAA,EACzG,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACjD,SAAS,+BAA+B,SAAS;AAAA,EACjD,aAAa;AAAA,EAAU,SAAS;AAAA,EAAgC,YAAY,EAAE,KAAK,CAAC,eAAe,SAAS,CAAC;AAAA,EAC7G,cAAc;AAAA,EACd,QAAQ,EAAE,KAAK,CAAC,UAAU,WAAW,cAAc,aAAa,UAAU,WAAW,CAAC;AAAA,EACtF,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAM;AAAA,EAC9C,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO;AAAA,EAC5O,WAAW,EAAE,IAAI,SAAS;AAAA,EAAG,WAAW,EAAE,IAAI,SAAS,EAAE,SAAS;AAAA,EAAG,aAAa,EAAE,IAAI,SAAS,EAAE,SAAS;AAAA,EAC5G,iBAAiB,EAAE,QAAQ;AAAA,EAAG,iBAAiB,EAAE,QAAQ;AAAA,EAAG,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACrG,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACrC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,SAAS,EAAE,OAAO,EAAE,IAAI,GAAK,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS;AACxF,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,YAAY;AAC1C,MAAI,OAAO,OAAO,MAAM,MAAM,EAAE,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC,MAAM,MAAM,WAAY,SAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,QAAQ,GAAG,SAAS,uDAAuD,CAAC;AACnN,MAAI,MAAM,WAAW,eAAe,MAAM,UAAU,KAAM,SAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,OAAO,GAAG,SAAS,qDAAqD,CAAC;AAC7K,MAAI,CAAC,aAAa,UAAU,WAAW,EAAE,SAAS,MAAM,MAAM,MAAM,CAAC,MAAM,eAAe,MAAM,OAAO,WAAW,MAAM,OAAO,SAAU,SAAQ,SAAS,EAAE,MAAM,UAAU,SAAS,wDAAwD,CAAC;AAC9O,MAAI,MAAM,WAAW,eAAe,CAAC,MAAM,gBAAiB,SAAQ,SAAS,EAAE,MAAM,UAAU,SAAS,4CAA4C,CAAC;AACrJ,MAAI,MAAM,mBAAmB,CAAC,CAAC,aAAa,UAAU,WAAW,EAAE,SAAS,MAAM,MAAM,EAAG,SAAQ,SAAS,EAAE,MAAM,UAAU,SAAS,sDAAsD,CAAC;AAC9L,MAAI,MAAM,WAAW,gBAAgB,CAAC,MAAM,mBAAmB,CAAC,MAAM,iBAAkB,SAAQ,SAAS,EAAE,MAAM,UAAU,SAAS,wEAAwE,CAAC;AAC/M,CAAC;AAEM,IAAM,+BAA+B,EAAE,OAAO;AAAA,EACnD,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,gBAAgB,iCAAiC,MAAM;AACzD,CAAC,EAAE,OAAO;AAEH,IAAM,iCAAiC,EAAE,OAAO,EAAE,gBAAgB,SAAS,SAAS,GAAG,WAAW,+BAA+B,MAAM,GAAG,SAAS,GAAG,SAAS,SAAS,SAAS,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO;AAClP,IAAM,4BAA4B,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,EAAE,IAAI,GAAG,GAAG,YAAY,SAAS,SAAS,EAAE,CAAC,EAAE,OAAO;AAC9I,IAAM,8BAA8B,EAAE,OAAO;AAAA,EAClD,eAAe,EAAE,QAAQ,mCAAmC;AAAA,EAC5D,KAAK;AAAA,EACL,UAAU,EAAE,MAAM,oBAAoB,EAAE,IAAI,CAAC,EAAE,IAAI,GAAM;AAAA,EACzD,QAAQ,0BAA0B,SAAS;AAAA,EAC3C,aAAa;AACf,CAAC,EAAE,OAAO;AAKV,eAAsB,6BAA6B,OAAiD;AAClG,QAAM,SAAS,6BAA6B,MAAM,KAAK;AACvD,QAAM,EAAE,SAAS,SAAS,UAAU,eAAe,IAAI;AACvD,oBAAkB,UAAU,sBAAsB;AAClD,MAAI,SAAS,gBAAgB,QAAQ,gBAChC,SAAS,OAAO,QAAQ,MAAM,SAAS,cAAc,QAAQ,aAAa,QAAQ,WAAW,QAAQ,UAAU,QAAQ,mBAAmB,QAAQ,kBAClJ,cAAc,QAAQ,WAAW,IAAI,MAAM,cAAc,QAAQ,WAAW,IAAI,KAChF,cAAc,SAAS,SAAS,WAAW,IAAI,MAAM,cAAc,QAAQ,WAAW,IAAI,MACzF,QAAQ,QAAQ,WAAW,QAAQ,QAAQ,SAC5C,QAAQ,gBAAgB,QAAQ,eAAe,QAAQ,eAAe,QAAQ,OAAO,QACrF,QAAQ,eAAe,QAAQ,WAAW,UAAU,QAAQ,eAAe,SAAS,aAAa,iBACjG,cAAc,QAAQ,OAAO,MAAM,cAAc,QAAQ,OAAO,KAChE,SAAS,eAAe,OAAO,QAAQ,QAAQ,MAAM,SAAS,eAAe,gBAAgB,QAAQ,QAAQ,eAC7G,cAAc,SAAS,UAAU,MAAM,cAAc,QAAQ,UAAU,EAAG,OAAM,IAAI,MAAM,+DAA+D;AAC9J,MAAI,QAAQ,OAAO,SAAS,WAAW;AACrC,QAAI,SAAS,OAAO,SAAS,aAAa,mBAAmB,KAAM,OAAM,IAAI,MAAM,+CAA+C;AAAA,EACpI,WAAW,SAAS,OAAO,SAAS,WAAW,CAAC,kBAAkB,eAAe,YAAY,QAAQ,OAAO,WACvG,SAAS,OAAO,MAAM,aAAa,eAAe,YAAY,SAAS,OAAO,MAAM,UAAU,eAAe,mBAC7G,SAAS,OAAO,MAAM,aAAa,QAAQ,SAAS,OAAO,MAAM,iBAAiB,QAAQ,SAAS,OAAO,MAAM,sBAAsB,QAAQ,SAAS,OAAO,MAAM,qBAAqB,QACzL,SAAS,OAAO,sBAAsB,MAAM,gBAAgB,EAAE,QAAQ,QAAQ,QAAQ,UAAU,eAAe,CAAC,EAAG,OAAM,IAAI,MAAM,oDAAoD;AAC5L,SAAO;AACT;AAEA,eAAsB,4BAA4B,OAAgD;AAChG,QAAM,SAAS,4BAA4B,MAAM,KAAK;AACtD,QAAM,EAAE,aAAa,QAAQ,GAAG,QAAQ,IAAI;AAC5C,MAAI,MAAM,gBAAgB,OAAO,MAAM,OAAQ,OAAM,IAAI,MAAM,qCAAqC;AACpG,QAAM,EAAE,SAAS,SAAS,IAAI,MAAM,6BAA6B,OAAO,GAAG;AAC3E,MAAI,CAAC,QAAQ,mBAAmB,CAAC,CAAC,aAAa,UAAU,WAAW,EAAE,SAAS,QAAQ,MAAM,EAAG,OAAM,IAAI,MAAM,oCAAoC;AACpJ,QAAM,UAAU,wBAAwB,UAAU,OAAO,QAAQ;AACjE,MAAI,cAAc,OAAO,MAAM,cAAc,OAAO,QAAQ,EAAG,OAAM,IAAI,MAAM,qDAAqD;AACpI,MAAK,QAAQ,WAAW,iBAAkB,OAAO,WAAW,MAAO,OAAM,IAAI,MAAM,6CAA6C;AAChI,MAAI,OAAO,QAAQ;AACjB,8BAA0B,OAAO,MAAM;AACvC,QAAI,OAAO,OAAO,YAAY,OAAO,SAAS,MAAM,OAAO,OAAO,YAAY,gBAAgB,SAAS,eAClG,cAAc,OAAO,OAAO,cAAc,MAAM,cAAc,SAAS,cAAc,KACrF,cAAc,OAAO,OAAO,MAAM,MAAM,cAAc,SAAS,YAAY,KAC3E,cAAc,OAAO,OAAO,WAAW,MAAM,cAAc,OAAO,SAAS,IAAI,CAAC,EAAE,IAAI,YAAY,OAAO,EAAE,IAAI,YAAY,EAAE,CAAC,KAC9H,OAAO,OAAO,UAAU,QAAQ,MAAO,OAAM,IAAI,MAAM,wEAAwE;AAAA,EACtI;AACA,SAAO;AACT;",
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
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
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,