openpond-sdk 0.4.0 → 0.5.1

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 (34) hide show
  1. package/MODEL_STARTERS.md +26 -0
  2. package/TRAINING_PROTOCOL.md +18 -0
  3. package/dist/{chunk-LLHE4BOD.js → chunk-25TBEGXB.js} +2 -2
  4. package/dist/{chunk-AZUCY3E5.js → chunk-6LGGLXAM.js} +3 -3
  5. package/dist/chunk-EPJM7VEV.js +177 -0
  6. package/dist/chunk-EPJM7VEV.js.map +7 -0
  7. package/dist/{chunk-IVEXCIHO.js → chunk-EV4PKJWN.js} +10 -10
  8. package/dist/{chunk-IVEXCIHO.js.map → chunk-EV4PKJWN.js.map} +1 -1
  9. package/dist/{chunk-ZPCK222K.js → chunk-NF63YMOL.js} +14 -7
  10. package/dist/{chunk-ZPCK222K.js.map → chunk-NF63YMOL.js.map} +2 -2
  11. package/dist/{chunk-AVW35YOH.js → chunk-ODTLCYUT.js} +151 -126
  12. package/dist/chunk-ODTLCYUT.js.map +7 -0
  13. package/dist/index.js +3 -3
  14. package/dist/learning.js +3 -3
  15. package/dist/model-starter-attempts.js +12 -162
  16. package/dist/model-starter-attempts.js.map +3 -3
  17. package/dist/model-taskset-runs.js +196 -0
  18. package/dist/model-taskset-runs.js.map +7 -0
  19. package/dist/refiner.js +1 -1
  20. package/dist/taskset-drafts.js +4 -4
  21. package/dist/taskset-packages.js +4 -4
  22. package/dist/training.js +3 -1
  23. package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts +568 -0
  24. package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts.map +1 -0
  25. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +722 -0
  26. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts.map +1 -0
  27. package/dist/types/packages/sdk/src/training-grading-plan.d.ts +21 -0
  28. package/dist/types/packages/sdk/src/training-grading-plan.d.ts.map +1 -0
  29. package/dist/types/packages/sdk/src/training.d.ts +1 -0
  30. package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
  31. package/package.json +7 -3
  32. package/dist/chunk-AVW35YOH.js.map +0 -7
  33. /package/dist/{chunk-LLHE4BOD.js.map → chunk-25TBEGXB.js.map} +0 -0
  34. /package/dist/{chunk-AZUCY3E5.js.map → chunk-6LGGLXAM.js.map} +0 -0
package/MODEL_STARTERS.md CHANGED
@@ -119,3 +119,29 @@ Keep hidden case inputs and expected results in the private initial-state asset.
119
119
  Ordinary task input is policy-visible. The service passes only each hidden case's
120
120
  explicit `input` to candidate code; expected results stay with the authored grader.
121
121
  See the Evals JavaScript environment contract for service fields and Node execution.
122
+
123
+ ### Complete Taskset evaluation runs
124
+
125
+ `OpenPondModelTasksetRunsClient` from `openpond-sdk/model-taskset-runs` exposes
126
+ `create`, `get`, `list`, `cancel` and `result` through
127
+ `/v1/model-taskset-runs`. A request pins a Model attachment and an ordered
128
+ population of `{ receiptId, taskId, seed, fixtureId }` members. Receipt IDs are
129
+ unique within the run; hosted seeds are canonical integer strings between
130
+ `0` and `2147483647`. Requests support up to 10,000 members and never accept
131
+ replacement world state, verifier bytes or caller-generated scores.
132
+
133
+ Use `{ kind: "fixture" }` with each member's authored fixture ID to check a
134
+ package without claiming model execution. Use a `hosted_chat` policy with a
135
+ model ID and sampling/output limits for a model evaluation; those members
136
+ have `fixtureId: null`. A model evaluation pins both the provider snapshot and
137
+ the requested sampling configuration. Reusing an operation ID must return the
138
+ same admitted request or report a conflict.
139
+
140
+ Details retain the request, immutable public run manifest, policy snapshot and
141
+ current summary. Terminal results retain canonical receipts in admitted order
142
+ and the authored metric only for completed evaluations. Failed and cancelled
143
+ runs cannot publish a metric value; completed but entirely unscorable runs
144
+ retain a null metric value. The client verifies workspace, manifest,
145
+ population, grading role, metric references and result hashes on readback.
146
+ Hosts remain responsible for owner-authenticated evidence and durable
147
+ dispatch/cancellation; a content hash is not producer authentication.
@@ -78,6 +78,24 @@ checkpoint inventory or qualification metrics, when the portable client needs
78
78
  that evidence to validate the artifact. This metadata is immutable output
