openpond-sdk 0.12.19 → 0.12.21
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/OPENTELEMETRY.md +85 -0
- package/README.md +4 -0
- package/TASK_INGESTION.md +135 -0
- package/dist/advanced-refiner-evaluations.js +2 -2
- package/dist/{chunk-RN5MK7NH.js → chunk-6EZAGTZG.js} +4 -4
- package/dist/{chunk-3MDNVNBM.js → chunk-BNBPKCIR.js} +6 -6
- package/dist/{chunk-EBB36D5X.js → chunk-LEVXD73U.js} +5 -3
- package/dist/chunk-LEVXD73U.js.map +1 -0
- package/dist/chunk-NZRGRUYG.js +140 -0
- package/dist/chunk-NZRGRUYG.js.map +1 -0
- package/dist/{chunk-JMXFHO2W.js → chunk-QCRNQMN4.js} +2 -2
- package/dist/{chunk-RT7SQHO4.js → chunk-SP7DQEQM.js} +2 -2
- package/dist/{chunk-UVQENVTW.js → chunk-YV6PPDXZ.js} +25 -4
- package/dist/chunk-YV6PPDXZ.js.map +1 -0
- package/dist/connected-evidence.js +3 -3
- package/dist/dataset-workspaces.js +125 -36
- package/dist/dataset-workspaces.js.map +1 -1
- package/dist/experiment-evaluation-schedules.js +5 -5
- package/dist/experiments.js +5 -5
- package/dist/index.js +51 -36
- package/dist/index.js.map +1 -1
- package/dist/model-starter-catalog.js +2 -2
- package/dist/model-starters.js +2 -2
- package/dist/opentelemetry.js +92 -0
- package/dist/opentelemetry.js.map +1 -0
- package/dist/taskset-drafts.js +1 -1
- package/dist/taskset-packages.js +13 -13
- package/dist/training-bundle.js +12 -12
- package/dist/training.js +15 -11
- package/dist/training.js.map +1 -1
- package/dist/types/packages/sdk/src/dataset-task-ingestion.d.ts +86 -0
- package/dist/types/packages/sdk/src/dataset-task-ingestion.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts +152 -140
- package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/dataset-workspaces.d.ts +1 -0
- package/dist/types/packages/sdk/src/dataset-workspaces.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiment-client.d.ts +77 -77
- package/dist/types/packages/sdk/src/experiment-evaluation-schedules.d.ts +216 -216
- package/dist/types/packages/sdk/src/index.d.ts +4 -0
- package/dist/types/packages/sdk/src/index.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/managed-decision-executions.d.ts +339 -339
- package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +216 -216
- package/dist/types/packages/sdk/src/opentelemetry.d.ts +39 -0
- package/dist/types/packages/sdk/src/opentelemetry.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +120 -120
- package/dist/types/packages/sdk/src/taskset-draft-source.d.ts +20 -20
- package/dist/types/packages/sdk/src/training-job-contracts.d.ts +18 -0
- package/dist/types/packages/sdk/src/training-job-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts +25 -25
- package/dist/types/packages/sdk/src/training-supervised.d.ts +25 -2
- package/dist/types/packages/sdk/src/training-supervised.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training.d.ts +4480 -4462
- package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/types.d.ts +2 -0
- package/dist/types/packages/sdk/src/types.d.ts.map +1 -1
- package/fixtures/python-foundation/operation-matrix.json +17 -0
- package/fixtures/python-foundation/schemas.json +5941 -5001
- package/package.json +18 -3
- package/dist/chunk-EBB36D5X.js.map +0 -1
- package/dist/chunk-UVQENVTW.js.map +0 -1
- /package/dist/{chunk-RN5MK7NH.js.map → chunk-6EZAGTZG.js.map} +0 -0
- /package/dist/{chunk-3MDNVNBM.js.map → chunk-BNBPKCIR.js.map} +0 -0
- /package/dist/{chunk-JMXFHO2W.js.map → chunk-QCRNQMN4.js.map} +0 -0
- /package/dist/{chunk-RT7SQHO4.js.map → chunk-SP7DQEQM.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/dataset-task-ingestion.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { assertBoundedTaskJson } from \"@openpond/evals/task-schema\";\nimport { readBoundedJsonResponse } from \"./protocol.js\";\n\nconst Id = z.string().trim().min(1).max(240);\nexport const DatasetTaskInputSchema = z\n .object({\n name: z.string().trim().min(1).max(300),\n input: z.record(z.string(), z.unknown()),\n expectedOutput: z.record(z.string(), z.unknown()).nullable().default(null),\n split: z.enum([\"train\", \"validation\", \"frozen_eval\"]).default(\"validation\"),\n source: z\n .object({\n kind: z.string().trim().min(1).max(100),\n eventId: Id.optional(),\n label: z.string().trim().min(1).max(300).optional(),\n occurredAt: z.iso.datetime().optional(),\n })\n .strict()\n .optional(),\n tags: z.array(Id).max(100).default([]),\n })\n .strict();\nexport const DatasetTaskAppendRequestSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.datasetTaskAppend.v1\"),\n operationId: Id,\n task: DatasetTaskInputSchema,\n })\n .strict();\nexport const DatasetTaskAppendReceiptSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.datasetTaskReceipt.v1\"),\n teamId: Id,\n datasetId: z.string().trim().min(1).max(240),\n taskId: Id,\n operationId: Id,\n receivedAt: z.iso.datetime(),\n revision: z.number().int().positive(),\n state: z.literal(\"saved\"),\n trainingUseAuthorized: z.literal(false),\n })\n .strict();\nexport type DatasetTaskInput = z.input<typeof DatasetTaskInputSchema>;\nexport type DatasetTaskAppendReceipt = z.infer<typeof DatasetTaskAppendReceiptSchema>;\nexport type AddTaskOptions = { idempotencyKey?: string; signal?: AbortSignal };\nexport type DatasetTaskClientOptions = {\n apiKey: string;\n baseUrl: string;\n teamId: string;\n fetch?: typeof fetch;\n};\n\nexport class DatasetTaskIngestionError extends Error {\n readonly outcomeUnknown: boolean;\n constructor(\n message: string,\n readonly status: number,\n readonly code: string,\n readonly operationId: string,\n ) {\n super(message);\n this.name = \"DatasetTaskIngestionError\";\n this.outcomeUnknown = status === 0 || status >= 500 || code === \"dataset_task_receipt_invalid\";\n }\n}\n\n/** A bounded append, independent of complete workspace downloads or replacement. */\nexport async function addDatasetTask(\n config: DatasetTaskClientOptions,\n datasetId: string,\n task: DatasetTaskInput,\n options: AddTaskOptions = {},\n): Promise<DatasetTaskAppendReceipt> {\n const url = new URL(config.baseUrl);\n if (\n ![\"http:\", \"https:\"].includes(url.protocol) ||\n url.username ||\n url.password ||\n url.search ||\n url.hash ||\n url.pathname !== \"/\"\n )\n throw new Error(\"A clean API origin is required.\");\n const teamId = Id.parse(config.teamId);\n if (!config.apiKey.trim()) throw new Error(\"An OpenPond API key is required.\");\n const id = z.string().trim().min(1).max(240).parse(datasetId);\n const request = DatasetTaskAppendRequestSchema.parse({\n schemaVersion: \"openpond.datasetTaskAppend.v1\",\n operationId: options.idempotencyKey ?? crypto.randomUUID(),\n task,\n });\n assertBoundedTaskJson(request, 128 * 1024);\n let response: Response;\n try {\n response = await (config.fetch ?? fetch)(\n `${url.origin}/v1/dataset-workspaces/${encodeURIComponent(id)}/tasks`,\n {\n method: \"POST\",\n redirect: \"error\",\n signal: options.signal,\n headers: {\n Authorization: `Bearer ${config.apiKey}`,\n \"X-OpenPond-Team-Id\": teamId,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n },\n );\n } catch {\n throw new DatasetTaskIngestionError(\n \"Task delivery could not be confirmed. Retry with the same operation ID.\",\n 0,\n \"dataset_task_outcome_unknown\",\n request.operationId,\n );\n }\n let raw: unknown;\n try {\n raw = await readBoundedJsonResponse(response, 64 * 1024, \"Dataset task receipt\");\n } catch {\n throw new DatasetTaskIngestionError(\n \"Task delivery returned an invalid receipt. Retain the same operation ID before retrying.\",\n response.status,\n \"dataset_task_receipt_invalid\",\n request.operationId,\n );\n }\n if (!response.ok) {\n const error = z\n .object({ message: z.string().optional(), code: z.string().optional() })\n .passthrough()\n .safeParse(raw);\n throw new DatasetTaskIngestionError(\n error.success ? (error.data.message ?? \"Task submission failed.\") : \"Task submission failed.\",\n response.status,\n error.success\n ? (error.data.code ?? \"dataset_task_request_failed\")\n : \"dataset_task_request_failed\",\n request.operationId,\n );\n }\n const parsed = DatasetTaskAppendReceiptSchema.safeParse(raw);\n if (!parsed.success)\n throw new DatasetTaskIngestionError(\n \"Task delivery returned an invalid receipt.\",\n response.status,\n \"dataset_task_receipt_invalid\",\n request.operationId,\n );\n const receipt = parsed.data;\n if (\n receipt.teamId !== teamId ||\n receipt.datasetId !== id ||\n receipt.operationId !== request.operationId\n )\n throw new DatasetTaskIngestionError(\n \"Dataset task receipt identity mismatch.\",\n response.status,\n \"dataset_task_receipt_invalid\",\n request.operationId,\n );\n return receipt;\n}\n\n/** Bind credentials and destination once; the returned addTask has no global state. */\nexport function createTaskAdder(config: DatasetTaskClientOptions & { datasetId: string }) {\n const { datasetId, ...connection } = config;\n return (task: DatasetTaskInput, options?: AddTaskOptions) =>\n addDatasetTask(connection, datasetId, task, options);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ManagedSftRecipeSchema
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YV6PPDXZ.js";
|
|
4
4
|
import {
|
|
5
5
|
ModelStarterExecutionSchema,
|
|
6
6
|
validateModelStarterExecution,
|
|
@@ -443,4 +443,4 @@ export {
|
|
|
443
443
|
previewModelStarter,
|
|
444
444
|
validateResolvedModelStarter
|
|
445
445
|
};
|
|
446
|
-
//# sourceMappingURL=chunk-
|
|
446
|
+
//# sourceMappingURL=chunk-QCRNQMN4.js.map
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
} from "./chunk-GPQLBVQC.js";
|
|
10
10
|
import {
|
|
11
11
|
AuthoredTasksetFileInventorySchema
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-BNBPKCIR.js";
|
|
13
13
|
import {
|
|
14
14
|
configuredTasksetDraftFiles,
|
|
15
15
|
createTasksetDraftWorkspace,
|
|
@@ -698,4 +698,4 @@ export {
|
|
|
698
698
|
prepareTasksetDraftSource,
|
|
699
699
|
materializeTasksetDraftWorkspace
|
|
700
700
|
};
|
|
701
|
-
//# sourceMappingURL=chunk-
|
|
701
|
+
//# sourceMappingURL=chunk-SP7DQEQM.js.map
|
|
@@ -54,8 +54,8 @@ var ManagedSftRecipeSchema = SftRecipeSchema.safeExtend({
|
|
|
54
54
|
}),
|
|
55
55
|
optimizer: SftRecipeSchema.shape.optimizer.safeExtend({
|
|
56
56
|
learningRate: z.number().positive().max(1e-3),
|
|
57
|
-
epochs: z.number().positive().max(
|
|
58
|
-
maxSteps: z.number().int().min(1).max(
|
|
57
|
+
epochs: z.number().positive().max(20),
|
|
58
|
+
maxSteps: z.number().int().min(1).max(400),
|
|
59
59
|
batchSize: z.number().int().min(1).max(32),
|
|
60
60
|
gradientAccumulationSteps: z.number().int().min(1).max(32),
|
|
61
61
|
seed: z.number().int().min(-(2 ** 31)).max(2 ** 31 - 1)
|
|
@@ -77,9 +77,30 @@ var ManagedSftRecipeSchema = SftRecipeSchema.safeExtend({
|
|
|
77
77
|
message: "Adapter target modules must be unique."
|
|
78
78
|
});
|
|
79
79
|
});
|
|
80
|
+
var TrainingSftImageCapabilitiesSchema = z.object({
|
|
81
|
+
schemaVersion: z.literal("openpond.managedSftImageSupport.v2"),
|
|
82
|
+
workerImageDigest: z.string().regex(/^sha256:[a-f0-9]{64}$/),
|
|
83
|
+
workerSourceReleaseSha256: z.string().regex(/^[a-f0-9]{64}$/),
|
|
84
|
+
baseModel: SftRecipeSchema.shape.baseModel,
|
|
85
|
+
gpuCount: z.literal(1),
|
|
86
|
+
supportedRanks: z.array(z.number().int().min(1).max(64)).min(1).max(64),
|
|
87
|
+
maxSequenceLength: z.number().int().min(2).max(8192),
|
|
88
|
+
maxEpochs: z.number().positive().max(20),
|
|
89
|
+
maxOptimizerSteps: z.number().int().min(1).max(400),
|
|
90
|
+
evidenceRef: z.string().trim().min(1).max(2048),
|
|
91
|
+
evidenceSha256: z.string().regex(/^[a-f0-9]{64}$/)
|
|
92
|
+
}).strict().superRefine((value, context) => {
|
|
93
|
+
if (new Set(value.supportedRanks).size !== value.supportedRanks.length)
|
|
94
|
+
context.addIssue({ code: "custom", path: ["supportedRanks"], message: "Supported ranks must be unique." });
|
|
95
|
+
});
|
|
96
|
+
function supportsTrainingSftRecipe(image, recipe) {
|
|
97
|
+
return image.baseModel.id === recipe.baseModel.id && image.baseModel.revision === recipe.baseModel.revision && image.baseModel.tokenizerRevision === recipe.baseModel.tokenizerRevision && image.baseModel.chatTemplateHash === recipe.baseModel.chatTemplateHash && image.supportedRanks.includes(recipe.lora.rank) && recipe.dataset.maxSequenceLength <= image.maxSequenceLength && recipe.optimizer.epochs <= image.maxEpochs && recipe.optimizer.maxSteps <= image.maxOptimizerSteps;
|
|
98
|
+
}
|
|
80
99
|
|
|
81
100
|
export {
|
|
82
101
|
SftRecipeSchema,
|
|
83
|
-
ManagedSftRecipeSchema
|
|
102
|
+
ManagedSftRecipeSchema,
|
|
103
|
+
TrainingSftImageCapabilitiesSchema,
|
|
104
|
+
supportsTrainingSftRecipe
|
|
84
105
|
};
|
|
85
|
-
//# sourceMappingURL=chunk-
|
|
106
|
+
//# sourceMappingURL=chunk-YV6PPDXZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/training-supervised.ts"],"sourcesContent":["import { z } from \"zod\";\n\nconst Id = z.string().trim().min(1).max(240);\nconst Hash = z.string().trim().min(8).max(256);\n\n/** Shared recipe for the public API, local workbench, and managed executor.\n * Supervised training has no rollout-group, reward, or relative-loss settings.\n */\nexport const SftRecipeSchema = z.object({\n schemaVersion: z.literal(\"openpond.sftRecipe.v1\"),\n method: z.literal(\"sft\"),\n parameterization: z.literal(\"lora\"),\n baseModel: z.object({\n id: Id,\n revision: z.string().trim().min(1).max(256),\n tokenizerRevision: z.string().trim().min(1).max(256),\n chatTemplateHash: Hash,\n }),\n dataset: z.object({\n trainSplit: z.literal(\"train\"),\n validationSplit: z.enum([\"validation\", \"frozen_eval\"]),\n completionOnly: z.boolean(),\n maxSequenceLength: z.number().int().positive().max(32_768),\n maxExamples: z.number().int().positive().max(100_000).default(1_000),\n selectionStrategy: z.literal(\"stable_hash_top_n\").default(\"stable_hash_top_n\"),\n selectionSeed: z.number().int().default(17),\n }),\n lora: z.object({\n rank: z.number().int().positive().max(256),\n alpha: z.number().positive().max(1_024),\n dropout: z.number().min(0).max(1),\n targetModules: z.array(Id).min(1).max(100),\n }),\n optimizer: z.object({\n learningRate: z.number().positive(),\n epochs: z.number().positive().max(100),\n maxSteps: z.number().int().positive().max(1_000_000),\n batchSize: z.number().int().positive().max(10_000),\n gradientAccumulationSteps: z.number().int().positive().max(10_000),\n seed: z.number().int(),\n }),\n resourceLimits: z.object({\n cpuThreads: z.number().int().positive().max(256),\n memoryBytes: z.number().int().positive(),\n wallTimeMs: z.number().int().positive(),\n }),\n});\nexport type SftRecipe = z.infer<typeof SftRecipeSchema>;\n\n/** Managed authoring ceiling. An immutable worker's advertised SFT envelope\n * may be smaller and must also admit the recipe before paid execution.\n */\nexport const ManagedSftRecipeSchema = SftRecipeSchema.safeExtend({\n dataset: SftRecipeSchema.shape.dataset.safeExtend({\n completionOnly: z.literal(true),\n maxSequenceLength: z.number().int().min(2).max(8192),\n maxExamples: z.number().int().min(1).max(1000).default(1000),\n }),\n lora: SftRecipeSchema.shape.lora.safeExtend({\n rank: z.number().int().min(1).max(64),\n dropout: z.number().min(0).lt(1),\n targetModules: z\n .array(z.enum([\"q_proj\", \"k_proj\", \"v_proj\", \"o_proj\", \"gate_proj\", \"up_proj\", \"down_proj\"]))\n .min(1)\n .max(7),\n }),\n optimizer: SftRecipeSchema.shape.optimizer.safeExtend({\n learningRate: z.number().positive().max(0.001),\n epochs: z.number().positive().max(20),\n maxSteps: z.number().int().min(1).max(400),\n batchSize: z.number().int().min(1).max(32),\n gradientAccumulationSteps: z.number().int().min(1).max(32),\n seed: z\n .number()\n .int()\n .min(-(2 ** 31))\n .max(2 ** 31 - 1),\n }),\n resourceLimits: SftRecipeSchema.shape.resourceLimits.safeExtend({\n wallTimeMs: z.number().int().min(1000).max(21_600_000),\n }),\n}).superRefine((recipe, context) => {\n if (recipe.optimizer.batchSize * recipe.optimizer.gradientAccumulationSteps > 32)\n context.addIssue({\n code: \"custom\",\n path: [\"optimizer\"],\n message: \"Managed SFT supports at most 32 accumulated examples.\",\n });\n if (new Set(recipe.lora.targetModules).size !== recipe.lora.targetModules.length)\n context.addIssue({\n code: \"custom\",\n path: [\"lora\", \"targetModules\"],\n message: \"Adapter target modules must be unique.\",\n });\n});\n\n/** Image-specific support, rather than the broad managed authoring ceiling.\n * Receipt identity belongs to the server's reviewed immutable-image registry.\n */\nexport const TrainingSftImageCapabilitiesSchema = z.object({\n schemaVersion: z.literal(\"openpond.managedSftImageSupport.v2\"),\n workerImageDigest: z.string().regex(/^sha256:[a-f0-9]{64}$/),\n workerSourceReleaseSha256: z.string().regex(/^[a-f0-9]{64}$/),\n baseModel: SftRecipeSchema.shape.baseModel,\n gpuCount: z.literal(1),\n supportedRanks: z.array(z.number().int().min(1).max(64)).min(1).max(64),\n maxSequenceLength: z.number().int().min(2).max(8192),\n maxEpochs: z.number().positive().max(20),\n maxOptimizerSteps: z.number().int().min(1).max(400),\n evidenceRef: z.string().trim().min(1).max(2048),\n evidenceSha256: z.string().regex(/^[a-f0-9]{64}$/),\n}).strict().superRefine((value, context) => {\n if (new Set(value.supportedRanks).size !== value.supportedRanks.length)\n context.addIssue({code: \"custom\", path: [\"supportedRanks\"], message: \"Supported ranks must be unique.\"});\n});\nexport type TrainingSftImageCapabilities = z.infer<typeof TrainingSftImageCapabilitiesSchema>;\n\nexport function supportsTrainingSftRecipe(\n image: TrainingSftImageCapabilities,\n recipe: SftRecipe,\n): boolean {\n return image.baseModel.id === recipe.baseModel.id &&\n image.baseModel.revision === recipe.baseModel.revision &&\n image.baseModel.tokenizerRevision === recipe.baseModel.tokenizerRevision &&\n image.baseModel.chatTemplateHash === recipe.baseModel.chatTemplateHash &&\n image.supportedRanks.includes(recipe.lora.rank) &&\n recipe.dataset.maxSequenceLength <= image.maxSequenceLength &&\n recipe.optimizer.epochs <= image.maxEpochs &&\n recipe.optimizer.maxSteps <= image.maxOptimizerSteps;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -49,15 +49,15 @@ import {
|
|
|
49
49
|
ConnectedStartingAssetsRequestSchema,
|
|
50
50
|
verifyConnectedStartingAssetsReceipt
|
|
51
51
|
} from "./chunk-AG6UJ3DI.js";
|
|
52
|
-
import "./chunk-
|
|
53
|
-
import "./chunk-GWXJSBWR.js";
|
|
52
|
+
import "./chunk-BNBPKCIR.js";
|
|
54
53
|
import "./chunk-Q4RGCEOI.js";
|
|
54
|
+
import "./chunk-GWXJSBWR.js";
|
|
55
55
|
import "./chunk-GCUWJUUM.js";
|
|
56
56
|
import {
|
|
57
57
|
ConnectedDatasetSourceRefSchema
|
|
58
58
|
} from "./chunk-ZQ6QTYRE.js";
|
|
59
|
-
import "./chunk-Z252BNAZ.js";
|
|
60
59
|
import "./chunk-TK3DXH7A.js";
|
|
60
|
+
import "./chunk-Z252BNAZ.js";
|
|
61
61
|
import "./chunk-H3367ISL.js";
|
|
62
62
|
import "./chunk-O6FKHAWN.js";
|
|
63
63
|
import "./chunk-QTNYXOJW.js";
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TaskDesignProposalSchema
|
|
3
3
|
} from "./chunk-QIGMNB6M.js";
|
|
4
|
+
import {
|
|
5
|
+
DatasetTaskAppendReceiptSchema,
|
|
6
|
+
DatasetTaskAppendRequestSchema,
|
|
7
|
+
DatasetTaskIngestionError,
|
|
8
|
+
DatasetTaskInputSchema,
|
|
9
|
+
addDatasetTask,
|
|
10
|
+
createTaskAdder
|
|
11
|
+
} from "./chunk-NZRGRUYG.js";
|
|
4
12
|
import {
|
|
5
13
|
ConnectedCaseRefSchema,
|
|
6
14
|
ConnectedStartingAssetSchema,
|
|
@@ -15,8 +23,7 @@ import {
|
|
|
15
23
|
} from "./chunk-AG6UJ3DI.js";
|
|
16
24
|
import {
|
|
17
25
|
compileTasksetDraftWorkspace
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import "./chunk-GWXJSBWR.js";
|
|
26
|
+
} from "./chunk-BNBPKCIR.js";
|
|
20
27
|
import {
|
|
21
28
|
createTasksetDraftFile,
|
|
22
29
|
createTasksetDraftWorkspace,
|
|
@@ -24,6 +31,7 @@ import {
|
|
|
24
31
|
decodeTasksetDraftWorkspaceFile,
|
|
25
32
|
validateTasksetDraftWorkspace
|
|
26
33
|
} from "./chunk-Q4RGCEOI.js";
|
|
34
|
+
import "./chunk-GWXJSBWR.js";
|
|
27
35
|
import {
|
|
28
36
|
TasksetDraftSchema,
|
|
29
37
|
createTasksetDraft
|
|
@@ -34,10 +42,10 @@ import {
|
|
|
34
42
|
TasksetEnvironmentContractSchema,
|
|
35
43
|
TasksetSourceRefSchema
|
|
36
44
|
} from "./chunk-ZQ6QTYRE.js";
|
|
45
|
+
import "./chunk-TK3DXH7A.js";
|
|
37
46
|
import {
|
|
38
47
|
TasksetCatalogReleaseRefSchema
|
|
39
48
|
} from "./chunk-Z252BNAZ.js";
|
|
40
|
-
import "./chunk-TK3DXH7A.js";
|
|
41
49
|
import "./chunk-H3367ISL.js";
|
|
42
50
|
import "./chunk-QTNYXOJW.js";
|
|
43
51
|
import {
|
|
@@ -754,89 +762,163 @@ var OpenPondDatasetWorkspaceClient = class {
|
|
|
754
762
|
constructor(options) {
|
|
755
763
|
this.options = options;
|
|
756
764
|
const url = new URL(options.baseUrl);
|
|
757
|
-
if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash || !options.apiKey.trim() || !options.teamId.trim())
|
|
765
|
+
if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash || !options.apiKey.trim() || !options.teamId.trim())
|
|
766
|
+
throw new Error("A clean API origin and workspace credentials are required.");
|
|
758
767
|
this.baseUrl = url.toString().replace(/\/+$/, "");
|
|
759
768
|
this.preparations = new OpenPondDatasetPreparationClient(options);
|
|
760
769
|
}
|
|
761
770
|
options;
|
|
762
771
|
baseUrl;
|
|
763
772
|
preparations;
|
|
773
|
+
async addTask(id, task, options) {
|
|
774
|
+
return addDatasetTask(this.options, id, task, options);
|
|
775
|
+
}
|
|
764
776
|
async list(options = {}) {
|
|
765
777
|
const { signal, ...input } = options;
|
|
766
778
|
const query = DatasetWorkspaceListQuerySchema.parse(input);
|
|
767
|
-
const params = new URLSearchParams(
|
|
768
|
-
|
|
769
|
-
|
|
779
|
+
const params = new URLSearchParams(
|
|
780
|
+
Object.entries(query).filter(([, value]) => value !== void 0).map(([key, value]) => [key, String(value)])
|
|
781
|
+
);
|
|
782
|
+
const result = DatasetWorkspaceListSchema.parse(
|
|
783
|
+
await this.request(`?${params}`, "GET", void 0, signal)
|
|
784
|
+
);
|
|
785
|
+
if (result.teamId !== this.options.teamId || result.datasets.length > query.limit || new Set(result.datasets.map((item) => item.id)).size !== result.datasets.length)
|
|
786
|
+
throw new Error("Dataset list workspace/page mismatch.");
|
|
770
787
|
return result;
|
|
771
788
|
}
|
|
772
789
|
async get(id, signal) {
|
|
773
|
-
return this.readback(
|
|
790
|
+
return this.readback(
|
|
791
|
+
await this.request(`/${encodeURIComponent(id)}`, "GET", void 0, signal),
|
|
792
|
+
id
|
|
793
|
+
);
|
|
774
794
|
}
|
|
775
795
|
/** Recover only this actor's retained operation; base bytes allow adapters to
|
|
776
796
|
* reconstruct and verify the identical original CAS request before replay. */
|
|
777
797
|
async operationResult(operationId, options) {
|
|
778
798
|
const kind = DatasetWorkspaceOperationKindSchema.parse(options.kind);
|
|
779
|
-
const params = new URLSearchParams({
|
|
780
|
-
|
|
799
|
+
const params = new URLSearchParams({
|
|
800
|
+
kind,
|
|
801
|
+
...options.datasetId ? { datasetId: options.datasetId } : {}
|
|
802
|
+
});
|
|
803
|
+
const raw = await this.request(
|
|
804
|
+
`/operations/${encodeURIComponent(operationId)}?${params}`,
|
|
805
|
+
"GET",
|
|
806
|
+
void 0,
|
|
807
|
+
options.signal,
|
|
808
|
+
132 * 1024 * 1024
|
|
809
|
+
);
|
|
781
810
|
if (raw === null) return null;
|
|
782
811
|
const value = DatasetWorkspaceOperationResultSchema.parse(raw);
|
|
783
812
|
this.readback(value.receipt, value.receipt.datasetId);
|
|
784
813
|
if (value.base) this.readback(value.base, value.receipt.datasetId);
|
|
785
|
-
if (value.operationId !== operationId || value.kind !== kind || options.datasetId && value.receipt.datasetId !== options.datasetId || options.requestHash && value.requestHash !== options.requestHash)
|
|
814
|
+
if (value.operationId !== operationId || value.kind !== kind || options.datasetId && value.receipt.datasetId !== options.datasetId || options.requestHash && value.requestHash !== options.requestHash)
|
|
815
|
+
throw new Error("Dataset operation recovery identity/request mismatch.");
|
|
786
816
|
return value;
|
|
787
817
|
}
|
|
788
818
|
async beginVersion(id, input, signal) {
|
|
789
819
|
const request = DatasetWorkspaceBeginVersionSchema.parse(input);
|
|
790
|
-
const result = this.readback(
|
|
791
|
-
|
|
820
|
+
const result = this.readback(
|
|
821
|
+
await this.request(`/${encodeURIComponent(id)}/begin-version`, "POST", request, signal),
|
|
822
|
+
id
|
|
823
|
+
);
|
|
824
|
+
if (result.revision !== request.expectedRevision + 1 || result.workspace.draft.status !== "draft" || !result.publication || !result.workspace.draft.publishedTasksetRef)
|
|
825
|
+
throw new Error("Editable version receipt mismatch.");
|
|
792
826
|
return result;
|
|
793
827
|
}
|
|
794
828
|
async versions(id, options = {}) {
|
|
795
|
-
const query = new URLSearchParams(
|
|
796
|
-
|
|
797
|
-
|
|
829
|
+
const query = new URLSearchParams(
|
|
830
|
+
options.beforeRevision === void 0 ? {} : { beforeRevision: String(options.beforeRevision) }
|
|
831
|
+
);
|
|
832
|
+
const result = DatasetWorkspaceVersionsSchema.parse(
|
|
833
|
+
await this.request(
|
|
834
|
+
`/${encodeURIComponent(id)}/versions?${query}`,
|
|
835
|
+
"GET",
|
|
836
|
+
void 0,
|
|
837
|
+
options.signal
|
|
838
|
+
)
|
|
839
|
+
);
|
|
840
|
+
if (result.teamId !== this.options.teamId || result.datasetId !== id || result.items.some(
|
|
841
|
+
(item, index) => index > 0 && item.workspaceRevision >= result.items[index - 1].workspaceRevision || options.beforeRevision !== void 0 && item.workspaceRevision >= options.beforeRevision
|
|
842
|
+
))
|
|
843
|
+
throw new Error("Dataset version history scope/order mismatch.");
|
|
798
844
|
return result;
|
|
799
845
|
}
|
|
800
846
|
async version(id, workspaceRevision, signal) {
|
|
801
|
-
const result = this.readback(
|
|
802
|
-
|
|
847
|
+
const result = this.readback(
|
|
848
|
+
await this.request(
|
|
849
|
+
`/${encodeURIComponent(id)}/versions/${workspaceRevision}`,
|
|
850
|
+
"GET",
|
|
851
|
+
void 0,
|
|
852
|
+
signal
|
|
853
|
+
),
|
|
854
|
+
id
|
|
855
|
+
);
|
|
856
|
+
if (result.revision !== workspaceRevision || result.workspace.draft.status !== "published")
|
|
857
|
+
throw new Error("Dataset immutable version mismatch.");
|
|
803
858
|
return result;
|
|
804
859
|
}
|
|
805
860
|
async save(input, signal) {
|
|
806
861
|
const request = DatasetWorkspaceWriteSchema.parse(input);
|
|
807
862
|
const workspace = validateTasksetDraftWorkspace(request.workspace);
|
|
808
|
-
if (workspace.draft.profileId !== this.options.teamId || workspace.draft.revision !== request.expectedRevision + 1)
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
863
|
+
if (workspace.draft.profileId !== this.options.teamId || workspace.draft.revision !== request.expectedRevision + 1)
|
|
864
|
+
throw new Error("Dataset write scope or revision mismatch.");
|
|
865
|
+
const result = this.readback(
|
|
866
|
+
await this.request(`/${encodeURIComponent(workspace.draft.id)}`, "PUT", request, signal),
|
|
867
|
+
workspace.draft.id
|
|
868
|
+
);
|
|
869
|
+
if (request.originProjectId && result.originProjectId !== request.originProjectId)
|
|
870
|
+
throw new Error("Dataset origin Project mismatch.");
|
|
871
|
+
if (request.ownerScope && result.ownerScope !== request.ownerScope)
|
|
872
|
+
throw new Error("Dataset owner scope mismatch.");
|
|
873
|
+
if (result.workspace.contentHash !== workspace.contentHash)
|
|
874
|
+
throw new Error("Dataset write receipt differs from the saved bytes.");
|
|
813
875
|
return result;
|
|
814
876
|
}
|
|
815
877
|
async validate(id, expectedRevision, signal) {
|
|
816
|
-
const result = DatasetWorkspaceValidationSchema.parse(
|
|
817
|
-
|
|
878
|
+
const result = DatasetWorkspaceValidationSchema.parse(
|
|
879
|
+
await this.request(
|
|
880
|
+
`/${encodeURIComponent(id)}/validate`,
|
|
881
|
+
"POST",
|
|
882
|
+
{ expectedRevision },
|
|
883
|
+
signal
|
|
884
|
+
)
|
|
885
|
+
);
|
|
886
|
+
if (result.teamId !== this.options.teamId || result.datasetId !== id || result.revision !== expectedRevision)
|
|
887
|
+
throw new Error("Dataset validation receipt mismatch.");
|
|
818
888
|
return result;
|
|
819
889
|
}
|
|
820
890
|
async publish(id, input, signal) {
|
|
821
891
|
const request = DatasetWorkspacePublishSchema.parse(input);
|
|
822
|
-
const result = this.readback(
|
|
823
|
-
|
|
892
|
+
const result = this.readback(
|
|
893
|
+
await this.request(`/${encodeURIComponent(id)}/publish`, "POST", request, signal),
|
|
894
|
+
id
|
|
895
|
+
);
|
|
896
|
+
if (result.revision !== request.expectedRevision + 1 || result.workspace.draft.status !== "published" || result.publication?.packageHash !== request.packageHash)
|
|
897
|
+
throw new Error("Dataset publication receipt mismatch.");
|
|
824
898
|
return result;
|
|
825
899
|
}
|
|
826
900
|
readback(value, id) {
|
|
827
901
|
const result = DatasetWorkspaceReceiptSchema.parse(value);
|
|
828
902
|
validateTasksetDraftWorkspace(result.workspace);
|
|
829
|
-
if (result.datasetId !== id || result.teamId !== this.options.teamId)
|
|
903
|
+
if (result.datasetId !== id || result.teamId !== this.options.teamId)
|
|
904
|
+
throw new Error("Dataset identity mismatch.");
|
|
830
905
|
return result;
|
|
831
906
|
}
|
|
832
907
|
async request(path, method, body, signal, maxResponseBytes) {
|
|
833
|
-
const response = await (this.options.fetch ?? fetch)(
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
908
|
+
const response = await (this.options.fetch ?? fetch)(
|
|
909
|
+
`${this.baseUrl}/v1/dataset-workspaces${path}`,
|
|
910
|
+
{
|
|
911
|
+
method,
|
|
912
|
+
signal,
|
|
913
|
+
redirect: "error",
|
|
914
|
+
headers: {
|
|
915
|
+
Authorization: `Bearer ${this.options.apiKey}`,
|
|
916
|
+
"X-OpenPond-Team-Id": this.options.teamId,
|
|
917
|
+
"Content-Type": "application/json"
|
|
918
|
+
},
|
|
919
|
+
...body === void 0 ? {} : { body: JSON.stringify(body) }
|
|
920
|
+
}
|
|
921
|
+
);
|
|
840
922
|
if (!response.ok) throw new Error(`Dataset request failed (${response.status}).`);
|
|
841
923
|
if (maxResponseBytes !== void 0) {
|
|
842
924
|
if (!response.body) throw new Error("Dataset response is empty.");
|
|
@@ -847,7 +929,8 @@ var OpenPondDatasetWorkspaceClient = class {
|
|
|
847
929
|
const part = await reader.read();
|
|
848
930
|
if (part.done) break;
|
|
849
931
|
length += part.value.byteLength;
|
|
850
|
-
if (length > maxResponseBytes)
|
|
932
|
+
if (length > maxResponseBytes)
|
|
933
|
+
throw new Error("Dataset recovery exceeds its bounded response.");
|
|
851
934
|
chunks.push(part.value);
|
|
852
935
|
}
|
|
853
936
|
} finally {
|
|
@@ -1360,6 +1443,10 @@ export {
|
|
|
1360
1443
|
DatasetPreparationStageSchema,
|
|
1361
1444
|
DatasetPreparationStatusSchema,
|
|
1362
1445
|
DatasetPreparationTaskClassSchema,
|
|
1446
|
+
DatasetTaskAppendReceiptSchema,
|
|
1447
|
+
DatasetTaskAppendRequestSchema,
|
|
1448
|
+
DatasetTaskIngestionError,
|
|
1449
|
+
DatasetTaskInputSchema,
|
|
1363
1450
|
DatasetWorkspaceBeginVersionSchema,
|
|
1364
1451
|
DatasetWorkspaceListQuerySchema,
|
|
1365
1452
|
DatasetWorkspaceListSchema,
|
|
@@ -1381,10 +1468,12 @@ export {
|
|
|
1381
1468
|
PreparedTaskProvenanceSchema,
|
|
1382
1469
|
PreparedTaskQualificationSchema,
|
|
1383
1470
|
PreparedWitnessAdjudicationSchema,
|
|
1471
|
+
addDatasetTask,
|
|
1384
1472
|
assemblePreparedTaskWorkspaces,
|
|
1385
1473
|
compileTasksetDraftWorkspace,
|
|
1386
1474
|
connectedStartingAssetReference,
|
|
1387
1475
|
createPreparedTaskAuthoringWorkspace,
|
|
1476
|
+
createTaskAdder,
|
|
1388
1477
|
parseConnectedStartingAssetReference,
|
|
1389
1478
|
preparedRepositoryEnvironment,
|
|
1390
1479
|
reconcilePreparationSourceCoverage
|