openpond-sdk 0.9.5 → 0.9.7

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 (80) hide show
  1. package/dist/{chunk-EMANJDJR.js → chunk-CNGJF6AM.js} +61 -198
  2. package/dist/chunk-CNGJF6AM.js.map +7 -0
  3. package/dist/chunk-SR55WVPK.js +158 -0
  4. package/dist/chunk-SR55WVPK.js.map +7 -0
  5. package/dist/dataset-marketplace.js +216 -0
  6. package/dist/dataset-marketplace.js.map +7 -0
  7. package/dist/dataset-workspaces.js +116 -3
  8. package/dist/dataset-workspaces.js.map +4 -4
  9. package/dist/experiments.js +42 -8
  10. package/dist/experiments.js.map +3 -3
  11. package/dist/index.js +9 -8
  12. package/dist/index.js.map +1 -1
  13. package/dist/learning.js +55 -0
  14. package/dist/learning.js.map +4 -4
  15. package/dist/training-projects.js +4 -1
  16. package/dist/training-projects.js.map +2 -2
  17. package/dist/types/packages/sdk/src/dataset-marketplace.d.ts +945 -0
  18. package/dist/types/packages/sdk/src/dataset-marketplace.d.ts.map +1 -0
  19. package/dist/types/packages/sdk/src/dataset-population.d.ts +97 -0
  20. package/dist/types/packages/sdk/src/dataset-population.d.ts.map +1 -0
  21. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts +1168 -88
  22. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts.map +1 -1
  23. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts +118 -84
  24. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts.map +1 -1
  25. package/dist/types/packages/sdk/src/dataset-workspaces.d.ts +1 -0
  26. package/dist/types/packages/sdk/src/dataset-workspaces.d.ts.map +1 -1
  27. package/dist/types/packages/sdk/src/evaluation-project-context.d.ts +1 -1
  28. package/dist/types/packages/sdk/src/experiment-client.d.ts +23 -23
  29. package/dist/types/packages/sdk/src/experiment-contracts.d.ts +3 -3
  30. package/dist/types/packages/sdk/src/experiment-grading-contracts.d.ts +1 -1
  31. package/dist/types/packages/sdk/src/experiment-inspection.d.ts +50 -0
  32. package/dist/types/packages/sdk/src/experiment-inspection.d.ts.map +1 -0
  33. package/dist/types/packages/sdk/src/experiment-scoring-contracts.d.ts +3 -3
  34. package/dist/types/packages/sdk/src/experiments.d.ts +1 -0
  35. package/dist/types/packages/sdk/src/experiments.d.ts.map +1 -1
  36. package/dist/types/packages/sdk/src/grader-inspection.d.ts +568 -0
  37. package/dist/types/packages/sdk/src/grader-inspection.d.ts.map +1 -0
  38. package/dist/types/packages/sdk/src/learning-batch-assets.d.ts +2 -2
  39. package/dist/types/packages/sdk/src/learning-client.d.ts +1 -1
  40. package/dist/types/packages/sdk/src/learning.d.ts +1 -0
  41. package/dist/types/packages/sdk/src/learning.d.ts.map +1 -1
  42. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts +2 -2
  43. package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts +7 -7
  44. package/dist/types/packages/sdk/src/model-batch-review.d.ts +23 -23
  45. package/dist/types/packages/sdk/src/model-learning-policy.d.ts +3 -3
  46. package/dist/types/packages/sdk/src/model-projects.d.ts +27 -27
  47. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts +47 -47
  48. package/dist/types/packages/sdk/src/model-starter-catalog.d.ts +15 -15
  49. package/dist/types/packages/sdk/src/model-starter-execution.d.ts +4 -4
  50. package/dist/types/packages/sdk/src/model-starters.d.ts +18 -18
  51. package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts +16 -16
  52. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +15 -15
  53. package/dist/types/packages/sdk/src/task-inventory.d.ts +4 -4
  54. package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts +46 -46
  55. package/dist/types/packages/sdk/src/taskset-authored-files.d.ts +30 -30
  56. package/dist/types/packages/sdk/src/taskset-authored-portable-release.d.ts +2 -2
  57. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts +84 -84
  58. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +176 -176
  59. package/dist/types/packages/sdk/src/taskset-draft-core.d.ts +46 -46
  60. package/dist/types/packages/sdk/src/taskset-draft-dataset-artifacts.d.ts +25 -25
  61. package/dist/types/packages/sdk/src/taskset-draft-dataset-sources.d.ts +41 -41
  62. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts +45 -45
  63. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts +56 -56
  64. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts +71 -71
  65. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts +84 -84
  66. package/dist/types/packages/sdk/src/taskset-package-client.d.ts +1733 -1733
  67. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts +1083 -1083
  68. package/dist/types/packages/sdk/src/taskset-package-grader-projection.d.ts +2 -2
  69. package/dist/types/packages/sdk/src/taskset-package-learning.d.ts +18 -18
  70. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +59 -59
  71. package/dist/types/packages/sdk/src/training-acceptance.d.ts +4 -4
  72. package/dist/types/packages/sdk/src/training-harness-sources.d.ts +1 -1
  73. package/dist/types/packages/sdk/src/training-learning-batch.d.ts +68 -68
  74. package/dist/types/packages/sdk/src/training-project-client.d.ts +16 -12
  75. package/dist/types/packages/sdk/src/training-project-client.d.ts.map +1 -1
  76. package/dist/types/packages/sdk/src/training-project-contracts.d.ts +33 -21
  77. package/dist/types/packages/sdk/src/training-project-contracts.d.ts.map +1 -1
  78. package/dist/types/packages/sdk/src/training.d.ts +24 -24
  79. package/package.json +5 -1
  80. package/dist/chunk-EMANJDJR.js.map +0 -7
@@ -1,5 +1,16 @@
1
1
  import {
2
- ModelTasksetRunRequestSchema,
2
+ ExperimentDefinitionRefSchema,
3
+ ExperimentFieldMappingsSchema,
4
+ ExperimentGraderPinSchema,
5
+ ExperimentListQuerySchema,
6
+ PrepareHarnessExperimentSchema,
7
+ PreparedHarnessExperimentSchema,
8
+ SaveExperimentSchema,
9
+ StartExperimentSchema,
10
+ experimentDefinitionRef,
11
+ verifyExperimentDefinition
12
+ } from "./chunk-SR55WVPK.js";
13
+ import {
3
14
  verifyHarnessExperimentManifest,
4
15
  verifyModelTasksetRunDetails
5
16
  } from "./chunk-62LWLACP.js";
@@ -8,179 +19,46 @@ import {
8
19
  contentHash
9
20
  } from "./chunk-QUOW6URQ.js";
10
21
 
