openpond-sdk 0.2.5 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/TASKSETS.md +74 -0
- package/dist/model-taskset-authoring.js +56 -0
- package/dist/model-taskset-authoring.js.map +7 -0
- package/dist/taskset-packages.js +312 -104
- package/dist/taskset-packages.js.map +4 -4
- package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts +2 -2
- package/dist/types/packages/sdk/src/model-starter-catalog.d.ts +16 -2
- package/dist/types/packages/sdk/src/model-starter-catalog.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starters.d.ts +41 -5
- package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-taskset-authoring-contracts.d.ts +107 -0
- package/dist/types/packages/sdk/src/model-taskset-authoring-contracts.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/model-taskset-authoring-lineage.d.ts +27 -0
- package/dist/types/packages/sdk/src/model-taskset-authoring-lineage.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/model-taskset-authoring.d.ts +20 -0
- package/dist/types/packages/sdk/src/model-taskset-authoring.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts +25 -3
- package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-client.d.ts +50 -6
- package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts +55 -24
- package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-execution.d.ts +19 -0
- package/dist/types/packages/sdk/src/taskset-package-execution.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/taskset-package-files.d.ts +21 -0
- package/dist/types/packages/sdk/src/taskset-package-files.d.ts.map +1 -0
- 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/training.d.ts +3 -3
- package/package.json +6 -2
package/dist/taskset-packages.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/taskset-package-contracts.ts
|
|
2
|
-
import { z as
|
|
2
|
+
import { z as z19 } from "zod";
|
|
3
3
|
|
|
4
4
|
// ../harness/dist/common.js
|
|
5
5
|
import { z } from "zod";
|
|
@@ -2136,6 +2136,18 @@ var ModelStarterExecutionSchema = z12.object({
|
|
|
2136
2136
|
var ModelStarterToolFixtureScriptSchema = z12.object({
|
|
2137
2137
|
actions: z12.array(z12.object({ name: z12.string().min(1).max(64), arguments: z12.record(z12.string(), z12.unknown()) }).strict()).max(1e3)
|
|
2138
2138
|
}).strict();
|
|
2139
|
+
function modelStarterExecutionAssetId(context) {
|
|
2140
|
+
if (!context.environmentRelease || !context.verifierSetRelease) throw new Error("Starter execution release references are missing.");
|
|
2141
|
+
return `starter-execution-${sealLearningContent({ environment: context.environmentRelease, verifiers: context.verifierSetRelease }).contentHash}`;
|
|
2142
|
+
}
|
|
2143
|
+
function createModelStarterExecutionAsset(value) {
|
|
2144
|
+
const execution = ModelStarterExecutionSchema.parse(value);
|
|
2145
|
+
assertExecutionIntegrity(execution);
|
|
2146
|
+
const id = modelStarterExecutionAssetId({ environmentRelease: { id: execution.environment.id, contentHash: execution.environment.contentHash }, verifierSetRelease: { id: execution.verifierSet.id, contentHash: execution.verifierSet.contentHash } });
|
|
2147
|
+
const generated = createLearningTextAsset({ text: canonicalJson2(execution), path: "environment/execution.json", mediaType: "application/json", visibility: "host_private" });
|
|
2148
|
+
const { contentHash: _hash, ...content } = generated;
|
|
2149
|
+
return sealLearningContent({ ...content, id, asset: { ...content.asset, id } });
|
|
2150
|
+
}
|
|
2139
2151
|
function equal(left, right) {
|
|
2140
2152
|
return sealLearningContent({ value: left }).contentHash === sealLearningContent({ value: right }).contentHash;
|
|
2141
2153
|
}
|
|
@@ -2601,33 +2613,143 @@ function validateTasksetLearningResources(taskset, input) {
|
|
|
2601
2613
|
return resources;
|
|
2602
2614
|
}
|
|
2603
2615
|
|
|
2604
|
-
// src/taskset-
|
|
2616
|
+
// src/model-taskset-authoring-lineage.ts
|
|
2617
|
+
import { sameLearningRef as sameLearningRef3 } from "@openpond/evals/learning";
|
|
2618
|
+
|
|
2619
|
+
// src/model-taskset-authoring-contracts.ts
|
|
2620
|
+
import { z as z17 } from "zod";
|
|
2621
|
+
import { LearningRevisionRefSchema } from "@openpond/evals/learning";
|
|
2622
|
+
var IdSchema3 = LearningRevisionRefSchema.shape.id;
|
|
2623
|
+
var HashSchema4 = z17.string().regex(/^[a-f0-9]{64}$/);
|
|
2624
|
+
var ModelTasksetAuthoringOwnerSchema = z17.object({ scopeId: IdSchema3, modelId: IdSchema3 }).strict();
|
|
2625
|
+
var ModelTasksetAuthoringSchema = z17.object({
|
|
2626
|
+
schemaVersion: z17.literal("openpond.modelTasksetAuthoring.v1"),
|
|
2627
|
+
owner: ModelTasksetAuthoringOwnerSchema,
|
|
2628
|
+
root: LearningRevisionRefSchema,
|
|
2629
|
+
parent: LearningRevisionRefSchema
|
|
2630
|
+
}).strict();
|
|
2631
|
+
var ModelTasksetDraftRequestSchema = z17.object({
|
|
2632
|
+
schemaVersion: z17.literal("openpond.modelTasksetDraftRequest.v1"),
|
|
2633
|
+
operationId: IdSchema3,
|
|
2634
|
+
modelId: IdSchema3,
|
|
2635
|
+
expectedModelRevision: z17.number().int().positive(),
|
|
2636
|
+
sourcePackageHash: HashSchema4
|
|
2637
|
+
}).strict();
|
|
2638
|
+
var ModelTasksetDraftPreparationSchema = z17.object({
|
|
2639
|
+
schemaVersion: z17.literal("openpond.modelTasksetDraftPreparation.v1"),
|
|
2640
|
+
draftId: IdSchema3,
|
|
2641
|
+
requestHash: HashSchema4,
|
|
2642
|
+
sourcePackageHash: HashSchema4,
|
|
2643
|
+
sourceTasksetRef: LearningRevisionRefSchema,
|
|
2644
|
+
tasksetId: IdSchema3,
|
|
2645
|
+
tasksetRevision: z17.number().int().positive(),
|
|
2646
|
+
lineage: ModelTasksetAuthoringSchema
|
|
2647
|
+
}).strict();
|
|
2648
|
+
var TasksetDraftFilePathSchema = z17.string().min(1).max(1024).refine((value) => !value.includes("\\") && !value.includes(":") && !value.includes("\0") && !value.startsWith("/") && !value.split("/").some((part) => !part || part === "." || part === ".." || part.startsWith(".env")), "Use a relative Taskset file path without environment files.");
|
|
2649
|
+
var TasksetDraftFileInfoSchema = z17.object({
|
|
2650
|
+
path: TasksetDraftFilePathSchema,
|
|
2651
|
+
sizeBytes: z17.number().int().nonnegative(),
|
|
2652
|
+
writable: z17.boolean()
|
|
2653
|
+
}).strict();
|
|
2654
|
+
var TasksetDraftFileContentSchema = z17.object({ encoding: z17.enum(["utf8", "base64"]), data: z17.string().max(8e6) }).strict();
|
|
2655
|
+
var TasksetDraftFileSchema = TasksetDraftFileInfoSchema.extend({ contentHash: HashSchema4, content: TasksetDraftFileContentSchema }).strict();
|
|
2656
|
+
var TasksetDraftFileMutationSchema = z17.object({
|
|
2657
|
+
draftId: IdSchema3,
|
|
2658
|
+
expectedDraftRevision: z17.number().int().positive(),
|
|
2659
|
+
path: TasksetDraftFilePathSchema,
|
|
2660
|
+
expectedFileHash: HashSchema4.nullable(),
|
|
2661
|
+
content: TasksetDraftFileContentSchema.nullable()
|
|
2662
|
+
}).strict();
|
|
2663
|
+
|
|
2664
|
+
// src/model-taskset-authoring-lineage.ts
|
|
2665
|
+
function modelAuthoredTasksetId(lineage) {
|
|
2666
|
+
return `model-authored-taskset-${contentHash({ owner: lineage.owner, root: lineage.root })}`;
|
|
2667
|
+
}
|
|
2668
|
+
function assertModelTasksetAuthoring(taskset) {
|
|
2669
|
+
if (taskset.metadata.modelTasksetAuthoring === void 0) return null;
|
|
2670
|
+
const lineage = ModelTasksetAuthoringSchema.parse(taskset.metadata.modelTasksetAuthoring);
|
|
2671
|
+
if (taskset.id !== modelAuthoredTasksetId(lineage) || (taskset.revision === 1 ? !sameLearningRef3(lineage.parent, lineage.root) : lineage.parent.id !== taskset.id || lineage.parent.revision !== taskset.revision - 1)) {
|
|
2672
|
+
throw new Error("Authored Taskset revision differs from its ownership lineage.");
|
|
2673
|
+
}
|
|
2674
|
+
return lineage;
|
|
2675
|
+
}
|
|
2676
|
+
|
|
2677
|
+
// src/taskset-package-execution.ts
|
|
2678
|
+
import { LearningTextAssetSchema as LearningTextAssetSchema3, sealLearningContent as sealLearningContent4 } from "@openpond/evals/learning";
|
|
2679
|
+
|
|
2680
|
+
// src/taskset-package-files.ts
|
|
2681
|
+
import { z as z18 } from "zod";
|
|
2605
2682
|
var MAX_TASKSET_PACKAGE_BYTES = 64 * 1024 * 1024;
|
|
2606
|
-
var TasksetPackageFileSchema =
|
|
2683
|
+
var TasksetPackageFileSchema = z18.object({
|
|
2607
2684
|
asset: ImmutableAssetRefSchema,
|
|
2608
|
-
base64:
|
|
2685
|
+
base64: z18.string().max(Math.ceil(MAX_TASKSET_PACKAGE_BYTES / 3) * 4)
|
|
2609
2686
|
}).strict();
|
|
2687
|
+
function decodeTasksetPackageFile(value) {
|
|
2688
|
+
const file = TasksetPackageFileSchema.parse(value);
|
|
2689
|
+
const raw = atob(file.base64);
|
|
2690
|
+
if (btoa(raw) !== file.base64) throw new Error(`Taskset asset ${file.asset.id} has noncanonical base64.`);
|
|
2691
|
+
const bytes = Uint8Array.from(raw, (character) => character.charCodeAt(0));
|
|
2692
|
+
if (bytes.byteLength !== file.asset.sizeBytes || sha256(bytes) !== file.asset.contentHash) throw new Error(`Taskset asset ${file.asset.id} differs from its immutable bytes.`);
|
|
2693
|
+
return bytes;
|
|
2694
|
+
}
|
|
2695
|
+
|
|
2696
|
+
// src/taskset-package-execution.ts
|
|
2697
|
+
function resolveTasksetPackageExecution(input) {
|
|
2698
|
+
if (input.taskset.environment.entrypoint !== "openpond.javascript-environment.v1") return null;
|
|
2699
|
+
const byId = new Map(input.files.map((file) => [file.asset.id, file]));
|
|
2700
|
+
const read = (id) => {
|
|
2701
|
+
const file = byId.get(id);
|
|
2702
|
+
if (!file) throw new Error(`Taskset environment asset is missing: ${id}.`);
|
|
2703
|
+
if (file.asset.sizeBytes > 524288) throw new Error("Taskset environment source exceeds the authored asset limit.");
|
|
2704
|
+
const text = new TextDecoder("utf-8", { fatal: true }).decode(decodeTasksetPackageFile(file));
|
|
2705
|
+
return LearningTextAssetSchema3.parse(sealLearningContent4({ schemaVersion: "openpond.learningTextAsset.v1", id, revision: 1, asset: file.asset, text }));
|
|
2706
|
+
};
|
|
2707
|
+
let execution;
|
|
2708
|
+
if (input.modelResources) {
|
|
2709
|
+
if (!input.modelResources.execution) throw new Error("Bound Taskset JavaScript execution resources are missing.");
|
|
2710
|
+
execution = ModelStarterExecutionSchema.parse(input.modelResources.execution);
|
|
2711
|
+
} else {
|
|
2712
|
+
const declaration = read(modelStarterExecutionAssetId(input.taskset));
|
|
2713
|
+
if (declaration.asset.visibility !== "host_private" || declaration.asset.mediaType !== "application/json" || declaration.asset.path !== "environment/execution.json") throw new Error("Taskset execution declaration must be private JSON at environment/execution.json.");
|
|
2714
|
+
execution = ModelStarterExecutionSchema.parse(JSON.parse(declaration.text));
|
|
2715
|
+
}
|
|
2716
|
+
const ids = /* @__PURE__ */ new Set([
|
|
2717
|
+
execution.javascript.module.id,
|
|
2718
|
+
...[execution.environment.actionSchemaRef, execution.environment.observationSchemaRef, execution.environment.stateSchemaRef].flatMap((ref) => ref ? [ref.id] : []),
|
|
2719
|
+
...input.taskset.tasks.flatMap((task) => task.privilegedContextRef ? [task.privilegedContextRef] : [])
|
|
2720
|
+
]);
|
|
2721
|
+
const assets = [...ids].map(read);
|
|
2722
|
+
validateModelStarterExecution(execution, input.taskset, assets);
|
|
2723
|
+
return { execution, assets };
|
|
2724
|
+
}
|
|
2725
|
+
function createTasksetPackageExecutionFile(execution) {
|
|
2726
|
+
const asset = createModelStarterExecutionAsset(execution);
|
|
2727
|
+
const bytes = new TextEncoder().encode(asset.text);
|
|
2728
|
+
let raw = "";
|
|
2729
|
+
for (const byte of bytes) raw += String.fromCharCode(byte);
|
|
2730
|
+
return { asset: asset.asset, base64: btoa(raw) };
|
|
2731
|
+
}
|
|
2732
|
+
|
|
2733
|
+
// src/taskset-package-contracts.ts
|
|
2610
2734
|
var BoundModelResourcesSchema = ModelTasksetPackageSchema.omit({ taskset: true, executionResources: true });
|
|
2611
|
-
var TasksetPackageContentSchema =
|
|
2612
|
-
schemaVersion:
|
|
2735
|
+
var TasksetPackageContentSchema = z19.object({
|
|
2736
|
+
schemaVersion: z19.literal("openpond.tasksetPackage.v1"),
|
|
2613
2737
|
taskset: TasksetReleaseSchema2,
|
|
2614
2738
|
environment: EnvironmentReleaseSchema3,
|
|
2615
2739
|
verifierSet: VerifierSetReleaseSchema3,
|
|
2616
|
-
files:
|
|
2740
|
+
files: z19.array(TasksetPackageFileSchema).max(1e4),
|
|
2617
2741
|
modelResources: BoundModelResourcesSchema.optional(),
|
|
2618
2742
|
learningResources: TasksetPackageLearningResourcesSchema.optional()
|
|
2619
2743
|
}).strict();
|
|
2620
|
-
var TasksetPackageSchema = TasksetPackageContentSchema.extend({ contentHash:
|
|
2744
|
+
var TasksetPackageSchema = TasksetPackageContentSchema.extend({ contentHash: z19.string().regex(/^[a-f0-9]{64}$/) }).strict();
|
|
2621
2745
|
function tasksetPackageRewardBinding(value) {
|
|
2622
2746
|
return value.learningResources ? taskBatchPackageMetadata2(value.taskset).binding : value.modelResources?.rewardBinding ?? null;
|
|
2623
2747
|
}
|
|
2624
|
-
function
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
if (bytes.byteLength !== file.asset.sizeBytes || sha256(bytes) !== file.asset.contentHash) throw new Error(`Taskset asset ${file.asset.id} differs from its immutable bytes.`);
|
|
2630
|
-
return bytes;
|
|
2748
|
+
function resolveTasksetPackageInstructions(value) {
|
|
2749
|
+
if (value.learningResources) return taskBatchPackageMetadata2(value.taskset).definition.instructions;
|
|
2750
|
+
if (value.modelResources) return value.modelResources.taskDefinition.instructions;
|
|
2751
|
+
const authoring = z19.object({ instructions: z19.string().max(2e4).optional() }).passthrough().parse(value.taskset.metadata.ordinaryAuthoring ?? {});
|
|
2752
|
+
return authoring.instructions ?? "";
|
|
2631
2753
|
}
|
|
2632
2754
|
function validateTasksetPackage(value) {
|
|
2633
2755
|
assertBoundedTaskJson3(value, MAX_TASKSET_PACKAGE_BYTES);
|
|
@@ -2636,6 +2758,8 @@ function validateTasksetPackage(value) {
|
|
|
2636
2758
|
if (contentHash(content) !== hash) throw new Error("Taskset package content hash differs from its bytes.");
|
|
2637
2759
|
const { taskset, environment, verifierSet } = result;
|
|
2638
2760
|
assertTasksetRelease2(taskset);
|
|
2761
|
+
const authoring = assertModelTasksetAuthoring(taskset);
|
|
2762
|
+
if (authoring && (result.modelResources || result.learningResources)) throw new Error("Taskset package cannot declare competing authoring graphs.");
|
|
2639
2763
|
if (!verifyEnvironmentRelease3(environment) || !verifyVerifierSetRelease3(verifierSet) || !same2(taskset.environmentRelease, { id: environment.id, contentHash: environment.contentHash }) || !same2(taskset.verifierSetRelease, { id: verifierSet.id, contentHash: verifierSet.contentHash }) || !same2(taskset.environment, environment.contract) || !same2(taskset.graders, verifierSet.graders)) {
|
|
2640
2764
|
throw new Error("Taskset package execution releases do not match its Taskset.");
|
|
2641
2765
|
}
|
|
@@ -2664,9 +2788,16 @@ function validateTasksetPackage(value) {
|
|
|
2664
2788
|
if (ref.visibility === "policy") throw new Error(`Taskset grader asset must be private: ${ref.id}.`);
|
|
2665
2789
|
}
|
|
2666
2790
|
}
|
|
2791
|
+
if (taskset.metrics?.customAggregator) {
|
|
2792
|
+
const aggregator = taskset.metrics.customAggregator;
|
|
2793
|
+
const modules = result.files.filter((file) => file.asset.path === aggregator.module);
|
|
2794
|
+
if (modules.length !== 1 || modules[0].asset.contentHash !== aggregator.contentHash || modules[0].asset.sizeBytes > 524288 || modules[0].asset.visibility === "policy") {
|
|
2795
|
+
throw new Error("Taskset metric module is missing or mismatched, public, or exceeds the source limit.");
|
|
2796
|
+
}
|
|
2797
|
+
}
|
|
2667
2798
|
for (const declarations of [taskset.metadata.environmentResources, environment.metadata.resources]) {
|
|
2668
2799
|
if (declarations === void 0) continue;
|
|
2669
|
-
for (const resource of
|
|
2800
|
+
for (const resource of z19.array(z19.object({ path: z19.string().min(1) }).passthrough()).parse(declarations)) {
|
|
2670
2801
|
if (!result.files.some((file) => file.asset.path === resource.path)) throw new Error(`Taskset environment resource is missing: ${resource.path}.`);
|
|
2671
2802
|
}
|
|
2672
2803
|
}
|
|
@@ -2683,6 +2814,8 @@ function validateTasksetPackage(value) {
|
|
|
2683
2814
|
} else if (["starter", "rewardBinding", "rewardExecution", "modelTasksetDerivation", "learning"].some((key) => taskset.metadata[key] !== void 0)) {
|
|
2684
2815
|
throw new Error("Bound Taskset publication requires its complete model resources.");
|
|
2685
2816
|
}
|
|
2817
|
+
resolveTasksetPackageExecution(result);
|
|
2818
|
+
resolveTasksetPackageInstructions(result);
|
|
2686
2819
|
return result;
|
|
2687
2820
|
}
|
|
2688
2821
|
function createTasksetPackage(value) {
|
|
@@ -2695,45 +2828,45 @@ function same2(left, right) {
|
|
|
2695
2828
|
}
|
|
2696
2829
|
|
|
2697
2830
|
// src/taskset-package-client.ts
|
|
2698
|
-
import { z as
|
|
2831
|
+
import { z as z21 } from "zod";
|
|
2699
2832
|
|
|
2700
2833
|
// src/taskset-catalog.ts
|
|
2701
|
-
import { z as
|
|
2702
|
-
var
|
|
2703
|
-
var
|
|
2704
|
-
var TasksetCatalogReleaseRefSchema =
|
|
2705
|
-
var HostedTasksetSummarySchema =
|
|
2706
|
-
schemaVersion:
|
|
2707
|
-
id:
|
|
2708
|
-
teamId:
|
|
2834
|
+
import { z as z20 } from "zod";
|
|
2835
|
+
var IdSchema4 = z20.string().trim().min(1).max(500);
|
|
2836
|
+
var HashSchema5 = z20.string().regex(/^[a-f0-9]{64}$/);
|
|
2837
|
+
var TasksetCatalogReleaseRefSchema = z20.object({ id: IdSchema4, revision: z20.number().int().positive(), contentHash: HashSchema5 }).strict();
|
|
2838
|
+
var HostedTasksetSummarySchema = z20.object({
|
|
2839
|
+
schemaVersion: z20.literal("openpond.hostedTasksetSummary.v1"),
|
|
2840
|
+
id: IdSchema4,
|
|
2841
|
+
teamId: IdSchema4,
|
|
2709
2842
|
release: TasksetCatalogReleaseRefSchema,
|
|
2710
|
-
name:
|
|
2711
|
-
description:
|
|
2712
|
-
taskCount:
|
|
2713
|
-
buildIntent:
|
|
2714
|
-
methodHint:
|
|
2715
|
-
packageBytes:
|
|
2716
|
-
storedBytes:
|
|
2717
|
-
createdAt:
|
|
2718
|
-
}).strict();
|
|
2719
|
-
var TasksetCatalogQuerySchema =
|
|
2720
|
-
afterId:
|
|
2721
|
-
limit:
|
|
2722
|
-
modelProjectId:
|
|
2723
|
-
}).strict();
|
|
2724
|
-
var TasksetCatalogPageSchema =
|
|
2725
|
-
items:
|
|
2726
|
-
nextCursor:
|
|
2727
|
-
}).strict();
|
|
2728
|
-
var TasksetCatalogErrorSchema =
|
|
2729
|
-
code:
|
|
2730
|
-
message:
|
|
2843
|
+
name: z20.string().min(1).max(500),
|
|
2844
|
+
description: z20.string().max(2e4),
|
|
2845
|
+
taskCount: z20.number().int().nonnegative(),
|
|
2846
|
+
buildIntent: z20.string().min(1).max(100),
|
|
2847
|
+
methodHint: z20.string().min(1).max(100).nullable(),
|
|
2848
|
+
packageBytes: z20.number().int().nonnegative().nullable(),
|
|
2849
|
+
storedBytes: z20.number().int().nonnegative().nullable(),
|
|
2850
|
+
createdAt: z20.string().datetime({ offset: true })
|
|
2851
|
+
}).strict();
|
|
2852
|
+
var TasksetCatalogQuerySchema = z20.object({
|
|
2853
|
+
afterId: IdSchema4.optional(),
|
|
2854
|
+
limit: z20.number().int().min(1).max(100).default(30),
|
|
2855
|
+
modelProjectId: IdSchema4.optional()
|
|
2856
|
+
}).strict();
|
|
2857
|
+
var TasksetCatalogPageSchema = z20.object({
|
|
2858
|
+
items: z20.array(HostedTasksetSummarySchema).max(100),
|
|
2859
|
+
nextCursor: IdSchema4.nullable()
|
|
2860
|
+
}).strict();
|
|
2861
|
+
var TasksetCatalogErrorSchema = z20.object({
|
|
2862
|
+
code: z20.string().min(1),
|
|
2863
|
+
message: z20.string().min(1)
|
|
2731
2864
|
}).strict();
|
|
2732
2865
|
|
|
2733
2866
|
// src/taskset-package-client.ts
|
|
2734
2867
|
import { learningRef as learningRef4 } from "@openpond/evals/learning";
|
|
2735
|
-
var
|
|
2736
|
-
var
|
|
2868
|
+
var IdSchema5 = z21.string().trim().min(1).max(500);
|
|
2869
|
+
var HashSchema6 = z21.string().regex(/^[a-f0-9]{64}$/);
|
|
2737
2870
|
var TasksetPackageModelConfigurationSchema = HostedModelProjectSyncSchema.pick({
|
|
2738
2871
|
portableProjectId: true,
|
|
2739
2872
|
name: true,
|
|
@@ -2743,35 +2876,35 @@ var TasksetPackageModelConfigurationSchema = HostedModelProjectSyncSchema.pick({
|
|
|
2743
2876
|
sourceRevision: true,
|
|
2744
2877
|
sourceUpdatedAt: true
|
|
2745
2878
|
}).extend({ trainingSetup: HostedModelProjectTrainingSetupSchema.omit({ tasksetRef: true, rewardBindingRef: true, tasksetRelease: true, recipe: true }) }).strict();
|
|
2746
|
-
var TasksetPackagePublicationSchema =
|
|
2747
|
-
schemaVersion:
|
|
2748
|
-
operationId:
|
|
2749
|
-
modelProjectId:
|
|
2750
|
-
expectedProjectEtag:
|
|
2751
|
-
name:
|
|
2752
|
-
description:
|
|
2753
|
-
buildIntent:
|
|
2754
|
-
methodHint:
|
|
2879
|
+
var TasksetPackagePublicationSchema = z21.object({
|
|
2880
|
+
schemaVersion: z21.literal("openpond.tasksetPackagePublication.v1"),
|
|
2881
|
+
operationId: IdSchema5,
|
|
2882
|
+
modelProjectId: IdSchema5,
|
|
2883
|
+
expectedProjectEtag: HashSchema6.nullable(),
|
|
2884
|
+
name: z21.string().trim().min(1).max(200),
|
|
2885
|
+
description: z21.string().max(5e3),
|
|
2886
|
+
buildIntent: z21.enum(["demonstrations", "preferences", "verifiable_reward", "rubric", "discovery"]),
|
|
2887
|
+
methodHint: z21.enum(["sft", "dpo", "grpo", "ppo"]).nullable(),
|
|
2755
2888
|
package: TasksetPackageSchema,
|
|
2756
2889
|
modelConfiguration: TasksetPackageModelConfigurationSchema.optional(),
|
|
2757
|
-
selection:
|
|
2890
|
+
selection: z21.enum(["select", "attach"]).optional()
|
|
2758
2891
|
}).strict().refine((value) => value.selection !== "attach" || value.modelConfiguration === void 0, "Attachment-only publication cannot replace Model configuration.");
|
|
2759
|
-
var TasksetPackageReceiptSchema =
|
|
2760
|
-
schemaVersion:
|
|
2761
|
-
teamId:
|
|
2762
|
-
modelProjectId:
|
|
2763
|
-
operationId:
|
|
2892
|
+
var TasksetPackageReceiptSchema = z21.object({
|
|
2893
|
+
schemaVersion: z21.literal("openpond.tasksetPackageReceipt.v1"),
|
|
2894
|
+
teamId: IdSchema5,
|
|
2895
|
+
modelProjectId: IdSchema5,
|
|
2896
|
+
operationId: IdSchema5,
|
|
2764
2897
|
taskset: TasksetCatalogReleaseRefSchema,
|
|
2765
|
-
packageHash:
|
|
2766
|
-
hostedTasksetId:
|
|
2767
|
-
projectEtag:
|
|
2898
|
+
packageHash: HashSchema6,
|
|
2899
|
+
hostedTasksetId: IdSchema5,
|
|
2900
|
+
projectEtag: HashSchema6,
|
|
2768
2901
|
project: HostedModelProjectSummarySchema.optional(),
|
|
2769
|
-
selection:
|
|
2902
|
+
selection: z21.enum(["select", "attach"]).optional()
|
|
2770
2903
|
}).strict();
|
|
2771
|
-
var TasksetPackageReadbackSchema =
|
|
2772
|
-
schemaVersion:
|
|
2773
|
-
teamId:
|
|
2774
|
-
modelProjectId:
|
|
2904
|
+
var TasksetPackageReadbackSchema = z21.object({
|
|
2905
|
+
schemaVersion: z21.literal("openpond.tasksetPackageReadback.v1"),
|
|
2906
|
+
teamId: IdSchema5,
|
|
2907
|
+
modelProjectId: IdSchema5,
|
|
2775
2908
|
package: TasksetPackageSchema
|
|
2776
2909
|
}).strict();
|
|
2777
2910
|
var OpenPondTasksetPackageError = class extends Error {
|
|
@@ -2819,9 +2952,9 @@ var OpenPondTasksetPackageClient = class {
|
|
|
2819
2952
|
return receipt;
|
|
2820
2953
|
}
|
|
2821
2954
|
async get(modelProjectId, reference, options = {}) {
|
|
2822
|
-
const project =
|
|
2955
|
+
const project = IdSchema5.parse(modelProjectId);
|
|
2823
2956
|
const ref = TasksetCatalogReleaseRefSchema.parse(reference);
|
|
2824
|
-
const expectedPackageHash = options.expectedPackageHash === void 0 ? void 0 :
|
|
2957
|
+
const expectedPackageHash = options.expectedPackageHash === void 0 ? void 0 : HashSchema6.parse(options.expectedPackageHash);
|
|
2825
2958
|
const response = TasksetPackageReadbackSchema.parse(await this.#request(`/${encodeURIComponent(project)}/${encodeURIComponent(ref.id)}/${ref.revision}/${ref.contentHash}`, "GET", void 0, options.signal));
|
|
2826
2959
|
const taskset = response.package.taskset;
|
|
2827
2960
|
if (response.teamId !== this.#options.teamId || response.modelProjectId !== project || taskset.id !== ref.id || taskset.revision !== ref.revision || taskset.contentHash !== ref.contentHash) throw new OpenPondTasksetPackageError(502, "package_readback_mismatch", "Taskset package did not match the requested release and owner.");
|
|
@@ -2858,7 +2991,7 @@ var OpenPondTasksetPackageClient = class {
|
|
|
2858
2991
|
}
|
|
2859
2992
|
const payload = JSON.parse(text);
|
|
2860
2993
|
if (!response.ok) {
|
|
2861
|
-
const error =
|
|
2994
|
+
const error = z21.object({ code: z21.string(), message: z21.string() }).safeParse(payload);
|
|
2862
2995
|
throw new OpenPondTasksetPackageError(response.status, error.success ? error.data.code : "package_request_failed", error.success ? error.data.message : `Taskset package request failed (${response.status}).`);
|
|
2863
2996
|
}
|
|
2864
2997
|
return payload;
|
|
@@ -2869,53 +3002,53 @@ var OpenPondTasksetPackageClient = class {
|
|
|
2869
3002
|
import {
|
|
2870
3003
|
LearningDomainError as LearningDomainError2,
|
|
2871
3004
|
learningRef as learningRef6,
|
|
2872
|
-
sameLearningRef as
|
|
3005
|
+
sameLearningRef as sameLearningRef5,
|
|
2873
3006
|
requireLearningRelease,
|
|
2874
3007
|
requireLearningResource,
|
|
2875
3008
|
taskBatchPackageMetadata as taskBatchPackageMetadata4
|
|
2876
3009
|
} from "@openpond/evals/learning";
|
|
2877
3010
|
|
|
2878
3011
|
// src/model-batch-review-contracts.ts
|
|
2879
|
-
import { z as
|
|
2880
|
-
import { LearningJsonObjectSchema, LearningRevisionRefSchema, LearningSourceSchema as LearningSourceSchema2, TaskEvidenceSchema as TaskEvidenceSchema2, TaskFeedbackSchema, TaskDefinitionSchema as TaskDefinitionSchema2, TaskAdmissionDecisionSchema as TaskAdmissionDecisionSchema2 } from "@openpond/evals/learning";
|
|
3012
|
+
import { z as z22 } from "zod";
|
|
3013
|
+
import { LearningJsonObjectSchema, LearningRevisionRefSchema as LearningRevisionRefSchema2, LearningSourceSchema as LearningSourceSchema2, TaskEvidenceSchema as TaskEvidenceSchema2, TaskFeedbackSchema, TaskDefinitionSchema as TaskDefinitionSchema2, TaskAdmissionDecisionSchema as TaskAdmissionDecisionSchema2 } from "@openpond/evals/learning";
|
|
2881
3014
|
import { RewardBindingSchema as RewardBindingSchema2 } from "@openpond/evals/rewards";
|
|
2882
|
-
var ReleaseIdSchema2 =
|
|
2883
|
-
var ModelBatchReviewInspectionSchema =
|
|
2884
|
-
schemaVersion:
|
|
2885
|
-
packageHash:
|
|
3015
|
+
var ReleaseIdSchema2 = LearningRevisionRefSchema2.shape.id;
|
|
3016
|
+
var ModelBatchReviewInspectionSchema = z22.object({
|
|
3017
|
+
schemaVersion: z22.literal("openpond.modelBatchReviewInspection.v1"),
|
|
3018
|
+
packageHash: z22.string().regex(/^[a-f0-9]{64}$/),
|
|
2886
3019
|
definition: TaskDefinitionSchema2,
|
|
2887
3020
|
binding: RewardBindingSchema2,
|
|
2888
|
-
evidence:
|
|
2889
|
-
decisions:
|
|
3021
|
+
evidence: z22.array(TaskEvidenceSchema2).min(1).max(1e4),
|
|
3022
|
+
decisions: z22.array(TaskAdmissionDecisionSchema2).min(1).max(1e4)
|
|
2890
3023
|
}).strict();
|
|
2891
|
-
var ModelBatchReviewRequestSchema =
|
|
2892
|
-
schemaVersion:
|
|
3024
|
+
var ModelBatchReviewRequestSchema = z22.object({
|
|
3025
|
+
schemaVersion: z22.literal("openpond.modelBatchReviewRequest.v1"),
|
|
2893
3026
|
operationId: ReleaseIdSchema2,
|
|
2894
3027
|
modelId: ReleaseIdSchema2,
|
|
2895
|
-
expectedModelRevision:
|
|
2896
|
-
tasksetRef:
|
|
2897
|
-
rewardBindingRef:
|
|
2898
|
-
definition:
|
|
2899
|
-
name:
|
|
2900
|
-
instructions:
|
|
3028
|
+
expectedModelRevision: z22.number().int().positive(),
|
|
3029
|
+
tasksetRef: LearningRevisionRefSchema2,
|
|
3030
|
+
rewardBindingRef: LearningRevisionRefSchema2.nullable(),
|
|
3031
|
+
definition: z22.object({
|
|
3032
|
+
name: z22.string().trim().min(1).max(500).optional(),
|
|
3033
|
+
instructions: z22.string().trim().min(1).max(2e4).optional(),
|
|
2901
3034
|
inputSchema: LearningJsonObjectSchema.optional(),
|
|
2902
3035
|
outputSchema: LearningJsonObjectSchema.optional()
|
|
2903
3036
|
}).strict(),
|
|
2904
|
-
examples:
|
|
2905
|
-
evidence:
|
|
3037
|
+
examples: z22.array(z22.object({
|
|
3038
|
+
evidence: LearningRevisionRefSchema2,
|
|
2906
3039
|
input: LearningJsonObjectSchema.optional(),
|
|
2907
3040
|
expected: LearningJsonObjectSchema.nullable().optional(),
|
|
2908
3041
|
evaluatorContext: LearningJsonObjectSchema.nullable().optional(),
|
|
2909
3042
|
proposedTarget: LearningJsonObjectSchema.nullable().optional()
|
|
2910
3043
|
}).strict()).max(1e4)
|
|
2911
3044
|
}).strict();
|
|
2912
|
-
var ModelBatchReviewReceiptSchema =
|
|
2913
|
-
schemaVersion:
|
|
3045
|
+
var ModelBatchReviewReceiptSchema = z22.object({
|
|
3046
|
+
schemaVersion: z22.literal("openpond.modelBatchReviewReceipt.v1"),
|
|
2914
3047
|
operationId: ReleaseIdSchema2,
|
|
2915
3048
|
modelId: ReleaseIdSchema2,
|
|
2916
3049
|
source: LearningSourceSchema2,
|
|
2917
|
-
evidence:
|
|
2918
|
-
proposals:
|
|
3050
|
+
evidence: z22.array(TaskEvidenceSchema2).min(1).max(1e4),
|
|
3051
|
+
proposals: z22.array(TaskFeedbackSchema).max(1e4)
|
|
2919
3052
|
}).strict();
|
|
2920
3053
|
|
|
2921
3054
|
// src/model-batch-review-preparation.ts
|
|
@@ -2928,8 +3061,8 @@ import {
|
|
|
2928
3061
|
assertLearningContentHash as assertLearningContentHash3,
|
|
2929
3062
|
learningEvidenceId,
|
|
2930
3063
|
learningRef as learningRef5,
|
|
2931
|
-
sameLearningRef as
|
|
2932
|
-
sealLearningContent as
|
|
3064
|
+
sameLearningRef as sameLearningRef4,
|
|
3065
|
+
sealLearningContent as sealLearningContent5,
|
|
2933
3066
|
taskBatchPackageMetadata as taskBatchPackageMetadata3,
|
|
2934
3067
|
verifyLearningTextAsset as verifyLearningTextAsset5
|
|
2935
3068
|
} from "@openpond/evals/learning";
|
|
@@ -2950,7 +3083,7 @@ function prepareModelBatchReview(input) {
|
|
|
2950
3083
|
resolveBoundRewards(input.binding, input.rewards);
|
|
2951
3084
|
const rewardByHash = /* @__PURE__ */ new Map();
|
|
2952
3085
|
for (const source2 of input.binding.sources) {
|
|
2953
|
-
const original = input.rewards.find((reward) =>
|
|
3086
|
+
const original = input.rewards.find((reward) => sameLearningRef4(learningRef5(reward), source2.reward));
|
|
2954
3087
|
const { contentHash: _hash, ...content } = original;
|
|
2955
3088
|
rewardByHash.set(original.contentHash, createRewardRelease({ ...content, id: `${id}-reward-${original.contentHash}`, revision: 1 }));
|
|
2956
3089
|
}
|
|
@@ -2977,7 +3110,7 @@ function prepareModelBatchReview(input) {
|
|
|
2977
3110
|
})).values()];
|
|
2978
3111
|
const { environmentRelease: _environment, verifierSetRelease: _verifiers, ...execution } = metadata.definition.execution;
|
|
2979
3112
|
const { contentHash: _definitionHash, ...definitionContent } = metadata.definition;
|
|
2980
|
-
const definition = TaskDefinitionSchema3.parse(
|
|
3113
|
+
const definition = TaskDefinitionSchema3.parse(sealLearningContent5({
|
|
2981
3114
|
...definitionContent,
|
|
2982
3115
|
...request.definition,
|
|
2983
3116
|
id: `${id}-definition`,
|
|
@@ -2988,7 +3121,7 @@ function prepareModelBatchReview(input) {
|
|
|
2988
3121
|
policy: { ...execution.policy, hiddenGraderRefs: compileBoundGraders2(binding, rewards).filter((grader) => grader.privileged).map((grader) => grader.id) }
|
|
2989
3122
|
}
|
|
2990
3123
|
}));
|
|
2991
|
-
const source = LearningSourceSchema3.parse(
|
|
3124
|
+
const source = LearningSourceSchema3.parse(sealLearningContent5({
|
|
2992
3125
|
schemaVersion: "openpond.learningSource.v1",
|
|
2993
3126
|
id,
|
|
2994
3127
|
revision: 1,
|
|
@@ -3021,7 +3154,7 @@ function prepareModelBatchReview(input) {
|
|
|
3021
3154
|
outputSchema: metadata.definition.outputSchema,
|
|
3022
3155
|
input: parent.submission.input
|
|
3023
3156
|
});
|
|
3024
|
-
return TaskEvidenceSchema3.parse(
|
|
3157
|
+
return TaskEvidenceSchema3.parse(sealLearningContent5({
|
|
3025
3158
|
schemaVersion: "openpond.taskEvidence.v1",
|
|
3026
3159
|
id: learningEvidenceId(source.id, parent.submission.exampleId, attemptId),
|
|
3027
3160
|
revision: 1,
|
|
@@ -3104,7 +3237,7 @@ async function beginModelBatchReview(transaction, input) {
|
|
|
3104
3237
|
if (!value.learningResources) throw new LearningDomainError2("model_review_batch_required", 422);
|
|
3105
3238
|
const metadata = taskBatchPackageMetadata4(value.taskset);
|
|
3106
3239
|
const selected = request.rewardBindingRef;
|
|
3107
|
-
const retained = !selected ||
|
|
3240
|
+
const retained = !selected || sameLearningRef5(selected, learningRef6(metadata.binding));
|
|
3108
3241
|
const binding = retained ? metadata.binding : await requireLearningRelease(transaction, "binding", selected);
|
|
3109
3242
|
const rewards = retained ? metadata.rewards : await Promise.all(binding.sources.map((source) => requireLearningRelease(transaction, "reward", source.reward)));
|
|
3110
3243
|
const assetIds = new Set(rewards.flatMap((reward) => [
|
|
@@ -3148,14 +3281,84 @@ async function readReceipt(transaction, request, pointers) {
|
|
|
3148
3281
|
proposals: resources.filter((resource) => resource.schemaVersion === "openpond.taskFeedbackRecord.v1")
|
|
3149
3282
|
});
|
|
3150
3283
|
}
|
|
3284
|
+
|
|
3285
|
+
// src/model-taskset-authoring.ts
|
|
3286
|
+
import { createVerifierSetRelease as createVerifierSetRelease2 } from "@openpond/evals";
|
|
3287
|
+
import { learningRef as learningRef7, sameLearningRef as sameLearningRef6, sealLearningContent as sealLearningContent6 } from "@openpond/evals/learning";
|
|
3288
|
+
import { TasksetReleaseSchema as TasksetReleaseSchema3 } from "@openpond/evals/tasksets";
|
|
3289
|
+
function prepareModelTasksetDraft(input) {
|
|
3290
|
+
const request = ModelTasksetDraftRequestSchema.parse(input.request);
|
|
3291
|
+
const owner = ModelTasksetAuthoringOwnerSchema.parse(input.owner);
|
|
3292
|
+
const source = requireOrdinaryPackage(input.source);
|
|
3293
|
+
if (source.contentHash !== request.sourcePackageHash) throw new Error("Taskset draft source package changed.");
|
|
3294
|
+
const previous = assertModelTasksetAuthoring(source.taskset);
|
|
3295
|
+
const owned = previous && contentHash(previous.owner) === contentHash(owner);
|
|
3296
|
+
const root = owned ? previous.root : learningRef7(source.taskset);
|
|
3297
|
+
const lineage = { schemaVersion: "openpond.modelTasksetAuthoring.v1", owner, root, parent: learningRef7(source.taskset) };
|
|
3298
|
+
return ModelTasksetDraftPreparationSchema.parse({
|
|
3299
|
+
schemaVersion: "openpond.modelTasksetDraftPreparation.v1",
|
|
3300
|
+
draftId: `model-taskset-draft-${contentHash({ owner, operationId: request.operationId })}`,
|
|
3301
|
+
requestHash: contentHash(request),
|
|
3302
|
+
sourcePackageHash: source.contentHash,
|
|
3303
|
+
sourceTasksetRef: learningRef7(source.taskset),
|
|
3304
|
+
tasksetId: modelAuthoredTasksetId(lineage),
|
|
3305
|
+
tasksetRevision: owned ? source.taskset.revision + 1 : 1,
|
|
3306
|
+
lineage
|
|
3307
|
+
});
|
|
3308
|
+
}
|
|
3309
|
+
function publishModelTasksetDraftPackage(input) {
|
|
3310
|
+
const prepared = ModelTasksetDraftPreparationSchema.parse(input.preparation);
|
|
3311
|
+
if (!sameLearningRef6(prepared.sourceTasksetRef, prepared.lineage.parent)) throw new Error("Taskset draft preparation differs from its source lineage.");
|
|
3312
|
+
const edited = requireOrdinaryPackage(input.edited);
|
|
3313
|
+
const { contentHash: _verifierHash, ...verifierContent } = edited.verifierSet;
|
|
3314
|
+
const verifierSet = createVerifierSetRelease2({
|
|
3315
|
+
...verifierContent,
|
|
3316
|
+
id: `${prepared.tasksetId}-verifiers`,
|
|
3317
|
+
revision: prepared.tasksetRevision,
|
|
3318
|
+
calibrationReceiptRefs: [],
|
|
3319
|
+
metadata: { sourceVerifierSet: learningRef7(edited.verifierSet) }
|
|
3320
|
+
});
|
|
3321
|
+
const { contentHash: _hash, ...content } = edited.taskset;
|
|
3322
|
+
const taskset = TasksetReleaseSchema3.parse(sealLearningContent6({
|
|
3323
|
+
...content,
|
|
3324
|
+
id: prepared.tasksetId,
|
|
3325
|
+
revision: prepared.tasksetRevision,
|
|
3326
|
+
verifierSetRelease: { id: verifierSet.id, contentHash: verifierSet.contentHash },
|
|
3327
|
+
metadata: {
|
|
3328
|
+
modelTasksetAuthoring: prepared.lineage,
|
|
3329
|
+
...edited.taskset.metadata.environmentResources === void 0 ? {} : { environmentResources: edited.taskset.metadata.environmentResources },
|
|
3330
|
+
...edited.taskset.metadata.ordinaryAuthoring === void 0 ? {} : { ordinaryAuthoring: edited.taskset.metadata.ordinaryAuthoring }
|
|
3331
|
+
}
|
|
3332
|
+
}));
|
|
3333
|
+
const resolved = resolveTasksetPackageExecution(edited);
|
|
3334
|
+
const files = resolved ? [
|
|
3335
|
+
...edited.files.filter((file) => file.asset.id !== modelStarterExecutionAssetId(edited.taskset)),
|
|
3336
|
+
createTasksetPackageExecutionFile({ ...resolved.execution, verifierSet })
|
|
3337
|
+
] : edited.files;
|
|
3338
|
+
return createTasksetPackage({ schemaVersion: "openpond.tasksetPackage.v1", taskset, environment: edited.environment, verifierSet, files });
|
|
3339
|
+
}
|
|
3340
|
+
function requireOrdinaryPackage(value) {
|
|
3341
|
+
const result = validateTasksetPackage(value);
|
|
3342
|
+
if (result.modelResources || result.learningResources) throw new Error("This Taskset requires its bound or reviewed authoring workflow.");
|
|
3343
|
+
return result;
|
|
3344
|
+
}
|
|
3151
3345
|
export {
|
|
3152
3346
|
MAX_TASKSET_PACKAGE_BYTES,
|
|
3153
3347
|
LearningDomainError3 as ModelBatchReviewError,
|
|
3154
3348
|
ModelBatchReviewInspectionSchema,
|
|
3155
3349
|
ModelBatchReviewReceiptSchema,
|
|
3156
3350
|
ModelBatchReviewRequestSchema,
|
|
3351
|
+
ModelTasksetAuthoringOwnerSchema,
|
|
3352
|
+
ModelTasksetAuthoringSchema,
|
|
3353
|
+
ModelTasksetDraftPreparationSchema,
|
|
3354
|
+
ModelTasksetDraftRequestSchema,
|
|
3157
3355
|
OpenPondTasksetPackageClient,
|
|
3158
3356
|
OpenPondTasksetPackageError,
|
|
3357
|
+
TasksetDraftFileContentSchema,
|
|
3358
|
+
TasksetDraftFileInfoSchema,
|
|
3359
|
+
TasksetDraftFileMutationSchema,
|
|
3360
|
+
TasksetDraftFilePathSchema,
|
|
3361
|
+
TasksetDraftFileSchema,
|
|
3159
3362
|
TasksetPackageContentSchema,
|
|
3160
3363
|
TasksetPackageFileSchema,
|
|
3161
3364
|
TasksetPackageLearningResourcesSchema,
|
|
@@ -3166,10 +3369,15 @@ export {
|
|
|
3166
3369
|
TasksetPackageSchema,
|
|
3167
3370
|
beginModelBatchReview,
|
|
3168
3371
|
createTasksetPackage,
|
|
3372
|
+
createTasksetPackageExecutionFile,
|
|
3169
3373
|
decodeTasksetPackageFile,
|
|
3170
3374
|
findModelBatchReview,
|
|
3171
3375
|
inspectModelBatchPackage,
|
|
3172
3376
|
learningPackageContextFiles,
|
|
3377
|
+
prepareModelTasksetDraft,
|
|
3378
|
+
publishModelTasksetDraftPackage,
|
|
3379
|
+
resolveTasksetPackageExecution,
|
|
3380
|
+
resolveTasksetPackageInstructions,
|
|
3173
3381
|
tasksetPackageRewardBinding,
|
|
3174
3382
|
validateTasksetLearningResources,
|
|
3175
3383
|
validateTasksetPackage
|