openpond-sdk 0.12.26 → 0.12.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PRODUCT_INTEGRATION.md +13 -6
- package/README.md +2 -10
- package/SERVERLESS_SERVING.md +52 -35
- package/TASK_INGESTION.md +0 -4
- package/dist/advanced-refiner-evaluations.js +7 -7
- package/dist/ai-sdk.js +20 -83
- package/dist/ai-sdk.js.map +1 -1
- package/dist/candidate-evaluations.js +6 -6
- package/dist/{chunk-UZAVG2WK.js → chunk-3HOGOWKU.js} +8 -6
- package/dist/chunk-3HOGOWKU.js.map +1 -0
- package/dist/{chunk-YV6PPDXZ.js → chunk-3Z5IK2UK.js} +27 -2
- package/dist/chunk-3Z5IK2UK.js.map +1 -0
- package/dist/{chunk-4REK5TTE.js → chunk-4D4QSQC3.js} +2 -2
- package/dist/{chunk-AMZ2SWHR.js → chunk-534W2O2S.js} +2 -2
- package/dist/{chunk-6LVLWRBJ.js → chunk-54BJJL7G.js} +2 -2
- package/dist/{chunk-XWUTYFOU.js → chunk-5KJY44FB.js} +3 -3
- package/dist/{chunk-QKLZZOZD.js → chunk-7MLFWVDI.js} +29 -10
- package/dist/chunk-7MLFWVDI.js.map +1 -0
- package/dist/{chunk-4A4FNG4R.js → chunk-7ZV626YS.js} +2 -2
- package/dist/{chunk-57ROW3XF.js → chunk-ABOZV47D.js} +2 -2
- package/dist/{chunk-3BILL33A.js → chunk-BIQ5TG3T.js} +4 -4
- package/dist/{chunk-JINWKUKR.js → chunk-BT6CC6QB.js} +3 -3
- package/dist/{chunk-4PEK3YOW.js → chunk-CNFN6GHY.js} +2 -2
- package/dist/{chunk-X5AT253K.js → chunk-CVYGJUWM.js} +2 -2
- package/dist/{chunk-D26RJQU7.js → chunk-CX7ETU2F.js} +2 -2
- package/dist/{chunk-4CDLPMJK.js → chunk-D7LV3USE.js} +2 -2
- package/dist/{chunk-WZKKQNYY.js → chunk-GA7OSSEA.js} +2 -2
- package/dist/{chunk-EL6KZO43.js → chunk-GFWXDWEE.js} +3 -3
- package/dist/{chunk-XYK3MAIC.js → chunk-JYWIKBGD.js} +122 -112
- package/dist/chunk-JYWIKBGD.js.map +1 -0
- package/dist/{chunk-AQV7RQZH.js → chunk-K4WU4JOP.js} +2 -2
- package/dist/{chunk-CAOMKM55.js → chunk-L7MVGGBH.js} +2 -2
- package/dist/{chunk-P56JWQYV.js → chunk-LRFVISLA.js} +3 -3
- package/dist/{chunk-2U6BQ5C4.js → chunk-MJHQMQEW.js} +3 -3
- package/dist/chunk-ON3KSXWR.js +639 -0
- package/dist/chunk-ON3KSXWR.js.map +1 -0
- package/dist/{chunk-PMVSO23F.js → chunk-RMXZISHK.js} +10 -1
- package/dist/chunk-RMXZISHK.js.map +1 -0
- package/dist/{chunk-JWEIAEQ6.js → chunk-TMNEDWA7.js} +10 -3
- package/dist/chunk-TMNEDWA7.js.map +1 -0
- package/dist/{chunk-C7I4ZG6Q.js → chunk-TX552FQG.js} +3 -3
- package/dist/{chunk-4CRLQMJ2.js → chunk-VIDRZCPQ.js} +6 -6
- package/dist/{chunk-MN4FE52A.js → chunk-VRUAIMM3.js} +7 -7
- package/dist/chunk-VRUAIMM3.js.map +1 -0
- package/dist/{chunk-H5KHLBC5.js → chunk-WJZHSIGD.js} +6 -8
- package/dist/{chunk-H5KHLBC5.js.map → chunk-WJZHSIGD.js.map} +1 -1
- package/dist/{chunk-HCUZYGUK.js → chunk-WPTFJZ4L.js} +3 -3
- package/dist/connected-evidence.js +7 -7
- package/dist/dataset-workspaces.js +10 -10
- package/dist/errors.js +1 -1
- package/dist/experiment-evaluation-schedules.js +16 -16
- package/dist/experiment-improvements.js +7 -7
- package/dist/experiments.js +15 -15
- package/dist/index.js +23 -23
- package/dist/learning.js +15 -4
- package/dist/learning.js.map +1 -1
- package/dist/model-projects.js +1 -1
- package/dist/model-starter-attempts.js +2 -2
- package/dist/model-starter-catalog.js +4 -4
- package/dist/model-starters.js +4 -4
- package/dist/model-taskset-runs.js +3 -3
- package/dist/post-training.js +6 -6
- package/dist/taskset-drafts.js +6 -6
- package/dist/taskset-packages.js +12 -10
- package/dist/training-bundle.js +46 -20
- package/dist/training-bundle.js.map +1 -1
- package/dist/training-hardware.js +2 -2
- package/dist/training.js +5620 -4342
- package/dist/training.js.map +1 -1
- package/dist/types/packages/sdk/src/ai-sdk.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/alphaedit-model-serving.d.ts +8 -4
- package/dist/types/packages/sdk/src/alphaedit-model-serving.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/candidate-evaluation-client.d.ts +162 -162
- package/dist/types/packages/sdk/src/decision-model-serving.d.ts +4 -2
- package/dist/types/packages/sdk/src/decision-model-serving.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/engram-model-serving.d.ts +3 -1
- package/dist/types/packages/sdk/src/engram-model-serving.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiment-client.d.ts +699 -691
- package/dist/types/packages/sdk/src/experiment-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiment-draft-storage.d.ts +34 -28
- package/dist/types/packages/sdk/src/experiment-draft-storage.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiment-improvement-client.d.ts +1889 -1889
- package/dist/types/packages/sdk/src/experiment-run-details.d.ts +7 -7
- package/dist/types/packages/sdk/src/experiment-scoring-contracts.d.ts +21 -3
- package/dist/types/packages/sdk/src/experiment-scoring-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/learning.d.ts +1 -0
- package/dist/types/packages/sdk/src/learning.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/managed-alphaedit-executions.d.ts +272 -16
- package/dist/types/packages/sdk/src/managed-alphaedit-executions.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/managed-compute-price.d.ts +53 -1
- package/dist/types/packages/sdk/src/managed-compute-price.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/managed-decision-executions.d.ts +612 -356
- package/dist/types/packages/sdk/src/managed-decision-executions.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/managed-engram-executions.d.ts +272 -16
- package/dist/types/packages/sdk/src/managed-engram-executions.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/managed-modification-executions.d.ts +208 -16
- package/dist/types/packages/sdk/src/managed-modification-executions.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/managed-neuron-training-executions.d.ts +272 -16
- package/dist/types/packages/sdk/src/managed-neuron-training-executions.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/managed-serving-usage.d.ts +3 -0
- package/dist/types/packages/sdk/src/managed-serving-usage.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/managed-training-preparation.d.ts +25 -25
- package/dist/types/packages/sdk/src/managed-training-preparation.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-learning-capabilities.d.ts +4 -0
- package/dist/types/packages/sdk/src/model-learning-capabilities.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/model-learning-policy.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-supervised-training-defaults.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-training-defaults.d.ts +5 -2
- package/dist/types/packages/sdk/src/model-training-defaults.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/neuron-training-model-serving.d.ts +8 -4
- package/dist/types/packages/sdk/src/neuron-training-model-serving.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/post-training.d.ts +7 -7
- package/dist/types/packages/sdk/src/product-model-response.d.ts +6 -2
- package/dist/types/packages/sdk/src/product-model-response.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/product-model-transport.d.ts +99 -0
- package/dist/types/packages/sdk/src/product-model-transport.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/product-model-wire.d.ts +104 -0
- package/dist/types/packages/sdk/src/product-model-wire.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/product-models.d.ts +18 -15
- package/dist/types/packages/sdk/src/product-models.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/serverless-serving.d.ts +416 -9
- package/dist/types/packages/sdk/src/serverless-serving.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/steering-model-serving.d.ts +2144 -703
- package/dist/types/packages/sdk/src/steering-model-serving.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/steering-profile-publication.d.ts +631 -0
- package/dist/types/packages/sdk/src/steering-profile-publication.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +120 -120
- package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +20 -20
- package/dist/types/packages/sdk/src/taskset-packages.d.ts +1 -0
- package/dist/types/packages/sdk/src/taskset-packages.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-text-policy.d.ts +11 -0
- package/dist/types/packages/sdk/src/taskset-text-policy.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-compute-selection.d.ts +6 -19
- package/dist/types/packages/sdk/src/training-compute-selection.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-estimates.d.ts +1 -1
- package/dist/types/packages/sdk/src/training-experiment-setup.d.ts +4 -1
- package/dist/types/packages/sdk/src/training-experiment-setup.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-harness-sources.d.ts +2 -2
- package/dist/types/packages/sdk/src/training-learning-batch.d.ts +40 -40
- package/dist/types/packages/sdk/src/training-model-serving-control.d.ts +406 -8
- package/dist/types/packages/sdk/src/training-model-serving-control.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-model-serving.d.ts +1136 -30
- package/dist/types/packages/sdk/src/training-model-serving.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-operations.d.ts +11197 -0
- package/dist/types/packages/sdk/src/training-operations.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts +25 -25
- package/dist/types/packages/sdk/src/training-supervised.d.ts +13 -0
- package/dist/types/packages/sdk/src/training-supervised.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-transport.d.ts +4 -1
- package/dist/types/packages/sdk/src/training-transport.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training.d.ts +15885 -4662
- package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/weight-inference.d.ts +8 -5
- package/dist/types/packages/sdk/src/weight-inference.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/weight-model-versions.d.ts +2089 -398
- package/dist/types/packages/sdk/src/weight-model-versions.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/weight-space-artifact.d.ts +433 -0
- package/dist/types/packages/sdk/src/weight-space-artifact.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/weight-space-evaluation.d.ts +1437 -0
- package/dist/types/packages/sdk/src/weight-space-evaluation.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/weight-space-model-serving.d.ts +2910 -0
- package/dist/types/packages/sdk/src/weight-space-model-serving.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/weight-space-programming.d.ts +845 -0
- package/dist/types/packages/sdk/src/weight-space-programming.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/weight-space-sessions.d.ts +4600 -0
- package/dist/types/packages/sdk/src/weight-space-sessions.d.ts.map +1 -0
- package/fixtures/python-foundation/operation-matrix.json +369 -0
- package/fixtures/python-foundation/schemas.json +34304 -27905
- package/fixtures/python-foundation/training-estimate-http-workflow.json +1 -1
- package/package.json +2 -2
- package/dist/chunk-JWEIAEQ6.js.map +0 -1
- package/dist/chunk-MN4FE52A.js.map +0 -1
- package/dist/chunk-PMVSO23F.js.map +0 -1
- package/dist/chunk-QKLZZOZD.js.map +0 -1
- package/dist/chunk-UZAVG2WK.js.map +0 -1
- package/dist/chunk-XYK3MAIC.js.map +0 -1
- package/dist/chunk-YV6PPDXZ.js.map +0 -1
- package/dist/chunk-ZG4HVCJB.js +0 -248
- package/dist/chunk-ZG4HVCJB.js.map +0 -1
- /package/dist/{chunk-4REK5TTE.js.map → chunk-4D4QSQC3.js.map} +0 -0
- /package/dist/{chunk-AMZ2SWHR.js.map → chunk-534W2O2S.js.map} +0 -0
- /package/dist/{chunk-6LVLWRBJ.js.map → chunk-54BJJL7G.js.map} +0 -0
- /package/dist/{chunk-XWUTYFOU.js.map → chunk-5KJY44FB.js.map} +0 -0
- /package/dist/{chunk-4A4FNG4R.js.map → chunk-7ZV626YS.js.map} +0 -0
- /package/dist/{chunk-57ROW3XF.js.map → chunk-ABOZV47D.js.map} +0 -0
- /package/dist/{chunk-3BILL33A.js.map → chunk-BIQ5TG3T.js.map} +0 -0
- /package/dist/{chunk-JINWKUKR.js.map → chunk-BT6CC6QB.js.map} +0 -0
- /package/dist/{chunk-4PEK3YOW.js.map → chunk-CNFN6GHY.js.map} +0 -0
- /package/dist/{chunk-X5AT253K.js.map → chunk-CVYGJUWM.js.map} +0 -0
- /package/dist/{chunk-D26RJQU7.js.map → chunk-CX7ETU2F.js.map} +0 -0
- /package/dist/{chunk-4CDLPMJK.js.map → chunk-D7LV3USE.js.map} +0 -0
- /package/dist/{chunk-WZKKQNYY.js.map → chunk-GA7OSSEA.js.map} +0 -0
- /package/dist/{chunk-EL6KZO43.js.map → chunk-GFWXDWEE.js.map} +0 -0
- /package/dist/{chunk-AQV7RQZH.js.map → chunk-K4WU4JOP.js.map} +0 -0
- /package/dist/{chunk-CAOMKM55.js.map → chunk-L7MVGGBH.js.map} +0 -0
- /package/dist/{chunk-P56JWQYV.js.map → chunk-LRFVISLA.js.map} +0 -0
- /package/dist/{chunk-2U6BQ5C4.js.map → chunk-MJHQMQEW.js.map} +0 -0
- /package/dist/{chunk-C7I4ZG6Q.js.map → chunk-TX552FQG.js.map} +0 -0
- /package/dist/{chunk-4CRLQMJ2.js.map → chunk-VIDRZCPQ.js.map} +0 -0
- /package/dist/{chunk-HCUZYGUK.js.map → chunk-WPTFJZ4L.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/product-model-wire.ts","../src/product-model-transport.ts","../src/product-model-response.ts","../src/product-models.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport type ProductModelConnection = {\n baseUrl?: string;\n teamId?: string;\n apiKey: string;\n timeoutMs?: number;\n fetch?: typeof fetch;\n};\n\nexport class ProductModelError extends Error {\n constructor(\n readonly code: string,\n readonly status: number,\n readonly outcomeUnknown: boolean,\n readonly requestId?: string,\n readonly clientRequestId?: string,\n ) {\n super(`OpenPond model request failed (${code}).`);\n this.name = \"ProductModelError\";\n }\n}\n\n/** Retained function arguments stay JSON text; recovery never executes tools. */\nexport const ProductModelToolCallSchema = z.object({\n id: z.string(),\n type: z.literal(\"function\").default(\"function\"),\n function: z.object({ name: z.string(), arguments: z.string() }),\n}).passthrough();\nexport type ProductModelToolCall = z.infer<typeof ProductModelToolCallSchema>;\n\nexport const ProductModelUsageSchema = z.object({\n prompt_tokens: z.number().int().nonnegative(),\n completion_tokens: z.number().int().nonnegative(),\n total_tokens: z.number().int().nonnegative(),\n});\nexport const ProductModelChunkSchema = z.object({\n id: z.string(),\n model: z.string(),\n system_fingerprint: z.string().nullable().optional(),\n openpond: z.record(z.string(), z.json()).optional(),\n usage: ProductModelUsageSchema.nullable().optional(),\n choices: z\n .array(\n z.object({\n index: z.number().int(),\n finish_reason: z.string().nullable().optional(),\n delta: z\n .object({\n content: z.string().nullable().optional(),\n tool_calls: z.unknown().optional(),\n })\n .passthrough()\n .optional(),\n message: z\n .object({\n content: z.string().nullable(),\n tool_calls: z.unknown().optional(),\n })\n .passthrough()\n .optional(),\n }),\n )\n .max(1),\n}).passthrough();\n\nexport const ProductModelRequestStatusSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.modelRequestStatus.v1\"),\n requestId: z.string().regex(/^pinf_[A-Za-z0-9-]{8,191}$/),\n clientRequestId: z.uuid().nullable(),\n modelId: z.string(),\n state: z.enum([\n \"pending\",\n \"running\",\n \"stopping\",\n \"completed\",\n \"failed\",\n \"cancelled\",\n ]),\n deadlineAt: z.iso.datetime(),\n retryAt: z.iso.datetime().nullable(),\n result: ProductModelChunkSchema.nullable(),\n failureCode: z.string().nullable(),\n })\n .strict();\n\nexport type ProductModelWireStatus = z.infer<typeof ProductModelRequestStatusSchema>;\nexport type ProductModelRequestIdentity = { requestId?: string; clientRequestId?: string };\n\n/** The serving API resolves exactly one valid hosted-model prefix. Keep the\n * caller's named binding in results while checking the canonical wire name. */\nexport function canonicalResponseModelId(modelId: string) {\n const name = modelId.startsWith(\"personalized:\")\n ? modelId.slice(\"personalized:\".length)\n : null;\n return name && /^[a-z0-9][a-z0-9._:-]{2,127}$/.test(name) ? name : modelId;\n}\n\nexport function productModelEndpoint(value: string): string {\n const url = new URL(value);\n if (\n ![\"http:\", \"https:\"].includes(url.protocol) ||\n url.username ||\n url.password ||\n url.search ||\n url.hash\n )\n throw new Error(\"A clean serving base URL is required.\");\n return url.href.replace(/\\/$/, \"\");\n}\n\n","import { z } from \"zod\";\nimport { readBoundedJsonResponse } from \"./protocol.js\";\nimport { boundProductModelResponse } from \"./product-model-response.js\";\nimport {\n ProductModelError, ProductModelRequestStatusSchema, ProductModelToolCallSchema, canonicalResponseModelId,\n productModelEndpoint, type ProductModelConnection, type ProductModelRequestIdentity,\n type ProductModelWireStatus,\n} from \"./product-model-wire.js\";\n\nconst MAX_BODY_BYTES = 8 * 1024 * 1024;\nconst RequestId = ProductModelRequestStatusSchema.shape.requestId;\ntype Budget = { signal: AbortSignal; until: number };\nconst unknown = (identity: ProductModelRequestIdentity, status = 0) =>\n new ProductModelError(\"model_outcome_unknown\", status, true, identity.requestId, identity.clientRequestId);\n\n/** One paid submission, followed only by authenticated reads of that operation.\n * The text API and optional AI SDK adapter share this transport without sharing\n * mutable per-call identity or converting tool calls into a text projection. */\nexport class ProductModelTransport {\n private readonly identities = new WeakMap<Response, ProductModelRequestIdentity>();\n private readonly endpoint: string;\n constructor(private readonly modelId: string, private readonly connection: ProductModelConnection) {\n this.endpoint = `${productModelEndpoint(connection.baseUrl!)}/chat/completions`;\n }\n identity(response: Response): ProductModelRequestIdentity {\n return this.identities.get(response) ?? {};\n }\n private budget(timeoutMs: number, signal?: AbortSignal | null): Budget {\n const timeout = AbortSignal.timeout(timeoutMs);\n return { until: Date.now() + timeoutMs, signal: signal ? AbortSignal.any([signal, timeout]) : timeout };\n }\n private headers(extra?: HeadersInit) {\n const headers = new Headers(extra);\n headers.delete(\"openpond-api-key\");\n headers.set(\"Authorization\", `Bearer ${this.connection.apiKey}`);\n // An optional provider's per-call headers cannot change its workspace.\n headers.delete(\"X-OpenPond-Team-Id\");\n if (this.connection.teamId) headers.set(\"X-OpenPond-Team-Id\", this.connection.teamId);\n return headers;\n }\n private async fetchResponse(url: string, init: RequestInit, budget: Budget, identity: ProductModelRequestIdentity) {\n if (budget.signal.aborted || Date.now() >= budget.until) throw unknown(identity);\n let response: Response;\n try {\n response = await (this.connection.fetch ?? fetch)(url, {\n ...init, redirect: \"error\", signal: budget.signal,\n });\n } catch {\n throw unknown(identity);\n }\n const observedId = response.headers.get(\"x-openpond-request-id\") ?? response.headers.get(\"x-request-id\");\n // A generic HTTP trace header is not the retained operation identity.\n // Pending/status bodies bind their own validated ID to the submitted UUID.\n if (!identity.requestId && observedId && (init.method !== \"GET\" && response.status !== 202\n || RequestId.safeParse(observedId).success)) identity.requestId = observedId;\n if (!response.ok) {\n await response.body?.cancel().catch(() => {});\n throw new ProductModelError(init.method === \"GET\" ? \"model_status_unavailable\" : \"model_request_rejected\",\n response.status, response.status === 408 || response.status >= 500,\n identity.requestId, identity.clientRequestId);\n }\n const bounded = boundProductModelResponse(response, { signal: budget.signal, ...identity });\n this.identities.set(bounded, { ...identity });\n return bounded;\n }\n async request(body: string, options: {\n stream: boolean; signal?: AbortSignal | null; clientRequestId?: string; headers?: HeadersInit;\n }): Promise<Response> {\n if (new TextEncoder().encode(body).length > 1024 * 1024)\n throw new ProductModelError(\"payload_too_large\", 0, false);\n const headers = this.headers(options.headers);\n const parsedId = z.uuid().safeParse(options.clientRequestId ?? headers.get(\"X-OpenPond-Client-Request-Id\") ?? crypto.randomUUID());\n if (!parsedId.success) throw new ProductModelError(\"client_request_id_invalid\", 0, false);\n const identity: ProductModelRequestIdentity = { clientRequestId: parsedId.data };\n headers.set(\"X-OpenPond-Client-Request-Id\", parsedId.data);\n headers.delete(\"idempotency-key\");\n headers.delete(\"x-request-id\");\n headers.set(\"Content-Type\", \"application/json\");\n headers.set(\"Accept\", options.stream ? \"text/event-stream\" : \"application/json\");\n const budget = this.budget(this.connection.timeoutMs ?? 630_000, options.signal);\n const response = await this.fetchResponse(this.endpoint, { method: \"POST\", headers, body }, budget, identity);\n if (response.status !== 202) return response;\n const completion = await this.observePending(response, identity, budget);\n let terminal: Response;\n try { terminal = terminalResponse(completion, options.stream); }\n catch { throw new ProductModelError(\"model_response_invalid\", 200, true, identity.requestId, identity.clientRequestId); }\n const bounded = boundProductModelResponse(terminal, { signal: budget.signal, ...identity });\n this.identities.set(bounded, { ...identity });\n return bounded;\n }\n private async parseStatus(response: Response, expected: ProductModelRequestIdentity, deadlineAt?: string) {\n let status: ProductModelWireStatus;\n try {\n status = ProductModelRequestStatusSchema.parse(await readBoundedJsonResponse(response, MAX_BODY_BYTES, \"Model status\"));\n } catch {\n throw new ProductModelError(\"model_response_invalid\", response.status, true, expected.requestId, expected.clientRequestId);\n }\n if (status.modelId !== canonicalResponseModelId(this.modelId)\n || expected.requestId !== undefined && status.requestId !== expected.requestId\n || expected.clientRequestId !== undefined && status.clientRequestId !== expected.clientRequestId\n || deadlineAt !== undefined && status.deadlineAt !== deadlineAt)\n throw new ProductModelError(\"model_recovery_identity_changed\", 409, true, expected.requestId, expected.clientRequestId);\n if (status.result && (status.state !== \"completed\" || status.failureCode !== null\n || status.result.id !== status.requestId || status.result.model !== status.modelId\n || status.result.choices.length !== 1 || status.result.choices[0]?.index !== 0\n || !status.result.choices[0]?.message || !status.result.choices[0]?.finish_reason))\n throw new ProductModelError(\"model_response_invalid\", response.status, true, status.requestId, expected.clientRequestId);\n return status;\n }\n private async readStatus(suffix: string, expected: ProductModelRequestIdentity, budget: Budget, deadlineAt?: string) {\n const headers = this.headers();\n headers.set(\"Accept\", \"application/json\");\n const response = await this.fetchResponse(`${this.endpoint}${suffix}`, { method: \"GET\", headers }, budget, expected);\n return this.parseStatus(response, expected, deadlineAt);\n }\n async inspectRequest(requestId: string) {\n const id = RequestId.parse(requestId);\n return this.readStatus(`/${encodeURIComponent(id)}`, { requestId: id }, this.budget(30_000));\n }\n async recover(clientRequestId: string) {\n const id = z.uuid().parse(clientRequestId);\n return this.readStatus(`?clientRequestId=${encodeURIComponent(id)}`, { clientRequestId: id }, this.budget(30_000));\n }\n private async observePending(response: Response, identity: ProductModelRequestIdentity, budget: Budget) {\n let status = await this.parseStatus(response, identity);\n identity.requestId = status.requestId;\n const deadlineAt = status.deadlineAt;\n const remaining = Math.min(budget.until, Date.parse(deadlineAt) + 30_000) - Date.now();\n if (remaining <= 0) throw unknown(identity, 202);\n const observation = this.budget(remaining, budget.signal);\n budget.until = observation.until;\n budget.signal = observation.signal;\n for (;;) {\n if (observation.signal.aborted) throw unknown(identity, 202);\n if (status.state === \"completed\" && status.result) return status.result;\n if (status.state === \"completed\" || status.state === \"failed\" || status.state === \"cancelled\")\n throw new ProductModelError(status.state === \"completed\" ? \"model_result_not_retained\" : \"model_request_failed\",\n 200, false, identity.requestId, identity.clientRequestId);\n const delay = Math.min(observation.until - Date.now(), Math.max(500,\n Math.min(15_000, status.retryAt ? Date.parse(status.retryAt) - Date.now() : 2_000)));\n await waitForObservation(delay, observation.signal, identity);\n try {\n status = await this.readStatus(`/${encodeURIComponent(identity.requestId!)}`, identity,\n this.budget(Math.max(1, Math.min(30_000, observation.until - Date.now())), observation.signal), deadlineAt);\n } catch (error) {\n if (error instanceof ProductModelError && [\"model_recovery_identity_changed\", \"model_response_invalid\"].includes(error.code)) throw error;\n throw unknown(identity, 202);\n }\n }\n }\n async cancelRequest(requestId: string) {\n const id = RequestId.parse(requestId);\n try {\n const response = await this.fetchResponse(`${this.endpoint}/${encodeURIComponent(id)}/cancel`,\n { method: \"POST\", headers: this.headers() }, this.budget(30_000), { requestId: id });\n await response.body?.cancel();\n } catch {\n throw new ProductModelError(\"model_cancel_pending\", 0, true, id);\n }\n }\n}\n\nasync function waitForObservation(delay: number, signal: AbortSignal, identity: ProductModelRequestIdentity) {\n if (signal.aborted || delay <= 0) throw unknown(identity, 202);\n await new Promise<void>((resolve, reject) => {\n const abort = () => { clearTimeout(timer); signal.removeEventListener(\"abort\", abort); reject(unknown(identity, 202)); };\n const timer = setTimeout(() => { signal.removeEventListener(\"abort\", abort); resolve(); }, delay);\n signal.addEventListener(\"abort\", abort, { once: true });\n if (signal.aborted) abort();\n });\n}\n\nconst ToolCalls = z.array(ProductModelToolCallSchema);\n/** A retained result is complete, not a resumed native token stream. Emit its\n * exact payload as bounded deltas and one terminal marker without another POST. */\nfunction terminalResponse(completion: NonNullable<ProductModelWireStatus[\"result\"]>, stream: boolean) {\n const headers = { \"x-openpond-request-id\": completion.id, \"cache-control\": \"private, no-store\" };\n if (!stream) return Response.json(completion, { headers });\n const choice = completion.choices[0]!, message = choice.message!;\n const identity = { id: completion.id, model: completion.model, created: completion.created,\n system_fingerprint: completion.system_fingerprint };\n const frames: string[] = [];\n const emit = (delta: Record<string, unknown>) => frames.push(`data: ${JSON.stringify({ ...identity,\n choices: [{ index: 0, delta, finish_reason: null }] })}\\n\\n`);\n emit({ role: \"assistant\" });\n if (message.content) for (let offset = 0; offset < message.content.length; offset += 16_384)\n emit({ content: message.content.slice(offset, offset + 16_384) });\n if (message.tool_calls !== undefined && message.tool_calls !== null) {\n const tools = ToolCalls.parse(message.tool_calls);\n for (const [index, tool] of tools.entries()) {\n emit({ tool_calls: [{ ...tool, index, type: \"function\", function: { name: tool.function.name, arguments: \"\" } }] });\n for (let offset = 0; offset < tool.function.arguments.length; offset += 16_384)\n emit({ tool_calls: [{ index, function: { arguments: tool.function.arguments.slice(offset, offset + 16_384) } }] });\n }\n }\n frames.push(`data: ${JSON.stringify({ ...identity, openpond: completion.openpond, usage: completion.usage,\n choices: [{ index: 0, delta: {}, finish_reason: choice.finish_reason }] })}\\n\\n`, \"data: [DONE]\\n\\n\");\n return new Response(frames.join(\"\"), { headers: { ...headers, \"content-type\": \"text/event-stream\" } });\n}\n","import { ProductModelError } from \"./product-model-wire.js\";\n\n/** Bound response bodies for both model consumers and require the\n * personalized gateway's terminal marker before treating EOF as completion. */\nexport function boundProductModelResponse(response: Response, context: {\n signal?: AbortSignal; requestId?: string; clientRequestId?: string;\n} = {}): Response {\n const headers = new Headers(response.headers);\n if (context.clientRequestId) headers.set(\"x-openpond-client-request-id\", context.clientRequestId);\n if (!response.body) return new Response(null, { status: response.status, statusText: response.statusText, headers });\n const streaming = response.headers.get(\"content-type\")?.includes(\"text/event-stream\") ?? false;\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let total = 0,\n pending = \"\",\n terminal = false;\n let identity: { id: string; model: string } | undefined;\n const fail = () =>\n new ProductModelError(\n streaming ? \"model_stream_interrupted\" : \"model_response_invalid\",\n response.status,\n true,\n context.requestId ?? response.headers.get(\"x-openpond-request-id\") ??\n response.headers.get(\"x-request-id\") ??\n undefined,\n context.clientRequestId,\n );\n let closed = false;\n let cancellation: Promise<void> | undefined;\n // Abort, parser failure and consumer cancellation may converge. One owner\n // cancels the source and releases its reader only after pending reads settle.\n const cancelReader = (reason?: unknown) => cancellation ??= reader.cancel(reason)\n .finally(() => reader.releaseLock());\n let abort: (() => void) | undefined;\n const cleanup = () => { if (abort) context.signal?.removeEventListener(\"abort\", abort); };\n const body = new ReadableStream<Uint8Array>({\n start(controller) {\n abort = () => {\n if (closed) return;\n closed = true;\n cleanup();\n void cancelReader().catch(() => {});\n controller.error(fail());\n };\n context.signal?.addEventListener(\"abort\", abort, { once: true });\n if (context.signal?.aborted) abort();\n },\n async pull(controller) {\n if (closed) return;\n try {\n const { done, value } = await reader.read();\n if (closed) return;\n if (done) {\n if (streaming && !terminal) throw fail();\n closed = true;\n cleanup();\n controller.close();\n reader.releaseLock();\n return;\n }\n total += value.byteLength;\n if (total > 8 * 1024 * 1024) throw fail();\n if (streaming) {\n pending = (pending + decoder.decode(value, { stream: true })).replace(/\\r\\n/g, \"\\n\");\n let boundary: number;\n while ((boundary = pending.indexOf(\"\\n\\n\")) >= 0) {\n const frame = pending.slice(0, boundary);\n pending = pending.slice(boundary + 2);\n if (new TextEncoder().encode(frame).length > 1024 * 1024) throw fail();\n const data = frame\n .split(\"\\n\")\n .filter((line) => line.startsWith(\"data:\"))\n .map((line) => line.slice(5).trimStart())\n .join(\"\\n\");\n if (data === \"[DONE]\") terminal = true;\n else if (data) {\n const chunk = JSON.parse(data);\n if (typeof chunk.id === \"string\" && typeof chunk.model === \"string\") {\n if (identity && (chunk.id !== identity.id || chunk.model !== identity.model))\n throw fail();\n identity = { id: chunk.id, model: chunk.model };\n }\n }\n }\n if (new TextEncoder().encode(pending).length > 1024 * 1024) throw fail();\n }\n controller.enqueue(value);\n } catch {\n if (closed) return;\n closed = true;\n cleanup();\n await cancelReader().catch(() => {});\n controller.error(fail());\n }\n },\n async cancel(reason) {\n closed = true;\n cleanup();\n await cancelReader(reason);\n },\n });\n return new Response(body, {\n status: response.status,\n statusText: response.statusText,\n headers,\n });\n}\n","import { DEFAULT_MODEL_BASE_URL } from \"./endpoints.js\";\nimport { z } from \"zod\";\nimport { readBoundedJsonResponse } from \"./protocol.js\";\nimport { ProductModelTransport } from \"./product-model-transport.js\";\nimport { ProductModelError, productModelEndpoint, ProductModelChunkSchema as Chunk,\n ProductModelUsageSchema as Usage, ProductModelToolCallSchema, type ProductModelToolCall, type ProductModelConnection,\n type ProductModelWireStatus } from \"./product-model-wire.js\";\nexport { ProductModelError, productModelEndpoint, type ProductModelConnection, type ProductModelToolCall } from \"./product-model-wire.js\";\n\nexport type ProductModelBinding = {\n id: string;\n capabilities?: {\n streaming?: boolean;\n tools?: boolean;\n structuredOutput?: false;\n };\n};\nexport type ProductModelMessage = {\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n};\nexport type ProductModelInput = {\n prompt?: string;\n messages?: ProductModelMessage[];\n temperature?: number;\n maxTokens?: number;\n signal?: AbortSignal;\n /** Stable original operation identity for inspect/recover; never authorizes a replay. */\n clientRequestId?: string;\n};\nexport type ProductModelUsage = {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n};\nexport type ProductModelResult = {\n text: string;\n requestId: string;\n modelId: string;\n resolvedModelId: string;\n finishReason: string | null;\n usage: ProductModelUsage | null;\n systemFingerprint: string | null;\n /** Retained server evidence; presence alone is not client-side verification. */\n evidence: Record<string, unknown> | null;\n};\nexport type ProductModelEvent =\n | { type: \"text\"; text: string }\n | { type: \"finish\"; result: ProductModelResult };\nexport type ProductModels<Models> = {\n readonly [Name in keyof Models]: ProductModel;\n};\n\nconst Message = z\n .object({\n role: z.enum([\"system\", \"user\", \"assistant\"]),\n content: z.string().max(200_000),\n })\n .strict();\nconst Input = z\n .object({\n prompt: z.string().max(200_000).optional(),\n messages: z.array(Message).min(1).max(128).optional(),\n temperature: z.number().min(0).max(2).optional(),\n maxTokens: z.number().int().min(1).max(4096).optional(),\n })\n .strict()\n .refine(\n (v) => (v.prompt !== undefined) !== (v.messages !== undefined),\n \"Supply prompt or messages, exclusively.\",\n );\nexport type ProductModelRecoveredResult = ProductModelResult & {\n /** Available only for explicitly tool-capable bindings; arguments remain JSON text. */\n toolCalls?: ProductModelToolCall[];\n};\nexport type ProductModelRequestStatus = Omit<ProductModelWireStatus, \"result\"> & {\n result: ProductModelRecoveredResult | null;\n};\n\n/** A named text model. This never resolves a catalogue default or activates serving. */\nexport class ProductModel {\n readonly id: string;\n readonly capabilities: Required<\n NonNullable<ProductModelBinding[\"capabilities\"]>\n >;\n private readonly transport: ProductModelTransport;\n constructor(\n binding: string | ProductModelBinding,\n private readonly connection: ProductModelConnection,\n ) {\n this.id = z\n .string()\n .trim()\n .regex(/^[a-z0-9][a-z0-9._:-]{2,127}$/)\n .parse(typeof binding === \"string\" ? binding : binding.id);\n this.capabilities = {\n streaming: true,\n tools: false,\n structuredOutput: false,\n ...(typeof binding === \"string\" ? {} : binding.capabilities),\n };\n if (!connection.apiKey.trim())\n throw new Error(\"Named models require an API key.\");\n this.connection = {\n ...connection,\n baseUrl: productModelEndpoint(\n connection.baseUrl ?? DEFAULT_MODEL_BASE_URL,\n ),\n };\n if (\n connection.timeoutMs !== undefined &&\n (!Number.isFinite(connection.timeoutMs) ||\n connection.timeoutMs <= 0 ||\n connection.timeoutMs > 630_000)\n )\n throw new Error(\n \"Serving timeoutMs must be greater than zero and at most 630000.\",\n );\n this.transport = new ProductModelTransport(this.id, this.connection);\n }\n /** Provider integrations use the same exact destination and transport. */\n providerConnection(): Readonly<ProductModelConnection> {\n return { ...this.connection };\n }\n private async request(\n input: ProductModelInput,\n stream: boolean,\n ): Promise<Response> {\n if (stream && !this.capabilities.streaming)\n throw new ProductModelError(\"streaming_unsupported\", 0, false);\n const { signal, clientRequestId: suppliedClientId, ...raw } = input;\n const parsed = Input.parse(raw);\n const body = JSON.stringify({\n model: this.id,\n messages: parsed.messages ?? [{ role: \"user\", content: parsed.prompt }],\n ...(parsed.temperature === undefined\n ? {}\n : { temperature: parsed.temperature }),\n ...(parsed.maxTokens === undefined\n ? {}\n : { max_tokens: parsed.maxTokens }),\n stream,\n });\n return this.transport.request(body, { stream, signal, clientRequestId: suppliedClientId });\n }\n async generate(input: ProductModelInput): Promise<ProductModelResult> {\n const response = await this.request(input, false);\n try {\n const chunk = Chunk.parse(\n await readBoundedJsonResponse(\n response,\n 8 * 1024 * 1024,\n \"Model result\",\n ),\n );\n if (\n chunk.choices.length !== 1 ||\n !chunk.choices[0].message ||\n chunk.choices[0].message.tool_calls\n )\n throw new Error(\"Unsupported response\");\n return this.result(\n chunk,\n chunk.choices[0].message.content ?? \"\",\n chunk.choices[0].finish_reason ?? null,\n response,\n );\n } catch {\n throw new ProductModelError(\n \"model_response_invalid\",\n response.status,\n true,\n response.headers.get(\"x-openpond-request-id\") ??\n response.headers.get(\"x-request-id\") ??\n undefined,\n this.transport.identity(response).clientRequestId,\n );\n }\n }\n /** Read only: a timeout never submits another paid operation. */\n async inspectRequest(requestId: string): Promise<ProductModelRequestStatus> {\n return this.projectStatus(await this.transport.inspectRequest(requestId));\n }\n async recover(clientRequestId: string): Promise<ProductModelRequestStatus> {\n return this.projectStatus(await this.transport.recover(clientRequestId));\n }\n private projectStatus(status: ProductModelWireStatus): ProductModelRequestStatus {\n if (!status.result) return { ...status, result: null };\n const message = status.result.choices[0]!.message!;\n let toolCalls: ProductModelToolCall[] | undefined;\n if (message.tool_calls !== undefined && message.tool_calls !== null) {\n const parsed = z.array(ProductModelToolCallSchema).safeParse(message.tool_calls);\n if (!this.capabilities.tools || !parsed.success)\n throw new ProductModelError(\"model_response_invalid\", 200, true, status.requestId,\n status.clientRequestId ?? undefined);\n toolCalls = parsed.data;\n }\n return { ...status, result: {\n ...this.result(status.result, message.content ?? \"\",\n status.result.choices[0]!.finish_reason ?? null, new Response(null)),\n ...(toolCalls === undefined ? {} : { toolCalls }),\n } };\n }\n /** Explicit cancellation retains the original request's cleanup owner. */\n async cancelRequest(requestId: string): Promise<void> {\n await this.transport.cancelRequest(requestId);\n }\n private result(\n chunk: z.infer<typeof Chunk>,\n text: string,\n finishReason: string | null,\n response: Response,\n ): ProductModelResult {\n return {\n text,\n requestId:\n response.headers.get(\"x-openpond-request-id\") ??\n response.headers.get(\"x-request-id\") ??\n chunk.id,\n modelId: this.id,\n resolvedModelId: chunk.model,\n finishReason,\n usage: chunk.usage\n ? {\n inputTokens: chunk.usage.prompt_tokens,\n outputTokens: chunk.usage.completion_tokens,\n totalTokens: chunk.usage.total_tokens,\n }\n : null,\n systemFingerprint: chunk.system_fingerprint ?? null,\n evidence: chunk.openpond ?? null,\n };\n }\n /** Breaking iteration cancels the HTTP body. A truncated stream never produces finish. */\n async *stream(input: ProductModelInput): AsyncGenerator<ProductModelEvent> {\n const response = await this.request(input, true);\n if (\n !response.headers.get(\"content-type\")?.includes(\"text/event-stream\") ||\n !response.body\n ) {\n await response.body?.cancel();\n throw new ProductModelError(\n \"model_stream_invalid\",\n response.status,\n true,\n response.headers.get(\"x-openpond-request-id\") ?? undefined,\n this.transport.identity(response).clientRequestId,\n );\n }\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\",\n text = \"\",\n finish: string | null = null,\n last: z.infer<typeof Chunk> | undefined;\n let usage: z.infer<typeof Usage> | null = null;\n let outputBytes = 0;\n try {\n for (;;) {\n const { done, value } = await reader.read();\n buffer = (buffer + decoder.decode(value, { stream: !done })).replace(\n /\\r\\n/g,\n \"\\n\",\n );\n if (new TextEncoder().encode(buffer).length > 1024 * 1024)\n throw new Error(\"Stream frame too large\");\n let boundary: number;\n while ((boundary = buffer.indexOf(\"\\n\\n\")) >= 0) {\n const frame = buffer.slice(0, boundary);\n buffer = buffer.slice(boundary + 2);\n const data = frame\n .split(\"\\n\")\n .filter((line) => line.startsWith(\"data:\"))\n .map((line) => line.slice(5).trimStart())\n .join(\"\\n\");\n if (!data) continue;\n if (data === \"[DONE]\") {\n if (!last || !finish) throw new Error(\"Incomplete stream\");\n yield {\n type: \"finish\",\n result: this.result({ ...last, usage }, text, finish, response),\n };\n return;\n }\n const chunk = Chunk.parse(JSON.parse(data));\n if (last && (last.id !== chunk.id || last.model !== chunk.model))\n throw new Error(\"Stream identity changed\");\n last = chunk;\n if (chunk.usage) usage = chunk.usage;\n const choice = chunk.choices[0];\n if (choice?.delta?.tool_calls)\n throw new Error(\"Tool output unsupported by text API\");\n if (choice?.finish_reason) finish = choice.finish_reason;\n const delta = choice?.delta?.content;\n if (delta) {\n text += delta;\n outputBytes += new TextEncoder().encode(delta).length;\n if (outputBytes > 8 * 1024 * 1024)\n throw new Error(\"Model output too large\");\n yield { type: \"text\", text: delta };\n }\n }\n if (done) throw new Error(\"Stream ended before DONE\");\n }\n } catch (error) {\n if (error instanceof ProductModelError) throw error;\n throw new ProductModelError(\n \"model_stream_interrupted\",\n response.status,\n true,\n response.headers.get(\"x-openpond-request-id\") ??\n response.headers.get(\"x-request-id\") ??\n undefined,\n this.transport.identity(response).clientRequestId,\n );\n } finally {\n await reader.cancel().catch(() => {});\n reader.releaseLock();\n }\n }\n}\nexport function createProductModels<\n const Models extends Record<string, string | ProductModelBinding>,\n>(bindings: Models, connection: ProductModelConnection): ProductModels<Models> {\n return Object.fromEntries(\n Object.entries(bindings).map(([name, binding]) => [\n name,\n new ProductModel(binding, connection),\n ]),\n ) as ProductModels<Models>;\n}\n"],"mappings":"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","names":["z","z","z","z"]}
|
|
@@ -2,6 +2,14 @@ import {
|
|
|
2
2
|
ModelBatchReviewRequestSchema
|
|
3
3
|
} from "./chunk-GPQLBVQC.js";
|
|
4
4
|
|
|
5
|
+
// src/taskset-text-policy.ts
|
|
6
|
+
function textTaskPolicyMessages(task, instructions) {
|
|
7
|
+
return [
|
|
8
|
+
{ role: "system", text: instructions },
|
|
9
|
+
{ role: "user", text: JSON.stringify({ input: task.input, policyVisibleContext: task.policyVisibleContext }) }
|
|
10
|
+
];
|
|
11
|
+
}
|
|
12
|
+
|
|
5
13
|
// src/dataset-training-review-contracts.ts
|
|
6
14
|
import { z } from "zod";
|
|
7
15
|
import { LearningRevisionRefSchema } from "@openpond/evals/learning";
|
|
@@ -57,9 +65,10 @@ var DatasetTrainingReviewReceiptContentSchema = z.object({
|
|
|
57
65
|
var DatasetTrainingReviewReceiptSchema = DatasetTrainingReviewReceiptContentSchema.extend({ contentHash: Hash }).strict();
|
|
58
66
|
|
|
59
67
|
export {
|
|
68
|
+
textTaskPolicyMessages,
|
|
60
69
|
DatasetTrainingReviewRequestSchema,
|
|
61
70
|
DatasetTrainingReviewSourceSchema,
|
|
62
71
|
DatasetTrainingReviewReceiptContentSchema,
|
|
63
72
|
DatasetTrainingReviewReceiptSchema
|
|
64
73
|
};
|
|
65
|
-
//# sourceMappingURL=chunk-
|
|
74
|
+
//# sourceMappingURL=chunk-RMXZISHK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/taskset-text-policy.ts","../src/dataset-training-review-contracts.ts"],"sourcesContent":["import type { TaskRecord } from \"@openpond/evals/tasksets\";\n\n/** The shared text-task boundary exposes only authored instructions and public\n * task input/context. Expected output and privileged assets are never messages. */\nexport function textTaskPolicyMessages(task: Pick<TaskRecord, \"input\" | \"policyVisibleContext\">, instructions: string) {\n return [\n { role: \"system\" as const, text: instructions },\n { role: \"user\" as const, text: JSON.stringify({ input: task.input, policyVisibleContext: task.policyVisibleContext }) },\n ] as const;\n}\n","import { z } from \"zod\";\nimport { LearningRevisionRefSchema } from \"@openpond/evals/learning\";\nimport { ModelBatchReviewRequestSchema } from \"./model-batch-review-contracts.js\";\n\nconst Id = LearningRevisionRefSchema.shape.id;\nconst Hash = z.string().regex(/^[a-f0-9]{64}$/);\nexport const DatasetTrainingReviewRequestSchema = z.object({\n schemaVersion: z.literal(\"openpond.datasetTrainingReviewRequest.v1\"),\n teamId: Id,\n operationId: Id,\n dataset: LearningRevisionRefSchema,\n packageHash: Hash,\n taskIds: z.array(Id).min(1).max(10_000).nullable().default(null),\n purpose: z.enum([\"supervised_training\", \"reward_training\"]),\n rewardBindingRef: LearningRevisionRefSchema.nullable().default(null),\n definition: ModelBatchReviewRequestSchema.shape.definition.default({}),\n targetSource: z.enum([\"none\", \"expected_output\", \"approved_parent\"]).default(\"none\"),\n /** Learning examples use workspace scope. Import is an explicit copy, not a\n * silent widening of the source Dataset's visibility. */\n shareWithWorkspace: z.literal(true),\n}).strict().superRefine((value, context) => {\n if (value.taskIds && new Set(value.taskIds).size !== value.taskIds.length)\n context.addIssue({ code: \"custom\", path: [\"taskIds\"], message: \"Select each Dataset task once.\" });\n if (value.purpose !== \"supervised_training\" && value.targetSource !== \"none\")\n context.addIssue({ code: \"custom\", path: [\"targetSource\"], message: \"Target proposals require a supervised review.\" });\n});\nexport type DatasetTrainingReviewRequest = z.input<typeof DatasetTrainingReviewRequestSchema>;\n\n/** Policy/task-format metadata only; original example answers, private context,\n * grader code and package files are deliberately absent from this projection. */\nexport const DatasetTrainingReviewSourceSchema = z.object({\n schemaVersion: z.literal(\"openpond.datasetTrainingReviewSource.v1\"),\n dataset: LearningRevisionRefSchema,\n packageHash: Hash,\n taskCount: z.number().int().nonnegative(),\n definition: ModelBatchReviewRequestSchema.shape.definition,\n rewardBinding: LearningRevisionRefSchema.nullable(),\n hasParentTargets: z.boolean(),\n}).strict();\nexport type DatasetTrainingReviewSource = z.infer<typeof DatasetTrainingReviewSourceSchema>;\n\n/** Metadata only; read the newly created evidence through the learning owner.\n * The host retains the exact package before returning this committed receipt. */\nexport const DatasetTrainingReviewReceiptContentSchema = z.object({\n schemaVersion: z.literal(\"openpond.datasetTrainingReviewReceipt.v1\"),\n id: Id, teamId: Id, actorId: Id, operationId: Id, requestHash: Hash,\n dataset: LearningRevisionRefSchema, packageHash: Hash,\n purpose: z.enum([\"supervised_training\", \"reward_training\"]),\n shareWithWorkspace: z.literal(true),\n source: LearningRevisionRefSchema, definition: LearningRevisionRefSchema,\n evidence: z.array(LearningRevisionRefSchema).min(1).max(10_000),\n // Feedback is a revisioned review record, not a content-addressed release.\n proposals: z.array(LearningRevisionRefSchema.pick({ id: true, revision: true })).max(10_000),\n createdAt: z.string().datetime({ offset: true }),\n}).strict();\nexport const DatasetTrainingReviewReceiptSchema = DatasetTrainingReviewReceiptContentSchema.extend({ contentHash: Hash }).strict();\nexport type DatasetTrainingReviewReceipt = z.infer<typeof DatasetTrainingReviewReceiptSchema>;\n"],"mappings":";;;;;AAIO,SAAS,uBAAuB,MAA0D,cAAsB;AACrH,SAAO;AAAA,IACL,EAAE,MAAM,UAAmB,MAAM,aAAa;AAAA,IAC9C,EAAE,MAAM,QAAiB,MAAM,KAAK,UAAU,EAAE,OAAO,KAAK,OAAO,sBAAsB,KAAK,qBAAqB,CAAC,EAAE;AAAA,EACxH;AACF;;;ACTA,SAAS,SAAS;AAClB,SAAS,iCAAiC;AAG1C,IAAM,KAAK,0BAA0B,MAAM;AAC3C,IAAM,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB;AACvC,IAAM,qCAAqC,EAAE,OAAO;AAAA,EACzD,eAAe,EAAE,QAAQ,0CAA0C;AAAA,EACnE,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,SAAS;AAAA,EACT,aAAa;AAAA,EACb,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,GAAM,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC/D,SAAS,EAAE,KAAK,CAAC,uBAAuB,iBAAiB,CAAC;AAAA,EAC1D,kBAAkB,0BAA0B,SAAS,EAAE,QAAQ,IAAI;AAAA,EACnE,YAAY,8BAA8B,MAAM,WAAW,QAAQ,CAAC,CAAC;AAAA,EACrE,cAAc,EAAE,KAAK,CAAC,QAAQ,mBAAmB,iBAAiB,CAAC,EAAE,QAAQ,MAAM;AAAA;AAAA;AAAA,EAGnF,oBAAoB,EAAE,QAAQ,IAAI;AACpC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,YAAY;AAC1C,MAAI,MAAM,WAAW,IAAI,IAAI,MAAM,OAAO,EAAE,SAAS,MAAM,QAAQ;AACjE,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,SAAS,GAAG,SAAS,iCAAiC,CAAC;AACnG,MAAI,MAAM,YAAY,yBAAyB,MAAM,iBAAiB;AACpE,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,cAAc,GAAG,SAAS,gDAAgD,CAAC;AACzH,CAAC;AAKM,IAAM,oCAAoC,EAAE,OAAO;AAAA,EACxD,eAAe,EAAE,QAAQ,yCAAyC;AAAA,EAClE,SAAS;AAAA,EACT,aAAa;AAAA,EACb,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACxC,YAAY,8BAA8B,MAAM;AAAA,EAChD,eAAe,0BAA0B,SAAS;AAAA,EAClD,kBAAkB,EAAE,QAAQ;AAC9B,CAAC,EAAE,OAAO;AAKH,IAAM,4CAA4C,EAAE,OAAO;AAAA,EAChE,eAAe,EAAE,QAAQ,0CAA0C;AAAA,EACnE,IAAI;AAAA,EAAI,QAAQ;AAAA,EAAI,SAAS;AAAA,EAAI,aAAa;AAAA,EAAI,aAAa;AAAA,EAC/D,SAAS;AAAA,EAA2B,aAAa;AAAA,EACjD,SAAS,EAAE,KAAK,CAAC,uBAAuB,iBAAiB,CAAC;AAAA,EAC1D,oBAAoB,EAAE,QAAQ,IAAI;AAAA,EAClC,QAAQ;AAAA,EAA2B,YAAY;AAAA,EAC/C,UAAU,EAAE,MAAM,yBAAyB,EAAE,IAAI,CAAC,EAAE,IAAI,GAAM;AAAA;AAAA,EAE9D,WAAW,EAAE,MAAM,0BAA0B,KAAK,EAAE,IAAI,MAAM,UAAU,KAAK,CAAC,CAAC,EAAE,IAAI,GAAM;AAAA,EAC3F,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC;AACjD,CAAC,EAAE,OAAO;AACH,IAAM,qCAAqC,0CAA0C,OAAO,EAAE,aAAa,KAAK,CAAC,EAAE,OAAO;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ExperimentFieldMappingsSchema,
|
|
3
3
|
ExperimentGraderPinSchema
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4D4QSQC3.js";
|
|
5
5
|
import {
|
|
6
6
|
ImmutableReleaseRefSchema,
|
|
7
7
|
contentHash
|
|
@@ -15,11 +15,18 @@ var ExperimentScoringRequestSchema = z.object({
|
|
|
15
15
|
operationId: Id,
|
|
16
16
|
execution: ImmutableReleaseRefSchema,
|
|
17
17
|
/** Recorded executions retain observed evidence and never invoke a target. */
|
|
18
|
-
executionKind: z.
|
|
18
|
+
executionKind: z.enum(["recorded_evidence", "weight_space"]).optional(),
|
|
19
|
+
/** Pins a retained candidate-forward receipt; scoring never reruns the model. */
|
|
20
|
+
weightSpaceOperationId: Id.optional(),
|
|
21
|
+
weightSpaceTarget: z.enum(["candidate", "baseline"]).optional(),
|
|
19
22
|
graders: z.array(RewardReleaseRefSchema).min(1).max(100),
|
|
20
23
|
maximumCostUsd: z.number().finite().min(1e-6).max(1e4),
|
|
21
24
|
mappings: z.array(z.object({ graderId: Id, fields: ExperimentFieldMappingsSchema }).strict()).max(100).optional()
|
|
22
25
|
}).strict().superRefine((value, context) => {
|
|
26
|
+
if (value.executionKind === "weight_space" !== (value.weightSpaceOperationId !== void 0))
|
|
27
|
+
context.addIssue({ code: "custom", path: ["weightSpaceOperationId"], message: "Weight-space scoring requires its exact retained evaluation operation." });
|
|
28
|
+
if (value.executionKind === "weight_space" !== (value.weightSpaceTarget !== void 0))
|
|
29
|
+
context.addIssue({ code: "custom", path: ["weightSpaceTarget"], message: "Select the evaluated candidate or its sealed held-out baseline explicitly." });
|
|
23
30
|
if (new Set(value.graders.map((grader) => grader.id)).size !== value.graders.length)
|
|
24
31
|
context.addIssue({ code: "custom", path: ["graders"], message: "Select each grader once." });
|
|
25
32
|
if (value.mappings && (new Set(value.mappings.map((mapping) => mapping.graderId)).size !== value.mappings.length || value.mappings.some((mapping) => !value.graders.some((grader) => grader.id === mapping.graderId))))
|
|
@@ -67,4 +74,4 @@ export {
|
|
|
67
74
|
ExperimentScoringPassSchema,
|
|
68
75
|
verifyExperimentScoringPass
|
|
69
76
|
};
|
|
70
|
-
//# sourceMappingURL=chunk-
|
|
77
|
+
//# sourceMappingURL=chunk-TMNEDWA7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/experiment-scoring-contracts.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { contentHash, ImmutableReleaseRefSchema } from \"@openpond/harness\";\nimport { RewardReleaseRefSchema } from \"@openpond/evals/rewards\";\nimport { ExperimentGraderPinSchema } from \"./experiment-contracts.js\";\nimport { ExperimentFieldMappingsSchema } from \"./experiment-field-mappings.js\";\n\nconst Id = z.string().trim().min(1).max(200);\nexport const ExperimentScoringRequestSchema = z.object({\n operationId: Id,\n execution: ImmutableReleaseRefSchema,\n /** Recorded executions retain observed evidence and never invoke a target. */\n executionKind: z.enum([\"recorded_evidence\", \"weight_space\"]).optional(),\n /** Pins a retained candidate-forward receipt; scoring never reruns the model. */\n weightSpaceOperationId: Id.optional(),\n weightSpaceTarget: z.enum([\"candidate\",\"baseline\"]).optional(),\n graders: z.array(RewardReleaseRefSchema).min(1).max(100),\n maximumCostUsd: z.number().finite().min(0.000001).max(10_000),\n mappings: z.array(z.object({ graderId: Id, fields: ExperimentFieldMappingsSchema }).strict()).max(100).optional(),\n}).strict().superRefine((value, context) => {\n if ((value.executionKind === \"weight_space\") !== (value.weightSpaceOperationId !== undefined))\n context.addIssue({ code: \"custom\", path: [\"weightSpaceOperationId\"], message: \"Weight-space scoring requires its exact retained evaluation operation.\" });\n if ((value.executionKind === \"weight_space\") !== (value.weightSpaceTarget !== undefined))\n context.addIssue({ code: \"custom\", path: [\"weightSpaceTarget\"], message: \"Select the evaluated candidate or its sealed held-out baseline explicitly.\" });\n if (new Set(value.graders.map(grader => grader.id)).size !== value.graders.length)\n context.addIssue({ code: \"custom\", path: [\"graders\"], message: \"Select each grader once.\" });\n if (value.mappings && (new Set(value.mappings.map(mapping => mapping.graderId)).size !== value.mappings.length\n || value.mappings.some(mapping => !value.graders.some(grader => grader.id === mapping.graderId))))\n context.addIssue({ code: \"custom\", path: [\"mappings\"], message: \"Map each selected grader at most once.\" });\n});\nexport type ExperimentScoringRequest = z.infer<typeof ExperimentScoringRequestSchema>;\n\nconst ScoringPassContent = z.object({\n schemaVersion: z.literal(\"openpond.experimentScoringPass.v1\"),\n id: Id, teamId: Id, revision: z.number().int().positive(),\n request: ExperimentScoringRequestSchema,\n graders: z.array(ExperimentGraderPinSchema).min(1).max(100),\n status: z.enum([\"queued\", \"running\", \"cancelling\", \"completed\", \"failed\", \"cancelled\"]),\n totalCount: z.number().int().min(1).max(10_000),\n counts: z.object({ pending: z.number().int().nonnegative(), running: z.number().int().nonnegative(),\n scored: z.number().int().nonnegative(), unavailable: z.number().int().nonnegative(),\n failed: z.number().int().nonnegative(), cancelled: z.number().int().nonnegative() }).strict(),\n resultAvailable: z.boolean(), createdAt: z.iso.datetime(), startedAt: z.iso.datetime().nullable(),\n completedAt: z.iso.datetime().nullable(),\n error: z.object({ code: Id, message: z.string().max(2_000) }).strict().nullable(),\n}).strict();\nexport const ExperimentScoringPassSchema = ScoringPassContent.extend({ contentHash: z.string().regex(/^[a-f0-9]{64}$/) });\nexport type ExperimentScoringPass = z.infer<typeof ExperimentScoringPassSchema>;\n\n/** A pass grades owned output and carries no model-execution authority. */\nexport function verifyExperimentScoringPass(value: unknown) {\n const pass = ExperimentScoringPassSchema.parse(value);\n const { contentHash: actual, ...content } = pass;\n if (contentHash(content) !== actual || Object.values(pass.counts).reduce((sum, count) => sum + count, 0) !== pass.totalCount)\n throw new Error(\"Scoring pass integrity or population accounting failed.\");\n const terminal = [\"completed\", \"failed\", \"cancelled\"].includes(pass.status);\n if (terminal && (!pass.completedAt || pass.counts.pending || pass.counts.running)\n || !terminal && (pass.completedAt !== null || pass.resultAvailable)\n || pass.status === \"completed\" && !pass.resultAvailable)\n throw new Error(\"Scoring pass lifecycle differs from its retained result.\");\n if (pass.graders.length !== pass.request.graders.length || new Set(pass.graders.map(grader => grader.feedbackKey)).size !== pass.graders.length\n || pass.graders.some((grader, index) => contentHash(grader.release) !== contentHash(pass.request.graders[index]!)\n || contentHash(grader.mappings ?? []) !== contentHash(pass.request.mappings?.find(mapping => mapping.graderId === grader.release?.id)?.fields ?? [])))\n throw new Error(\"Scoring pass graders differ from their exact admission.\");\n return pass;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
RunExperimentSchema
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-MJHQMQEW.js";
|
|
4
4
|
import {
|
|
5
5
|
HostedModelProjectSummarySchema
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-WJZHSIGD.js";
|
|
7
7
|
import {
|
|
8
8
|
OpenPondProtocolError,
|
|
9
9
|
canonicalSha256
|
|
@@ -308,4 +308,4 @@ export {
|
|
|
308
308
|
HostedTrainingPolicyControlSchema,
|
|
309
309
|
TrainingHandoffOriginSchema2 as TrainingHandoffOriginSchema
|
|
310
310
|
};
|
|
311
|
-
//# sourceMappingURL=chunk-
|
|
311
|
+
//# sourceMappingURL=chunk-TX552FQG.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DatasetTrainingReviewRequestSchema,
|
|
3
3
|
DatasetTrainingReviewSourceSchema
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-RMXZISHK.js";
|
|
5
5
|
import {
|
|
6
6
|
ModelBatchReviewInspectionSchema,
|
|
7
7
|
ModelBatchReviewReceiptSchema,
|
|
@@ -9,16 +9,16 @@ import {
|
|
|
9
9
|
} from "./chunk-GPQLBVQC.js";
|
|
10
10
|
import {
|
|
11
11
|
AuthoredTasksetFileInventorySchema
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-BIQ5TG3T.js";
|
|
13
13
|
import {
|
|
14
14
|
configuredTasksetDraftFiles,
|
|
15
15
|
createTasksetDraftWorkspace,
|
|
16
16
|
decodeTasksetDraftWorkspaceFile,
|
|
17
17
|
isManagedTasksetDraftFilePath
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-BT6CC6QB.js";
|
|
19
19
|
import {
|
|
20
20
|
TasksetDraftSchema
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-7ZV626YS.js";
|
|
22
22
|
import {
|
|
23
23
|
compileModelTasksetReward,
|
|
24
24
|
createTasksetPackage,
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
resolveTasksetPackageExecution,
|
|
27
27
|
resolveTasksetPackageInstructions,
|
|
28
28
|
validateTasksetPackage
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-K4WU4JOP.js";
|
|
30
30
|
import {
|
|
31
31
|
ModelTasksetDraftPreparationSchema,
|
|
32
32
|
TasksetDraftFilePathSchema
|
|
@@ -698,4 +698,4 @@ export {
|
|
|
698
698
|
prepareTasksetDraftSource,
|
|
699
699
|
materializeTasksetDraftWorkspace
|
|
700
700
|
};
|
|
701
|
-
//# sourceMappingURL=chunk-
|
|
701
|
+
//# sourceMappingURL=chunk-VIDRZCPQ.js.map
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ExperimentScoringRequestSchema,
|
|
3
3
|
verifyExperimentScoringPass
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-TMNEDWA7.js";
|
|
5
5
|
import {
|
|
6
6
|
fetchConnectedJson
|
|
7
7
|
} from "./chunk-O6FKHAWN.js";
|
|
8
8
|
import {
|
|
9
9
|
validateTasksetPackage
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-K4WU4JOP.js";
|
|
11
11
|
import {
|
|
12
12
|
RunExperimentSchema
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-MJHQMQEW.js";
|
|
14
14
|
import {
|
|
15
15
|
ExperimentExecutionContextSchema,
|
|
16
16
|
ExperimentFieldMappingsSchema,
|
|
@@ -18,13 +18,13 @@ import {
|
|
|
18
18
|
ExperimentListQuerySchema,
|
|
19
19
|
PrepareHarnessExperimentSchema,
|
|
20
20
|
PreparedHarnessExperimentSchema
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-4D4QSQC3.js";
|
|
22
22
|
import {
|
|
23
23
|
ModelTasksetRunDetailsSchema,
|
|
24
24
|
ModelTasksetRunRequestSchema,
|
|
25
25
|
verifyHarnessExperimentManifest,
|
|
26
26
|
verifyModelTasksetRunDetails
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-5KJY44FB.js";
|
|
28
28
|
import {
|
|
29
29
|
ImmutableReleaseRefSchema,
|
|
30
30
|
contentHash
|
|
@@ -388,7 +388,7 @@ var OpenPondExperimentsClient = class {
|
|
|
388
388
|
}
|
|
389
389
|
async scoringPasses(executionId, options = {}) {
|
|
390
390
|
const params = new URLSearchParams(options.afterId ? { afterId: Id2.parse(options.afterId) } : {});
|
|
391
|
-
if (options.executionKind) params.set("executionKind", z4.
|
|
391
|
+
if (options.executionKind) params.set("executionKind", z4.enum(["recorded_evidence", "weight_space"]).parse(options.executionKind));
|
|
392
392
|
const page = z4.object({ items: z4.array(z4.unknown()).max(30), nextCursor: Id2.nullable() }).strict().parse(
|
|
393
393
|
await this.request(`/${encodeURIComponent(Id2.parse(executionId))}/scoring-passes?${params}`, "GET", void 0, options.signal)
|
|
394
394
|
);
|
|
@@ -655,4 +655,4 @@ export {
|
|
|
655
655
|
ProfileEvaluationDiscoveryRequestSchema,
|
|
656
656
|
OpenPondProfileEvaluationDiscoveryClient
|
|
657
657
|
};
|
|
658
|
-
//# sourceMappingURL=chunk-
|
|
658
|
+
//# sourceMappingURL=chunk-VRUAIMM3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/experiment-client.ts","../src/experiment-run-details.ts","../src/experiment-harness-catalog.ts","../src/run-diagnostics.ts","../src/experiment-inspection.ts","../src/dataset-grader-selection.ts","../src/experiment-execution-selection.ts","../src/profile-external-dataset-package.ts","../src/profile-evaluation-discovery.ts"],"sourcesContent":["import { DEFAULT_API_BASE_URL } from \"./endpoints.js\";\nimport { z } from \"zod\";\nimport { contentHash } from \"@openpond/harness\";\nimport { compareExperiments, verifyExperimentEvidence } from \"@openpond/evals/experiments\";\nimport { ExperimentListQuerySchema } from \"./experiment-contracts.js\";\nimport { RunExperimentSchema } from \"./experiment-run-contracts.js\";\nimport { experimentConfigurationRequest, verifyExperimentRunDetails } from \"./experiment-run-details.js\";\nimport { PrepareHarnessExperimentSchema, PreparedHarnessExperimentSchema } from \"./experiment-contracts.js\";\nimport { verifyHarnessExperimentManifest } from \"./model-taskset-runs-contracts.js\";\nimport { ExperimentScoringRequestSchema, verifyExperimentScoringPass, type ExperimentScoringRequest } from \"./experiment-scoring-contracts.js\";\nimport { ExperimentHarnessCatalogSchema } from \"./experiment-harness-catalog.js\";\nimport { RunDiagnosticsQuerySchema, verifyRunDiagnostics } from \"./run-diagnostics.js\";\n\nconst Id = z.string().trim().min(1).max(200);\nexport class OpenPondExperimentError extends Error {\n constructor(readonly status: number, readonly code: string, message: string) { super(message); this.name = \"OpenPondExperimentError\"; }\n}\n\n/** One Experiment is one run with its immutable configuration and results. */\nexport class OpenPondExperimentsClient {\n private readonly baseUrl: string;\n constructor(private readonly options: { baseUrl?: string; apiKey: string; teamId: string; fetch?: typeof fetch }) {\n const url = new URL(options.baseUrl ?? DEFAULT_API_BASE_URL);\n if (![\"http:\", \"https:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash || !options.apiKey.trim() || !options.teamId.trim())\n throw new Error(\"A clean API origin and workspace credentials are required.\");\n this.baseUrl = url.toString().replace(/\\/+$/, \"\");\n }\n async defaults(signal?: AbortSignal) {\n return z.object({ maximumSpendUsd: z.number().finite().min(0.000001).max(10_000), maximumComparisonSpendUsd: z.number().finite().min(0.000001).max(10_000), initialOutputTokens: z.number().int().positive() }).strict()\n .parse(await this.request(\"/defaults\", \"GET\", undefined, signal));\n }\n async createComparisonBudget(value: { id: string; operationIds: string[]; maximumSpendUsd?: number }, signal?: AbortSignal) {\n const request = z.object({ id: Id, operationIds: z.array(Id).min(1).max(100), maximumSpendUsd: z.number().finite().min(0.000001).max(10_000).optional() }).strict().parse(value);\n const result = this.comparisonBudgetResult(await this.request(\"/comparison-budgets\", \"POST\", request, signal), request.id);\n if (contentHash(result.operations.map(item => item.operationId).sort()) !== contentHash([...request.operationIds].sort())\n || request.maximumSpendUsd !== undefined && result.maximumSpendUsd !== request.maximumSpendUsd)\n throw new Error(\"Comparison admission differs from its requested operations or ceiling.\");\n return result;\n }\n async comparisonBudget(id: string, signal?: AbortSignal) {\n return this.comparisonBudgetResult(await this.request(`/comparison-budgets/${encodeURIComponent(Id.parse(id))}`, \"GET\", undefined, signal), id);\n }\n private comparisonBudgetResult(value: unknown, id: string) {\n const result = z.object({ id: Id, teamId: Id, maximumSpendUsd: z.number().finite().positive(), settledUsd: z.number().finite().nonnegative(), reservedUsd: z.number().finite().nonnegative(), remainingUsd: z.number().finite().nonnegative(), operations: z.array(z.object({ operationId: Id, runId: Id.nullable() }).strict()).min(1).max(100) }).strict().parse(value);\n if (result.id !== id || result.teamId !== this.options.teamId) throw new Error(\"Comparison budget scope mismatch.\");\n return result;\n }\n /** Discover released workspace Harnesses independently of Project targets. */\n async harnessSources(options: {cursor?: string; signal?: AbortSignal} = {}) {\n const cursor = options.cursor === undefined ? undefined : z.string().min(1).max(8192).parse(options.cursor);\n const query = new URLSearchParams(cursor ? {cursor} : {});\n const page = ExperimentHarnessCatalogSchema.parse(await this.request(`/harness-sources?${query}`,\"GET\",undefined,options.signal));\n if (page.teamId !== this.options.teamId\n || new Set(page.items.map(item=>contentHash(item.source))).size !== page.items.length\n || page.nextCursor !== null && page.nextCursor === cursor\n || page.items.some(item=>item.ready !== (item.reason === null)))\n throw new Error(\"Harness catalog differs from its workspace, readiness or continuation.\");\n return page;\n }\n /** Resolves a released target without saving a definition or dispatching it. */\n async prepareHarness(value: Omit<z.input<typeof PrepareHarnessExperimentSchema>, \"maximumCostUsd\"> & { maximumCostUsd?: number }, signal?: AbortSignal) {\n const request = PrepareHarnessExperimentSchema.parse({ ...value, maximumCostUsd: value.maximumCostUsd ?? (await this.defaults(signal)).maximumSpendUsd });\n const result = PreparedHarnessExperimentSchema.parse(await this.request(\"/harness-setup\", \"POST\", request, signal));\n verifyHarnessExperimentManifest(result.request, result.manifest);\n const policy = result.request.policy;\n if (result.request.teamId !== this.options.teamId || result.request.operationId !== request.operationId\n || policy.kind !== \"hosted_harness\" || policy.profileRepositoryId !== request.profileRepositoryId\n || policy.source.definitionId !== request.definitionId || policy.modelId !== request.modelId\n || policy.reasoningEffort !== request.reasoningEffort || result.maximumCostUsd !== request.maximumCostUsd\n || result.manifest.limits.maximumSpendUsd !== request.maximumCostUsd)\n throw new Error(\"Harness preparation differs from its requested scope or configuration.\");\n return result;\n }\n async run(value: Omit<z.input<typeof RunExperimentSchema>, \"maximumCostUsd\"> & { maximumCostUsd?: number }, signal?: AbortSignal) {\n const request = RunExperimentSchema.parse({ ...value, maximumCostUsd: value.maximumCostUsd ?? (await this.defaults(signal)).maximumSpendUsd });\n if (request.request.teamId !== this.options.teamId) throw new Error(\"Experiment workspace mismatch.\");\n // Omission is resolved by the server against a retained operation first,\n // so a global default change cannot change a lost-response retry's cap.\n const result = await this.details(await this.request(\"\", \"POST\", { ...request, maximumCostUsd: value.maximumCostUsd }, signal));\n if (value.maximumCostUsd === undefined) request.maximumCostUsd = result.configuration.maximumCostUsd;\n if (contentHash(experimentConfigurationRequest(result.request)) !== contentHash(experimentConfigurationRequest(request.request))\n || result.configuration.maximumCostUsd !== request.maximumCostUsd\n || result.configuration.sourceExperimentId !== request.sourceExperimentId\n || result.configuration.admissionRequestHash !== contentHash(request))\n throw new Error(\"Experiment admission differs from its submitted configuration.\");\n if (request.graders && contentHash(request.graders) !== contentHash(result.configuration.graders.map(grader => ({\n id:grader.id,version:grader.version,contentHash:grader.contentHash,mappings:grader.mappings ?? [],\n })))) throw new Error(\"Experiment admission differs from its selected graders or mappings.\");\n return result;\n }\n async get(id: string, options: {signal?: AbortSignal} = {}) {\n return this.details(await this.request(`/${encodeURIComponent(Id.parse(id))}`, \"GET\", undefined, options.signal), id);\n }\n async diagnostics(id: string, options: { afterSequence?: number; afterCallId?: string; manifestHash?: string; signal?: AbortSignal } = {}) {\n const query = RunDiagnosticsQuerySchema.parse({ afterSequence: options.afterSequence, afterCallId: options.afterCallId });\n const params = new URLSearchParams(Object.entries(query).filter(([,value])=>value!==undefined).map(([key,value])=>[key,String(value)]));\n return verifyRunDiagnostics(await this.request(`/${encodeURIComponent(Id.parse(id))}/diagnostics?${params}`,\"GET\",undefined,options.signal),{teamId:this.options.teamId,runId:id,manifestHash:options.manifestHash,afterSequence:options.afterSequence,afterCallId:options.afterCallId});\n }\n async list(value: z.input<typeof ExperimentListQuerySchema> = {}, signal?: AbortSignal) {\n const query = ExperimentListQuerySchema.parse(value);\n const params = new URLSearchParams(Object.entries(query).filter(([,value])=>value!==undefined).map(([key,value])=>[key,String(value)]));\n const page = z.object({items:z.array(z.unknown()).max(100),nextCursor:Id.nullable()}).strict().parse(await this.request(`?${params}`,\"GET\",undefined,signal));\n const items = await Promise.all(page.items.map(value=>this.details(value)));\n if (items.length > query.limit || new Set(items.map(item=>item.summary.id)).size !== items.length\n || page.nextCursor !== null && page.nextCursor !== items.at(-1)?.summary.id\n || items.some(item => query.projectId && item.request.project?.id !== query.projectId\n || query.datasetHash && item.request.taskset.contentHash !== query.datasetHash\n || query.status && item.summary.status !== query.status))\n throw new Error(\"Experiment page differs from its selected scope.\");\n return {items,nextCursor:page.nextCursor};\n }\n async result(executionId: string, signal?: AbortSignal) {\n const value = z.object({ executionId: Id, passId: Id.nullable(), manifest: z.unknown(), result: z.unknown() }).strict()\n .parse(await this.request(`/${encodeURIComponent(Id.parse(executionId))}/result`, \"GET\", undefined, signal));\n const evidence = verifyExperimentEvidence(value);\n if (value.executionId !== executionId || evidence.manifest.teamId !== this.options.teamId\n || evidence.manifest.lineage?.execution.id !== executionId\n || evidence.manifest.lineage.scoringPassId !== value.passId) throw new Error(\"Experiment result identity mismatch.\");\n return { ...evidence, executionId, passId: value.passId };\n }\n async cancel(id: string, signal?: AbortSignal) {\n return this.details(await this.request(`/${encodeURIComponent(Id.parse(id))}/cancel`, \"POST\", {}, signal), id);\n }\n /** Duplicate uses the original run snapshot; edits are submitted with run(). */\n async duplicate(id: string, operationId: string, signal?: AbortSignal) {\n const result = await this.details(await this.request(`/${encodeURIComponent(Id.parse(id))}/duplicate`, \"POST\", {operationId:Id.parse(operationId)}, signal));\n if (result.request.operationId !== operationId || result.configuration.sourceExperimentId !== id || result.summary.id === id)\n throw new Error(\"Duplicate Experiment admission differs from its source or operation.\");\n return result;\n }\n async score(value: ExperimentScoringRequest, signal?: AbortSignal) {\n const request = ExperimentScoringRequestSchema.parse(value);\n const pass = this.pass(await this.request(`/${encodeURIComponent(request.execution.id)}/scoring-passes`, \"POST\", request, signal));\n if (contentHash(pass.request) !== contentHash(request)) throw new Error(\"Scoring admission differs from its submitted inputs.\");\n return pass;\n }\n async scoringPass(id: string, signal?: AbortSignal) {\n return this.pass(await this.request(`/scoring-passes/${encodeURIComponent(Id.parse(id))}`, \"GET\", undefined, signal), id);\n }\n async scoringPasses(executionId: string, options: { afterId?: string; executionKind?: \"recorded_evidence\" | \"weight_space\"; signal?: AbortSignal } = {}) {\n const params = new URLSearchParams(options.afterId ? { afterId: Id.parse(options.afterId) } : {});\n if (options.executionKind) params.set(\"executionKind\", z.enum([\"recorded_evidence\", \"weight_space\"]).parse(options.executionKind));\n const page = z.object({ items: z.array(z.unknown()).max(30), nextCursor: Id.nullable() }).strict().parse(\n await this.request(`/${encodeURIComponent(Id.parse(executionId))}/scoring-passes?${params}`, \"GET\", undefined, options.signal));\n const items = page.items.map(value => this.pass(value));\n if (items.some(item => item.request.execution.id !== executionId || item.request.executionKind !== options.executionKind) || new Set(items.map(item => item.id)).size !== items.length)\n throw new Error(\"Scoring pass page differs from its execution ownership.\");\n return { items, nextCursor: page.nextCursor };\n }\n async cancelScoringPass(id: string, signal?: AbortSignal) {\n return this.pass(await this.request(`/scoring-passes/${encodeURIComponent(Id.parse(id))}/cancel`, \"POST\", {}, signal), id);\n }\n async scoringResult(id: string, signal?: AbortSignal) {\n const value = z.object({ executionId: Id, passId: Id, manifest: z.unknown(), result: z.unknown() }).strict().parse(\n await this.request(`/scoring-passes/${encodeURIComponent(Id.parse(id))}/result`, \"GET\", undefined, signal));\n const evidence = verifyExperimentEvidence(value);\n if (value.passId !== id || evidence.manifest.teamId !== this.options.teamId || evidence.manifest.id !== id\n || evidence.manifest.lineage?.execution.id !== value.executionId || evidence.manifest.lineage.scoringPassId !== id)\n throw new Error(\"Scoring result identity mismatch.\");\n return { ...evidence, executionId: value.executionId, passId: id };\n }\n async compare(baselineId: string, candidateId: string, signal?: AbortSignal) {\n const read = (id: string) => id.startsWith(\"score_\") ? this.scoringResult(id, signal) : this.result(id, signal);\n const [baseline, candidate] = await Promise.all([read(baselineId), read(candidateId)]);\n return { baseline, candidate, comparison: compareExperiments(baseline, candidate) };\n }\n private async details(value: unknown, id?: string) {\n const result = await verifyExperimentRunDetails(value);\n if (result.summary.teamId !== this.options.teamId || id && result.summary.id !== id)\n throw new Error(\"Experiment identity mismatch.\");\n return result;\n }\n private pass(value: unknown, id?: string) {\n const pass = verifyExperimentScoringPass(value);\n if (pass.teamId !== this.options.teamId || id && pass.id !== id) throw new Error(\"Scoring pass identity mismatch.\");\n return pass;\n }\n private async request(path: string, method: string, body?: unknown, signal?: AbortSignal): Promise<unknown> {\n const response = await (this.options.fetch ?? fetch)(`${this.baseUrl}/v1/experiments${path}`, {\n method, signal, redirect: \"error\", headers: { Authorization: `Bearer ${this.options.apiKey}`, \"X-OpenPond-Team-Id\": this.options.teamId, \"Content-Type\": \"application/json\", Accept: \"application/json\" },\n ...(body === undefined ? {} : { body: JSON.stringify(body) }),\n });\n const value = await response.json();\n if (!response.ok) {\n const parsed = z.object({ code: z.string(), message: z.string() }).safeParse(value);\n throw new OpenPondExperimentError(response.status, parsed.success ? parsed.data.code : \"experiment_request_failed\", parsed.success ? parsed.data.message : \"Experiment request failed.\");\n }\n return value;\n }\n}\n","import { z } from \"zod\";\nimport { contentHash } from \"@openpond/harness\";\nimport { ExperimentExecutionContextSchema, ExperimentGraderPinSchema } from \"./experiment-contracts.js\";\nimport { ModelTasksetRunDetailsSchema, ModelTasksetRunRequestSchema, verifyModelTasksetRunDetails, type ModelTasksetRunRequest } from \"./model-taskset-runs-contracts.js\";\n\nconst Hash = z.string().regex(/^[a-f0-9]{64}$/);\nconst ConfigurationContent = z.object({\n request: ModelTasksetRunRequestSchema,\n maximumCostUsd: z.number().finite().positive().max(10_000),\n graders: z.array(ExperimentGraderPinSchema).min(1).max(100),\n admissionRequestHash: Hash.optional(),\n sourceExperimentId: z.string().trim().min(1).max(200).optional(),\n}).strict();\nexport const ExperimentRunConfigurationSchema = ConfigurationContent.extend({configurationHash:Hash}).strict();\nexport type ExperimentRunConfiguration = z.infer<typeof ExperimentRunConfigurationSchema>;\nexport const ExperimentRunDetailsSchema = ModelTasksetRunDetailsSchema.extend({configuration:ExperimentRunConfigurationSchema}).strict();\nexport type ExperimentRunDetails = z.infer<typeof ExperimentRunDetailsSchema>;\n\n/** Native preparation assigns new receipt IDs while retaining the selected\n * task/seed population. Other runtimes seal their submitted IDs exactly. */\nexport function experimentConfigurationRequest(request: ModelTasksetRunRequest) {\n return request.policy.kind === \"hosted_harness\"\n ? {...request,population:request.population.map(({receiptId:_id,...member})=>member)}\n : request;\n}\nexport function experimentRunConfigurationHash(value: z.input<typeof ConfigurationContent>): string {\n const content = ConfigurationContent.parse(value);\n return contentHash({...content,request:experimentConfigurationRequest(content.request)});\n}\nexport async function verifyExperimentRunDetails(value: unknown): Promise<ExperimentRunDetails> {\n const parsed = ExperimentRunDetailsSchema.parse(value);\n const {configuration,...rawDetails} = parsed;\n const details = await verifyModelTasksetRunDetails(rawDetails);\n const {configurationHash,...content} = configuration;\n if (configurationHash !== experimentRunConfigurationHash(content)\n || contentHash(experimentConfigurationRequest(configuration.request)) !== contentHash(experimentConfigurationRequest(details.request))\n || configuration.maximumCostUsd !== details.manifest.limits.maximumSpendUsd)\n throw new Error(\"Experiment configuration differs from its retained run.\");\n if (details.manifest.metadata.experimentDefinition === null) {\n const context = ExperimentExecutionContextSchema.parse({\n definition:null, configurationHash:configuration.configurationHash,\n maximumCostUsd:configuration.maximumCostUsd,graders:configuration.graders,\n ...(configuration.admissionRequestHash ? {admissionRequestHash:configuration.admissionRequestHash} : {}),\n ...(configuration.sourceExperimentId ? {sourceExperimentId:configuration.sourceExperimentId} : {}),\n });\n if (details.manifest.metadata.experimentConfigurationHash !== contentHash(context))\n throw new Error(\"Experiment configuration differs from its admitted manifest.\");\n }\n return {...details,configuration};\n}\n","import { z } from \"zod\";\nimport { StandaloneHarnessExperimentSourceSchema } from \"@openpond/evals/experiments\";\n\n/** Catalog projections carry immutable pins and readiness, never source bytes. */\nexport const ExperimentHarnessCatalogSchema = z\n .object({\n teamId: z.string().trim().min(1).max(240),\n items: z\n .array(\n z\n .object({\n name: z.string().trim().min(1).max(500),\n source: StandaloneHarnessExperimentSourceSchema,\n ready: z.boolean(),\n reason: z.string().min(1).max(2000).nullable(),\n })\n .strict(),\n )\n .max(8),\n nextCursor: z.string().min(1).max(8192).nullable(),\n })\n .strict();\nexport type ExperimentHarnessCatalog = z.infer<typeof ExperimentHarnessCatalogSchema>;\n","import { z } from \"zod\";\nimport { contentHash } from \"@openpond/harness\";\n\nconst Id = z.string().min(1).max(500);\nconst Hash = z.string().regex(/^[a-f0-9]{64}$/);\nconst Time = z.iso.datetime();\nconst Amount = z.number().finite().nonnegative().nullable();\nconst Count = z.number().int().nonnegative().nullable();\nexport const DiagnosticEventSchema = z\n .object({\n id: Id,\n sequence: z.number().int().nonnegative(),\n at: Time.nullable(),\n type: z.string().max(160),\n action: z.string().max(160).nullable(),\n correlationId: Id.nullable(),\n attempt: Count,\n taskId: Id.nullable(),\n status: z.string().max(100).nullable(),\n errorCode: z.string().max(200).nullable(),\n cleanupComplete: z.boolean().nullable(),\n })\n .strict();\nexport const DiagnosticCallSchema = z\n .object({\n id: Id,\n kind: z.string().max(100),\n status: z.string().max(100),\n receiptId: Id.nullable(),\n maximumUsd: Amount,\n settledUsd: Amount,\n model: z.string().max(200).nullable(),\n durationMs: Count,\n inputTokens: Count,\n outputTokens: Count,\n totalTokens: Count,\n })\n .strict();\nconst Content = z\n .object({\n schemaVersion: z.literal(\"openpond.runDiagnostics.v1\"),\n teamId: Id,\n runId: Id,\n location: z.enum([\"local\", \"hosted\"]),\n manifestHash: Hash,\n observedAt: Time,\n status: z.string().max(100),\n startedAt: Time.nullable(),\n completedAt: Time.nullable(),\n error: z.string().max(8192).nullable(),\n resultAvailable: z.boolean(),\n parent: z\n .object({\n id: Id,\n status: z.string().max(100),\n attempt: Count,\n heartbeatAt: Time.nullable(),\n leaseExpiresAt: Time.nullable(),\n releasedAt: Time.nullable(),\n errorCode: z.string().max(200).nullable(),\n })\n .strict()\n .nullable(),\n accounting: z\n .object({\n maximumUsd: Amount,\n settledUsd: Amount,\n outstandingUsd: Amount,\n outstandingCount: Count,\n final: z.boolean(),\n receiptCount: Count,\n })\n .strict(),\n events: z.array(DiagnosticEventSchema).max(100),\n nextEventCursor: z.number().int().nonnegative().nullable(),\n eventCount: z.number().int().nonnegative(),\n calls: z.array(DiagnosticCallSchema).max(100),\n nextCallCursor: Id.nullable(),\n callCount: z.number().int().nonnegative(),\n limitations: z.array(z.string().max(1000)).max(30),\n })\n .strict();\nexport const RunDiagnosticsSchema = Content.extend({ contentHash: Hash }).strict();\nexport type RunDiagnostics = z.infer<typeof RunDiagnosticsSchema>;\nexport type DiagnosticEvent = z.infer<typeof DiagnosticEventSchema>;\nexport type DiagnosticCall = z.infer<typeof DiagnosticCallSchema>;\nexport const RunDiagnosticsQuerySchema = z\n .object({\n afterSequence: z.number().int().nonnegative().optional(),\n afterCallId: Id.optional(),\n })\n .strict();\nexport function sealRunDiagnostics(value: z.input<typeof Content>): RunDiagnostics {\n const content = Content.parse(value);\n return { ...content, contentHash: contentHash(content) };\n}\nexport function verifyRunDiagnostics(\n raw: unknown,\n scope: {\n teamId: string;\n runId: string;\n manifestHash?: string;\n afterSequence?: number;\n afterCallId?: string;\n },\n) {\n const value = RunDiagnosticsSchema.parse(raw);\n const { contentHash: hash, ...content } = value;\n if (\n hash !== contentHash(content) ||\n value.teamId !== scope.teamId ||\n value.runId !== scope.runId ||\n (scope.manifestHash && value.manifestHash !== scope.manifestHash)\n )\n throw new Error(\"Diagnostics differ from the selected workspace, run or retained evidence.\");\n if (\n value.events.length > value.eventCount ||\n value.calls.length > value.callCount ||\n new Set(value.events.map((event) => event.id)).size !== value.events.length ||\n value.events.some(\n (event, index) =>\n event.sequence <= (index ? value.events[index - 1]!.sequence : (scope.afterSequence ?? -1)),\n ) ||\n value.calls.some(\n (call, index) => call.id <= (index ? value.calls[index - 1]!.id : (scope.afterCallId ?? \"\")),\n ) ||\n (value.nextEventCursor !== null && value.nextEventCursor !== value.events.at(-1)?.sequence) ||\n (value.nextCallCursor !== null && value.nextCallCursor !== value.calls.at(-1)?.id) ||\n (value.accounting.final &&\n (value.accounting.outstandingCount !== 0 ||\n value.accounting.settledUsd === null ||\n !value.accounting.receiptCount))\n )\n throw new Error(\"Diagnostic evidence pagination or final accounting is inconsistent.\");\n return value;\n}\n/** Deliberately excludes prompt, output, arguments, messages and arbitrary metadata. */\nexport function diagnosticEvent(input: {\n id: string;\n sequence: number;\n at: string | null;\n type: string;\n payload: unknown;\n}): DiagnosticEvent {\n const record = (raw: unknown): Record<string, unknown> =>\n raw !== null && typeof raw === \"object\" && !Array.isArray(raw)\n ? (raw as Record<string, unknown>)\n : {};\n const payload = record(input.payload),\n data = record(payload.data);\n const token = (raw: unknown, maximum: number) =>\n typeof raw === \"string\" && /^[a-zA-Z0-9_.:/-]+$/.test(raw) ? raw.slice(0, maximum) : null;\n return DiagnosticEventSchema.parse({\n id: input.id,\n sequence: input.sequence,\n at: input.at,\n type: input.type.slice(0, 160),\n action: token(payload.action, 160),\n correlationId: token(data.callId ?? data.toolCallId, 500),\n attempt:\n typeof payload.attempt === \"number\" &&\n Number.isInteger(payload.attempt) &&\n payload.attempt >= 0\n ? payload.attempt\n : null,\n taskId: token(payload.taskId ?? data.taskId, 500),\n status: token(payload.status, 100),\n errorCode: token(payload.errorCode ?? payload.code, 200),\n cleanupComplete:\n typeof payload.complete === \"boolean\" && input.type === \"experiment.harness.cleanup\"\n ? payload.complete\n : null,\n });\n}\nexport type DiagnosticSpan = {\n id: string;\n label: string;\n taskId: string | null;\n startedAt: string | null;\n completedAt: string | null;\n durationMs: number | null;\n status: string;\n evidenceIds: string[];\n};\n/** Partial pages remain partial; unmatched endings are never invented starts. */\nexport function diagnosticSpans(events: DiagnosticEvent[]): DiagnosticSpan[] {\n const spans: DiagnosticSpan[] = [],\n active = new Map<string, DiagnosticSpan>();\n for (const event of [...events].sort((a, b) => a.sequence - b.sequence)) {\n if (event.type.startsWith(\"training.\")) {\n spans.push({\n id: event.id,\n label: event.action ?? event.type,\n taskId: event.taskId,\n startedAt: event.at,\n completedAt: null,\n durationMs: null,\n status: \"observed\",\n evidenceIds: [event.id],\n });\n continue;\n }\n if (![\"tool.started\", \"tool.completed\", \"tool.failed\"].includes(event.type)) continue;\n const key = JSON.stringify([event.correlationId ?? event.action, event.taskId, event.attempt]);\n if (event.type === \"tool.started\") {\n const span: DiagnosticSpan = {\n id: event.id,\n label: event.action ?? \"Operation\",\n taskId: event.taskId,\n startedAt: event.at,\n completedAt: null,\n durationMs: null,\n status: \"running\",\n evidenceIds: [event.id],\n };\n active.set(key, span);\n spans.push(span);\n } else {\n const span = active.get(key);\n if (span) {\n span.completedAt = event.at;\n span.status = event.type === \"tool.failed\" ? \"failed\" : \"completed\";\n span.durationMs =\n span.startedAt && event.at\n ? Math.max(0, Date.parse(event.at) - Date.parse(span.startedAt))\n : null;\n span.evidenceIds.push(event.id);\n active.delete(key);\n } else\n spans.push({\n id: event.id,\n label: event.action ?? \"Operation\",\n taskId: event.taskId,\n startedAt: null,\n completedAt: event.at,\n durationMs: null,\n status: event.type === \"tool.failed\" ? \"failed\" : \"completed\",\n evidenceIds: [event.id],\n });\n }\n }\n return spans;\n}\n\nexport function diagnosticAnalysisPrompt(\n value: RunDiagnostics,\n events = value.events,\n calls = value.calls,\n) {\n const { contentHash: pageHash, ...metadata } = value;\n return `Investigate this OpenPond run using the retained metadata below. Start read-only. Separate observed facts, hypotheses, missing evidence and recommended investigations. Cite event/call IDs. Do not infer zero costs or successful grading from missing evidence; gateway duration is not pure inference. Do not replay, regrade, edit source, change configuration, restart or deploy without a separate user instruction. Never request credentials or private grader content. This snapshot may be partial.\\n\\n${JSON.stringify({ ...metadata, sourcePageHash: pageHash, error: diagnosticFailure(value.error), events: events.slice(0, 100), calls: calls.slice(0, 100), analysisCoverage: { eventCount: events.length, callCount: calls.length, maximumIncluded: 100 } }, null, 2)}`;\n}\n\n/** Export only a stable technical reason; arbitrary exception text is not model context. */\nexport function diagnosticFailure(value: string | null | undefined) {\n if (!value) return null;\n const codes = value.match(/\\b[a-z][a-z0-9]+(?:_[a-z0-9]+){1,12}\\b/g);\n return (\n codes?.slice(0, 6).join(\" / \") ||\n \"Failure recorded. Inspect the authorized run for its exact message.\"\n );\n}\n","import { DEFAULT_API_BASE_URL } from \"./endpoints.js\";\nimport { z } from \"zod\";\nimport { contentHash } from \"@openpond/harness\";\nconst Id = z.string().trim().min(1).max(500);\nconst Hash = z.string().regex(/^[a-f0-9]{64}$/);\nconst Content = z.object({ schemaVersion: z.literal(\"openpond.experimentCaseInspection.v1\"), teamId: Id, executionId: Id, manifestHash: Hash, receiptId: Id, taskId: Id, seed: z.string().min(1), input: z.record(z.string(), z.unknown()).nullable(), output: z.unknown().nullable(), error: z.string().nullable(), events: z.array(z.record(z.string(), z.unknown())).max(25), nextEventCursor: Id.nullable(), eventCount: z.number().int().nonnegative() }).strict();\nexport const ExperimentCaseInspectionSchema = Content.extend({ contentHash: Hash }).strict();\nexport type ExperimentCaseInspection = z.infer<typeof ExperimentCaseInspectionSchema>;\nexport class OpenPondExperimentInspectionClient {\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 ?? DEFAULT_API_BASE_URL);\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 /** Retained, policy-facing evidence only. Reading a page never dispatches. */\n async case(executionId: string, receiptId: string, options: { manifestHash?: string; afterId?: string; signal?: AbortSignal } = {}) {\n const params = new URLSearchParams(options.afterId ? { afterId: Id.parse(options.afterId) } : {});\n const response = await (this.options.fetch ?? fetch)(`${this.baseUrl}/v1/experiments/${encodeURIComponent(Id.parse(executionId))}/cases/${encodeURIComponent(Id.parse(receiptId))}?${params}`, { signal: options.signal, redirect: \"error\", headers: { Authorization: `Bearer ${this.options.apiKey}`, \"X-OpenPond-Team-Id\": this.options.teamId, Accept: \"application/json\" } });\n const value: unknown = await response.json();\n if (!response.ok) throw new Error(z.object({ message: z.string() }).parse(value).message);\n const result = ExperimentCaseInspectionSchema.parse(value);\n const { contentHash: actual, ...content } = result;\n if (contentHash(content) !== actual || result.teamId !== this.options.teamId || result.executionId !== executionId || result.receiptId !== receiptId || options.manifestHash && result.manifestHash !== options.manifestHash || result.events.length > result.eventCount) throw new Error(\"Case inspection differs from its requested workspace, execution or retained content.\");\n return result;\n }\n}\n","/** Package aliases remain provenance; a released Reward is one scoring choice. */\nexport type DatasetGraderPin = {\n id: string;\n version: string;\n contentHash: string;\n feedbackKey: string;\n release?: { id: string; revision: number; contentHash: string } | null;\n};\n\nexport function datasetGraderIdentity(pin: DatasetGraderPin): string {\n return JSON.stringify(pin.release\n ? [\"reward\", pin.release.id, pin.release.revision, pin.release.contentHash, pin.feedbackKey]\n : [\"dataset\", pin.id, pin.version, pin.contentHash, pin.feedbackKey]);\n}\n\nexport function groupDatasetGraders<T extends DatasetGraderPin>(pins: readonly T[]): Array<{ key: string; grader: T; aliases: T[] }> {\n const groups = new Map<string, { key: string; grader: T; aliases: T[] }>();\n for (const pin of pins) {\n const key = datasetGraderIdentity(pin);\n const group = groups.get(key);\n if (group) group.aliases.push(pin);\n else groups.set(key, { key, grader: pin, aliases: [pin] });\n }\n return [...groups.values()];\n}\n\n/** Validate selected choices, rather than silently choosing between different\n * graders that would write the same feedback field. Never modifies package pins. */\nexport function canonicalDatasetGraderSelection<T extends DatasetGraderPin & { mappings?: unknown }>(pins: readonly T[]): T[] {\n const selected = groupDatasetGraders(pins);\n const feedback = new Map<string, string>();\n for (const group of selected) {\n const previous = feedback.get(group.grader.feedbackKey);\n if (previous && previous !== group.key)\n throw new Error(`Different selected grader releases use feedback key \"${group.grader.feedbackKey}\". Select one, or publish graders with distinct feedback keys.`);\n feedback.set(group.grader.feedbackKey, group.key);\n const mappings = JSON.stringify(group.grader.mappings ?? []);\n if (group.aliases.some(alias => JSON.stringify(alias.mappings ?? []) !== mappings))\n throw new Error(`Aliases of grader \"${group.grader.feedbackKey}\" have different field mappings. Select one alias and review its mappings.`);\n }\n return selected.map(group => group.grader);\n}\n","import type { ModelTasksetRunRequest } from \"./model-taskset-runs-contracts.js\";\n\n/** Resolve presentation from the configuration that actually executes. These\n * modes never inherit a selected chat session or a mutable desktop preference. */\nexport function experimentExecutionSelection(policy: ModelTasksetRunRequest[\"policy\"]) {\n if (policy.kind === \"fixture\") return { mode: \"fixture\" as const };\n if (policy.kind === \"hosted_harness\") return {\n mode: \"model_harness_profile\" as const,\n modelId: policy.modelId,\n harnessRelease: policy.source.harnessRelease,\n profile: { repositoryId: policy.profileRepositoryId, id: policy.source.profileId,\n revision: policy.source.sourceRevision, target: policy.source.target },\n };\n return policy.harness ? {\n mode: \"model_harness\" as const, modelId: policy.modelId, harness: policy.harness,\n } : { mode: \"model\" as const, modelId: policy.modelId };\n}\n","import {z} from \"zod\";\nimport {verifyExperimentEvidence} from \"@openpond/evals/experiments\";\nimport {verifyExperimentScoringPass} from \"./experiment-scoring-contracts.js\";\nimport {contentHash} from \"@openpond/harness\";\nimport {verifyProfileExternalDatasetBinding,type ProfileExternalDatasetBinding} from \"@openpond/evals\";\nimport {ExperimentFieldMappingsSchema} from \"./experiment-field-mappings.js\";\nimport {validateTasksetPackage,type TasksetPackage} from \"./taskset-packages.js\";\n\nexport type ExternalDatasetGraderPin={id:string;version:string;contentHash:string;feedbackKey:string;release:{id:string;revision:number|string;contentHash:string}|null};\n/** Recompute admission from actual authorized releases. None of the binding's\n * self-declared hashes grants Dataset or Profile access. */\nexport function verifyExternalDatasetPackage(input:{binding:ProfileExternalDatasetBinding;packageValue:TasksetPackage;graders:ExternalDatasetGraderPin[];actualGrading?:{pass:unknown;evidence:unknown}}) {\n const binding=verifyProfileExternalDatasetBinding(input.binding),value=validateTasksetPackage(input.packageValue),taskset=value.taskset;\n if(taskset.id!==binding.dataset.id||taskset.revision!==binding.dataset.revision||taskset.contentHash!==binding.dataset.contentHash||value.contentHash!==binding.packageHash\n ||contentHash(taskset.environment)!==binding.environmentHash||contentHash(value.files.filter(file=>file.asset.visibility!==\"policy\").map(file=>file.asset))!==binding.privateDatasetClosureHash)\n throw new Error(\"The selected Dataset package, environment or protected closure changed.\");\n if(binding.population.length>500)throw new Error(\"Select at most 500 exact Dataset cases before starting this bounded Profile evaluation.\");\n for(const member of binding.population){const task=taskset.tasks.find(task=>task.id===member.taskId);if(!task||task.split!==binding.split)throw new Error(\"The selected ordered population is outside its exact Dataset split.\");\n if(member.fixtureId!==null)throw new Error(\"This recorded cutoff needs an admitted replay fixture before executing the Profile target.\");}\n if(binding.gradingSource){if(!input.actualGrading)throw new Error(\"The actual selected scoring owner is required for this recipe.\");const pass=verifyExperimentScoringPass(input.actualGrading.pass),evidence=verifyExperimentEvidence(z.object({manifest:z.unknown(),result:z.unknown()}).strict().parse(input.actualGrading.evidence));if(pass.status!==\"completed\"||pass.id!==binding.gradingSource.pass.id||pass.contentHash!==binding.gradingSource.pass.contentHash||evidence.manifest.id!==binding.gradingSource.evidence.id||evidence.result.contentHash!==binding.gradingSource.evidence.contentHash||evidence.manifest.lineage?.scoringPassId!==pass.id||contentHash(evidence.manifest.dataset)!==contentHash(binding.dataset)||contentHash(evidence.manifest.evaluators)!==contentHash(binding.evaluators)||contentHash(binding.fieldMappings)!==contentHash(pass.graders.map(pin=>({graderId:pin.id,fields:pin.mappings??[]}))))throw new Error(\"The selected scoring owner changed its exact Dataset, measurements or mappings.\");const actual=evidence.manifest.population,expected=binding.recordedOrigin?binding.recordedOrigin.members.map(member=>({caseId:member.caseId,seed:member.seed,fixtureId:member.fixtureId})):binding.population.map(member=>({caseId:member.taskId,seed:member.seed,fixtureId:member.fixtureId}));if(actual.length!==expected.length||actual.some((member,index)=>contentHash(member)!==contentHash(expected[index])))throw new Error(\"The selected scoring population differs from the exact ordered original cases and cutoffs.\");}\n else {\n if(binding.fieldMappings.some(row=>!taskset.graders.some(grader=>grader.id===row.graderId)))throw new Error(\"The field mappings name a grader outside the selected release.\");\n for(const row of binding.fieldMappings)ExperimentFieldMappingsSchema.parse(row.fields);\n const selected=binding.evaluators.map(evaluator=>{const pin=input.graders.find(pin=>pin.feedbackKey===evaluator.feedbackKey&&contentHash(pin.release??{id:pin.id,revision:pin.version,contentHash:pin.contentHash})===contentHash(evaluator.release));if(!pin)throw new Error(\"Select an exact released Dataset grader for this external recipe.\");return pin;});\n if(binding.fieldMappings.some(row=>!selected.some(pin=>pin.id===row.graderId)))throw new Error(\"Field mappings refer to an unselected grader.\");\n const evaluators=selected.map(pin=>({release:pin.release??{id:pin.id,revision:pin.version,contentHash:pin.contentHash},feedbackKey:pin.feedbackKey,\n configurationHash:contentHash({graderHash:pin.contentHash,mappings:binding.fieldMappings.find(row=>row.graderId===pin.id)?.fields??[]}),output:\"score\" as const,categories:[]}));\n if(contentHash(evaluators)!==contentHash(binding.evaluators))throw new Error(\"The external recipe's graders or mappings differ from the current exact released grading settings.\");\n for(const pin of input.graders)if(!taskset.graders.some(grader=>grader.id===pin.id&&grader.version===pin.version&&contentHash(grader)===pin.contentHash))throw new Error(\"External grader pins differ from the actual Dataset implementation.\");\n }\n for(const pin of input.graders)if(!taskset.graders.some(grader=>grader.id===pin.id&&grader.version===pin.version&&contentHash(grader)===pin.contentHash))throw new Error(\"Dataset-native grader pins differ from their actual implementation.\");\n return value;\n}\n","import { DEFAULT_API_BASE_URL } from \"./endpoints.js\";\nimport { z } from \"zod\";\nimport { ImmutableReleaseRefSchema } from \"@openpond/harness\";\nimport { ProfileEvaluationDefinitionSchema, ProfileEvaluationSuiteSchema,\n ProfileEvaluationComparisonSchema, ProfileEvaluationSuiteRunSchema, ProfileEvaluationReportSchema,\n TasksetRunManifestSchema, TasksetMetricResultSchema } from \"@openpond/evals\";\nimport { fetchConnectedJson } from \"./connected-evidence-http.js\";\n\nconst Id = z.string().trim().min(1).max(240);\nexport const ProfileEvaluationDiscoverySchema = z.object({\n profileRef:z.object({source:z.enum([\"local\",\"github\",\"openpond_git\"]),repositoryId:Id,profileId:Id}).strict(),\n sourceRevision:z.string().min(1).max(500),harnessRelease:ImmutableReleaseRefSchema,\n catalogHash:z.string().regex(/^[a-f0-9]{64}$/).nullable(),\n definitions:z.array(ProfileEvaluationDefinitionSchema).max(1000),suites:z.array(ProfileEvaluationSuiteSchema).max(100),\n runs:z.array(z.object({profileRef:z.object({source:z.enum([\"local\",\"github\",\"openpond_git\"]),repositoryId:Id,profileId:Id}).strict(),\n manifest:TasksetRunManifestSchema,metric:TasksetMetricResultSchema,gradeRefs:z.array(ImmutableReleaseRefSchema),\n receiptRefs:z.array(ImmutableReleaseRefSchema),passRate:z.number().min(0).max(1),passed:z.boolean(),\n completedAt:z.iso.datetime(),contentHash:z.string().regex(/^[a-f0-9]{64}$/)}).strict()).max(1000),\n comparisons:z.array(ProfileEvaluationComparisonSchema).max(1000),suiteRuns:z.array(ProfileEvaluationSuiteRunSchema).max(1000),\n reports:z.array(ProfileEvaluationReportSchema).max(1000),\n}).strict();\nexport type ProfileEvaluationDiscovery = z.infer<typeof ProfileEvaluationDiscoverySchema>;\nexport const ProfileEvaluationDiscoveryRequestSchema=z.object({teamId:Id,profileRepositoryId:Id,\n trainingProjectId:Id.optional()}).strict();\n\n/** Reads the existing source owner's receipts. No resource is copied and no\n * incomplete execution is turned into a synthetic rerunnable configuration. */\nexport class OpenPondProfileEvaluationDiscoveryClient {\n constructor(private readonly options:{baseUrl?:string;apiKey:string;teamId:string;fetch?:typeof fetch}){\n const url=new URL(options.baseUrl ?? DEFAULT_API_BASE_URL);\n if(![\"http:\",\"https:\"].includes(url.protocol)||url.username||url.password||url.search||url.hash||!options.apiKey.trim()||!options.teamId.trim())\n throw new Error(\"Profile discovery requires a scoped HTTP endpoint and owner credential.\");\n }\n async read(input:{profileRepositoryId:string;trainingProjectId?:string},signal?:AbortSignal){\n const body=ProfileEvaluationDiscoveryRequestSchema.parse({...input,teamId:this.options.teamId});\n const {response,value}=await fetchConnectedJson(this.options.fetch??fetch,\n `${(this.options.baseUrl ?? DEFAULT_API_BASE_URL).replace(/\\/$/,\"\")}/v1/profile-evaluation-discovery`,\n {method:\"POST\",redirect:\"error\",headers:{Authorization:`Bearer ${this.options.apiKey}`,\"X-OpenPond-Team-Id\":this.options.teamId,\"Content-Type\":\"application/json\"},body:JSON.stringify(body),signal},\n (_status,_code,message)=>new Error(message));\n if(!response.ok)throw new Error(\"The released Profile evaluation owner is unavailable to this account and workspace.\");\n const discovery=ProfileEvaluationDiscoverySchema.parse(value);\n if(discovery.profileRef.repositoryId!==body.profileRepositoryId)throw new Error(\"Profile discovery returned another source owner.\");\n return discovery;\n }\n}\n"],"mappings":"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","names":["z","z","z","z","Hash","Id","z","value","z","Id","z","Hash","Content","z","verifyExperimentEvidence","task","verifyExperimentEvidence","z","pin","z","Id","z"]}
|
|
@@ -57,8 +57,7 @@ var TrainingGpuCatalogScopeSchema = z.object({
|
|
|
57
57
|
countryCodes: z.array(z.string().regex(/^[A-Z]{2}$/)).min(1).max(300),
|
|
58
58
|
cudaVersions: z.array(z.string().regex(/^\d+\.\d+$/)).min(1).max(100),
|
|
59
59
|
dataCenterId: Id.nullable(),
|
|
60
|
-
minimumDiskGb: z.number().int().positive()
|
|
61
|
-
priceBasis: z.literal("provider_catalog_per_gpu_rate_times_count")
|
|
60
|
+
minimumDiskGb: z.number().int().positive()
|
|
62
61
|
}).strict().nullable()
|
|
63
62
|
}).strict();
|
|
64
63
|
var TrainingGpuCatalogSchema = z.object({
|
|
@@ -67,7 +66,7 @@ var TrainingGpuCatalogSchema = z.object({
|
|
|
67
66
|
expiresAt: z.string().datetime({ offset: true }),
|
|
68
67
|
workerImageDigest: z.string().regex(/^sha256:[a-f0-9]{64}$/),
|
|
69
68
|
supportedLoraRanks: z.array(z.number().int().positive()),
|
|
70
|
-
pricingBasis: z.
|
|
69
|
+
pricingBasis: z.literal("retail_allocation_hourly_before_credits"),
|
|
71
70
|
scope: TrainingGpuCatalogScopeSchema.optional(),
|
|
72
71
|
offerings: z.array(z.object({
|
|
73
72
|
availabilityId: Id,
|
|
@@ -78,9 +77,8 @@ var TrainingGpuCatalogSchema = z.object({
|
|
|
78
77
|
gpuCount: z.number().int().positive(),
|
|
79
78
|
gpuMemoryGb: z.number().positive(),
|
|
80
79
|
stockStatus: z.enum(["High", "Medium", "Low"]),
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
totalHourlyUsd: z.number().nonnegative()
|
|
80
|
+
/** Whole-allocation retail rate, including attached disk. Null means unpriced. */
|
|
81
|
+
hourlyUsd: z.number().finite().nonnegative().nullable()
|
|
84
82
|
}).strict()).max(1e3)
|
|
85
83
|
}).strict();
|
|
86
84
|
async function parseAndVerifyTrainingGpuCatalog(raw, query) {
|
|
@@ -92,7 +90,7 @@ async function parseAndVerifyTrainingGpuCatalog(raw, query) {
|
|
|
92
90
|
return catalog;
|
|
93
91
|
}
|
|
94
92
|
const scope = catalog.scope;
|
|
95
|
-
if (!scope ||
|
|
93
|
+
if (!scope || canonicalJson(scope.query) !== canonicalJson(query) || scope.requestHash !== await canonicalSha256(query) || scope.qualification === "unsupported" !== (scope.reason !== null) || (scope.qualification === "unsupported" ? scope.provider !== null || catalog.offerings.length > 0 : !scope.provider) || new Set(catalog.offerings.map((item) => item.provider)).size > 1 || catalog.offerings.some((item) => item.gpuCount !== query.gpuCount || item.dataCenterId !== scope.provider?.dataCenterId) || new Set(catalog.offerings.map((item) => item.availabilityId)).size !== catalog.offerings.length)
|
|
96
94
|
throw new OpenPondProtocolError("training_gpu_catalog_scope_mismatch", "The GPU offers do not match this workspace and workload.");
|
|
97
95
|
return catalog;
|
|
98
96
|
}
|
|
@@ -499,4 +497,4 @@ export {
|
|
|
499
497
|
OpenPondModelProjectApiError,
|
|
500
498
|
createModelProjectsClient
|
|
501
499
|
};
|
|
502
|
-
//# sourceMappingURL=chunk-
|
|
500
|
+
//# sourceMappingURL=chunk-WJZHSIGD.js.map
|