79
79
  evidence, not private worker-control, lease, or provider state.
80
80
 
81
+ ## Deterministic grading identity
82
+
83
+ For portable training bundles, derive `job.rewardSource` with
84
+ `deterministicTrainingRewardSource({ graders, rewardExecution })` from the
85
+ verified bundle's `graders.json` and optional `reward-binding.json`. The grader
86
+ reference identifies the entire ordered set, including configuration, using the
87
+ canonical hash of `{ schemaVersion: "openpond.trainingGraderSet.v1", graders }`.
88
+ Its ID is `training-graders-` followed by the first 32 hash characters.
89
+
90
+ When a Reward binding exists, the helper compiles its verified releases to the
91
+ executed grader set and uses the binding's immutable ID/hash as `composer`.
92
+ This pins role, normalization, membership, weights, required sources and hard
93
+ gates even when those changes leave grader code unchanged. An unbound plan has
94
+ a null composer. Providers must recompute both references from the admitted
95
+ bundle before provisioning and retain both in receipt inputs when non-null.
96
+ Identity validation does not establish that a provider can execute a grader;
97
+ providers must also reject unsupported execution configurations at admission.
98
+
81
99
  ## Conformance
82
100
 
83
101
  Published fixtures live in `fixtures/training/v2`. Providers should:
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ReleaseIdSchema
3
- } from "./chunk-ZPCK222K.js";
3
+ } from "./chunk-NF63YMOL.js";
4
4
 
5
5
  // src/learning-credentials.ts
6
6
  import { z } from "zod";
@@ -217,4 +217,4 @@ export {
217
217
  OpenPondLearningError,
218
218
  OpenPondLearningClient
219
219
  };
220
- //# sourceMappingURL=chunk-LLHE4BOD.js.map
220
+ //# sourceMappingURL=chunk-25TBEGXB.js.map
@@ -18,7 +18,7 @@ import {
18
18
  } from "./chunk-65D4C7HP.js";
