openpond-sdk 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/MODEL_STARTERS.md +25 -0
  2. package/TASKSETS.md +8 -0
  3. package/dist/{chunk-ECTMEJ5N.js → chunk-IKTZ2CD4.js} +63 -42
  4. package/dist/chunk-IKTZ2CD4.js.map +7 -0
  5. package/dist/dataset-workspaces.js +4 -0
  6. package/dist/dataset-workspaces.js.map +2 -2
  7. package/dist/model-starter-attempts.js +5 -1
  8. package/dist/model-taskset-runs.js +10 -7
  9. package/dist/model-taskset-runs.js.map +2 -2
  10. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts +4 -0
  11. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts.map +1 -1
  12. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts +3 -0
  13. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts.map +1 -1
  14. package/dist/types/packages/sdk/src/evaluation-project-context.d.ts +19 -0
  15. package/dist/types/packages/sdk/src/evaluation-project-context.d.ts.map +1 -0
  16. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts +127 -12
  17. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts.map +1 -1
  18. package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts +83 -8
  19. package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts.map +1 -1
  20. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +79 -9
  21. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts.map +1 -1
  22. package/dist/types/packages/sdk/src/training-project-client.d.ts +4 -4
  23. package/dist/types/packages/sdk/src/training-project-contracts.d.ts +5 -5
  24. package/package.json +1 -1
  25. package/dist/chunk-ECTMEJ5N.js.map +0 -7
package/MODEL_STARTERS.md CHANGED
@@ -147,3 +147,28 @@ retain a null metric value. The client verifies workspace, manifest,
147
147
  population, grading role, metric references and result hashes on readback.
148
148
  Hosts remain responsible for owner-authenticated evidence and durable
149
149
  dispatch/cancellation; a content hash is not producer authentication.
150
+
151
+ ### Dataset evaluations without a model configuration
152
+
153
+ SDK 0.8 allows an evaluation request to set `modelProjectId: null` and select an
154
+ exact published dataset release directly. The hosted executor still resolves the
155
+ complete package and checks its supported runtime before admitting the run.
156
+ Model-configuration-backed requests continue to require their attached release.
157
+
158
+ `policy.messages` optionally supplies system, user and assistant context before
159
+ each example. Those messages form part of the immutable execution policy hash;
160
+ changing them produces a different evaluation configuration. Dataset reference
161
+ answers are never included in these messages by the host.
162
+
163
+ The optional `project` field contains `{ id, revision, contentHash, targetId }`.
164
+ Its hash identifies the selected Project **content**, and `targetId` may be null
165
+ for an ad hoc evaluation inside that Project. Hosts authorize the Project and
166
+ resolve its retained revision before execution. Request, summary and manifest
167
+ must agree on this provenance. Project attribution is not inferred from shared
168
+ datasets or model configurations.
169
+
170
+ `runs.list({ projectId })` reads that Project's attributed evaluations;
171
+ `runs.list({})` reads authorized workspace history. Existing
172
+ `runs.list({ modelProjectId })` filtering remains available. Callers must handle
173
+ nullable `summary.modelProjectId` for independent evaluations. No trained model
174
+ or serving deployment is created by running an evaluation.
package/TASKSETS.md CHANGED
@@ -304,3 +304,11 @@ Parquet collections through the dataset reader. Search never examines private
304
304
  answers. Draft edits invalidate the index, and a published release remains
305
305
  separate from its draft. No task listing, editing, or labeling operation starts
306
306
  a training job.
307
+
308
+ Independent dataset writes may include `originProjectId` at creation. This is
309
+ immutable creation provenance, not exclusive ownership or a sharing grant. The
310
+ host verifies that the Project belongs to the same workspace and is active.
311
+ Receipts and list entries retain the origin so unpublished drafts remain visible
312
+ in their originating Project. A release can still be used across Projects through
313
+ explicit associations; changing or removing that association does not rewrite
314
+ where the draft was created.
@@ -5,70 +5,89 @@ import {
5
5
  } from "./chunk-TCHAWJMB.js";
6
6
 
7
7
  // src/model-starter-attempts.ts
8
+ import { z as z2 } from "zod";
9
+
10
+ // src/evaluation-project-context.ts
8
11
  import { z } from "zod";
12
+ var EvaluationProjectContextSchema = z.object({
13
+ id: z.string().trim().min(1).max(240),
14
+ revision: z.number().int().positive(),
15
+ contentHash: z.string().regex(/^[a-f0-9]{64}$/),
16
+ targetId: z.string().trim().min(1).max(240).nullable()
17
+ }).strict();
18
+ var EvaluationMessagesSchema = z.array(z.object({
19
+ role: z.enum(["system", "user", "assistant"]),
20
+ content: z.string().max(1e5)
21
+ }).strict()).max(100).superRefine((messages, context) => {
22
+ if (messages.reduce((total, message) => total + message.content.length, 0) > 1e5)
23
+ context.addIssue({ code: "custom", message: "Evaluation prompt exceeds 100,000 characters." });
24
+ });
25
+
26
+ // src/model-starter-attempts.ts
9
27
  import { RewardCompositionSchema } from "@openpond/evals/rewards";
10
28
  import { TaskGradeSchema } from "@openpond/evals/graders";
11
- var IdSchema = z.string().trim().min(1).max(200);
12
- var HashSchema = z.string().regex(/^[a-f0-9]{64}$/);
13
- var ModelStarterAttemptPolicySchema = z.discriminatedUnion("kind", [
14
- z.object({ kind: z.literal("hosted_chat"), modelId: IdSchema, maxOutputTokens: z.number().int().min(1).max(4096).default(1024), temperature: z.number().min(0).max(2).default(0), topP: z.number().gt(0).max(1).default(1) }).strict(),
15
- z.object({ kind: z.literal("fixture"), fixtureId: IdSchema }).strict()
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()
16
34
  ]);