11
- // src/experiment-field-mappings.ts
12
- import { z } from "zod";
13
- var Segment = z.string().min(1).max(200).refine((value) => !["__proto__", "prototype", "constructor"].includes(value), "Use an ordinary field name.");
14
- var Path = z.array(Segment).min(1).max(20);
15
- var Slot = z.enum(["input", "output", "expectedOutput", "evaluatorContext"]);
16
- var ExperimentFieldMappingSchema = z.object({
17
- destination: Slot,
18
- path: Path,
19
- source: Slot,
20
- sourcePath: z.array(Segment).max(20)
21
- }).strict();
22
- var ExperimentFieldMappingsSchema = z.array(ExperimentFieldMappingSchema).max(100).superRefine((mappings, context) => {
23
- for (const [index, mapping] of mappings.entries()) {
24
- if (mappings.slice(0, index).some((previous) => previous.destination === mapping.destination && (prefix(previous.path, mapping.path) || prefix(mapping.path, previous.path))))
25
- context.addIssue({ code: "custom", path: [index, "path"], message: "Mapped destination paths must not overlap." });
26
- }
27
- });
28
- function mapExperimentGradingFields(fields, raw) {
29
- const mappings = ExperimentFieldMappingsSchema.parse(raw);
30
- const mapped = structuredClone(fields);
31
- for (const mapping of mappings) {
32
- let value = fields[mapping.source];
33
- for (const segment of mapping.sourcePath) {
34
- if (!record(value) || !Object.hasOwn(value, segment)) throw new Error("The configured grader source field is unavailable.");
35
- value = value[segment];
36
- }
37
- if (value === void 0) throw new Error("The configured grader source field is unavailable.");
38
- let destination = mapped[mapping.destination];
39
- if (destination === null) mapped[mapping.destination] = destination = {};
40
- for (const segment of mapping.path.slice(0, -1)) {
41
- const existing = Object.hasOwn(destination, segment) ? destination[segment] : void 0;
42
- if (existing !== void 0 && !record(existing)) throw new Error("A grader destination path crosses a scalar field.");
43
- if (existing === void 0) destination[segment] = {};
44
- destination = destination[segment];
45
- }
46
- destination[mapping.path.at(-1)] = structuredClone(value);
47
- }
48
- return mapped;
49
- }
50
- function record(value) {
51
- return value !== null && typeof value === "object" && !Array.isArray(value);
52
- }
53
- function prefix(left, right) {
54
- return left.length <= right.length && left.every((segment, index) => segment === right[index]);
55
- }
56
-
57
- // src/experiment-contracts.ts
58
- import { FeedbackKeySchema } from "@openpond/evals/rewards";
59
- import { TasksetRunManifestSchema } from "@openpond/evals/metrics";
60
- import { z as z2 } from "zod";
61
- var Id = z2.string().trim().min(1).max(200);
62
- var Hash = z2.string().regex(/^[a-f0-9]{64}$/);
63
- var ExperimentDefinitionRefSchema = z2.object({
64
- id: Id,
65
- revision: z2.number().int().positive(),
66
- contentHash: Hash
67
- }).strict();
68
- var ExperimentGraderPinSchema = z2.object({
69
- id: Id,
70
- version: z2.string().min(1).max(200),
71
- contentHash: Hash,
72
- feedbackKey: FeedbackKeySchema,
73
- release: ExperimentDefinitionRefSchema.nullable(),
74
- mappings: ExperimentFieldMappingsSchema.optional()
75
- }).strict();
76
- var ExperimentGraderSelectionSchema = z2.object({ id: Id, version: z2.string().min(1).max(200), contentHash: Hash, mappings: ExperimentFieldMappingsSchema }).strict();
77
- var SaveExperimentSchema = z2.object({
78
- operationId: Id,
79
- id: Id.optional(),
80
- expectedRevision: z2.number().int().nonnegative(),
81
- request: ModelTasksetRunRequestSchema,
82
- maximumCostUsd: z2.number().finite().positive().max(1e4),
83
- graders: z2.array(ExperimentGraderSelectionSchema).min(1).max(100).optional()
84
- }).strict().superRefine((value, ctx) => {
85
- if (!value.request.name) ctx.addIssue({ code: "custom", path: ["request", "name"], message: "Name this Experiment before saving it." });
86
- if (Boolean(value.id) !== value.expectedRevision > 0) ctx.addIssue({ code: "custom", path: ["expectedRevision"], message: "An update requires its saved definition revision." });
87
- if (Math.round(value.maximumCostUsd * 1e6) < 1) ctx.addIssue({ code: "custom", path: ["maximumCostUsd"], message: "The budget must be at least $0.000001." });
88
- if (value.graders && new Set(value.graders.map((grader) => grader.id)).size !== value.graders.length) ctx.addIssue({ code: "custom", path: ["graders"], message: "Select each grader once." });
89
- });
90
- var DefinitionContent = z2.object({
91
- schemaVersion: z2.literal("openpond.experimentDefinition.v1"),
92
- id: Id,
93
- teamId: Id,
94
- revision: z2.number().int().positive(),
95
- request: ModelTasksetRunRequestSchema,
96
- maximumCostUsd: z2.number().finite().positive().max(1e4),
97
- graders: z2.array(ExperimentGraderPinSchema).min(1).max(100),
98
- createdAt: z2.iso.datetime(),
99
- updatedAt: z2.iso.datetime()
100
- }).strict();
101
- var ExperimentDefinitionSchema = DefinitionContent.extend({ contentHash: Hash });
102
- var StartExperimentSchema = z2.object({ operationId: Id, definition: ExperimentDefinitionRefSchema }).strict();
103
- var ExperimentListQuerySchema = z2.object({
104
- projectId: Id.optional(),
105
- datasetHash: Hash.optional(),
106
- search: z2.string().trim().max(200).optional(),
107
- afterId: Id.optional(),
108
- limit: z2.number().int().min(1).max(100).default(30)
109
- }).strict();
110
- var ExperimentExecutionContextSchema = z2.object({
111
- definition: ExperimentDefinitionRefSchema,
112
- maximumCostUsd: z2.number().finite().positive().max(1e4),
113
- graders: z2.array(ExperimentGraderPinSchema).min(1).max(100)
114
- }).strict();
115
- var PrepareHarnessExperimentSchema = z2.object({
116
- operationId: Id,
117
- profileRepositoryId: Id,
118
- definitionId: Id,
119
- modelId: Id,
120
- reasoningEffort: z2.enum(["off", "low", "medium", "high", "xhigh", "max"]).optional(),
121
- maximumCostUsd: z2.number().finite().positive().max(1e4)
122
- }).strict();
123
- var PreparedHarnessExperimentSchema = z2.object({
124
- request: ModelTasksetRunRequestSchema,
125
- manifest: TasksetRunManifestSchema,
126
- maximumCostUsd: z2.number().finite().positive().max(1e4),
127
- graders: z2.array(ExperimentGraderPinSchema).min(1).max(100)
128
- }).strict();
129
- function verifyExperimentDefinition(value) {
130
- const parsed = ExperimentDefinitionSchema.parse(value);
131
- const { contentHash: actual, ...content } = parsed;
132
- if (actual !== contentHash(content) || parsed.request.teamId !== parsed.teamId || !parsed.request.name)
133
- throw new Error("Experiment definition differs from its immutable content.");
134
- if (new Set(parsed.graders.map((item) => item.feedbackKey)).size !== parsed.graders.length)
135
- throw new Error("Experiment feedback keys must be distinct.");
136
- return parsed;
137
- }
138
- var experimentDefinitionRef = (value) => ({
139
- id: value.id,
140
- revision: value.revision,
141
- contentHash: value.contentHash
142
- });
143
-
144
22
  // src/experiment-scoring-contracts.ts
145
- import { z as z3 } from "zod";
23
+ import { z } from "zod";
146
24
  import { RewardReleaseRefSchema } from "@openpond/evals/rewards";