19
19
  import {
20
20
  ChatModelRefSchema
21
- } from "./chunk-IVEXCIHO.js";
21
+ } from "./chunk-EV4PKJWN.js";
22
22
  import {
23
23
  ImmutableAssetRefSchema,
24
24
  ImmutableReleaseRefSchema,
@@ -28,7 +28,7 @@ import {
28
28
  canonicalJson,
29
29
  contentHash,
30
30
  sha256
31
- } from "./chunk-ZPCK222K.js";
31
+ } from "./chunk-NF63YMOL.js";
32
32
  import {
33
33
  HostedModelProjectSummarySchema,
34
34
  HostedModelProjectSyncSchema,
@@ -2392,4 +2392,4 @@ export {
2392
2392
  saveTasksetDraftWorkspaceFile,
2393
2393
  decodeTasksetDraftWorkspaceFile
2394
2394
  };
2395
- //# sourceMappingURL=chunk-AZUCY3E5.js.map
2395
+ //# sourceMappingURL=chunk-6LGGLXAM.js.map
@@ -0,0 +1,177 @@
1
+ import {
2
+ ModelProjectVersionedRefSchema,
3
+ canonicalJson,
4
+ canonicalSha256
5
+ } from "./chunk-5PRP457R.js";
6
+
7
+ // src/model-starter-attempts.ts
8
+ import { z } from "zod";
9
+ import { RewardCompositionSchema } from "@openpond/evals/rewards";
10
+ 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()
16
+ ]);
17
+ var ModelStarterAttemptRequestSchema = z.object({
18
+ schemaVersion: z.literal("openpond.modelStarterAttemptRequest.v1"),
19
+ operationId: IdSchema,
20
+ teamId: IdSchema,
21
+ modelProjectId: IdSchema,
22
+ taskset: ModelProjectVersionedRefSchema,
23
+ taskId: IdSchema,
24
+ environmentSeed: z.number().int().min(0).max(2147483647).default(0),
25
+ policy: ModelStarterAttemptPolicySchema
26
+ }).strict();
27
+ var ModelStarterAttemptChoicesQuerySchema = z.object({ modelProjectId: IdSchema, taskset: ModelProjectVersionedRefSchema, afterTaskId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();
28
+ var ModelStarterAttemptChoicesSchema = z.object({
29
+ modelProjectId: IdSchema,
30
+ taskset: ModelProjectVersionedRefSchema,
31
+ available: z.boolean(),
32
+ unavailableReason: z.string().max(1e3).nullable(),
33
+ models: z.array(z.object({ id: IdSchema, name: z.string().max(500) }).strict()).max(200),
34
+ tasks: z.array(z.object({ id: IdSchema, split: z.enum(["train", "validation", "frozen_eval"]), inputPreview: z.string().max(500), fixtures: z.array(z.object({ id: IdSchema, label: z.string().max(200) }).strict()).max(1e3) }).strict()).max(100),
35
+ nextCursor: IdSchema.nullable()
36
+ }).strict();
37
+ var ModelStarterAttemptSummarySchema = z.object({
38
+ schemaVersion: z.literal("openpond.modelStarterAttemptSummary.v1"),
39
+ id: IdSchema,
40
+ revision: z.number().int().positive(),
41
+ request: ModelStarterAttemptRequestSchema,
42
+ status: z.enum(["queued", "running", "cancelling", "completed", "failed", "cancelled"]),
43
+ policySnapshot: z.object({ modelId: IdSchema, provider: IdSchema, upstreamModelId: z.string().min(1).max(500), configurationHash: HashSchema }).strict().nullable(),
44
+ createdAt: z.iso.datetime(),
45
+ startedAt: z.iso.datetime().nullable(),
46
+ completedAt: z.iso.datetime().nullable(),
47
+ cleanupComplete: z.boolean(),
48
+ resultAvailable: z.boolean(),
49
+ score: z.number().min(0).max(1).nullable(),
50
+ gradingStatus: z.enum(["not_started", "scored", "unscorable", "not_configured"]).default("not_started"),
51
+ passed: z.boolean().nullable(),
52
+ outputPreview: z.string().max(500).nullable(),
53
+ error: z.object({ code: IdSchema, message: z.string().max(2e3) }).strict().nullable()
54
+ }).strict().superRefine((value, context) => {
55
+ if (value.request.policy.kind === "fixture" !== (value.policySnapshot === null)) context.addIssue({ code: "custom", path: ["policySnapshot"], message: "Fixture execution must not claim a model identity." });
56
+ if (value.status === "completed" && (!value.cleanupComplete || !value.resultAvailable || !value.completedAt)) context.addIssue({ code: "custom", message: "Completed attempts require retained results and confirmed cleanup." });
57
+ });
58
+ var ModelStarterAttemptListQuerySchema = z.object({ modelProjectId: IdSchema, afterId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();
59
+ var ModelStarterAttemptPageSchema = z.object({ items: z.array(ModelStarterAttemptSummarySchema).max(100), nextCursor: IdSchema.nullable() }).strict();
60
+ var ModelStarterAttemptResultSchema = z.object({
61
+ schemaVersion: z.literal("openpond.modelStarterAttemptResult.v1"),
62
+ attempt: ModelStarterAttemptSummarySchema,
63
+ output: z.string().max(1048576).nullable(),
64
+ // Only model-facing messages, never the private environment snapshot.
65
+ messages: z.array(z.record(z.string(), z.unknown())).max(4002),
66
+ composition: RewardCompositionSchema.nullable(),
67
+ // Ordinary Tasksets have no Reward binding. Absence preserves the hash of
68
+ // already retained v1 results; new producers explicitly return null or a grade.
69
+ grade: TaskGradeSchema.nullable().optional(),
70
+ environment: z.object({ status: z.enum(["completed", "budget_exhausted", "cancelled", "timed_out", "policy_failure", "environment_failure"]), collected: z.boolean(), definition: ModelProjectVersionedRefSchema, initialStateHash: HashSchema.nullable(), finalStateHash: HashSchema.nullable(), attemptHash: HashSchema }).strict(),
71
+ providerRequestIds: z.array(IdSchema).max(1001),
72
+ contentHash: HashSchema
73
+ }).strict().superRefine((value, context) => {
74
+ if (!value.grade) return;
75
+ if (value.composition) context.addIssue({ code: "custom", path: ["grade"], message: "An ordinary grade cannot also claim a Reward composition." });
76
+ if (!["completed", "failed"].includes(value.attempt.status) || !value.attempt.resultAvailable || value.attempt.score !== value.grade.score || value.attempt.gradingStatus !== value.grade.gradingStatus || value.attempt.passed !== (value.grade.score === null ? null : value.grade.passed)) context.addIssue({ code: "custom", path: ["grade"], message: "Ordinary grade differs from its terminal attempt summary." });
77
+ });
78
+ var OpenPondModelStarterAttemptError = class extends Error {
79
+ constructor(status, code, message) {
80
+ super(message);
81
+ this.status = status;
82
+ this.code = code;
83
+ this.name = "OpenPondModelStarterAttemptError";
84
+ }
85
+ status;
86
+ code;
87
+ };
88
+ var OpenPondModelStarterAttemptsClient = class {
89
+ #options;
90
+ constructor(options) {
91
+ const url = new URL(options.baseUrl);
92
+ if (!options.apiKey.trim() || !options.teamId.trim() || !["https:", "http:"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error("Starter attempts require an HTTP(S) endpoint and workspace credentials.");
93
+ this.#options = { ...options, baseUrl: url.toString().replace(/\/+$/, "") };
94
+ }
95
+ async create(value, options = {}) {
96
+ const request = ModelStarterAttemptRequestSchema.parse(value);
97
+ if (request.teamId !== this.#options.teamId) throw new Error("Attempt belongs to another workspace.");
98
+ const result = this.#summary(await this.#request("", "POST", request, options.signal));
99
+ if (canonicalJson(result.request) !== canonicalJson(request)) throw new OpenPondModelStarterAttemptError(502, "attempt_request_mismatch", "Attempt receipt differs from the submitted request.");
100
+ return result;
101
+ }
102
+ async get(id, options = {}) {
103
+ return this.#summary(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}`, "GET", void 0, options.signal), id);
104
+ }
105
+ async choices(value, options = {}) {
106
+ const query = ModelStarterAttemptChoicesQuerySchema.parse(value);
107
+ const params = new URLSearchParams({ modelProjectId: query.modelProjectId, tasksetId: query.taskset.id, revision: String(query.taskset.revision), contentHash: query.taskset.contentHash, limit: String(query.limit) });
108
+ if (query.afterTaskId) params.set("afterTaskId", query.afterTaskId);
109
+ const result = ModelStarterAttemptChoicesSchema.parse(await this.#request(`/choices?${params}`, "GET", void 0, options.signal));
110
+ if (result.modelProjectId !== query.modelProjectId || canonicalJson(result.taskset) !== canonicalJson(query.taskset) || result.tasks.length > query.limit || new Set(result.tasks.map((task) => task.id)).size !== result.tasks.length) throw new OpenPondModelStarterAttemptError(502, "attempt_choices_mismatch", "Attempt choices differ from the selected model or Taskset.");
111
+ return result;
112
+ }
113
+ async cancel(id, options = {}) {
114
+ return this.#summary(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}/cancel`, "POST", void 0, options.signal), id);
115
+ }
116
+ async result(id, options = {}) {
117
+ const value = ModelStarterAttemptResultSchema.parse(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}/result`, "GET", void 0, options.signal));
118
+ this.#summary(value.attempt, id);
119
+ const { contentHash, ...content } = value;
120
+ if (!value.attempt.resultAvailable || await canonicalSha256(content) !== contentHash) throw new OpenPondModelStarterAttemptError(502, "attempt_result_integrity", "Attempt result integrity failed.");
121
+ return value;
122
+ }
123
+ async list(value, options = {}) {
124
+ const query = ModelStarterAttemptListQuerySchema.parse(value);
125
+ const params = new URLSearchParams({ modelProjectId: query.modelProjectId, limit: String(query.limit) });
126
+ if (query.afterId) params.set("afterId", query.afterId);
127
+ const page = ModelStarterAttemptPageSchema.parse(await this.#request(`?${params}`, "GET", void 0, options.signal));
128
+ if (page.items.length > query.limit || new Set(page.items.map((item) => item.id)).size !== page.items.length || page.items.some((item) => this.#summary(item).request.modelProjectId !== query.modelProjectId)) throw new OpenPondModelStarterAttemptError(502, "attempt_page_mismatch", "Attempt page differs from the selected model.");
129
+ return page;
130
+ }
131
+ #summary(value, id) {
132
+ const result = ModelStarterAttemptSummarySchema.parse(value);
133
+ if (result.request.teamId !== this.#options.teamId || id && result.id !== id) throw new OpenPondModelStarterAttemptError(502, "attempt_identity_mismatch", "Attempt receipt belongs to another identity or workspace.");
134
+ return result;
135
+ }
136
+ async #request(path, method, body, signal) {
137
+ const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/model-starter-attempts${path}`, { method, headers: { Authorization: `Bearer ${this.#options.apiKey}`, "X-OpenPond-Team-Id": this.#options.teamId, "Content-Type": "application/json", Accept: "application/json" }, ...body === void 0 ? {} : { body: JSON.stringify(body) }, signal, redirect: "error" });
138
+ const reader = response.body?.getReader();
139
+ if (!reader) throw new OpenPondModelStarterAttemptError(response.status, "attempt_empty_response", "Attempt response was empty.");
140
+ let bytes = 0;
141
+ let text = "";
142
+ const decoder = new TextDecoder();
143
+ try {
144
+ while (true) {
145
+ const chunk = await reader.read();
146
+ if (chunk.done) break;
147
+ bytes += chunk.value.byteLength;
148
+ if (bytes > 16777216) throw new OpenPondModelStarterAttemptError(502, "attempt_response_too_large", "Attempt response exceeded its byte limit.");
149
+ text += decoder.decode(chunk.value, { stream: true });
150
+ }
151
+ text += decoder.decode();
152
+ } finally {
153
+ await reader.cancel();
154
+ reader.releaseLock();
155
+ }
156
+ const value = JSON.parse(text);
157
+ if (!response.ok) {
158
+ const error = z.object({ code: IdSchema, message: z.string().max(2e3) }).safeParse(value);
159
+ throw new OpenPondModelStarterAttemptError(response.status, error.success ? error.data.code : "attempt_request_failed", error.success ? error.data.message : "Attempt request failed.");
160
+ }
161
+ return value;
162
+ }
163
+ };
164
+
165
+ export {
166
+ ModelStarterAttemptPolicySchema,
167
+ ModelStarterAttemptRequestSchema,
168
+ ModelStarterAttemptChoicesQuerySchema,
169
+ ModelStarterAttemptChoicesSchema,
170
+ ModelStarterAttemptSummarySchema,
171
+ ModelStarterAttemptListQuerySchema,
172
+ ModelStarterAttemptPageSchema,
173
+ ModelStarterAttemptResultSchema,
174
+ OpenPondModelStarterAttemptError,
175
+ OpenPondModelStarterAttemptsClient
176
+ };
177
+ //# sourceMappingURL=chunk-EPJM7VEV.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/model-starter-attempts.ts"],
4
+ "sourcesContent": ["import { z } from \"zod\";\nimport { RewardCompositionSchema } from \"@openpond/evals/rewards\";\nimport { TaskGradeSchema } from \"@openpond/evals/graders\";\nimport { ModelProjectVersionedRefSchema } from \"./model-projects.js\";\nimport { canonicalJson, canonicalSha256 } from \"./protocol.js\";\n\nconst IdSchema = z.string().trim().min(1).max(200);\nconst HashSchema = z.string().regex(/^[a-f0-9]{64}$/);\nexport const ModelStarterAttemptPolicySchema = z.discriminatedUnion(\"kind\", [\n z.object({ kind: z.literal(\"hosted_chat\"), modelId: IdSchema, maxOutputTokens: z.number().int().min(1).max(4_096).default(1_024), temperature: z.number().min(0).max(2).default(0), topP: z.number().gt(0).max(1).default(1) }).strict(),\n z.object({ kind: z.literal(\"fixture\"), fixtureId: IdSchema }).strict(),\n]);\n/** The server resolves task input, private state, verifier and fixture script.\n * A caller can select releases, but cannot submit replacement execution bytes. */\nexport const ModelStarterAttemptRequestSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelStarterAttemptRequest.v1\"),\n operationId: IdSchema, teamId: IdSchema, modelProjectId: IdSchema,\n taskset: ModelProjectVersionedRefSchema, taskId: IdSchema,\n environmentSeed: z.number().int().min(0).max(2_147_483_647).default(0),\n policy: ModelStarterAttemptPolicySchema,\n}).strict();\nexport type ModelStarterAttemptRequest = z.infer<typeof ModelStarterAttemptRequestSchema>;\nexport const ModelStarterAttemptChoicesQuerySchema = z.object({ modelProjectId: IdSchema, taskset: ModelProjectVersionedRefSchema, afterTaskId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();\nexport const ModelStarterAttemptChoicesSchema = z.object({\n modelProjectId: IdSchema, taskset: ModelProjectVersionedRefSchema, available: z.boolean(), unavailableReason: z.string().max(1_000).nullable(),\n models: z.array(z.object({ id: IdSchema, name: z.string().max(500) }).strict()).max(200),\n tasks: z.array(z.object({ id: IdSchema, split: z.enum([\"train\", \"validation\", \"frozen_eval\"]), inputPreview: z.string().max(500), fixtures: z.array(z.object({ id: IdSchema, label: z.string().max(200) }).strict()).max(1_000) }).strict()).max(100),\n nextCursor: IdSchema.nullable(),\n}).strict();\nexport const ModelStarterAttemptSummarySchema = z.object({\n schemaVersion: z.literal(\"openpond.modelStarterAttemptSummary.v1\"),\n id: IdSchema, revision: z.number().int().positive(), request: ModelStarterAttemptRequestSchema,\n status: z.enum([\"queued\", \"running\", \"cancelling\", \"completed\", \"failed\", \"cancelled\"]),\n policySnapshot: z.object({ modelId: IdSchema, provider: IdSchema, upstreamModelId: z.string().min(1).max(500), configurationHash: HashSchema }).strict().nullable(),\n createdAt: z.iso.datetime(), startedAt: z.iso.datetime().nullable(), completedAt: z.iso.datetime().nullable(),\n cleanupComplete: z.boolean(), resultAvailable: z.boolean(), score: z.number().min(0).max(1).nullable(),\n gradingStatus: z.enum([\"not_started\", \"scored\", \"unscorable\", \"not_configured\"]).default(\"not_started\"),\n passed: z.boolean().nullable(), outputPreview: z.string().max(500).nullable(),\n error: z.object({ code: IdSchema, message: z.string().max(2_000) }).strict().nullable(),\n}).strict().superRefine((value, context) => {\n if ((value.request.policy.kind === \"fixture\") !== (value.policySnapshot === null)) context.addIssue({ code: \"custom\", path: [\"policySnapshot\"], message: \"Fixture execution must not claim a model identity.\" });\n if (value.status === \"completed\" && (!value.cleanupComplete || !value.resultAvailable || !value.completedAt)) context.addIssue({ code: \"custom\", message: \"Completed attempts require retained results and confirmed cleanup.\" });\n});\nexport type ModelStarterAttemptSummary = z.infer<typeof ModelStarterAttemptSummarySchema>;\nexport const ModelStarterAttemptListQuerySchema = z.object({ modelProjectId: IdSchema, afterId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();\nexport const ModelStarterAttemptPageSchema = z.object({ items: z.array(ModelStarterAttemptSummarySchema).max(100), nextCursor: IdSchema.nullable() }).strict();\nexport const ModelStarterAttemptResultSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelStarterAttemptResult.v1\"),\n attempt: ModelStarterAttemptSummarySchema,\n output: z.string().max(1_048_576).nullable(),\n // Only model-facing messages, never the private environment snapshot.\n messages: z.array(z.record(z.string(), z.unknown())).max(4_002),\n composition: RewardCompositionSchema.nullable(),\n // Ordinary Tasksets have no Reward binding. Absence preserves the hash of\n // already retained v1 results; new producers explicitly return null or a grade.\n grade: TaskGradeSchema.nullable().optional(),\n environment: z.object({ status: z.enum([\"completed\", \"budget_exhausted\", \"cancelled\", \"timed_out\", \"policy_failure\", \"environment_failure\"]), collected: z.boolean(), definition: ModelProjectVersionedRefSchema, initialStateHash: HashSchema.nullable(), finalStateHash: HashSchema.nullable(), attemptHash: HashSchema }).strict(),\n providerRequestIds: z.array(IdSchema).max(1_001),\n contentHash: HashSchema,\n}).strict().superRefine((value, context) => {\n if (!value.grade) return;\n if (value.composition) context.addIssue({ code: \"custom\", path: [\"grade\"], message: \"An ordinary grade cannot also claim a Reward composition.\" });\n if (![\"completed\", \"failed\"].includes(value.attempt.status) || !value.attempt.resultAvailable || value.attempt.score !== value.grade.score || value.attempt.gradingStatus !== value.grade.gradingStatus || value.attempt.passed !== (value.grade.score === null ? null : value.grade.passed)) context.addIssue({ code: \"custom\", path: [\"grade\"], message: \"Ordinary grade differs from its terminal attempt summary.\" });\n});\nexport type ModelStarterAttemptResult = z.infer<typeof ModelStarterAttemptResultSchema>;\n\nexport class OpenPondModelStarterAttemptError extends Error {\n constructor(readonly status: number, readonly code: string, message: string) { super(message); this.name = \"OpenPondModelStarterAttemptError\"; }\n}\n\nexport class OpenPondModelStarterAttemptsClient {\n readonly #options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof globalThis.fetch };\n constructor(options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof globalThis.fetch }) {\n const url = new URL(options.baseUrl);\n if (!options.apiKey.trim() || !options.teamId.trim() || ![\"https:\", \"http:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error(\"Starter attempts require an HTTP(S) endpoint and workspace credentials.\");\n this.#options = { ...options, baseUrl: url.toString().replace(/\\/+$/, \"\") };\n }\n async create(value: z.input<typeof ModelStarterAttemptRequestSchema>, options: { signal?: AbortSignal } = {}) {\n const request = ModelStarterAttemptRequestSchema.parse(value);\n if (request.teamId !== this.#options.teamId) throw new Error(\"Attempt belongs to another workspace.\");\n const result = this.#summary(await this.#request(\"\", \"POST\", request, options.signal));\n if (canonicalJson(result.request) !== canonicalJson(request)) throw new OpenPondModelStarterAttemptError(502, \"attempt_request_mismatch\", \"Attempt receipt differs from the submitted request.\");\n return result;\n }\n async get(id: string, options: { signal?: AbortSignal } = {}) { return this.#summary(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}`, \"GET\", undefined, options.signal), id); }\n async choices(value: z.input<typeof ModelStarterAttemptChoicesQuerySchema>, options: { signal?: AbortSignal } = {}) {\n const query = ModelStarterAttemptChoicesQuerySchema.parse(value);\n const params = new URLSearchParams({ modelProjectId: query.modelProjectId, tasksetId: query.taskset.id, revision: String(query.taskset.revision), contentHash: query.taskset.contentHash, limit: String(query.limit) });\n if (query.afterTaskId) params.set(\"afterTaskId\", query.afterTaskId);\n const result = ModelStarterAttemptChoicesSchema.parse(await this.#request(`/choices?${params}`, \"GET\", undefined, options.signal));\n if (result.modelProjectId !== query.modelProjectId || canonicalJson(result.taskset) !== canonicalJson(query.taskset) || result.tasks.length > query.limit || new Set(result.tasks.map(task => task.id)).size !== result.tasks.length) throw new OpenPondModelStarterAttemptError(502, \"attempt_choices_mismatch\", \"Attempt choices differ from the selected model or Taskset.\");\n return result;\n }\n async cancel(id: string, options: { signal?: AbortSignal } = {}) { return this.#summary(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}/cancel`, \"POST\", undefined, options.signal), id); }\n async result(id: string, options: { signal?: AbortSignal } = {}) {\n const value = ModelStarterAttemptResultSchema.parse(await this.#request(`/${encodeURIComponent(IdSchema.parse(id))}/result`, \"GET\", undefined, options.signal));\n this.#summary(value.attempt, id);\n const { contentHash, ...content } = value;\n if (!value.attempt.resultAvailable || await canonicalSha256(content) !== contentHash) throw new OpenPondModelStarterAttemptError(502, \"attempt_result_integrity\", \"Attempt result integrity failed.\");\n return value;\n }\n async list(value: z.input<typeof ModelStarterAttemptListQuerySchema>, options: { signal?: AbortSignal } = {}) {\n const query = ModelStarterAttemptListQuerySchema.parse(value);\n const params = new URLSearchParams({ modelProjectId: query.modelProjectId, limit: String(query.limit) });\n if (query.afterId) params.set(\"afterId\", query.afterId);\n const page = ModelStarterAttemptPageSchema.parse(await this.#request(`?${params}`, \"GET\", undefined, options.signal));\n if (page.items.length > query.limit || new Set(page.items.map(item => item.id)).size !== page.items.length || page.items.some(item => this.#summary(item).request.modelProjectId !== query.modelProjectId)) throw new OpenPondModelStarterAttemptError(502, \"attempt_page_mismatch\", \"Attempt page differs from the selected model.\");\n return page;\n }\n #summary(value: unknown, id?: string): ModelStarterAttemptSummary {\n const result = ModelStarterAttemptSummarySchema.parse(value);\n if (result.request.teamId !== this.#options.teamId || (id && result.id !== id)) throw new OpenPondModelStarterAttemptError(502, \"attempt_identity_mismatch\", \"Attempt receipt belongs to another identity or workspace.\");\n return result;\n }\n async #request(path: string, method: string, body: unknown, signal?: AbortSignal): Promise<unknown> {\n const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/model-starter-attempts${path}`, { method, headers: { Authorization: `Bearer ${this.#options.apiKey}`, \"X-OpenPond-Team-Id\": this.#options.teamId, \"Content-Type\": \"application/json\", Accept: \"application/json\" }, ...(body === undefined ? {} : { body: JSON.stringify(body) }), signal, redirect: \"error\" });\n const reader = response.body?.getReader();\n if (!reader) throw new OpenPondModelStarterAttemptError(response.status, \"attempt_empty_response\", \"Attempt response was empty.\");\n let bytes = 0; let text = \"\"; const decoder = new TextDecoder();\n try {\n while (true) {\n const chunk = await reader.read(); if (chunk.done) break;\n bytes += chunk.value.byteLength;\n if (bytes > 16_777_216) throw new OpenPondModelStarterAttemptError(502, \"attempt_response_too_large\", \"Attempt response exceeded its byte limit.\");\n text += decoder.decode(chunk.value, { stream: true });\n }\n text += decoder.decode();\n } finally { await reader.cancel(); reader.releaseLock(); }\n const value: unknown = JSON.parse(text);\n if (!response.ok) {\n const error = z.object({ code: IdSchema, message: z.string().max(2_000) }).safeParse(value);\n throw new OpenPondModelStarterAttemptError(response.status, error.success ? error.data.code : \"attempt_request_failed\", error.success ? error.data.message : \"Attempt request failed.\");\n }\n return value;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -10,9 +10,9 @@ import {
10
10
  ReleaseIdSchema,
11
11
  ReleaseTimestampSchema,
12
12
  contentHash
13
- } from "./chunk-ZPCK222K.js";
13
+ } from "./chunk-NF63YMOL.js";
14
14
 
15
- // ../harness/dist/tools.js
15
+ // ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/tools.js
16
16
  import { z } from "zod";
17
17
  var ToolDeclarationSchema = z.object({
18
18
  name: z.string().trim().min(1).max(64).regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/),
@@ -29,7 +29,7 @@ var CapabilityRequirementSchema = z.object({
29
29
  portability: z.enum(["portable", "host_adapter", "local_only", "hosted_only"])
30
30
  }).strict();
31
31
 
32
- // ../harness/dist/models.js
32
+ // ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/models.js
33
33
  import { z as z2 } from "zod";
34
34
  var ModelRefSchema = z2.object({
35
35
  provider: ReleaseIdSchema,
@@ -60,7 +60,7 @@ var ChatModelRefSchema = z2.object({
60
60
  modelId: z2.string().trim().min(1).max(300)
61
61
  });
62
62
 
63
- // ../harness/dist/evaluation-review.js
63
+ // ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/evaluation-review.js
64
64
  import { z as z3 } from "zod";
65
65
  var BoundedTextSchema = z3.string().trim().min(1).max(1e5);
66
66
  var HarnessEvaluationReviewClassificationSchema = z3.enum([
@@ -316,7 +316,7 @@ var HarnessEvaluationReviewNavigationDecisionSchema = z3.object({
316
316
  reason: BoundedTextSchema
317
317
  }).strict();
318
318
 
319
- // ../harness/dist/harness.js
319
+ // ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/harness.js
320
320
  import { z as z4 } from "zod";
321
321
  var PortabilityReportSchema = z4.object({
322
322
  portable: z4.boolean(),
@@ -398,10 +398,10 @@ var HarnessTraceSchema = z4.object({
398
398
  contentHash: ReleaseHashSchema
399
399
  }).strict();
400
400
 
401
- // ../harness/dist/harness-improvements.js
401
+ // ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/harness-improvements.js
402
402
  import { z as z6 } from "zod";
403
403
 
404
- // ../harness/dist/harness-workspaces.js
404
+ // ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/harness-workspaces.js
405
405
  import { z as z5 } from "zod";
406
406
  var MetadataSchema2 = z5.record(z5.string(), z5.unknown()).default({});
407
407
  var RevisionSchema = z5.number().int().nonnegative();
@@ -705,7 +705,7 @@ var HarnessOverlayMergeReceiptSchema = HarnessOverlayMergeReceiptContentSchema.e
705
705
  contentHash: ReleaseHashSchema
706
706
  }).strict();
707
707
 
708
- // ../harness/dist/harness-improvements.js
708
+ // ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/harness-improvements.js
709
709
  var BoundedTextSchema3 = z6.string().trim().min(1).max(1e5);
710
710
  var MetadataSchema3 = z6.record(z6.string(), z6.unknown()).default({});
711
711
  var ImprovementSafeBoundaryKindSchema = z6.enum([
@@ -963,7 +963,7 @@ var ImprovementApplyReceiptSchema = ImprovementApplyReceiptContentSchema.extend(
963
963
  contentHash: ReleaseHashSchema
964
964
  }).strict();
965
965
 
966
- // ../harness/dist/refinement-lifecycle.js
966
+ // ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/refinement-lifecycle.js
967
967
  import { z as z7 } from "zod";
968
968
  var ShortTextSchema = z7.string().trim().min(1).max(2e3);
969
969
  var BoundedTextSchema4 = z7.string().trim().min(1).max(1e5);
@@ -1370,4 +1370,4 @@ export {
1370
1370
  CapabilityRequirementSchema,
1371
1371
  ChatModelRefSchema
1372
1372
  };
1373
- //# sourceMappingURL=chunk-IVEXCIHO.js.map
1373
+ //# sourceMappingURL=chunk-EV4PKJWN.js.map