17
- var ModelStarterAttemptRequestSchema = z.object({
18
- schemaVersion: z.literal("openpond.modelStarterAttemptRequest.v1"),
35
+ var ModelStarterAttemptRequestSchema = z2.object({
36
+ schemaVersion: z2.literal("openpond.modelStarterAttemptRequest.v1"),
19
37
  operationId: IdSchema,
20
38
  teamId: IdSchema,
21
- modelProjectId: IdSchema,
39
+ modelProjectId: IdSchema.nullable(),
40
+ project: EvaluationProjectContextSchema.optional(),
22
41
  taskset: ModelProjectVersionedRefSchema,
23
42
  taskId: IdSchema,
24
- environmentSeed: z.number().int().min(0).max(2147483647).default(0),
43
+ environmentSeed: z2.number().int().min(0).max(2147483647).default(0),
25
44
  policy: ModelStarterAttemptPolicySchema
26
45
  }).strict();
27
- var ModelStarterAttemptChoicesQuerySchema = z.object({ modelProjectId: IdSchema, taskset: ModelProjectVersionedRefSchema, afterTaskId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();
28
- var ModelStarterAttemptChoicesSchema = z.object({
29
- modelProjectId: IdSchema,
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({
48
+ modelProjectId: IdSchema.nullable(),
30
49
  taskset: ModelProjectVersionedRefSchema,
31
- available: z.boolean(),
32
- unavailableReason: z.string().max(1e3).nullable(),
33
- models: z.array(z.object({ id: IdSchema, name: z.string().max(500) }).strict()).max(200),
34
- tasks: z.array(z.object({ id: IdSchema, split: z.enum(["train", "validation", "frozen_eval"]), inputPreview: z.string().max(500), fixtures: z.array(z.object({ id: IdSchema, label: z.string().max(200) }).strict()).max(1e3) }).strict()).max(100),
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),
35
54
  nextCursor: IdSchema.nullable()
36
55
  }).strict();
37
- var ModelStarterAttemptSummarySchema = z.object({
38
- schemaVersion: z.literal("openpond.modelStarterAttemptSummary.v1"),
56
+ var ModelStarterAttemptSummarySchema = z2.object({
57
+ schemaVersion: z2.literal("openpond.modelStarterAttemptSummary.v1"),
39
58
  id: IdSchema,
40
- revision: z.number().int().positive(),
59
+ revision: z2.number().int().positive(),
41
60
  request: ModelStarterAttemptRequestSchema,
42
- status: z.enum(["queued", "running", "cancelling", "completed", "failed", "cancelled"]),
43
- policySnapshot: z.object({ modelId: IdSchema, provider: IdSchema, upstreamModelId: z.string().min(1).max(500), configurationHash: HashSchema }).strict().nullable(),
44
- createdAt: z.iso.datetime(),
45
- startedAt: z.iso.datetime().nullable(),
46
- completedAt: z.iso.datetime().nullable(),
47
- cleanupComplete: z.boolean(),
48
- resultAvailable: z.boolean(),
49
- score: z.number().min(0).max(1).nullable(),
50
- gradingStatus: z.enum(["not_started", "scored", "unscorable", "not_configured"]).default("not_started"),
51
- passed: z.boolean().nullable(),
52
- outputPreview: z.string().max(500).nullable(),
53
- error: z.object({ code: IdSchema, message: z.string().max(2e3) }).strict().nullable()
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()
54
73
  }).strict().superRefine((value, context) => {
55
74
  if (value.request.policy.kind === "fixture" !== (value.policySnapshot === null)) context.addIssue({ code: "custom", path: ["policySnapshot"], message: "Fixture execution must not claim a model identity." });
56
75
  if (value.status === "completed" && (!value.cleanupComplete || !value.resultAvailable || !value.completedAt)) context.addIssue({ code: "custom", message: "Completed attempts require retained results and confirmed cleanup." });
57
76
  });
58
- var ModelStarterAttemptListQuerySchema = z.object({ modelProjectId: IdSchema, afterId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();
59
- var ModelStarterAttemptPageSchema = z.object({ items: z.array(ModelStarterAttemptSummarySchema).max(100), nextCursor: IdSchema.nullable() }).strict();
60
- var ModelStarterAttemptResultSchema = z.object({
61
- schemaVersion: z.literal("openpond.modelStarterAttemptResult.v1"),
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"),
62
81
  attempt: ModelStarterAttemptSummarySchema,
63
- output: z.string().max(1048576).nullable(),
82
+ output: z2.string().max(1048576).nullable(),
64
83
  // Only model-facing messages, never the private environment snapshot.
65
- messages: z.array(z.record(z.string(), z.unknown())).max(4002),
84
+ messages: z2.array(z2.record(z2.string(), z2.unknown())).max(4002),
66
85
  composition: RewardCompositionSchema.nullable(),
67
86
  // Ordinary Tasksets have no Reward binding. Absence preserves the hash of
68
87
  // already retained v1 results; new producers explicitly return null or a grade.
69
88
  grade: TaskGradeSchema.nullable().optional(),
70
- environment: z.object({ status: z.enum(["completed", "budget_exhausted", "cancelled", "timed_out", "policy_failure", "environment_failure"]), collected: z.boolean(), definition: ModelProjectVersionedRefSchema, initialStateHash: HashSchema.nullable(), finalStateHash: HashSchema.nullable(), attemptHash: HashSchema }).strict(),
71
- providerRequestIds: z.array(IdSchema).max(1001),
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),
72
91
  contentHash: HashSchema
73
92
  }).strict().superRefine((value, context) => {
74
93
  if (!value.grade) return;
@@ -104,7 +123,7 @@ var OpenPondModelStarterAttemptsClient = class {
104
123
  }
105
124
  async choices(value, options = {}) {
106
125
  const query = ModelStarterAttemptChoicesQuerySchema.parse(value);
107
- const params = new URLSearchParams({ modelProjectId: query.modelProjectId, tasksetId: query.taskset.id, revision: String(query.taskset.revision), contentHash: query.taskset.contentHash, limit: String(query.limit) });
126
+ 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) });
108
127
  if (query.afterTaskId) params.set("afterTaskId", query.afterTaskId);
109
128
  const result = ModelStarterAttemptChoicesSchema.parse(await this.#request(`/choices?${params}`, "GET", void 0, options.signal));
110
129
  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.");
@@ -155,7 +174,7 @@ var OpenPondModelStarterAttemptsClient = class {
155
174
  }
156
175
  const value = JSON.parse(text);
157
176
  if (!response.ok) {
158
- const error = z.object({ code: IdSchema, message: z.string().max(2e3) }).safeParse(value);
177
+ const error = z2.object({ code: IdSchema, message: z2.string().max(2e3) }).safeParse(value);
159
178
  throw new OpenPondModelStarterAttemptError(response.status, error.success ? error.data.code : "attempt_request_failed", error.success ? error.data.message : "Attempt request failed.");
160
179
  }
161
180
  return value;
@@ -163,6 +182,8 @@ var OpenPondModelStarterAttemptsClient = class {
163
182
  };
164
183
 
165
184
  export {
185
+ EvaluationProjectContextSchema,
186
+ EvaluationMessagesSchema,
166
187
  ModelStarterAttemptPolicySchema,
167
188
  ModelStarterAttemptRequestSchema,
168
189
  ModelStarterAttemptChoicesQuerySchema,
@@ -174,4 +195,4 @@ export {
174
195
  OpenPondModelStarterAttemptError,
175
196
  OpenPondModelStarterAttemptsClient
176
197
  };
177
- //# sourceMappingURL=chunk-ECTMEJ5N.js.map
198
+ //# sourceMappingURL=chunk-IKTZ2CD4.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/model-starter-attempts.ts", "../src/evaluation-project-context.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 { 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 environment: z.object({ status: z.enum([\"completed\", \"budget_exhausted\", \"cancelled\", \"timed_out\", \"policy_failure\", \"environment_failure\"]), collected: z.boolean(), definition: ModelProjectVersionedRefSchema, initialStateHash: HashSchema.nullable(), finalStateHash: HashSchema.nullable(), attemptHash: HashSchema }).strict(),\n providerRequestIds: z.array(IdSchema).max(1_001),\n contentHash: HashSchema,\n}).strict().superRefine((value, context) => {\n if (!value.grade) return;\n if (value.composition) context.addIssue({ code: \"custom\", path: [\"grade\"], message: \"An ordinary grade cannot also claim a Reward composition.\" });\n if (![\"completed\", \"failed\"].includes(value.attempt.status) || !value.attempt.resultAvailable || value.attempt.score !== value.grade.score || value.attempt.gradingStatus !== value.grade.gradingStatus || value.attempt.passed !== (value.grade.score === null ? null : value.grade.passed)) context.addIssue({ code: \"custom\", path: [\"grade\"], message: \"Ordinary grade differs from its terminal attempt summary.\" });\n});\nexport type ModelStarterAttemptResult = z.infer<typeof ModelStarterAttemptResultSchema>;\n\nexport class OpenPondModelStarterAttemptError extends Error {\n constructor(readonly status: number, readonly code: string, message: string) { super(message); this.name = \"OpenPondModelStarterAttemptError\"; }\n}\n\nexport class OpenPondModelStarterAttemptsClient {\n readonly #options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof globalThis.fetch };\n constructor(options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof globalThis.fetch }) {\n const url = new URL(options.baseUrl);\n if (!options.apiKey.trim() || !options.teamId.trim() || ![\"https:\", \"http:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error(\"Starter attempts require an HTTP(S) endpoint and workspace credentials.\");\n this.#options = { ...options, baseUrl: url.toString().replace(/\\/+$/, \"\") };\n }\n async create(value: z.input<typeof ModelStarterAttemptRequestSchema>, options: { signal?: AbortSignal } = {}) {\n const request = ModelStarterAttemptRequestSchema.parse(value);\n if (request.teamId !== this.#options.teamId) throw new Error(\"Attempt belongs to another workspace.\");\n const result = this.#summary(await this.#request(\"\", \"POST\", request, options.signal));\n if (canonicalJson(result.request) !== canonicalJson(request)) throw new OpenPondModelStarterAttemptError(502, \"attempt_request_mismatch\", \"Attempt receipt differs from the submitted request.\");\n return result;\n }\n async get(id: string, options: { signal?: AbortSignal } = {}) { return this.#summary(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}`, \"GET\", undefined, options.signal), id); }\n async choices(value: z.input<typeof ModelStarterAttemptChoicesQuerySchema>, options: { signal?: AbortSignal } = {}) {\n const query = ModelStarterAttemptChoicesQuerySchema.parse(value);\n const params = new URLSearchParams({ ...(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"],
5
+ "mappings": ";;;;;;;AAAA,SAAS,KAAAA,UAAS;;;ACAlB,SAAS,SAAS;AAIX,IAAM,iCAAiC,EAAE,OAAO;AAAA,EACrD,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACpC,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACpC,aAAa,EAAE,OAAO,EAAE,MAAM,gBAAgB;AAAA,EAC9C,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AACvD,CAAC,EAAE,OAAO;AAGH,IAAM,2BAA2B,EAAE,MAAM,EAAE,OAAO;AAAA,EACvD,MAAM,EAAE,KAAK,CAAC,UAAU,QAAQ,WAAW,CAAC;AAAA,EAC5C,SAAS,EAAE,OAAO,EAAE,IAAI,GAAO;AACjC,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,GAAG,EAAE,YAAY,CAAC,UAAU,YAAY;AACvD,MAAI,SAAS,OAAO,CAAC,OAAO,YAAY,QAAQ,QAAQ,QAAQ,QAAQ,CAAC,IAAI;AAC3E,YAAQ,SAAS,EAAE,MAAM,UAAU,SAAS,gDAAgD,CAAC;AACjG,CAAC;;;ADfD,SAAS,+BAA+B;AACxC,SAAS,uBAAuB;AAIhC,IAAM,WAAWC,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AACjD,IAAM,aAAaA,GAAE,OAAO,EAAE,MAAM,gBAAgB;AAC7C,IAAM,kCAAkCA,GAAE,mBAAmB,QAAQ;AAAA,EAC1EA,GAAE,OAAO,EAAE,MAAMA,GAAE,QAAQ,aAAa,GAAG,SAAS,UAAU,UAAU,yBAAyB,SAAS,GAAG,iBAAiBA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,IAAK,EAAE,QAAQ,IAAK,GAAG,aAAaA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,GAAG,MAAMA,GAAE,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO;AAAA,EACtRA,GAAE,OAAO,EAAE,MAAMA,GAAE,QAAQ,SAAS,GAAG,WAAW,SAAS,CAAC,EAAE,OAAO;AACvE,CAAC;AAGM,IAAM,mCAAmCA,GAAE,OAAO;AAAA,EACvD,eAAeA,GAAE,QAAQ,wCAAwC;AAAA,EACjE,aAAa;AAAA,EAAU,QAAQ;AAAA,EAAU,gBAAgB,SAAS,SAAS;AAAA,EAC3E,SAAS,+BAA+B,SAAS;AAAA,EACjD,SAAS;AAAA,EAAgC,QAAQ;AAAA,EACjD,iBAAiBA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,UAAa,EAAE,QAAQ,CAAC;AAAA,EACrE,QAAQ;AACV,CAAC,EAAE,OAAO;AAEH,IAAM,wCAAwCA,GAAE,OAAO,EAAE,gBAAgB,SAAS,SAAS,GAAG,SAAS,gCAAgC,aAAa,SAAS,SAAS,GAAG,OAAOA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO;AACvO,IAAM,mCAAmCA,GAAE,OAAO;AAAA,EACvD,gBAAgB,SAAS,SAAS;AAAA,EAAG,SAAS;AAAA,EAAgC,WAAWA,GAAE,QAAQ;AAAA,EAAG,mBAAmBA,GAAE,OAAO,EAAE,IAAI,GAAK,EAAE,SAAS;AAAA,EACxJ,QAAQA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,UAAU,MAAMA,GAAE,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,GAAG;AAAA,EACvF,OAAOA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,UAAU,OAAOA,GAAE,KAAK,CAAC,SAAS,cAAc,aAAa,CAAC,GAAG,cAAcA,GAAE,OAAO,EAAE,IAAI,GAAG,GAAG,UAAUA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,UAAU,OAAOA,GAAE,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,GAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,GAAG;AAAA,EACpP,YAAY,SAAS,SAAS;AAChC,CAAC,EAAE,OAAO;AACH,IAAM,mCAAmCA,GAAE,OAAO;AAAA,EACvD,eAAeA,GAAE,QAAQ,wCAAwC;AAAA,EACjE,IAAI;AAAA,EAAU,UAAUA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAAG,SAAS;AAAA,EAC9D,QAAQA,GAAE,KAAK,CAAC,UAAU,WAAW,cAAc,aAAa,UAAU,WAAW,CAAC;AAAA,EACtF,gBAAgBA,GAAE,OAAO,EAAE,SAAS,UAAU,UAAU,UAAU,iBAAiBA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,GAAG,mBAAmB,WAAW,CAAC,EAAE,OAAO,EAAE,SAAS;AAAA,EAClK,WAAWA,GAAE,IAAI,SAAS;AAAA,EAAG,WAAWA,GAAE,IAAI,SAAS,EAAE,SAAS;AAAA,EAAG,aAAaA,GAAE,IAAI,SAAS,EAAE,SAAS;AAAA,EAC5G,iBAAiBA,GAAE,QAAQ;AAAA,EAAG,iBAAiBA,GAAE,QAAQ;AAAA,EAAG,OAAOA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACrG,eAAeA,GAAE,KAAK,CAAC,eAAe,UAAU,cAAc,gBAAgB,CAAC,EAAE,QAAQ,aAAa;AAAA,EACtG,QAAQA,GAAE,QAAQ,EAAE,SAAS;AAAA,EAAG,eAAeA,GAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAC5E,OAAOA,GAAE,OAAO,EAAE,MAAM,UAAU,SAASA,GAAE,OAAO,EAAE,IAAI,GAAK,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS;AACxF,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,YAAY;AAC1C,MAAK,MAAM,QAAQ,OAAO,SAAS,eAAgB,MAAM,mBAAmB,MAAO,SAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,gBAAgB,GAAG,SAAS,qDAAqD,CAAC;AAC/M,MAAI,MAAM,WAAW,gBAAgB,CAAC,MAAM,mBAAmB,CAAC,MAAM,mBAAmB,CAAC,MAAM,aAAc,SAAQ,SAAS,EAAE,MAAM,UAAU,SAAS,qEAAqE,CAAC;AAClO,CAAC;AAEM,IAAM,qCAAqCA,GAAE,OAAO,EAAE,gBAAgB,UAAU,SAAS,SAAS,SAAS,GAAG,OAAOA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO;AAC5K,IAAM,gCAAgCA,GAAE,OAAO,EAAE,OAAOA,GAAE,MAAM,gCAAgC,EAAE,IAAI,GAAG,GAAG,YAAY,SAAS,SAAS,EAAE,CAAC,EAAE,OAAO;AACtJ,IAAM,kCAAkCA,GAAE,OAAO;AAAA,EACtD,eAAeA,GAAE,QAAQ,uCAAuC;AAAA,EAChE,SAAS;AAAA,EACT,QAAQA,GAAE,OAAO,EAAE,IAAI,OAAS,EAAE,SAAS;AAAA;AAAA,EAE3C,UAAUA,GAAE,MAAMA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,IAAK;AAAA,EAC9D,aAAa,wBAAwB,SAAS;AAAA;AAAA;AAAA,EAG9C,OAAO,gBAAgB,SAAS,EAAE,SAAS;AAAA,EAC3C,aAAaA,GAAE,OAAO,EAAE,QAAQA,GAAE,KAAK,CAAC,aAAa,oBAAoB,aAAa,aAAa,kBAAkB,qBAAqB,CAAC,GAAG,WAAWA,GAAE,QAAQ,GAAG,YAAY,gCAAgC,kBAAkB,WAAW,SAAS,GAAG,gBAAgB,WAAW,SAAS,GAAG,aAAa,WAAW,CAAC,EAAE,OAAO;AAAA,EACpU,oBAAoBA,GAAE,MAAM,QAAQ,EAAE,IAAI,IAAK;AAAA,EAC/C,aAAa;AACf,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,YAAY;AAC1C,MAAI,CAAC,MAAM,MAAO;AAClB,MAAI,MAAM,YAAa,SAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,OAAO,GAAG,SAAS,4DAA4D,CAAC;AACjJ,MAAI,CAAC,CAAC,aAAa,QAAQ,EAAE,SAAS,MAAM,QAAQ,MAAM,KAAK,CAAC,MAAM,QAAQ,mBAAmB,MAAM,QAAQ,UAAU,MAAM,MAAM,SAAS,MAAM,QAAQ,kBAAkB,MAAM,MAAM,iBAAiB,MAAM,QAAQ,YAAY,MAAM,MAAM,UAAU,OAAO,OAAO,MAAM,MAAM,QAAS,SAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,OAAO,GAAG,SAAS,4DAA4D,CAAC;AAC1Z,CAAC;AAGM,IAAM,mCAAN,cAA+C,MAAM;AAAA,EAC1D,YAAqB,QAAyB,MAAc,SAAiB;AAAE,UAAM,OAAO;AAAvE;AAAyB;AAAiD,SAAK,OAAO;AAAA,EAAoC;AAAA,EAA1H;AAAA,EAAyB;AAChD;AAEO,IAAM,qCAAN,MAAyC;AAAA,EACrC;AAAA,EACT,YAAY,SAA+F;AACzG,UAAM,MAAM,IAAI,IAAI,QAAQ,OAAO;AACnC,QAAI,CAAC,QAAQ,OAAO,KAAK,KAAK,CAAC,QAAQ,OAAO,KAAK,KAAK,CAAC,CAAC,UAAU,OAAO,EAAE,SAAS,IAAI,QAAQ,KAAK,IAAI,YAAY,IAAI,YAAY,IAAI,UAAU,IAAI,KAAM,OAAM,IAAI,MAAM,yEAAyE;AACxP,SAAK,WAAW,EAAE,GAAG,SAAS,SAAS,IAAI,SAAS,EAAE,QAAQ,QAAQ,EAAE,EAAE;AAAA,EAC5E;AAAA,EACA,MAAM,OAAO,OAAyD,UAAoC,CAAC,GAAG;AAC5G,UAAM,UAAU,iCAAiC,MAAM,KAAK;AAC5D,QAAI,QAAQ,WAAW,KAAK,SAAS,OAAQ,OAAM,IAAI,MAAM,uCAAuC;AACpG,UAAM,SAAS,KAAK,SAAS,MAAM,KAAK,SAAS,IAAI,QAAQ,SAAS,QAAQ,MAAM,CAAC;AACrF,QAAI,cAAc,OAAO,OAAO,MAAM,cAAc,OAAO,EAAG,OAAM,IAAI,iCAAiC,KAAK,4BAA4B,qDAAqD;AAC/L,WAAO;AAAA,EACT;AAAA,EACA,MAAM,IAAI,IAAY,UAAoC,CAAC,GAAG;AAAE,WAAO,KAAK,SAAS,MAAM,KAAK,SAAS,IAAI,mBAAmB,SAAS,MAAM,EAAE,CAAC,CAAC,IAAI,OAAO,QAAW,QAAQ,MAAM,GAAG,EAAE;AAAA,EAAG;AAAA,EAC/L,MAAM,QAAQ,OAA8D,UAAoC,CAAC,GAAG;AAClH,UAAM,QAAQ,sCAAsC,MAAM,KAAK;AAC/D,UAAM,SAAS,IAAI,gBAAgB,EAAE,GAAI,MAAM,iBAAiB,EAAE,gBAAgB,MAAM,eAAe,IAAI,CAAC,GAAI,WAAW,MAAM,QAAQ,IAAI,UAAU,OAAO,MAAM,QAAQ,QAAQ,GAAG,aAAa,MAAM,QAAQ,aAAa,OAAO,OAAO,MAAM,KAAK,EAAE,CAAC;AAC3P,QAAI,MAAM,YAAa,QAAO,IAAI,eAAe,MAAM,WAAW;AAClE,UAAM,SAAS,iCAAiC,MAAM,MAAM,KAAK,SAAS,YAAY,MAAM,IAAI,OAAO,QAAW,QAAQ,MAAM,CAAC;AACjI,QAAI,OAAO,mBAAmB,MAAM,kBAAkB,cAAc,OAAO,OAAO,MAAM,cAAc,MAAM,OAAO,KAAK,OAAO,MAAM,SAAS,MAAM,SAAS,IAAI,IAAI,OAAO,MAAM,IAAI,UAAQ,KAAK,EAAE,CAAC,EAAE,SAAS,OAAO,MAAM,OAAQ,OAAM,IAAI,iCAAiC,KAAK,4BAA4B,4DAA4D;AAC9W,WAAO;AAAA,EACT;AAAA,EACA,MAAM,OAAO,IAAY,UAAoC,CAAC,GAAG;AAAE,WAAO,KAAK,SAAS,MAAM,KAAK,SAAS,IAAI,mBAAmB,SAAS,MAAM,EAAE,CAAC,CAAC,WAAW,QAAQ,QAAW,QAAQ,MAAM,GAAG,EAAE;AAAA,EAAG;AAAA,EAC1M,MAAM,OAAO,IAAY,UAAoC,CAAC,GAAG;AAC/D,UAAM,QAAQ,gCAAgC,MAAM,MAAM,KAAK,SAAS,IAAI,mBAAmB,SAAS,MAAM,EAAE,CAAC,CAAC,WAAW,OAAO,QAAW,QAAQ,MAAM,CAAC;AAC9J,SAAK,SAAS,MAAM,SAAS,EAAE;AAC/B,UAAM,EAAE,aAAa,GAAG,QAAQ,IAAI;AACpC,QAAI,CAAC,MAAM,QAAQ,mBAAmB,MAAM,gBAAgB,OAAO,MAAM,YAAa,OAAM,IAAI,iCAAiC,KAAK,4BAA4B,kCAAkC;AACpM,WAAO;AAAA,EACT;AAAA,EACA,MAAM,KAAK,OAA2D,UAAoC,CAAC,GAAG;AAC5G,UAAM,QAAQ,mCAAmC,MAAM,KAAK;AAC5D,UAAM,SAAS,IAAI,gBAAgB,EAAE,gBAAgB,MAAM,gBAAgB,OAAO,OAAO,MAAM,KAAK,EAAE,CAAC;AACvG,QAAI,MAAM,QAAS,QAAO,IAAI,WAAW,MAAM,OAAO;AACtD,UAAM,OAAO,8BAA8B,MAAM,MAAM,KAAK,SAAS,IAAI,MAAM,IAAI,OAAO,QAAW,QAAQ,MAAM,CAAC;AACpH,QAAI,KAAK,MAAM,SAAS,MAAM,SAAS,IAAI,IAAI,KAAK,MAAM,IAAI,UAAQ,KAAK,EAAE,CAAC,EAAE,SAAS,KAAK,MAAM,UAAU,KAAK,MAAM,KAAK,UAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,mBAAmB,MAAM,cAAc,EAAG,OAAM,IAAI,iCAAiC,KAAK,yBAAyB,+CAA+C;AACpU,WAAO;AAAA,EACT;AAAA,EACA,SAAS,OAAgB,IAAyC;AAChE,UAAM,SAAS,iCAAiC,MAAM,KAAK;AAC3D,QAAI,OAAO,QAAQ,WAAW,KAAK,SAAS,UAAW,MAAM,OAAO,OAAO,GAAK,OAAM,IAAI,iCAAiC,KAAK,6BAA6B,2DAA2D;AACxN,WAAO;AAAA,EACT;AAAA,EACA,MAAM,SAAS,MAAc,QAAgB,MAAe,QAAwC;AAClG,UAAM,WAAW,OAAO,KAAK,SAAS,SAAS,WAAW,OAAO,GAAG,KAAK,SAAS,OAAO,6BAA6B,IAAI,IAAI,EAAE,QAAQ,SAAS,EAAE,eAAe,UAAU,KAAK,SAAS,MAAM,IAAI,sBAAsB,KAAK,SAAS,QAAQ,gBAAgB,oBAAoB,QAAQ,mBAAmB,GAAG,GAAI,SAAS,SAAY,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,IAAI,EAAE,GAAI,QAAQ,UAAU,QAAQ,CAAC;AAC5Y,UAAM,SAAS,SAAS,MAAM,UAAU;AACxC,QAAI,CAAC,OAAQ,OAAM,IAAI,iCAAiC,SAAS,QAAQ,0BAA0B,6BAA6B;AAChI,QAAI,QAAQ;AAAG,QAAI,OAAO;AAAI,UAAM,UAAU,IAAI,YAAY;AAC9D,QAAI;AACF,aAAO,MAAM;AACX,cAAM,QAAQ,MAAM,OAAO,KAAK;AAAG,YAAI,MAAM,KAAM;AACnD,iBAAS,MAAM,MAAM;AACrB,YAAI,QAAQ,SAAY,OAAM,IAAI,iCAAiC,KAAK,8BAA8B,2CAA2C;AACjJ,gBAAQ,QAAQ,OAAO,MAAM,OAAO,EAAE,QAAQ,KAAK,CAAC;AAAA,MACtD;AACA,cAAQ,QAAQ,OAAO;AAAA,IACzB,UAAE;AAAU,YAAM,OAAO,OAAO;AAAG,aAAO,YAAY;AAAA,IAAG;AACzD,UAAM,QAAiB,KAAK,MAAM,IAAI;AACtC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQA,GAAE,OAAO,EAAE,MAAM,UAAU,SAASA,GAAE,OAAO,EAAE,IAAI,GAAK,EAAE,CAAC,EAAE,UAAU,KAAK;AAC1F,YAAM,IAAI,iCAAiC,SAAS,QAAQ,MAAM,UAAU,MAAM,KAAK,OAAO,0BAA0B,MAAM,UAAU,MAAM,KAAK,UAAU,yBAAyB;AAAA,IACxL;AACA,WAAO;AAAA,EACT;AACF;",
6
+ "names": ["z", "z"]
7
+ }
@@ -25,6 +25,7 @@ var Hash = z.string().regex(/^[a-f0-9]{64}$/);
25
25
  var DatasetWorkspaceWriteSchema = z.object({
26
26
  operationId: Id,
27
27
  expectedRevision: z.number().int().nonnegative(),
28
+ originProjectId: Id.optional(),
28
29
  workspace: TasksetDraftWorkspaceSchema
29
30
  }).strict().superRefine((value, ctx) => {
30
31
  if (value.workspace.draft.modelScope !== null) ctx.addIssue({ code: "custom", message: "Independent datasets cannot carry Model-owned draft preparation." });
@@ -35,6 +36,7 @@ var DatasetWorkspaceReceiptSchema = z.object({
35
36
  teamId: Id,
36
37
  datasetId: Id,
37
38
  revision: z.number().int().positive(),
39
+ originProjectId: Id.optional(),
38
40
  workspace: TasksetDraftWorkspaceSchema,
39
41
  publication: z.object({ tasksetId: Id, release: TasksetCatalogReleaseRefSchema, packageHash: Hash }).strict().nullable()
40
42
  }).strict().superRefine((value, ctx) => {
@@ -44,6 +46,7 @@ var DatasetWorkspacePublishSchema = z.object({ operationId: Id, expectedRevision
44
46
  var DatasetWorkspaceListSchema = z.object({ teamId: Id, datasets: z.array(z.object({
45
47
  id: Id,
46
48
  revision: z.number().int().positive(),
49
+ originProjectId: Id.optional(),
47
50
  name: z.string(),
48
51
  status: z.enum(["draft", "published"]),
49
52
  publication: DatasetWorkspaceReceiptSchema.shape.publication,
@@ -74,6 +77,7 @@ var OpenPondDatasetWorkspaceClient = class {
74
77
  const workspace = validateTasksetDraftWorkspace(request.workspace);
75
78
  if (workspace.draft.profileId !== this.options.teamId || workspace.draft.revision !== request.expectedRevision + 1) throw new Error("Dataset write scope or revision mismatch.");
76
79
  const result = this.readback(await this.request(`/${encodeURIComponent(workspace.draft.id)}`, "PUT", request, signal), workspace.draft.id);
80
+ if (request.originProjectId && result.originProjectId !== request.originProjectId) throw new Error("Dataset origin Project mismatch.");
77
81
  if (result.workspace.contentHash !== workspace.contentHash) throw new Error("Dataset write receipt differs from the saved bytes.");
78
82
  return result;
79
83
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/dataset-workspace-contracts.ts", "../src/dataset-workspace-client.ts"],
4
- "sourcesContent": ["import { z } from \"zod\";\nimport { TasksetDraftWorkspaceSchema } from \"./taskset-draft-workspace.js\";\nimport { TasksetCatalogReleaseRefSchema } from \"./taskset-catalog.js\";\nexport { compileTasksetDraftWorkspace } from \"./taskset-draft-package-compiler.js\";\n\nconst Id = z.string().trim().min(1).max(240);\nconst Hash = z.string().regex(/^[a-f0-9]{64}$/);\nexport const DatasetWorkspaceWriteSchema = z.object({\n operationId: Id, expectedRevision: z.number().int().nonnegative(), workspace: TasksetDraftWorkspaceSchema,\n}).strict().superRefine((value, ctx) => {\n if (value.workspace.draft.modelScope !== null) ctx.addIssue({ code: \"custom\", message: \"Independent datasets cannot carry Model-owned draft preparation.\" });\n if (value.workspace.draft.status !== \"draft\") ctx.addIssue({ code: \"custom\", message: \"Only draft workspaces can be saved.\" });\n});\nexport const DatasetWorkspaceReceiptSchema = z.object({\n schemaVersion: z.literal(\"openpond.datasetWorkspaceReceipt.v1\"), teamId: Id, datasetId: Id,\n revision: z.number().int().positive(), workspace: TasksetDraftWorkspaceSchema,\n publication: z.object({ tasksetId: Id, release: TasksetCatalogReleaseRefSchema, packageHash: Hash }).strict().nullable(),\n}).strict().superRefine((value, ctx) => {\n if (value.workspace.draft.id !== value.datasetId || value.workspace.draft.profileId !== value.teamId || value.workspace.draft.revision !== value.revision || value.workspace.draft.modelScope !== null) ctx.addIssue({ code: \"custom\", message: \"Dataset workspace scope/revision mismatch.\" });\n});\nexport const DatasetWorkspacePublishSchema = z.object({ operationId: Id, expectedRevision: z.number().int().positive(), workspaceHash: Hash, packageHash: Hash }).strict();\nexport type DatasetWorkspaceReceipt = z.infer<typeof DatasetWorkspaceReceiptSchema>;\n\nexport const DatasetWorkspaceListSchema = z.object({ teamId: Id, datasets: z.array(z.object({\n id: Id, revision: z.number().int().positive(), name: z.string(), status: z.enum([\"draft\", \"published\"]),\n publication: DatasetWorkspaceReceiptSchema.shape.publication, updatedAt: z.string().datetime(),\n}).strict()).max(100), nextCursor: Id.nullable() }).strict();\nexport const DatasetWorkspaceValidationSchema = z.object({ teamId: Id, datasetId: Id, revision: z.number().int().positive(), workspaceHash: Hash, packageHash: Hash, release: TasksetCatalogReleaseRefSchema }).strict();\n", "import { DatasetWorkspaceListSchema, DatasetWorkspacePublishSchema, DatasetWorkspaceReceiptSchema, DatasetWorkspaceValidationSchema, DatasetWorkspaceWriteSchema } from \"./dataset-workspace-contracts.js\";\nimport { validateTasksetDraftWorkspace } from \"./taskset-draft-workspace.js\";\nimport type { z } from \"zod\";\n\n/** Hosted independent authoring. Writes use explicit revision/operation identity;\n * callers retain the operation ID when retrying an uncertain response. */\nexport class OpenPondDatasetWorkspaceClient {\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()) throw new Error(\"A clean API origin and workspace credentials are required.\");\n this.baseUrl = url.toString().replace(/\\/+$/, \"\");\n }\n async list(options: { cursor?: string; signal?: AbortSignal } = {}) {\n const result = DatasetWorkspaceListSchema.parse(await this.request(`?${new URLSearchParams(options.cursor ? { cursor: options.cursor } : {})}`, \"GET\", undefined, options.signal));\n if (result.teamId !== this.options.teamId) throw new Error(\"Dataset list workspace mismatch.\");\n return result;\n }\n async get(id: string, signal?: AbortSignal) { return this.readback(await this.request(`/${encodeURIComponent(id)}`, \"GET\", undefined, signal), id); }\n async save(input: z.input<typeof DatasetWorkspaceWriteSchema>, signal?: AbortSignal) {\n const request = DatasetWorkspaceWriteSchema.parse(input);\n const workspace = validateTasksetDraftWorkspace(request.workspace);\n if (workspace.draft.profileId !== this.options.teamId || workspace.draft.revision !== request.expectedRevision + 1) throw new Error(\"Dataset write scope or revision mismatch.\");\n const result = this.readback(await this.request(`/${encodeURIComponent(workspace.draft.id)}`, \"PUT\", request, signal), workspace.draft.id);\n if (result.workspace.contentHash !== workspace.contentHash) throw new Error(\"Dataset write receipt differs from the saved bytes.\");\n return result;\n }\n async validate(id: string, expectedRevision: number, signal?: AbortSignal) {\n const result = DatasetWorkspaceValidationSchema.parse(await this.request(`/${encodeURIComponent(id)}/validate`, \"POST\", { expectedRevision }, signal));\n if (result.teamId !== this.options.teamId || result.datasetId !== id || result.revision !== expectedRevision) throw new Error(\"Dataset validation receipt mismatch.\");\n return result;\n }\n async publish(id: string, input: z.input<typeof DatasetWorkspacePublishSchema>, signal?: AbortSignal) {\n const request = DatasetWorkspacePublishSchema.parse(input);\n const result = this.readback(await this.request(`/${encodeURIComponent(id)}/publish`, \"POST\", request, signal), id);\n if (result.revision !== request.expectedRevision + 1 || result.workspace.draft.status !== \"published\" || result.publication?.packageHash !== request.packageHash) throw new Error(\"Dataset publication receipt mismatch.\");\n return result;\n }\n private readback(value: unknown, id: string) {\n const result = DatasetWorkspaceReceiptSchema.parse(value);\n validateTasksetDraftWorkspace(result.workspace);\n if (result.datasetId !== id || result.teamId !== this.options.teamId) throw new Error(\"Dataset identity mismatch.\");\n return result;\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/dataset-workspaces${path}`, {\n method, signal, redirect: \"error\", headers: { Authorization: `Bearer ${this.options.apiKey}`, \"X-OpenPond-Team-Id\": this.options.teamId, \"Content-Type\": \"application/json\" },\n ...(body === undefined ? {} : { body: JSON.stringify(body) }),\n });\n if (!response.ok) throw new Error(`Dataset request failed (${response.status}).`);\n return response.json();\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { z } from \"zod\";\nimport { TasksetDraftWorkspaceSchema } from \"./taskset-draft-workspace.js\";\nimport { TasksetCatalogReleaseRefSchema } from \"./taskset-catalog.js\";\nexport { compileTasksetDraftWorkspace } from \"./taskset-draft-package-compiler.js\";\n\nconst Id = z.string().trim().min(1).max(240);\nconst Hash = z.string().regex(/^[a-f0-9]{64}$/);\nexport const DatasetWorkspaceWriteSchema = z.object({\n operationId: Id, expectedRevision: z.number().int().nonnegative(), originProjectId: Id.optional(), workspace: TasksetDraftWorkspaceSchema,\n}).strict().superRefine((value, ctx) => {\n if (value.workspace.draft.modelScope !== null) ctx.addIssue({ code: \"custom\", message: \"Independent datasets cannot carry Model-owned draft preparation.\" });\n if (value.workspace.draft.status !== \"draft\") ctx.addIssue({ code: \"custom\", message: \"Only draft workspaces can be saved.\" });\n});\nexport const DatasetWorkspaceReceiptSchema = z.object({\n schemaVersion: z.literal(\"openpond.datasetWorkspaceReceipt.v1\"), teamId: Id, datasetId: Id,\n revision: z.number().int().positive(), originProjectId: Id.optional(), workspace: TasksetDraftWorkspaceSchema,\n publication: z.object({ tasksetId: Id, release: TasksetCatalogReleaseRefSchema, packageHash: Hash }).strict().nullable(),\n}).strict().superRefine((value, ctx) => {\n if (value.workspace.draft.id !== value.datasetId || value.workspace.draft.profileId !== value.teamId || value.workspace.draft.revision !== value.revision || value.workspace.draft.modelScope !== null) ctx.addIssue({ code: \"custom\", message: \"Dataset workspace scope/revision mismatch.\" });\n});\nexport const DatasetWorkspacePublishSchema = z.object({ operationId: Id, expectedRevision: z.number().int().positive(), workspaceHash: Hash, packageHash: Hash }).strict();\nexport type DatasetWorkspaceReceipt = z.infer<typeof DatasetWorkspaceReceiptSchema>;\n\nexport const DatasetWorkspaceListSchema = z.object({ teamId: Id, datasets: z.array(z.object({\n id: Id, revision: z.number().int().positive(), originProjectId: Id.optional(), name: z.string(), status: z.enum([\"draft\", \"published\"]),\n publication: DatasetWorkspaceReceiptSchema.shape.publication, updatedAt: z.string().datetime(),\n}).strict()).max(100), nextCursor: Id.nullable() }).strict();\nexport const DatasetWorkspaceValidationSchema = z.object({ teamId: Id, datasetId: Id, revision: z.number().int().positive(), workspaceHash: Hash, packageHash: Hash, release: TasksetCatalogReleaseRefSchema }).strict();\n", "import { DatasetWorkspaceListSchema, DatasetWorkspacePublishSchema, DatasetWorkspaceReceiptSchema, DatasetWorkspaceValidationSchema, DatasetWorkspaceWriteSchema } from \"./dataset-workspace-contracts.js\";\nimport { validateTasksetDraftWorkspace } from \"./taskset-draft-workspace.js\";\nimport type { z } from \"zod\";\n\n/** Hosted independent authoring. Writes use explicit revision/operation identity;\n * callers retain the operation ID when retrying an uncertain response. */\nexport class OpenPondDatasetWorkspaceClient {\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()) throw new Error(\"A clean API origin and workspace credentials are required.\");\n this.baseUrl = url.toString().replace(/\\/+$/, \"\");\n }\n async list(options: { cursor?: string; signal?: AbortSignal } = {}) {\n const result = DatasetWorkspaceListSchema.parse(await this.request(`?${new URLSearchParams(options.cursor ? { cursor: options.cursor } : {})}`, \"GET\", undefined, options.signal));\n if (result.teamId !== this.options.teamId) throw new Error(\"Dataset list workspace mismatch.\");\n return result;\n }\n async get(id: string, signal?: AbortSignal) { return this.readback(await this.request(`/${encodeURIComponent(id)}`, \"GET\", undefined, signal), id); }\n async save(input: z.input<typeof DatasetWorkspaceWriteSchema>, signal?: AbortSignal) {\n const request = DatasetWorkspaceWriteSchema.parse(input);\n const workspace = validateTasksetDraftWorkspace(request.workspace);\n if (workspace.draft.profileId !== this.options.teamId || workspace.draft.revision !== request.expectedRevision + 1) throw new Error(\"Dataset write scope or revision mismatch.\");\n const result = this.readback(await this.request(`/${encodeURIComponent(workspace.draft.id)}`, \"PUT\", request, signal), workspace.draft.id);\n if (request.originProjectId && result.originProjectId !== request.originProjectId) throw new Error(\"Dataset origin Project mismatch.\");\n if (result.workspace.contentHash !== workspace.contentHash) throw new Error(\"Dataset write receipt differs from the saved bytes.\");\n return result;\n }\n async validate(id: string, expectedRevision: number, signal?: AbortSignal) {\n const result = DatasetWorkspaceValidationSchema.parse(await this.request(`/${encodeURIComponent(id)}/validate`, \"POST\", { expectedRevision }, signal));\n if (result.teamId !== this.options.teamId || result.datasetId !== id || result.revision !== expectedRevision) throw new Error(\"Dataset validation receipt mismatch.\");\n return result;\n }\n async publish(id: string, input: z.input<typeof DatasetWorkspacePublishSchema>, signal?: AbortSignal) {\n const request = DatasetWorkspacePublishSchema.parse(input);\n const result = this.readback(await this.request(`/${encodeURIComponent(id)}/publish`, \"POST\", request, signal), id);\n if (result.revision !== request.expectedRevision + 1 || result.workspace.draft.status !== \"published\" || result.publication?.packageHash !== request.packageHash) throw new Error(\"Dataset publication receipt mismatch.\");\n return result;\n }\n private readback(value: unknown, id: string) {\n const result = DatasetWorkspaceReceiptSchema.parse(value);\n validateTasksetDraftWorkspace(result.workspace);\n if (result.datasetId !== id || result.teamId !== this.options.teamId) throw new Error(\"Dataset identity mismatch.\");\n return result;\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/dataset-workspaces${path}`, {\n method, signal, redirect: \"error\", headers: { Authorization: `Bearer ${this.options.apiKey}`, \"X-OpenPond-Team-Id\": this.options.teamId, \"Content-Type\": \"application/json\" },\n ...(body === undefined ? {} : { body: JSON.stringify(body) }),\n });\n if (!response.ok) throw new Error(`Dataset request failed (${response.status}).`);\n return response.json();\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,6 @@
1
1
  import {
2
+ EvaluationMessagesSchema,
3
+ EvaluationProjectContextSchema,
2
4
  ModelStarterAttemptChoicesQuerySchema,
3
5
  ModelStarterAttemptChoicesSchema,
4
6
  ModelStarterAttemptListQuerySchema,
@@ -9,10 +11,12 @@ import {
9
11
  ModelStarterAttemptSummarySchema,
10
12
  OpenPondModelStarterAttemptError,
11
13
  OpenPondModelStarterAttemptsClient
12
- } from "./chunk-ECTMEJ5N.js";
14
+ } from "./chunk-IKTZ2CD4.js";
13
15
  import "./chunk-TCHAWJMB.js";
14
16
  import "./chunk-3KXDH6OB.js";
15
17
  export {
18
+ EvaluationMessagesSchema,
19
+ EvaluationProjectContextSchema,
16
20
  ModelStarterAttemptChoicesQuerySchema,
17
21
  ModelStarterAttemptChoicesSchema,
18
22
  ModelStarterAttemptListQuerySchema,
@@ -1,7 +1,8 @@
1
1
  import {
2
+ EvaluationProjectContextSchema,
2
3
  ModelStarterAttemptPolicySchema,
3
4
  ModelStarterAttemptSummarySchema
4
- } from "./chunk-ECTMEJ5N.js";
5
+ } from "./chunk-IKTZ2CD4.js";
5
6
  import {
6
7
  ModelProjectVersionedRefSchema,
7
8
  canonicalJson,
@@ -30,7 +31,8 @@ var ModelTasksetRunRequestSchema = z.object({
30
31
  schemaVersion: z.literal("openpond.modelTasksetRunRequest.v1"),
31
32
  operationId: IdSchema,
32
33
  teamId: IdSchema,
33
- modelProjectId: IdSchema,
34
+ modelProjectId: IdSchema.nullable(),
35
+ project: EvaluationProjectContextSchema.optional(),
34
36
  taskset: ModelProjectVersionedRefSchema,
35
37
  policy: ModelTasksetRunPolicySchema,
36
38
  population: z.array(TasksetRunMemberSchema).min(1).max(1e4)
@@ -44,7 +46,8 @@ var ModelTasksetRunSummarySchema = z.object({
44
46
  id: IdSchema,
45
47
  revision: z.number().int().positive(),
46
48
  teamId: IdSchema,
47
- modelProjectId: IdSchema,
49
+ modelProjectId: IdSchema.nullable(),
50
+ project: EvaluationProjectContextSchema.optional(),
48
51
  operationId: IdSchema,
49
52
  taskset: ModelProjectVersionedRefSchema,
50
53
  policyKind: z.enum(["hosted_chat", "fixture"]),
@@ -74,7 +77,7 @@ var ModelTasksetRunDetailsSchema = z.object({
74
77
  manifest: TasksetRunManifestSchema,
75
78
  policySnapshot: ModelStarterAttemptSummarySchema.shape.policySnapshot
76
79
  }).strict();
77
- var ModelTasksetRunListQuerySchema = z.object({ modelProjectId: IdSchema, afterId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();
80
+ 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
81
  var ModelTasksetRunPageSchema = z.object({ items: z.array(ModelTasksetRunSummarySchema).max(100), nextCursor: IdSchema.nullable() }).strict();
79
82
  var ModelTasksetRunResultSchema = z.object({
80
83
  schemaVersion: z.literal("openpond.modelTasksetRunResult.v1"),
@@ -87,7 +90,7 @@ async function verifyModelTasksetRunDetails(value) {
87
90
  const result = ModelTasksetRunDetailsSchema.parse(value);
88
91
  const { summary, request, manifest, policySnapshot } = result;
89
92
  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 || 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.");
93
+ 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.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
94
  if (request.policy.kind === "fixture") {
92
95
  if (manifest.policy.kind !== "fixture" || policySnapshot !== null) throw new Error("Fixture checks cannot claim a model identity.");
93
96
  } 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.");
@@ -153,12 +156,12 @@ var OpenPondModelTasksetRunsClient = class {
153
156
  }
154
157
  async list(value, options = {}) {
155
158
  const query = ModelTasksetRunListQuerySchema.parse(value);
156
- const params = new URLSearchParams({ modelProjectId: query.modelProjectId, limit: String(query.limit) });
159
+ const params = new URLSearchParams({ ...query.modelProjectId ? { modelProjectId: query.modelProjectId } : {}, ...query.projectId ? { projectId: query.projectId } : {}, limit: String(query.limit) });
157
160
  if (query.afterId) params.set("afterId", query.afterId);
158
161
  const result = ModelTasksetRunPageSchema.parse(await this.#request(`?${params}`, "GET", void 0, options.signal));
159
162
  if (result.items.length > query.limit || new Set(result.items.map((item) => item.id)).size !== result.items.length || result.items.some((item) => {
160
163
  this.#scope(item);
161
- return item.modelProjectId !== query.modelProjectId;
164
+ return query.modelProjectId !== void 0 && item.modelProjectId !== query.modelProjectId || query.projectId !== void 0 && item.project?.id !== query.projectId;
162
165
  })) throw new OpenPondModelTasksetRunError(502, "evaluation_page_mismatch", "Evaluation page differs from the selected model.");
163
166
  return result;
164
167
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/model-taskset-runs.ts", "../src/model-taskset-runs-contracts.ts"],
4
- "sourcesContent": ["import { z } from \"zod\";\nimport { canonicalJson } from \"./protocol.js\";\nimport { ModelTasksetRunRequestSchema, ModelTasksetRunListQuerySchema, ModelTasksetRunPageSchema, verifyModelTasksetRunDetails, verifyModelTasksetRunResult, type ModelTasksetRunSummary } from \"./model-taskset-runs-contracts.js\";\nexport * from \"./model-taskset-runs-contracts.js\";\n\nconst IdSchema = z.string().trim().min(1).max(200);\nexport class OpenPondModelTasksetRunError extends Error {\n constructor(readonly status: number, readonly code: string, message: string) { super(message); this.name = \"OpenPondModelTasksetRunError\"; }\n}\n\nexport class OpenPondModelTasksetRunsClient {\n readonly #options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof globalThis.fetch };\n constructor(options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof globalThis.fetch }) {\n const url = new URL(options.baseUrl);\n if (!options.apiKey.trim() || !options.teamId.trim() || ![\"https:\", \"http:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error(\"Evaluation runs require an HTTP(S) endpoint and workspace credentials.\");\n this.#options = { ...options, baseUrl: url.toString().replace(/\\/+$/, \"\") };\n }\n async create(value: z.input<typeof ModelTasksetRunRequestSchema>, options: { signal?: AbortSignal } = {}) {\n const request = ModelTasksetRunRequestSchema.parse(value);\n if (request.teamId !== this.#options.teamId) throw new Error(\"Evaluation belongs to another workspace.\");\n const result = await verifyModelTasksetRunDetails(await this.#request(\"\", \"POST\", request, options.signal));\n this.#scope(result.summary);\n if (canonicalJson(result.request) !== canonicalJson(request)) throw new OpenPondModelTasksetRunError(502, \"evaluation_request_mismatch\", \"Evaluation differs from the submitted request.\");\n return result;\n }\n async get(id: string, options: { signal?: AbortSignal } = {}) {\n const result = await verifyModelTasksetRunDetails(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}`, \"GET\", undefined, options.signal));\n this.#scope(result.summary, id);\n return result;\n }\n async cancel(id: string, options: { signal?: AbortSignal } = {}) {\n const result = await verifyModelTasksetRunDetails(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}/cancel`, \"POST\", undefined, options.signal));\n this.#scope(result.summary, id);\n return result;\n }\n async result(id: string, options: { signal?: AbortSignal } = {}) {\n const result = await verifyModelTasksetRunResult(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}/result`, \"GET\", undefined, options.signal));\n this.#scope(result.run.summary, id);\n return result;\n }\n async list(value: z.input<typeof ModelTasksetRunListQuerySchema>, options: { signal?: AbortSignal } = {}) {\n const query = ModelTasksetRunListQuerySchema.parse(value);\n const params = new URLSearchParams({ modelProjectId: query.modelProjectId, limit: String(query.limit) });\n if (query.afterId) params.set(\"afterId\", query.afterId);\n const result = ModelTasksetRunPageSchema.parse(await this.#request(`?${params}`, \"GET\", undefined, options.signal));\n if (result.items.length > query.limit || new Set(result.items.map(item => item.id)).size !== result.items.length || result.items.some(item => { this.#scope(item); return item.modelProjectId !== query.modelProjectId; })) throw new OpenPondModelTasksetRunError(502, \"evaluation_page_mismatch\", \"Evaluation page differs from the selected model.\");\n return result;\n }\n #scope(summary: ModelTasksetRunSummary, id?: string) {\n if (summary.teamId !== this.#options.teamId || (id && summary.id !== id)) throw new OpenPondModelTasksetRunError(502, \"evaluation_identity_mismatch\", \"Evaluation belongs to another identity or workspace.\");\n }\n async #request(path: string, method: string, body: unknown, signal?: AbortSignal): Promise<unknown> {\n const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/model-taskset-runs${path}`, {\n method, headers: { Authorization: `Bearer ${this.#options.apiKey}`, \"X-OpenPond-Team-Id\": this.#options.teamId, \"Content-Type\": \"application/json\", Accept: \"application/json\" },\n ...(body === undefined ? {} : { body: JSON.stringify(body) }), signal, redirect: \"error\",\n });\n const value = await response.json();\n if (!response.ok) {\n const error = z.object({ code: z.string(), message: z.string() }).safeParse(value);\n throw new OpenPondModelTasksetRunError(response.status, error.success ? error.data.code : \"evaluation_request_failed\", error.success ? error.data.message : \"Evaluation request failed.\");\n }\n return value;\n }\n}\n", "import { z } from \"zod\";\nimport { assertContentHash } from \"@openpond/harness\";\nimport { TasksetRunManifestSchema, TasksetRunMemberSchema, TasksetMetricResultSchema, assertTasksetMetricResult, orderTasksetRunReceipts } from \"@openpond/evals/metrics\";\nimport { AttemptReceiptSchema } from \"@openpond/evals/runs\";\nimport { ModelProjectVersionedRefSchema } from \"./model-projects.js\";\nimport { ModelStarterAttemptPolicySchema, ModelStarterAttemptSummarySchema } from \"./model-starter-attempts.js\";\nimport { canonicalJson, canonicalSha256 } from \"./protocol.js\";\n\nconst IdSchema = z.string().trim().min(1).max(200);\nconst HashSchema = z.string().regex(/^[a-f0-9]{64}$/);\nexport const ModelTasksetRunPolicySchema = z.discriminatedUnion(\"kind\", [\n ModelStarterAttemptPolicySchema.options[0],\n z.object({ kind: z.literal(\"fixture\") }).strict(),\n]);\nexport const ModelTasksetRunRequestSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelTasksetRunRequest.v1\"),\n operationId: IdSchema, teamId: IdSchema, modelProjectId: IdSchema,\n taskset: ModelProjectVersionedRefSchema, policy: ModelTasksetRunPolicySchema,\n population: z.array(TasksetRunMemberSchema).min(1).max(10_000),\n}).strict().superRefine((value, context) => {\n if (new Set(value.population.map(member => member.receiptId)).size !== value.population.length) context.addIssue({ code: \"custom\", path: [\"population\"], message: \"Run receipt identities must be unique.\" });\n if (value.population.some(member => (member.fixtureId !== null) !== (value.policy.kind === \"fixture\"))) context.addIssue({ code: \"custom\", path: [\"population\"], message: \"Only fixture runs require a fixture identity for every member.\" });\n if (value.population.some(member => !/^(0|[1-9][0-9]*)$/.test(member.seed) || Number(member.seed) > 2_147_483_647)) context.addIssue({ code: \"custom\", path: [\"population\"], message: \"Hosted environment seeds must be integers from 0 to 2147483647.\" });\n});\nexport type ModelTasksetRunRequest = z.infer<typeof ModelTasksetRunRequestSchema>;\nexport const ModelTasksetRunSummarySchema = z.object({\n schemaVersion: z.literal(\"openpond.modelTasksetRunSummary.v1\"),\n id: IdSchema, revision: z.number().int().positive(), teamId: IdSchema, modelProjectId: IdSchema,\n operationId: IdSchema, taskset: ModelProjectVersionedRefSchema, policyKind: z.enum([\"hosted_chat\", \"fixture\"]),\n manifestHash: HashSchema,\n status: z.enum([\"queued\", \"running\", \"cancelling\", \"completed\", \"failed\", \"cancelled\"]),\n totalCount: z.number().int().min(1).max(10_000),\n counts: z.object({ pending: z.number().int().nonnegative(), running: z.number().int().nonnegative(), completed: z.number().int().nonnegative(), failed: z.number().int().nonnegative(), cancelled: z.number().int().nonnegative() }).strict(),\n createdAt: z.iso.datetime(), startedAt: z.iso.datetime().nullable(), completedAt: z.iso.datetime().nullable(),\n cleanupComplete: z.boolean(), resultAvailable: z.boolean(), score: z.number().min(0).max(1).nullable(),\n metricName: z.string().min(1).max(240),\n error: z.object({ code: IdSchema, message: z.string().max(2_000) }).strict().nullable(),\n}).strict().superRefine((value, context) => {\n if (Object.values(value.counts).reduce((sum, count) => sum + count, 0) !== value.totalCount) context.addIssue({ code: \"custom\", path: [\"counts\"], message: \"Run counts must account for the complete population.\" });\n if (value.status !== \"completed\" && value.score !== null) context.addIssue({ code: \"custom\", path: [\"score\"], message: \"Only completed evaluations publish a metric value.\" });\n if ([\"completed\", \"failed\", \"cancelled\"].includes(value.status) && (!value.completedAt || value.counts.pending || value.counts.running)) context.addIssue({ code: \"custom\", message: \"Terminal runs require complete population accounting.\" });\n if (value.status === \"cancelled\" && !value.cleanupComplete) context.addIssue({ code: \"custom\", message: \"Cancelled runs require confirmed cleanup.\" });\n if (value.resultAvailable && ![\"completed\", \"failed\", \"cancelled\"].includes(value.status)) context.addIssue({ code: \"custom\", message: \"Run results require terminal population accounting.\" });\n if (value.status === \"completed\" && (!value.cleanupComplete || !value.resultAvailable)) context.addIssue({ code: \"custom\", message: \"Completed evaluations require retained results and confirmed cleanup.\" });\n});\nexport type ModelTasksetRunSummary = z.infer<typeof ModelTasksetRunSummarySchema>;\nexport const ModelTasksetRunDetailsSchema = z.object({\n summary: ModelTasksetRunSummarySchema,\n request: ModelTasksetRunRequestSchema,\n manifest: TasksetRunManifestSchema,\n policySnapshot: ModelStarterAttemptSummarySchema.shape.policySnapshot,\n}).strict();\nexport type ModelTasksetRunDetails = z.infer<typeof ModelTasksetRunDetailsSchema>;\nexport const ModelTasksetRunListQuerySchema = z.object({ modelProjectId: IdSchema, afterId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();\nexport const ModelTasksetRunPageSchema = z.object({ items: z.array(ModelTasksetRunSummarySchema).max(100), nextCursor: IdSchema.nullable() }).strict();\nexport const ModelTasksetRunResultSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelTasksetRunResult.v1\"),\n run: ModelTasksetRunDetailsSchema,\n receipts: z.array(AttemptReceiptSchema).min(1).max(10_000),\n metric: TasksetMetricResultSchema.nullable(),\n contentHash: HashSchema,\n}).strict();\nexport type ModelTasksetRunResult = z.infer<typeof ModelTasksetRunResultSchema>;\n\n/** Server artifact ownership authenticates the producer. These checks bind all\n * portable projections to the admitted request, population and policy. */\nexport async function verifyModelTasksetRunDetails(value: unknown): Promise<ModelTasksetRunDetails> {\n const result = ModelTasksetRunDetailsSchema.parse(value);\n const { summary, request, manifest, policySnapshot } = result;\n assertContentHash(manifest, \"Taskset run manifest\");\n if (manifest.contentHash !== summary.manifestHash\n || manifest.id !== summary.id || manifest.createdAt !== summary.createdAt || summary.teamId !== request.teamId || summary.modelProjectId !== request.modelProjectId\n || summary.operationId !== request.operationId || summary.policyKind !== request.policy.kind\n || summary.totalCount !== request.population.length || summary.metricName !== manifest.metricPolicy.primaryMetric\n || canonicalJson(summary.taskset) !== canonicalJson(request.taskset)\n || manifest.tasksetRelease.id !== request.taskset.id || manifest.tasksetRelease.contentHash !== request.taskset.contentHash\n || canonicalJson(manifest.population) !== canonicalJson(request.population)) throw new Error(\"Evaluation run differs from its admitted request or manifest.\");\n if (request.policy.kind === \"fixture\") {\n if (manifest.policy.kind !== \"fixture\" || policySnapshot !== null) throw new Error(\"Fixture checks cannot claim a model identity.\");\n } else if (manifest.policy.kind !== \"model\" || !policySnapshot || policySnapshot.modelId !== request.policy.modelId\n || manifest.policy.model.provider !== policySnapshot.provider || manifest.policy.model.model !== policySnapshot.upstreamModelId\n || manifest.policy.model.revision !== null || manifest.policy.model.artifactHash !== null || manifest.policy.model.tokenizerRevision !== null || manifest.policy.model.chatTemplateHash !== null\n || manifest.policy.configurationHash !== await canonicalSha256({ policy: request.policy, snapshot: policySnapshot })) throw new Error(\"Evaluation model differs from its admitted policy.\");\n return result;\n}\n\nexport async function verifyModelTasksetRunResult(value: unknown): Promise<ModelTasksetRunResult> {\n const result = ModelTasksetRunResultSchema.parse(value);\n const { contentHash: actual, ...content } = result;\n if (await canonicalSha256(content) !== actual) throw new Error(\"Evaluation result integrity failed.\");\n const { summary, manifest } = await verifyModelTasksetRunDetails(result.run);\n if (!summary.resultAvailable || ![\"completed\", \"failed\", \"cancelled\"].includes(summary.status)) throw new Error(\"Evaluation result is not terminal.\");\n const ordered = orderTasksetRunReceipts(manifest, result.receipts);\n if (canonicalJson(ordered) !== canonicalJson(result.receipts)) throw new Error(\"Evaluation receipts differ from the admitted order.\");\n if ((summary.status === \"completed\") !== (result.metric !== null)) throw new Error(\"Only completed evaluations retain a metric.\");\n if (result.metric) {\n assertTasksetMetricResult(result.metric);\n if (result.metric.runManifest.id !== manifest.id || result.metric.runManifest.contentHash !== manifest.contentHash\n || canonicalJson(result.metric.tasksetRelease) !== canonicalJson(manifest.tasksetRelease)\n || canonicalJson(result.metric.policy) !== canonicalJson(manifest.metricPolicy)\n || canonicalJson(result.metric.receiptRefs) !== canonicalJson(result.receipts.map(({ id, contentHash }) => ({ id, contentHash })))\n || result.metric.value !== summary.score) throw new Error(\"Evaluation metric differs from its admitted run or receipt population.\");\n }\n return result;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { z } from \"zod\";\nimport { canonicalJson } from \"./protocol.js\";\nimport { ModelTasksetRunRequestSchema, ModelTasksetRunListQuerySchema, ModelTasksetRunPageSchema, verifyModelTasksetRunDetails, verifyModelTasksetRunResult, type ModelTasksetRunSummary } from \"./model-taskset-runs-contracts.js\";\nexport * from \"./model-taskset-runs-contracts.js\";\n\nconst IdSchema = z.string().trim().min(1).max(200);\nexport class OpenPondModelTasksetRunError extends Error {\n constructor(readonly status: number, readonly code: string, message: string) { super(message); this.name = \"OpenPondModelTasksetRunError\"; }\n}\n\nexport class OpenPondModelTasksetRunsClient {\n readonly #options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof globalThis.fetch };\n constructor(options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof globalThis.fetch }) {\n const url = new URL(options.baseUrl);\n if (!options.apiKey.trim() || !options.teamId.trim() || ![\"https:\", \"http:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error(\"Evaluation runs require an HTTP(S) endpoint and workspace credentials.\");\n this.#options = { ...options, baseUrl: url.toString().replace(/\\/+$/, \"\") };\n }\n async create(value: z.input<typeof ModelTasksetRunRequestSchema>, options: { signal?: AbortSignal } = {}) {\n const request = ModelTasksetRunRequestSchema.parse(value);\n if (request.teamId !== this.#options.teamId) throw new Error(\"Evaluation belongs to another workspace.\");\n const result = await verifyModelTasksetRunDetails(await this.#request(\"\", \"POST\", request, options.signal));\n this.#scope(result.summary);\n if (canonicalJson(result.request) !== canonicalJson(request)) throw new OpenPondModelTasksetRunError(502, \"evaluation_request_mismatch\", \"Evaluation differs from the submitted request.\");\n return result;\n }\n async get(id: string, options: { signal?: AbortSignal } = {}) {\n const result = await verifyModelTasksetRunDetails(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}`, \"GET\", undefined, options.signal));\n this.#scope(result.summary, id);\n return result;\n }\n async cancel(id: string, options: { signal?: AbortSignal } = {}) {\n const result = await verifyModelTasksetRunDetails(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}/cancel`, \"POST\", undefined, options.signal));\n this.#scope(result.summary, id);\n return result;\n }\n async result(id: string, options: { signal?: AbortSignal } = {}) {\n const result = await verifyModelTasksetRunResult(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}/result`, \"GET\", undefined, options.signal));\n this.#scope(result.run.summary, id);\n return result;\n }\n async list(value: z.input<typeof ModelTasksetRunListQuerySchema>, options: { signal?: AbortSignal } = {}) {\n const query = ModelTasksetRunListQuerySchema.parse(value);\n const params = new URLSearchParams({ ...(query.modelProjectId ? { modelProjectId: query.modelProjectId } : {}), ...(query.projectId ? { projectId: query.projectId } : {}), limit: String(query.limit) });\n if (query.afterId) params.set(\"afterId\", query.afterId);\n const result = ModelTasksetRunPageSchema.parse(await this.#request(`?${params}`, \"GET\", undefined, options.signal));\n if (result.items.length > query.limit || new Set(result.items.map(item => item.id)).size !== result.items.length || result.items.some(item => { this.#scope(item); return (query.modelProjectId !== undefined && item.modelProjectId !== query.modelProjectId) || (query.projectId !== undefined && item.project?.id !== query.projectId); })) throw new OpenPondModelTasksetRunError(502, \"evaluation_page_mismatch\", \"Evaluation page differs from the selected model.\");\n return result;\n }\n #scope(summary: ModelTasksetRunSummary, id?: string) {\n if (summary.teamId !== this.#options.teamId || (id && summary.id !== id)) throw new OpenPondModelTasksetRunError(502, \"evaluation_identity_mismatch\", \"Evaluation belongs to another identity or workspace.\");\n }\n async #request(path: string, method: string, body: unknown, signal?: AbortSignal): Promise<unknown> {\n const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/model-taskset-runs${path}`, {\n method, headers: { Authorization: `Bearer ${this.#options.apiKey}`, \"X-OpenPond-Team-Id\": this.#options.teamId, \"Content-Type\": \"application/json\", Accept: \"application/json\" },\n ...(body === undefined ? {} : { body: JSON.stringify(body) }), signal, redirect: \"error\",\n });\n const value = await response.json();\n if (!response.ok) {\n const error = z.object({ code: z.string(), message: z.string() }).safeParse(value);\n throw new OpenPondModelTasksetRunError(response.status, error.success ? error.data.code : \"evaluation_request_failed\", error.success ? error.data.message : \"Evaluation request failed.\");\n }\n return value;\n }\n}\n", "import { z } from \"zod\";\nimport { 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 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 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.operationId !== request.operationId || summary.policyKind !== request.policy.kind\n || summary.totalCount !== request.population.length || summary.metricName !== manifest.metricPolicy.primaryMetric\n || canonicalJson(summary.taskset) !== canonicalJson(request.taskset)\n || manifest.tasksetRelease.id !== request.taskset.id || manifest.tasksetRelease.contentHash !== request.taskset.contentHash\n || canonicalJson(manifest.population) !== canonicalJson(request.population)) throw new Error(\"Evaluation run differs from its admitted request or manifest.\");\n if (request.policy.kind === \"fixture\") {\n if (manifest.policy.kind !== \"fixture\" || policySnapshot !== null) throw new Error(\"Fixture checks cannot claim a model identity.\");\n } else if (manifest.policy.kind !== \"model\" || !policySnapshot || policySnapshot.modelId !== request.policy.modelId\n || manifest.policy.model.provider !== policySnapshot.provider || manifest.policy.model.model !== policySnapshot.upstreamModelId\n || manifest.policy.model.revision !== null || manifest.policy.model.artifactHash !== null || manifest.policy.model.tokenizerRevision !== null || manifest.policy.model.chatTemplateHash !== null\n || manifest.policy.configurationHash !== await canonicalSha256({ policy: request.policy, snapshot: policySnapshot })) throw new Error(\"Evaluation model differs from its admitted policy.\");\n return result;\n}\n\nexport async function verifyModelTasksetRunResult(value: unknown): Promise<ModelTasksetRunResult> {\n const result = ModelTasksetRunResultSchema.parse(value);\n const { contentHash: actual, ...content } = result;\n if (await canonicalSha256(content) !== actual) throw new Error(\"Evaluation result integrity failed.\");\n const { summary, manifest } = await verifyModelTasksetRunDetails(result.run);\n if (!summary.resultAvailable || ![\"completed\", \"failed\", \"cancelled\"].includes(summary.status)) throw new Error(\"Evaluation result is not terminal.\");\n const ordered = orderTasksetRunReceipts(manifest, result.receipts);\n if (canonicalJson(ordered) !== canonicalJson(result.receipts)) throw new Error(\"Evaluation receipts differ from the admitted order.\");\n if ((summary.status === \"completed\") !== (result.metric !== null)) throw new Error(\"Only completed evaluations retain a metric.\");\n if (result.metric) {\n assertTasksetMetricResult(result.metric);\n if (result.metric.runManifest.id !== manifest.id || result.metric.runManifest.contentHash !== manifest.contentHash\n || canonicalJson(result.metric.tasksetRelease) !== canonicalJson(manifest.tasksetRelease)\n || canonicalJson(result.metric.policy) !== canonicalJson(manifest.metricPolicy)\n || canonicalJson(result.metric.receiptRefs) !== canonicalJson(result.receipts.map(({ id, contentHash }) => ({ id, contentHash })))\n || result.metric.value !== summary.score) throw new Error(\"Evaluation metric differs from its admitted run or receipt population.\");\n }\n return result;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["z", "IdSchema", "z"]
7
7
  }
@@ -31,6 +31,7 @@ export declare class OpenPondDatasetWorkspaceClient {
31
31
  packageHash: string;
32
32
  } | null;
33
33
  updatedAt: string;
34
+ originProjectId?: string | undefined;
34
35
  }[];
35
36
  nextCursor: string | null;
36
37
  }>;
@@ -558,6 +559,7 @@ export declare class OpenPondDatasetWorkspaceClient {
558
559
  };
559
560
  packageHash: string;
560
561
  } | null;
562
+ originProjectId?: string | undefined;
561
563
  }>;
562
564
  save(input: z.input<typeof DatasetWorkspaceWriteSchema>, signal?: AbortSignal): Promise<{
563
565
  schemaVersion: "openpond.datasetWorkspaceReceipt.v1";
@@ -1083,6 +1085,7 @@ export declare class OpenPondDatasetWorkspaceClient {
1083
1085
  };
1084
1086
  packageHash: string;
1085
1087
  } | null;
1088
+ originProjectId?: string | undefined;
1086
1089
  }>;
1087
1090
  validate(id: string, expectedRevision: number, signal?: AbortSignal): Promise<{
1088
1091
  teamId: string;
@@ -1620,6 +1623,7 @@ export declare class OpenPondDatasetWorkspaceClient {
1620
1623
  };
1621
1624
  packageHash: string;
1622
1625
  } | null;
1626
+ originProjectId?: string | undefined;
1623
1627
  }>;
1624
1628
  private readback;
1625
1629
  private request;