147
- var Id2 = z3.string().trim().min(1).max(200);
148
- var ExperimentScoringRequestSchema = z3.object({
149
- operationId: Id2,
25
+ var Id = z.string().trim().min(1).max(200);
26
+ var ExperimentScoringRequestSchema = z.object({
27
+ operationId: Id,
150
28
  execution: ImmutableReleaseRefSchema,
151
- graders: z3.array(RewardReleaseRefSchema).min(1).max(100),
152
- maximumCostUsd: z3.number().finite().min(1e-6).max(1e4),
153
- mappings: z3.array(z3.object({ graderId: Id2, fields: ExperimentFieldMappingsSchema }).strict()).max(100).optional()
29
+ graders: z.array(RewardReleaseRefSchema).min(1).max(100),
30
+ maximumCostUsd: z.number().finite().min(1e-6).max(1e4),
31
+ mappings: z.array(z.object({ graderId: Id, fields: ExperimentFieldMappingsSchema }).strict()).max(100).optional()
154
32
  }).strict().superRefine((value, context) => {
155
33
  if (new Set(value.graders.map((grader) => grader.id)).size !== value.graders.length)
156
34
  context.addIssue({ code: "custom", path: ["graders"], message: "Select each grader once." });
157
35
  if (value.mappings && (new Set(value.mappings.map((mapping) => mapping.graderId)).size !== value.mappings.length || value.mappings.some((mapping) => !value.graders.some((grader) => grader.id === mapping.graderId))))
158
36
  context.addIssue({ code: "custom", path: ["mappings"], message: "Map each selected grader at most once." });
159
37
  });
160
- var ScoringPassContent = z3.object({
161
- schemaVersion: z3.literal("openpond.experimentScoringPass.v1"),
162
- id: Id2,
163
- teamId: Id2,
164
- revision: z3.number().int().positive(),
38
+ var ScoringPassContent = z.object({
39
+ schemaVersion: z.literal("openpond.experimentScoringPass.v1"),
40
+ id: Id,
41
+ teamId: Id,
42
+ revision: z.number().int().positive(),
165
43
  request: ExperimentScoringRequestSchema,
166
- graders: z3.array(ExperimentGraderPinSchema).min(1).max(100),
167
- status: z3.enum(["queued", "running", "cancelling", "completed", "failed", "cancelled"]),
168
- totalCount: z3.number().int().min(1).max(1e4),
169
- counts: z3.object({
170
- pending: z3.number().int().nonnegative(),
171
- running: z3.number().int().nonnegative(),
172
- scored: z3.number().int().nonnegative(),
173
- unavailable: z3.number().int().nonnegative(),
174
- failed: z3.number().int().nonnegative(),
175
- cancelled: z3.number().int().nonnegative()
44
+ graders: z.array(ExperimentGraderPinSchema).min(1).max(100),
45
+ status: z.enum(["queued", "running", "cancelling", "completed", "failed", "cancelled"]),
46
+ totalCount: z.number().int().min(1).max(1e4),
47
+ counts: z.object({
48
+ pending: z.number().int().nonnegative(),
49
+ running: z.number().int().nonnegative(),
50
+ scored: z.number().int().nonnegative(),
51
+ unavailable: z.number().int().nonnegative(),
52
+ failed: z.number().int().nonnegative(),
53
+ cancelled: z.number().int().nonnegative()
176
54
  }).strict(),
177
- resultAvailable: z3.boolean(),
178
- createdAt: z3.iso.datetime(),
179
- startedAt: z3.iso.datetime().nullable(),
180
- completedAt: z3.iso.datetime().nullable(),
181
- error: z3.object({ code: Id2, message: z3.string().max(2e3) }).strict().nullable()
55
+ resultAvailable: z.boolean(),
56
+ createdAt: z.iso.datetime(),
57
+ startedAt: z.iso.datetime().nullable(),
58
+ completedAt: z.iso.datetime().nullable(),
59
+ error: z.object({ code: Id, message: z.string().max(2e3) }).strict().nullable()
182
60
  }).strict();
183
- var ExperimentScoringPassSchema = ScoringPassContent.extend({ contentHash: z3.string().regex(/^[a-f0-9]{64}$/) });
61
+ var ExperimentScoringPassSchema = ScoringPassContent.extend({ contentHash: z.string().regex(/^[a-f0-9]{64}$/) });
184
62
  function verifyExperimentScoringPass(value) {
185
63
  const pass = ExperimentScoringPassSchema.parse(value);
186
64
  const { contentHash: actual, ...content } = pass;
@@ -195,9 +73,9 @@ function verifyExperimentScoringPass(value) {
195
73
  }
196
74
 
197
75
  // src/experiment-client.ts
198
- import { z as z4 } from "zod";
76
+ import { z as z2 } from "zod";
199
77
  import { compareExperiments, verifyExperimentEvidence } from "@openpond/evals/experiments";
200
- var Id3 = z4.string().trim().min(1).max(200);
78
+ var Id2 = z2.string().trim().min(1).max(200);
201
79
  var OpenPondExperimentError = class extends Error {
202
80
  constructor(status, code, message) {
203
81
  super(message);
@@ -241,14 +119,14 @@ var OpenPondExperimentsClient = class {
241
119
  const reference = options.reference ? ExperimentDefinitionRefSchema.parse(options.reference) : void 0;
242
120
  if (reference && reference.id !== id) throw new Error("Experiment reference identity mismatch.");
243
121
  const suffix = reference ? `?${new URLSearchParams({ revision: String(reference.revision), contentHash: reference.contentHash })}` : "";
244
- const result = this.definition(await this.request(`/${encodeURIComponent(Id3.parse(id))}${suffix}`, "GET", void 0, options.signal), id);
122
+ const result = this.definition(await this.request(`/${encodeURIComponent(Id2.parse(id))}${suffix}`, "GET", void 0, options.signal), id);
245
123
  if (options.reference && contentHash(experimentDefinitionRef(result)) !== contentHash(options.reference)) throw new Error("Experiment revision mismatch.");
246
124
  return result;
247
125
  }
248
126
  async list(value = {}, signal) {
249
127
  const query = ExperimentListQuerySchema.parse(value);
250
128
  const params = new URLSearchParams(Object.entries(query).map(([key, value2]) => [key, String(value2)]));
251
- const page = z4.object({ items: z4.array(z4.unknown()).max(100), nextCursor: Id3.nullable() }).strict().parse(await this.request(`?${params}`, "GET", void 0, signal));
129
+ const page = z2.object({ items: z2.array(z2.unknown()).max(100), nextCursor: Id2.nullable() }).strict().parse(await this.request(`?${params}`, "GET", void 0, signal));
252
130
  const items = page.items.map((value2) => this.definition(value2));
253
131
  if (items.length > query.limit || new Set(items.map((item) => item.id)).size !== items.length || items.some((item) => query.projectId && item.request.project?.id !== query.projectId || query.datasetHash && item.request.taskset.contentHash !== query.datasetHash))
254
132
  throw new Error("Experiment page differs from its selected scope.");
@@ -256,7 +134,7 @@ var OpenPondExperimentsClient = class {
256
134
  }
257
135
  async start(value, signal) {
258
136
  const request = StartExperimentSchema.parse(value);
259
- const response = z4.object({ definition: z4.unknown(), run: z4.unknown() }).strict().parse(
137
+ const response = z2.object({ definition: z2.unknown(), run: z2.unknown() }).strict().parse(
260
138
  await this.request(`/${encodeURIComponent(request.definition.id)}/start`, "POST", request, signal)
261
139
  );
262
140
  const definition = this.definition(response.definition, request.definition.id);
@@ -267,15 +145,15 @@ var OpenPondExperimentsClient = class {
267
145
  return result;
268
146
  }
269
147
  async result(executionId, signal) {
270
- const value = z4.object({ executionId: Id3, passId: Id3.nullable(), manifest: z4.unknown(), result: z4.unknown() }).strict().parse(await this.request(`/executions/${encodeURIComponent(Id3.parse(executionId))}/result`, "GET", void 0, signal));
148
+ const value = z2.object({ executionId: Id2, passId: Id2.nullable(), manifest: z2.unknown(), result: z2.unknown() }).strict().parse(await this.request(`/executions/${encodeURIComponent(Id2.parse(executionId))}/result`, "GET", void 0, signal));
271
149
  const evidence = verifyExperimentEvidence(value);
272
150
  if (value.executionId !== executionId || evidence.manifest.teamId !== this.options.teamId || evidence.manifest.lineage?.execution.id !== executionId || evidence.manifest.lineage.scoringPassId !== value.passId) throw new Error("Experiment result identity mismatch.");
273
151
  return { ...evidence, executionId, passId: value.passId };
274
152
  }
275
153
  async executions(definitionId, options = {}) {
276
- const params = new URLSearchParams(options.afterId ? { afterId: Id3.parse(options.afterId) } : {});
277
- const page = z4.object({ items: z4.array(z4.unknown()).max(30), nextCursor: Id3.nullable() }).strict().parse(
278
- await this.request(`/${encodeURIComponent(Id3.parse(definitionId))}/executions?${params}`, "GET", void 0, options.signal)
154
+ const params = new URLSearchParams(options.afterId ? { afterId: Id2.parse(options.afterId) } : {});
155
+ const page = z2.object({ items: z2.array(z2.unknown()).max(30), nextCursor: Id2.nullable() }).strict().parse(
156
+ await this.request(`/${encodeURIComponent(Id2.parse(definitionId))}/executions?${params}`, "GET", void 0, options.signal)
279
157
  );
280
158
  const items = await Promise.all(page.items.map((value) => verifyModelTasksetRunDetails(value)));
281
159
  if (items.some((item) => item.summary.teamId !== this.options.teamId || ExperimentDefinitionRefSchema.parse(item.manifest.metadata.experimentDefinition).id !== definitionId) || new Set(items.map((item) => item.summary.id)).size !== items.length)
@@ -283,14 +161,14 @@ var OpenPondExperimentsClient = class {
283
161
  return { items, nextCursor: page.nextCursor };
284
162
  }
285
163
  async execution(id, signal) {
286
- return this.executionDetails(await this.request(`/executions/${encodeURIComponent(Id3.parse(id))}`, "GET", void 0, signal), id);
164
+ return this.executionDetails(await this.request(`/executions/${encodeURIComponent(Id2.parse(id))}`, "GET", void 0, signal), id);
287
165
  }
288
166
  async cancel(id, signal) {
289
- return this.executionDetails(await this.request(`/executions/${encodeURIComponent(Id3.parse(id))}/cancel`, "POST", {}, signal), id);
167
+ return this.executionDetails(await this.request(`/executions/${encodeURIComponent(Id2.parse(id))}/cancel`, "POST", {}, signal), id);
290
168
  }
291
169
  /** Retry intentionally creates another execution; a transport retry reuses the same operation id. */
292
170
  async retry(id, operationId, signal) {
293
- const result = await this.executionDetails(await this.request(`/executions/${encodeURIComponent(Id3.parse(id))}/retry`, "POST", { operationId: Id3.parse(operationId) }, signal));
171
+ const result = await this.executionDetails(await this.request(`/executions/${encodeURIComponent(Id2.parse(id))}/retry`, "POST", { operationId: Id2.parse(operationId) }, signal));
294
172
  if (result.request.operationId !== operationId) throw new Error("Experiment retry operation mismatch.");
295
173
  return result;
296
174
  }
@@ -301,12 +179,12 @@ var OpenPondExperimentsClient = class {
301
179
  return pass;
302
180
  }
303
181
  async scoringPass(id, signal) {
304
- return this.pass(await this.request(`/scoring-passes/${encodeURIComponent(Id3.parse(id))}`, "GET", void 0, signal), id);
182
+ return this.pass(await this.request(`/scoring-passes/${encodeURIComponent(Id2.parse(id))}`, "GET", void 0, signal), id);
305
183
  }
306
184
  async scoringPasses(executionId, options = {}) {
307
- const params = new URLSearchParams(options.afterId ? { afterId: Id3.parse(options.afterId) } : {});
308
- const page = z4.object({ items: z4.array(z4.unknown()).max(30), nextCursor: Id3.nullable() }).strict().parse(
309
- await this.request(`/executions/${encodeURIComponent(Id3.parse(executionId))}/scoring-passes?${params}`, "GET", void 0, options.signal)
185
+ const params = new URLSearchParams(options.afterId ? { afterId: Id2.parse(options.afterId) } : {});
186
+ const page = z2.object({ items: z2.array(z2.unknown()).max(30), nextCursor: Id2.nullable() }).strict().parse(
187
+ await this.request(`/executions/${encodeURIComponent(Id2.parse(executionId))}/scoring-passes?${params}`, "GET", void 0, options.signal)
310
188
  );
311
189
  const items = page.items.map((value) => this.pass(value));
312
190
  if (items.some((item) => item.request.execution.id !== executionId) || new Set(items.map((item) => item.id)).size !== items.length)
@@ -314,11 +192,11 @@ var OpenPondExperimentsClient = class {
314
192
  return { items, nextCursor: page.nextCursor };
315
193
  }
316
194
  async cancelScoringPass(id, signal) {
317
- return this.pass(await this.request(`/scoring-passes/${encodeURIComponent(Id3.parse(id))}/cancel`, "POST", {}, signal), id);
195
+ return this.pass(await this.request(`/scoring-passes/${encodeURIComponent(Id2.parse(id))}/cancel`, "POST", {}, signal), id);
318
196
  }
319
197
  async scoringResult(id, signal) {
320
- const value = z4.object({ executionId: Id3, passId: Id3, manifest: z4.unknown(), result: z4.unknown() }).strict().parse(
321
- await this.request(`/scoring-passes/${encodeURIComponent(Id3.parse(id))}/result`, "GET", void 0, signal)
198
+ const value = z2.object({ executionId: Id2, passId: Id2, manifest: z2.unknown(), result: z2.unknown() }).strict().parse(
199
+ await this.request(`/scoring-passes/${encodeURIComponent(Id2.parse(id))}/result`, "GET", void 0, signal)
322
200
  );
323
201
  const evidence = verifyExperimentEvidence(value);
324
202
  if (value.passId !== id || evidence.manifest.teamId !== this.options.teamId || evidence.manifest.id !== id || evidence.manifest.lineage?.execution.id !== value.executionId || evidence.manifest.lineage.scoringPassId !== id)
@@ -355,7 +233,7 @@ var OpenPondExperimentsClient = class {
355
233
  });
356
234
  const value = await response.json();
357
235
  if (!response.ok) {
358
- const parsed = z4.object({ code: z4.string(), message: z4.string() }).safeParse(value);
236
+ const parsed = z2.object({ code: z2.string(), message: z2.string() }).safeParse(value);
359
237
  throw new OpenPondExperimentError(response.status, parsed.success ? parsed.data.code : "experiment_request_failed", parsed.success ? parsed.data.message : "Experiment request failed.");
360
238
  }
361
239
  return value;
@@ -369,25 +247,10 @@ function savedRequestPopulation(request) {
369
247
  }
370
248
 
371
249
  export {
372
- ExperimentFieldMappingSchema,
373
- ExperimentFieldMappingsSchema,
374
- mapExperimentGradingFields,
375
- ExperimentDefinitionRefSchema,
376
- ExperimentGraderPinSchema,
377
- ExperimentGraderSelectionSchema,
378
- SaveExperimentSchema,
379
- ExperimentDefinitionSchema,
380
- StartExperimentSchema,
381
- ExperimentListQuerySchema,
382
- ExperimentExecutionContextSchema,
383
- PrepareHarnessExperimentSchema,
384
- PreparedHarnessExperimentSchema,
385
- verifyExperimentDefinition,
386
- experimentDefinitionRef,
387
250
  ExperimentScoringRequestSchema,
388
251
  ExperimentScoringPassSchema,
389
252
  verifyExperimentScoringPass,
390
253
  OpenPondExperimentError,
391
254
  OpenPondExperimentsClient
392
255
  };
393
- //# sourceMappingURL=chunk-EMANJDJR.js.map
256
+ //# sourceMappingURL=chunk-CNGJF6AM.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/experiment-scoring-contracts.ts", "../src/experiment-client.ts"],
4
+ "sourcesContent": ["import { z } from \"zod\";\nimport { contentHash, ImmutableReleaseRefSchema } from \"@openpond/harness\";\nimport { RewardReleaseRefSchema } from \"@openpond/evals/rewards\";\nimport { ExperimentGraderPinSchema } from \"./experiment-contracts.js\";\nimport { ExperimentFieldMappingsSchema } from \"./experiment-field-mappings.js\";\n\nconst Id = z.string().trim().min(1).max(200);\nexport const ExperimentScoringRequestSchema = z.object({\n operationId: Id,\n execution: ImmutableReleaseRefSchema,\n graders: z.array(RewardReleaseRefSchema).min(1).max(100),\n maximumCostUsd: z.number().finite().min(0.000001).max(10_000),\n mappings: z.array(z.object({ graderId: Id, fields: ExperimentFieldMappingsSchema }).strict()).max(100).optional(),\n}).strict().superRefine((value, context) => {\n if (new Set(value.graders.map(grader => grader.id)).size !== value.graders.length)\n context.addIssue({ code: \"custom\", path: [\"graders\"], message: \"Select each grader once.\" });\n if (value.mappings && (new Set(value.mappings.map(mapping => mapping.graderId)).size !== value.mappings.length\n || value.mappings.some(mapping => !value.graders.some(grader => grader.id === mapping.graderId))))\n context.addIssue({ code: \"custom\", path: [\"mappings\"], message: \"Map each selected grader at most once.\" });\n});\nexport type ExperimentScoringRequest = z.infer<typeof ExperimentScoringRequestSchema>;\n\nconst ScoringPassContent = z.object({\n schemaVersion: z.literal(\"openpond.experimentScoringPass.v1\"),\n id: Id, teamId: Id, revision: z.number().int().positive(),\n request: ExperimentScoringRequestSchema,\n graders: z.array(ExperimentGraderPinSchema).min(1).max(100),\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(),\n scored: z.number().int().nonnegative(), unavailable: z.number().int().nonnegative(),\n failed: z.number().int().nonnegative(), cancelled: z.number().int().nonnegative() }).strict(),\n resultAvailable: z.boolean(), createdAt: z.iso.datetime(), startedAt: z.iso.datetime().nullable(),\n completedAt: z.iso.datetime().nullable(),\n error: z.object({ code: Id, message: z.string().max(2_000) }).strict().nullable(),\n}).strict();\nexport const ExperimentScoringPassSchema = ScoringPassContent.extend({ contentHash: z.string().regex(/^[a-f0-9]{64}$/) });\nexport type ExperimentScoringPass = z.infer<typeof ExperimentScoringPassSchema>;\n\n/** A pass grades owned output and carries no model-execution authority. */\nexport function verifyExperimentScoringPass(value: unknown) {\n const pass = ExperimentScoringPassSchema.parse(value);\n const { contentHash: actual, ...content } = pass;\n if (contentHash(content) !== actual || Object.values(pass.counts).reduce((sum, count) => sum + count, 0) !== pass.totalCount)\n throw new Error(\"Scoring pass integrity or population accounting failed.\");\n const terminal = [\"completed\", \"failed\", \"cancelled\"].includes(pass.status);\n if (terminal && (!pass.completedAt || pass.counts.pending || pass.counts.running)\n || !terminal && (pass.completedAt !== null || pass.resultAvailable)\n || pass.status === \"completed\" && !pass.resultAvailable)\n throw new Error(\"Scoring pass lifecycle differs from its retained result.\");\n if (pass.graders.length !== pass.request.graders.length || new Set(pass.graders.map(grader => grader.feedbackKey)).size !== pass.graders.length\n || pass.graders.some((grader, index) => contentHash(grader.release) !== contentHash(pass.request.graders[index]!)\n || contentHash(grader.mappings ?? []) !== contentHash(pass.request.mappings?.find(mapping => mapping.graderId === grader.release?.id)?.fields ?? [])))\n throw new Error(\"Scoring pass graders differ from their exact admission.\");\n return pass;\n}\n", "import { z } from \"zod\";\nimport { contentHash } from \"@openpond/harness\";\nimport { compareExperiments, verifyExperimentEvidence } from \"@openpond/evals/experiments\";\nimport { ExperimentDefinitionRefSchema, ExperimentListQuerySchema, SaveExperimentSchema, StartExperimentSchema, experimentDefinitionRef,\n verifyExperimentDefinition, type ExperimentDefinitionRef } from \"./experiment-contracts.js\";\nimport { PrepareHarnessExperimentSchema, PreparedHarnessExperimentSchema } from \"./experiment-contracts.js\";\nimport { verifyHarnessExperimentManifest, verifyModelTasksetRunDetails } from \"./model-taskset-runs-contracts.js\";\nimport { ExperimentScoringRequestSchema, verifyExperimentScoringPass, type ExperimentScoringRequest } from \"./experiment-scoring-contracts.js\";\n\nconst Id = z.string().trim().min(1).max(200);\nexport class OpenPondExperimentError extends Error {\n constructor(readonly status: number, readonly code: string, message: string) { super(message); this.name = \"OpenPondExperimentError\"; }\n}\n\n/** Saved configuration and execution identities share the host's service. */\nexport class OpenPondExperimentsClient {\n private readonly baseUrl: string;\n constructor(private readonly options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof fetch }) {\n const url = new URL(options.baseUrl);\n if (![\"http:\", \"https:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash || !options.apiKey.trim() || !options.teamId.trim())\n throw new Error(\"A clean API origin and workspace credentials are required.\");\n this.baseUrl = url.toString().replace(/\\/+$/, \"\");\n }\n /** Resolves a released target without saving a definition or dispatching it. */\n async prepareHarness(value: z.input<typeof PrepareHarnessExperimentSchema>, signal?: AbortSignal) {\n const request = PrepareHarnessExperimentSchema.parse(value);\n const result = PreparedHarnessExperimentSchema.parse(await this.request(\"/harness-setup\", \"POST\", request, signal));\n verifyHarnessExperimentManifest(result.request, result.manifest);\n const policy = result.request.policy;\n if (result.request.teamId !== this.options.teamId || result.request.operationId !== request.operationId\n || policy.kind !== \"hosted_harness\" || policy.profileRepositoryId !== request.profileRepositoryId\n || policy.source.definitionId !== request.definitionId || policy.modelId !== request.modelId\n || policy.reasoningEffort !== request.reasoningEffort || result.maximumCostUsd !== request.maximumCostUsd\n || result.manifest.limits.maximumSpendUsd !== request.maximumCostUsd)\n throw new Error(\"Harness preparation differs from its requested scope or configuration.\");\n return result;\n }\n async save(value: z.input<typeof SaveExperimentSchema>, signal?: AbortSignal) {\n const request = SaveExperimentSchema.parse(value);\n if (request.request.teamId !== this.options.teamId) throw new Error(\"Experiment workspace mismatch.\");\n const result = this.definition(await this.request(\"\", \"POST\", request, signal), request.id);\n if (result.revision !== request.expectedRevision + 1 || contentHash(result.request) !== contentHash(request.request)\n || result.maximumCostUsd !== request.maximumCostUsd) throw new Error(\"Experiment save receipt differs from its submitted configuration.\");\n if (request.graders && contentHash(request.graders) !== contentHash(result.graders.map(grader => ({ id: grader.id, version: grader.version, contentHash: grader.contentHash, mappings: grader.mappings ?? [] }))))\n throw new Error(\"Experiment save receipt differs from its selected graders or mappings.\");\n return result;\n }\n async get(id: string, options: { reference?: ExperimentDefinitionRef; signal?: AbortSignal } = {}) {\n const reference = options.reference ? ExperimentDefinitionRefSchema.parse(options.reference) : undefined;\n if (reference && reference.id !== id) throw new Error(\"Experiment reference identity mismatch.\");\n const suffix = reference ? `?${new URLSearchParams({ revision: String(reference.revision), contentHash: reference.contentHash })}` : \"\";\n const result = this.definition(await this.request(`/${encodeURIComponent(Id.parse(id))}${suffix}`, \"GET\", undefined, options.signal), id);\n if (options.reference && contentHash(experimentDefinitionRef(result)) !== contentHash(options.reference)) throw new Error(\"Experiment revision mismatch.\");\n return result;\n }\n async list(value: z.input<typeof ExperimentListQuerySchema> = {}, signal?: AbortSignal) {\n const query = ExperimentListQuerySchema.parse(value);\n const params = new URLSearchParams(Object.entries(query).map(([key, value]) => [key, String(value)]));\n const page = z.object({ items: z.array(z.unknown()).max(100), nextCursor: Id.nullable() }).strict().parse(await this.request(`?${params}`, \"GET\", undefined, signal));\n const items = page.items.map(value => this.definition(value));\n if (items.length > query.limit || new Set(items.map(item => item.id)).size !== items.length\n || items.some(item => query.projectId && item.request.project?.id !== query.projectId || query.datasetHash && item.request.taskset.contentHash !== query.datasetHash))\n throw new Error(\"Experiment page differs from its selected scope.\");\n return { items, nextCursor: page.nextCursor };\n }\n async start(value: z.input<typeof StartExperimentSchema>, signal?: AbortSignal) {\n const request = StartExperimentSchema.parse(value);\n const response = z.object({ definition: z.unknown(), run: z.unknown() }).strict().parse(\n await this.request(`/${encodeURIComponent(request.definition.id)}/start`, \"POST\", request, signal));\n const definition = this.definition(response.definition, request.definition.id);\n if (contentHash(experimentDefinitionRef(definition)) !== contentHash(request.definition)) throw new Error(\"Experiment Start revision mismatch.\");\n const result = await verifyModelTasksetRunDetails(response.run);\n if (result.summary.teamId !== this.options.teamId || result.request.operationId !== request.operationId\n || contentHash(savedRequestPopulation(result.request))\n !== contentHash(savedRequestPopulation({ ...definition.request, operationId: request.operationId }))\n || contentHash(result.manifest.metadata.experimentDefinition) !== contentHash(request.definition)\n || result.manifest.metadata.experimentConfigurationHash !== contentHash({ definition: request.definition, maximumCostUsd: definition.maximumCostUsd, graders: definition.graders }))\n throw new Error(\"Experiment execution differs from its saved configuration.\");\n return result;\n }\n async result(executionId: string, signal?: AbortSignal) {\n const value = z.object({ executionId: Id, passId: Id.nullable(), manifest: z.unknown(), result: z.unknown() }).strict()\n .parse(await this.request(`/executions/${encodeURIComponent(Id.parse(executionId))}/result`, \"GET\", undefined, signal));\n const evidence = verifyExperimentEvidence(value);\n if (value.executionId !== executionId || evidence.manifest.teamId !== this.options.teamId\n || evidence.manifest.lineage?.execution.id !== executionId\n || evidence.manifest.lineage.scoringPassId !== value.passId) throw new Error(\"Experiment result identity mismatch.\");\n return { ...evidence, executionId, passId: value.passId };\n }\n async executions(definitionId: string, options: { afterId?: string; signal?: AbortSignal } = {}) {\n const params = new URLSearchParams(options.afterId ? { afterId: Id.parse(options.afterId) } : {});\n const page = z.object({ items: z.array(z.unknown()).max(30), nextCursor: Id.nullable() }).strict().parse(\n await this.request(`/${encodeURIComponent(Id.parse(definitionId))}/executions?${params}`, \"GET\", undefined, options.signal));\n const items = await Promise.all(page.items.map(value => verifyModelTasksetRunDetails(value)));\n if (items.some(item => item.summary.teamId !== this.options.teamId\n || ExperimentDefinitionRefSchema.parse(item.manifest.metadata.experimentDefinition).id !== definitionId)\n || new Set(items.map(item => item.summary.id)).size !== items.length)\n throw new Error(\"Experiment execution page has invalid ownership or repeated identities.\");\n return { items, nextCursor: page.nextCursor };\n }\n async execution(id: string, signal?: AbortSignal) {\n return this.executionDetails(await this.request(`/executions/${encodeURIComponent(Id.parse(id))}`, \"GET\", undefined, signal), id);\n }\n async cancel(id: string, signal?: AbortSignal) {\n return this.executionDetails(await this.request(`/executions/${encodeURIComponent(Id.parse(id))}/cancel`, \"POST\", {}, signal), id);\n }\n /** Retry intentionally creates another execution; a transport retry reuses the same operation id. */\n async retry(id: string, operationId: string, signal?: AbortSignal) {\n const result = await this.executionDetails(await this.request(`/executions/${encodeURIComponent(Id.parse(id))}/retry`, \"POST\", { operationId: Id.parse(operationId) }, signal));\n if (result.request.operationId !== operationId) throw new Error(\"Experiment retry operation mismatch.\");\n return result;\n }\n async score(value: ExperimentScoringRequest, signal?: AbortSignal) {\n const request = ExperimentScoringRequestSchema.parse(value);\n const pass = this.pass(await this.request(`/executions/${encodeURIComponent(request.execution.id)}/scoring-passes`, \"POST\", request, signal));\n if (contentHash(pass.request) !== contentHash(request)) throw new Error(\"Scoring admission differs from its submitted inputs.\");\n return pass;\n }\n async scoringPass(id: string, signal?: AbortSignal) {\n return this.pass(await this.request(`/scoring-passes/${encodeURIComponent(Id.parse(id))}`, \"GET\", undefined, signal), id);\n }\n async scoringPasses(executionId: string, options: { afterId?: string; signal?: AbortSignal } = {}) {\n const params = new URLSearchParams(options.afterId ? { afterId: Id.parse(options.afterId) } : {});\n const page = z.object({ items: z.array(z.unknown()).max(30), nextCursor: Id.nullable() }).strict().parse(\n await this.request(`/executions/${encodeURIComponent(Id.parse(executionId))}/scoring-passes?${params}`, \"GET\", undefined, options.signal));\n const items = page.items.map(value => this.pass(value));\n if (items.some(item => item.request.execution.id !== executionId) || new Set(items.map(item => item.id)).size !== items.length)\n throw new Error(\"Scoring pass page differs from its execution ownership.\");\n return { items, nextCursor: page.nextCursor };\n }\n async cancelScoringPass(id: string, signal?: AbortSignal) {\n return this.pass(await this.request(`/scoring-passes/${encodeURIComponent(Id.parse(id))}/cancel`, \"POST\", {}, signal), id);\n }\n async scoringResult(id: string, signal?: AbortSignal) {\n const value = z.object({ executionId: Id, passId: Id, manifest: z.unknown(), result: z.unknown() }).strict().parse(\n await this.request(`/scoring-passes/${encodeURIComponent(Id.parse(id))}/result`, \"GET\", undefined, signal));\n const evidence = verifyExperimentEvidence(value);\n if (value.passId !== id || evidence.manifest.teamId !== this.options.teamId || evidence.manifest.id !== id\n || evidence.manifest.lineage?.execution.id !== value.executionId || evidence.manifest.lineage.scoringPassId !== id)\n throw new Error(\"Scoring result identity mismatch.\");\n return { ...evidence, executionId: value.executionId, passId: id };\n }\n async compare(baselineId: string, candidateId: string, signal?: AbortSignal) {\n const read = (id: string) => id.startsWith(\"score_\") ? this.scoringResult(id, signal) : this.result(id, signal);\n const [baseline, candidate] = await Promise.all([read(baselineId), read(candidateId)]);\n return { baseline, candidate, comparison: compareExperiments(baseline, candidate) };\n }\n private definition(value: unknown, id?: string) {\n const result = verifyExperimentDefinition(value);\n if (result.teamId !== this.options.teamId || id && result.id !== id) throw new Error(\"Experiment identity mismatch.\");\n return result;\n }\n private async executionDetails(value: unknown, id?: string) {\n const details = await verifyModelTasksetRunDetails(value);\n if (details.summary.teamId !== this.options.teamId || id && details.summary.id !== id) throw new Error(\"Experiment execution identity mismatch.\");\n return details;\n }\n private pass(value: unknown, id?: string) {\n const pass = verifyExperimentScoringPass(value);\n if (pass.teamId !== this.options.teamId || id && pass.id !== id) throw new Error(\"Scoring pass identity mismatch.\");\n return pass;\n }\n private async request(path: string, method: string, body?: unknown, signal?: AbortSignal): Promise<unknown> {\n const response = await (this.options.fetch ?? fetch)(`${this.baseUrl}/v1/experiments${path}`, {\n method, signal, redirect: \"error\", headers: { Authorization: `Bearer ${this.options.apiKey}`, \"X-OpenPond-Team-Id\": this.options.teamId, \"Content-Type\": \"application/json\", Accept: \"application/json\" },\n ...(body === undefined ? {} : { body: JSON.stringify(body) }),\n });\n const value = await response.json();\n if (!response.ok) {\n const parsed = z.object({ code: z.string(), message: z.string() }).safeParse(value);\n throw new OpenPondExperimentError(response.status, parsed.success ? parsed.data.code : \"experiment_request_failed\", parsed.success ? parsed.data.message : \"Experiment request failed.\");\n }\n return value;\n }\n}\n\n/** Native Harness assigns receipt IDs when sealing each new execution. Its\n * saved population still pins every task/seed; Model receipts stay exact. */\nfunction savedRequestPopulation(request: z.infer<typeof SaveExperimentSchema>[\"request\"]) {\n return request.policy.kind === \"hosted_harness\" ? {\n ...request, population: request.population.map(({ receiptId: _id, ...member }) => member),\n } : request;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["z", "Id", "z", "value"]
7
+ }
@@ -0,0 +1,158 @@
1
+ import {
2
+ ModelTasksetRunRequestSchema
3
+ } from "./chunk-62LWLACP.js";
4
+ import {
5
+ contentHash
6
+ } from "./chunk-QUOW6URQ.js";
7
+
8
+ // src/experiment-field-mappings.ts
9
+ import { z } from "zod";
10
+ var Segment = z.string().min(1).max(200).refine((value) => !["__proto__", "prototype", "constructor"].includes(value), "Use an ordinary field name.");
11
+ var Path = z.array(Segment).min(1).max(20);
12
+ var Slot = z.enum(["input", "output", "expectedOutput", "evaluatorContext"]);
13
+ var ExperimentFieldMappingSchema = z.object({
14
+ destination: Slot,
15
+ path: Path,
16
+ source: Slot,
17
+ sourcePath: z.array(Segment).max(20)
18
+ }).strict();
19
+ var ExperimentFieldMappingsSchema = z.array(ExperimentFieldMappingSchema).max(100).superRefine((mappings, context) => {
20
+ for (const [index, mapping] of mappings.entries()) {
21
+ if (mappings.slice(0, index).some((previous) => previous.destination === mapping.destination && (prefix(previous.path, mapping.path) || prefix(mapping.path, previous.path))))
22
+ context.addIssue({ code: "custom", path: [index, "path"], message: "Mapped destination paths must not overlap." });
23
+ }
24
+ });
25
+ function mapExperimentGradingFields(fields, raw) {
26
+ const mappings = ExperimentFieldMappingsSchema.parse(raw);
27
+ const mapped = structuredClone(fields);
28
+ for (const mapping of mappings) {
29
+ let value = fields[mapping.source];
30
+ for (const segment of mapping.sourcePath) {
31
+ if (!record(value) || !Object.hasOwn(value, segment)) throw new Error("The configured grader source field is unavailable.");
32
+ value = value[segment];
33
+ }
34
+ if (value === void 0) throw new Error("The configured grader source field is unavailable.");
35
+ let destination = mapped[mapping.destination];
36
+ if (destination === null) mapped[mapping.destination] = destination = {};
37
+ for (const segment of mapping.path.slice(0, -1)) {
38
+ const existing = Object.hasOwn(destination, segment) ? destination[segment] : void 0;
39
+ if (existing !== void 0 && !record(existing)) throw new Error("A grader destination path crosses a scalar field.");
40
+ if (existing === void 0) destination[segment] = {};
41
+ destination = destination[segment];
42
+ }
43
+ destination[mapping.path.at(-1)] = structuredClone(value);
44
+ }
45
+ return mapped;
46
+ }
47
+ function record(value) {
48
+ return value !== null && typeof value === "object" && !Array.isArray(value);
49
+ }
50
+ function prefix(left, right) {
51
+ return left.length <= right.length && left.every((segment, index) => segment === right[index]);
52
+ }
53
+
54
+ // src/experiment-contracts.ts
55
+ import { FeedbackKeySchema } from "@openpond/evals/rewards";
56
+ import { TasksetRunManifestSchema } from "@openpond/evals/metrics";
57
+ import { z as z2 } from "zod";
58
+ var Id = z2.string().trim().min(1).max(200);
59
+ var Hash = z2.string().regex(/^[a-f0-9]{64}$/);
60
+ var ExperimentDefinitionRefSchema = z2.object({
61
+ id: Id,
62
+ revision: z2.number().int().positive(),
63
+ contentHash: Hash
64
+ }).strict();
65
+ var ExperimentGraderPinSchema = z2.object({
66
+ id: Id,
67
+ version: z2.string().min(1).max(200),
68
+ contentHash: Hash,
69
+ feedbackKey: FeedbackKeySchema,
70
+ release: ExperimentDefinitionRefSchema.nullable(),
71
+ mappings: ExperimentFieldMappingsSchema.optional()
72
+ }).strict();
73
+ var ExperimentGraderSelectionSchema = z2.object({ id: Id, version: z2.string().min(1).max(200), contentHash: Hash, mappings: ExperimentFieldMappingsSchema }).strict();
74
+ var SaveExperimentSchema = z2.object({
75
+ operationId: Id,
76
+ id: Id.optional(),
77
+ expectedRevision: z2.number().int().nonnegative(),
78
+ request: ModelTasksetRunRequestSchema,
79
+ maximumCostUsd: z2.number().finite().positive().max(1e4),
80
+ graders: z2.array(ExperimentGraderSelectionSchema).min(1).max(100).optional()
81
+ }).strict().superRefine((value, ctx) => {
82
+ if (!value.request.name) ctx.addIssue({ code: "custom", path: ["request", "name"], message: "Name this Experiment before saving it." });
83
+ if (Boolean(value.id) !== value.expectedRevision > 0) ctx.addIssue({ code: "custom", path: ["expectedRevision"], message: "An update requires its saved definition revision." });
84
+ if (Math.round(value.maximumCostUsd * 1e6) < 1) ctx.addIssue({ code: "custom", path: ["maximumCostUsd"], message: "The budget must be at least $0.000001." });
85
+ if (value.graders && new Set(value.graders.map((grader) => grader.id)).size !== value.graders.length) ctx.addIssue({ code: "custom", path: ["graders"], message: "Select each grader once." });
86
+ });
87
+ var DefinitionContent = z2.object({
88
+ schemaVersion: z2.literal("openpond.experimentDefinition.v1"),
89
+ id: Id,
90
+ teamId: Id,
91
+ revision: z2.number().int().positive(),
92
+ request: ModelTasksetRunRequestSchema,
93
+ maximumCostUsd: z2.number().finite().positive().max(1e4),
94
+ graders: z2.array(ExperimentGraderPinSchema).min(1).max(100),
95
+ createdAt: z2.iso.datetime(),
96
+ updatedAt: z2.iso.datetime()
97
+ }).strict();
98
+ var ExperimentDefinitionSchema = DefinitionContent.extend({ contentHash: Hash });
99
+ var StartExperimentSchema = z2.object({ operationId: Id, definition: ExperimentDefinitionRefSchema }).strict();
100
+ var ExperimentListQuerySchema = z2.object({
101
+ projectId: Id.optional(),
102
+ datasetHash: Hash.optional(),
103
+ search: z2.string().trim().max(200).optional(),
104
+ afterId: Id.optional(),
105
+ limit: z2.number().int().min(1).max(100).default(30)
106
+ }).strict();
107
+ var ExperimentExecutionContextSchema = z2.object({
108
+ definition: ExperimentDefinitionRefSchema,
109
+ maximumCostUsd: z2.number().finite().positive().max(1e4),
110
+ graders: z2.array(ExperimentGraderPinSchema).min(1).max(100)
111
+ }).strict();
112
+ var PrepareHarnessExperimentSchema = z2.object({
113
+ operationId: Id,
114
+ profileRepositoryId: Id,
115
+ definitionId: Id,
116
+ modelId: Id,
117
+ reasoningEffort: z2.enum(["off", "low", "medium", "high", "xhigh", "max"]).optional(),
118
+ maximumCostUsd: z2.number().finite().positive().max(1e4)
119
+ }).strict();
120
+ var PreparedHarnessExperimentSchema = z2.object({
121
+ request: ModelTasksetRunRequestSchema,
122
+ manifest: TasksetRunManifestSchema,
123
+ maximumCostUsd: z2.number().finite().positive().max(1e4),
124
+ graders: z2.array(ExperimentGraderPinSchema).min(1).max(100)
125
+ }).strict();
126
+ function verifyExperimentDefinition(value) {
127
+ const parsed = ExperimentDefinitionSchema.parse(value);
128
+ const { contentHash: actual, ...content } = parsed;
129
+ if (actual !== contentHash(content) || parsed.request.teamId !== parsed.teamId || !parsed.request.name)
130
+ throw new Error("Experiment definition differs from its immutable content.");
131
+ if (new Set(parsed.graders.map((item) => item.feedbackKey)).size !== parsed.graders.length)
132
+ throw new Error("Experiment feedback keys must be distinct.");
133
+ return parsed;
134
+ }
135
+ var experimentDefinitionRef = (value) => ({
136
+ id: value.id,
137
+ revision: value.revision,
138
+ contentHash: value.contentHash
139
+ });
140
+
141
+ export {
142
+ ExperimentFieldMappingSchema,
143
+ ExperimentFieldMappingsSchema,
144
+ mapExperimentGradingFields,
145
+ ExperimentDefinitionRefSchema,
146
+ ExperimentGraderPinSchema,
147
+ ExperimentGraderSelectionSchema,
148
+ SaveExperimentSchema,
149
+ ExperimentDefinitionSchema,
150
+ StartExperimentSchema,
151
+ ExperimentListQuerySchema,
152
+ ExperimentExecutionContextSchema,
153
+ PrepareHarnessExperimentSchema,
154
+ PreparedHarnessExperimentSchema,
155
+ verifyExperimentDefinition,
156
+ experimentDefinitionRef
157
+ };
158
+ //# sourceMappingURL=chunk-SR55WVPK.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/experiment-field-mappings.ts", "../src/experiment-contracts.ts"],
4
+ "sourcesContent": ["import { z } from \"zod\";\n\nconst Segment = z.string().min(1).max(200).refine(value => ![\"__proto__\", \"prototype\", \"constructor\"].includes(value), \"Use an ordinary field name.\");\nconst Path = z.array(Segment).min(1).max(20);\nconst Slot = z.enum([\"input\", \"output\", \"expectedOutput\", \"evaluatorContext\"]);\nexport const ExperimentFieldMappingSchema = z.object({\n destination: Slot, path: Path, source: Slot, sourcePath: z.array(Segment).max(20),\n}).strict();\nexport const ExperimentFieldMappingsSchema = z.array(ExperimentFieldMappingSchema).max(100).superRefine((mappings, context) => {\n for (const [index, mapping] of mappings.entries()) {\n if (mappings.slice(0, index).some(previous => previous.destination === mapping.destination\n && (prefix(previous.path, mapping.path) || prefix(mapping.path, previous.path))))\n context.addIssue({ code: \"custom\", path: [index, \"path\"], message: \"Mapped destination paths must not overlap.\" });\n }\n});\nexport type ExperimentFieldMapping = z.infer<typeof ExperimentFieldMappingSchema>;\nexport type ExperimentGradingFields = { input: Record<string, unknown>; output: Record<string, unknown>; expectedOutput: Record<string, unknown> | null; evaluatorContext: Record<string, unknown> | null };\n\n/** Map only grader evidence. The caller must never use this projection as a policy input. */\nexport function mapExperimentGradingFields(fields: ExperimentGradingFields, raw: readonly ExperimentFieldMapping[]): ExperimentGradingFields {\n const mappings = ExperimentFieldMappingsSchema.parse(raw);\n const mapped = structuredClone(fields);\n for (const mapping of mappings) {\n let value: unknown = fields[mapping.source];\n for (const segment of mapping.sourcePath) {\n if (!record(value) || !Object.hasOwn(value, segment)) throw new Error(\"The configured grader source field is unavailable.\");\n value = value[segment];\n }\n if (value === undefined) throw new Error(\"The configured grader source field is unavailable.\");\n let destination = mapped[mapping.destination];\n if (destination === null) mapped[mapping.destination] = destination = {};\n for (const segment of mapping.path.slice(0, -1)) {\n const existing: unknown = Object.hasOwn(destination, segment) ? destination[segment] : undefined;\n if (existing !== undefined && !record(existing)) throw new Error(\"A grader destination path crosses a scalar field.\");\n if (existing === undefined) destination[segment] = {};\n destination = destination[segment] as Record<string, unknown>;\n }\n destination[mapping.path.at(-1)!] = structuredClone(value);\n }\n return mapped;\n}\nfunction record(value: unknown): value is Record<string, unknown> { return value !== null && typeof value === \"object\" && !Array.isArray(value); }\nfunction prefix(left: string[], right: string[]) { return left.length <= right.length && left.every((segment, index) => segment === right[index]); }\n", "import { contentHash } from \"@openpond/harness\";\nimport { FeedbackKeySchema } from \"@openpond/evals/rewards\";\nimport { ModelTasksetRunRequestSchema } from \"./model-taskset-runs-contracts.js\";\nimport { TasksetRunManifestSchema } from \"@openpond/evals/metrics\";\nimport { z } from \"zod\";\nimport { ExperimentFieldMappingsSchema } from \"./experiment-field-mappings.js\";\n\nconst Id = z.string().trim().min(1).max(200);\nconst Hash = z.string().regex(/^[a-f0-9]{64}$/);\nexport const ExperimentDefinitionRefSchema = z.object({\n id: Id, revision: z.number().int().positive(), contentHash: Hash,\n}).strict();\nexport const ExperimentGraderPinSchema = z.object({\n id: Id, version: z.string().min(1).max(200), contentHash: Hash,\n feedbackKey: FeedbackKeySchema,\n release: ExperimentDefinitionRefSchema.nullable(),\n mappings: ExperimentFieldMappingsSchema.optional(),\n}).strict();\nexport const ExperimentGraderSelectionSchema = z.object({ id: Id, version: z.string().min(1).max(200), contentHash: Hash, mappings: ExperimentFieldMappingsSchema }).strict();\nexport const SaveExperimentSchema = z.object({\n operationId: Id,\n id: Id.optional(), expectedRevision: z.number().int().nonnegative(),\n request: ModelTasksetRunRequestSchema,\n maximumCostUsd: z.number().finite().positive().max(10_000),\n graders: z.array(ExperimentGraderSelectionSchema).min(1).max(100).optional(),\n}).strict().superRefine((value, ctx) => {\n if (!value.request.name) ctx.addIssue({ code: \"custom\", path: [\"request\", \"name\"], message: \"Name this Experiment before saving it.\" });\n if (Boolean(value.id) !== (value.expectedRevision > 0)) ctx.addIssue({ code: \"custom\", path: [\"expectedRevision\"], message: \"An update requires its saved definition revision.\" });\n if (Math.round(value.maximumCostUsd * 1_000_000) < 1) ctx.addIssue({ code: \"custom\", path: [\"maximumCostUsd\"], message: \"The budget must be at least $0.000001.\" });\n if (value.graders && new Set(value.graders.map(grader => grader.id)).size !== value.graders.length) ctx.addIssue({ code: \"custom\", path: [\"graders\"], message: \"Select each grader once.\" });\n});\nconst DefinitionContent = z.object({\n schemaVersion: z.literal(\"openpond.experimentDefinition.v1\"),\n id: Id, teamId: Id, revision: z.number().int().positive(),\n request: ModelTasksetRunRequestSchema,\n maximumCostUsd: z.number().finite().positive().max(10_000),\n graders: z.array(ExperimentGraderPinSchema).min(1).max(100),\n createdAt: z.iso.datetime(), updatedAt: z.iso.datetime(),\n}).strict();\nexport const ExperimentDefinitionSchema = DefinitionContent.extend({ contentHash: Hash });\nexport type ExperimentDefinition = z.infer<typeof ExperimentDefinitionSchema>;\nexport type ExperimentDefinitionRef = z.infer<typeof ExperimentDefinitionRefSchema>;\nexport const StartExperimentSchema = z.object({ operationId: Id, definition: ExperimentDefinitionRefSchema }).strict();\nexport const ExperimentListQuerySchema = z.object({\n projectId: Id.optional(), datasetHash: Hash.optional(), search: z.string().trim().max(200).optional(),\n afterId: Id.optional(), limit: z.number().int().min(1).max(100).default(30),\n}).strict();\nexport const ExperimentExecutionContextSchema = z.object({\n definition: ExperimentDefinitionRefSchema, maximumCostUsd: z.number().finite().positive().max(10_000),\n graders: z.array(ExperimentGraderPinSchema).min(1).max(100),\n}).strict();\nexport type ExperimentExecutionContext = z.infer<typeof ExperimentExecutionContextSchema>;\n\nexport const PrepareHarnessExperimentSchema = z.object({\n operationId: Id, profileRepositoryId: Id, definitionId: Id, modelId: Id,\n reasoningEffort: z.enum([\"off\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"]).optional(),\n maximumCostUsd: z.number().finite().positive().max(10_000),\n}).strict();\nexport const PreparedHarnessExperimentSchema = z.object({\n request: ModelTasksetRunRequestSchema, manifest: TasksetRunManifestSchema,\n maximumCostUsd: z.number().finite().positive().max(10_000),\n graders: z.array(ExperimentGraderPinSchema).min(1).max(100),\n}).strict();\n\nexport function verifyExperimentDefinition(value: unknown): ExperimentDefinition {\n const parsed = ExperimentDefinitionSchema.parse(value);\n const { contentHash: actual, ...content } = parsed;\n if (actual !== contentHash(content) || parsed.request.teamId !== parsed.teamId || !parsed.request.name)\n throw new Error(\"Experiment definition differs from its immutable content.\");\n if (new Set(parsed.graders.map(item => item.feedbackKey)).size !== parsed.graders.length)\n throw new Error(\"Experiment feedback keys must be distinct.\");\n return parsed;\n}\n\nexport const experimentDefinitionRef = (value: ExperimentDefinition): ExperimentDefinitionRef => ({\n id: value.id, revision: value.revision, contentHash: value.contentHash,\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["z", "z"]
7
+ }