openpond-sdk 0.5.14 → 0.5.16
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/LEARNING.md +12 -0
- package/TRAINING_PROTOCOL.md +6 -0
- package/dist/{chunk-F5JBFRAH.js → chunk-GZOXT7YE.js} +228 -185
- package/dist/chunk-GZOXT7YE.js.map +7 -0
- package/dist/{chunk-LV4TDE5S.js → chunk-IIZV2N5F.js} +2 -2
- package/dist/{chunk-7VZB24CH.js → chunk-NHMZCVZO.js} +2 -2
- package/dist/{chunk-4IDTRFW2.js → chunk-NZ35HEEK.js} +2 -1
- package/dist/{chunk-4IDTRFW2.js.map → chunk-NZ35HEEK.js.map} +2 -2
- package/dist/{chunk-6QWV5TEJ.js → chunk-SMWHGQ5W.js} +2 -2
- package/dist/{chunk-WSTMQGOY.js → chunk-TLXDZ4VG.js} +6 -6
- package/dist/{chunk-WSTMQGOY.js.map → chunk-TLXDZ4VG.js.map} +2 -2
- package/dist/model-starter-catalog.js +2 -2
- package/dist/model-starters.js +2 -2
- package/dist/taskset-drafts.js +4 -4
- package/dist/taskset-packages.js +5 -5
- package/dist/training-bundle.js +66 -15
- package/dist/training-bundle.js.map +4 -4
- package/dist/training.js +5 -1
- package/dist/types/packages/sdk/src/learning-batch-assets.d.ts +62 -0
- package/dist/types/packages/sdk/src/learning-batch-assets.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/model-batch-review-contracts.d.ts +18 -0
- package/dist/types/packages/sdk/src/model-batch-review-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts +14 -0
- package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-batch-review.d.ts +14 -0
- package/dist/types/packages/sdk/src/model-batch-review.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starter-catalog.d.ts +14 -0
- package/dist/types/packages/sdk/src/model-starter-catalog.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starters.d.ts +32 -0
- package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts +18 -0
- package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts +1 -1
- package/dist/types/packages/sdk/src/taskset-authored-files.d.ts +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts +2 -2
- package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +5 -5
- package/dist/types/packages/sdk/src/taskset-draft-core.d.ts +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-document.d.ts +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts +14 -0
- package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-source.d.ts +2 -2
- package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts +2 -2
- package/dist/types/packages/sdk/src/taskset-package-client.d.ts +54 -0
- 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 +36 -0
- package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +15 -1
- package/dist/types/packages/sdk/src/taskset-package-projection.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-harness-sources.d.ts +141 -0
- package/dist/types/packages/sdk/src/training-harness-sources.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-learning-batch.d.ts +5 -2
- package/dist/types/packages/sdk/src/training-learning-batch.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training.d.ts +127 -0
- package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-F5JBFRAH.js.map +0 -7
- /package/dist/{chunk-LV4TDE5S.js.map → chunk-IIZV2N5F.js.map} +0 -0
- /package/dist/{chunk-7VZB24CH.js.map → chunk-NHMZCVZO.js.map} +0 -0
- /package/dist/{chunk-6QWV5TEJ.js.map → chunk-SMWHGQ5W.js.map} +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ModelStarterSchema,
|
|
3
3
|
validateResolvedModelStarter
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-SMWHGQ5W.js";
|
|
5
|
+
import "./chunk-NZ35HEEK.js";
|
|
6
6
|
import {
|
|
7
7
|
ModelProjectVersionedRefSchema
|
|
8
8
|
} from "./chunk-ZNFOVV7B.js";
|
package/dist/model-starters.js
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
previewModelStarter,
|
|
12
12
|
validateModelStarterCreation,
|
|
13
13
|
validateResolvedModelStarter
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-SMWHGQ5W.js";
|
|
15
15
|
import {
|
|
16
16
|
ModelStarterEnvironmentAttemptSchema,
|
|
17
17
|
ModelStarterExecutionSchema,
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
resolveModelTasksetExecutionResourcesAsset,
|
|
29
29
|
validateModelTasksetPackage,
|
|
30
30
|
verifyModelStarterEnvironmentAttempt
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-NZ35HEEK.js";
|
|
32
32
|
import "./chunk-ZNFOVV7B.js";
|
|
33
33
|
export {
|
|
34
34
|
ModelStarterContentSchema,
|
package/dist/taskset-drafts.js
CHANGED
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
saveTasksetDraftWorkspaceFile,
|
|
28
28
|
tasksetDraftFromTaskset,
|
|
29
29
|
validateTasksetDraftWorkspace
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-IIZV2N5F.js";
|
|
31
31
|
import {
|
|
32
32
|
AuthoringProvenanceSchema,
|
|
33
33
|
AuthoringRepairSchema,
|
|
@@ -97,8 +97,8 @@ import {
|
|
|
97
97
|
isTrainingSourceRef,
|
|
98
98
|
validatePortability,
|
|
99
99
|
validateTaskset
|
|
100
|
-
} from "./chunk-
|
|
101
|
-
import "./chunk-
|
|
100
|
+
} from "./chunk-TLXDZ4VG.js";
|
|
101
|
+
import "./chunk-NZ35HEEK.js";
|
|
102
102
|
import {
|
|
103
103
|
ModelTasksetDraftRequestSchema,
|
|
104
104
|
TasksetDraftFileInfoSchema,
|
|
@@ -106,7 +106,7 @@ import {
|
|
|
106
106
|
TasksetDraftFilePathSchema,
|
|
107
107
|
TasksetDraftFileSchema
|
|
108
108
|
} from "./chunk-S7I45WJQ.js";
|
|
109
|
-
import "./chunk-
|
|
109
|
+
import "./chunk-GZOXT7YE.js";
|
|
110
110
|
import "./chunk-A4ZDOZKP.js";
|
|
111
111
|
import "./chunk-5FBPNWT4.js";
|
|
112
112
|
import {
|
package/dist/taskset-packages.js
CHANGED
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
projectPortableTaskRecord,
|
|
14
14
|
projectPreferenceComparisonRelease,
|
|
15
15
|
resolvePortableTasksetRewardExecution
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-NHMZCVZO.js";
|
|
17
17
|
import {
|
|
18
18
|
OpenPondTasksetPackageClient,
|
|
19
19
|
OpenPondTasksetPackageError,
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
publishTasksetDraft,
|
|
31
31
|
renderTasksetDraftManifests,
|
|
32
32
|
validateTasksetDraftWorkspace
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-IIZV2N5F.js";
|
|
34
34
|
import {
|
|
35
35
|
GraderFixtureSchema,
|
|
36
36
|
MAX_TASKSET_PACKAGE_BYTES,
|
|
@@ -53,11 +53,11 @@ import {
|
|
|
53
53
|
tasksetPackageRewardBinding,
|
|
54
54
|
validateTasksetLearningResources,
|
|
55
55
|
validateTasksetPackage
|
|
56
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-TLXDZ4VG.js";
|
|
57
57
|
import {
|
|
58
58
|
ModelStarterExecutionSchema,
|
|
59
59
|
modelStarterExecutionAssetId
|
|
60
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-NZ35HEEK.js";
|
|
61
61
|
import {
|
|
62
62
|
ModelTasksetAuthoringOwnerSchema,
|
|
63
63
|
ModelTasksetAuthoringSchema,
|
|
@@ -69,7 +69,7 @@ import {
|
|
|
69
69
|
TasksetDraftFilePathSchema,
|
|
70
70
|
TasksetDraftFileSchema
|
|
71
71
|
} from "./chunk-S7I45WJQ.js";
|
|
72
|
-
import "./chunk-
|
|
72
|
+
import "./chunk-GZOXT7YE.js";
|
|
73
73
|
import "./chunk-A4ZDOZKP.js";
|
|
74
74
|
import "./chunk-5FBPNWT4.js";
|
|
75
75
|
import {
|
package/dist/training-bundle.js
CHANGED
|
@@ -2,13 +2,14 @@ import {
|
|
|
2
2
|
learningVerifierModule,
|
|
3
3
|
projectLearningBatchGraders,
|
|
4
4
|
resolvePortableTasksetRewardExecution
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-NHMZCVZO.js";
|
|
6
6
|
import {
|
|
7
7
|
LearningBatchDatasetSourceRefSchema,
|
|
8
|
+
MAX_TASKSET_PACKAGE_BYTES,
|
|
8
9
|
TasksetSchema,
|
|
9
10
|
computeTasksetHash
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-TLXDZ4VG.js";
|
|
12
|
+
import "./chunk-NZ35HEEK.js";
|
|
12
13
|
import "./chunk-S7I45WJQ.js";
|
|
13
14
|
import {
|
|
14
15
|
TRAINING_EVALUATION_SOURCE_PATH,
|
|
@@ -19,7 +20,7 @@ import {
|
|
|
19
20
|
trainingEvaluationSourceRef,
|
|
20
21
|
trainingInputArtifactUploadHash,
|
|
21
22
|
trainingJobSubmissionHash
|
|
22
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-GZOXT7YE.js";
|
|
23
24
|
import {
|
|
24
25
|
HarnessSourceSelectionSchema,
|
|
25
26
|
createAgentSnapshot,
|
|
@@ -39,7 +40,7 @@ import "./chunk-ZNFOVV7B.js";
|
|
|
39
40
|
|
|
40
41
|
// src/training-bundle.ts
|
|
41
42
|
import { compileBoundGraders } from "@openpond/evals/rewards";
|
|
42
|
-
import { verifyLearningTextAsset as
|
|
43
|
+
import { verifyLearningTextAsset as verifyLearningTextAsset3 } from "@openpond/evals/learning";
|
|
43
44
|
|
|
44
45
|
// src/training-bundle-contracts.ts
|
|
45
46
|
import { z } from "zod";
|
|
@@ -179,12 +180,50 @@ function scanAndRedactEvidence(text) {
|
|
|
179
180
|
}
|
|
180
181
|
|
|
181
182
|
// src/training-learning-batch.ts
|
|
182
|
-
import { compileTaskBatch, learningRef, taskBatchPackageMetadata, verifyLearningTextAsset } from "@openpond/evals";
|
|
183
|
+
import { compileTaskBatch, learningRef, taskBatchPackageMetadata, verifyLearningTextAsset as verifyLearningTextAsset2 } from "@openpond/evals";
|
|
184
|
+
|
|
185
|
+
// src/learning-batch-assets.ts
|
|
186
|
+
import { verifyLearningTextAsset } from "@openpond/evals/learning";
|
|
187
|
+
function materializeLearningBatchAssets(input) {
|
|
188
|
+
const tasksetAssetBytes = /* @__PURE__ */ new Map();
|
|
189
|
+
const tasks = input.tasks.map(({ artifactRefs, ...task }) => ({
|
|
190
|
+
...task,
|
|
191
|
+
assets: artifactRefs.map((asset2) => {
|
|
192
|
+
if (asset2.visibility !== "policy") throw new Error("Learning task inputs must be policy-visible assets.");
|
|
193
|
+
const stored = input.assets?.find((value) => value.id === asset2.id);
|
|
194
|
+
const bytes2 = input.assetBytes?.get(asset2.id) ?? (stored ? new TextEncoder().encode(verifyLearningTextAsset(stored, asset2)) : void 0);
|
|
195
|
+
if (!bytes2 || bytes2.byteLength !== asset2.sizeBytes || sha256(bytes2) !== asset2.contentHash) throw new Error(`Learning task input bytes are missing or changed: ${asset2.id}.`);
|
|
196
|
+
const artifactRef = `learning/assets/${contentHash({ task: task.id, asset: asset2.id }).slice(0, 40)}/${asset2.path}`;
|
|
197
|
+
tasksetAssetBytes.set(artifactRef, new Uint8Array(bytes2));
|
|
198
|
+
return {
|
|
199
|
+
id: asset2.id,
|
|
200
|
+
sourceRefId: input.sourceId,
|
|
201
|
+
artifactRef,
|
|
202
|
+
fileName: asset2.path.split("/").at(-1),
|
|
203
|
+
mediaType: asset2.mediaType,
|
|
204
|
+
sha256: asset2.contentHash,
|
|
205
|
+
sizeBytes: asset2.sizeBytes,
|
|
206
|
+
split: task.split,
|
|
207
|
+
metadata: { portableAsset: asset2 }
|
|
208
|
+
};
|
|
209
|
+
}),
|
|
210
|
+
...task.requiredOutputs ? { requiredOutputs: task.requiredOutputs.map((output) => ({
|
|
211
|
+
...output,
|
|
212
|
+
schemaRef: output.schemaRef?.id ?? null,
|
|
213
|
+
maxBytes: output.maxBytes ?? void 0
|
|
214
|
+
})) } : {}
|
|
215
|
+
}));
|
|
216
|
+
return { tasks, tasksetAssetBytes };
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// src/training-learning-batch.ts
|
|
183
220
|
function materializeLearningBatchTaskset(input) {
|
|
184
221
|
const release = compileTaskBatch(input);
|
|
185
222
|
const metadata = taskBatchPackageMetadata(release);
|
|
186
|
-
|
|
223
|
+
const work = release.environment.kind === "work";
|
|
224
|
+
if (!work && (release.environment.kind !== "text" || release.tools.length || release.tasks.some((task) => task.artifactRefs.length)) || work && release.tasks.some((task) => !task.requiredOutputs?.length)) throw new Error("This learning batch requires a supported text or Work environment with declared outputs.");
|
|
187
225
|
const sourceId = input.source.id;
|
|
226
|
+
const materialized = materializeLearningBatchAssets({ tasks: release.tasks, sourceId, assets: input.assets, assetBytes: input.assetBytes });
|
|
188
227
|
const signals = { demonstrations: [], preferences: [], corrections: [], feedback: [], rewards: [], labels: [] };
|
|
189
228
|
const fixtures = [];
|
|
190
229
|
for (const admission of metadata.admissions) {
|
|
@@ -219,7 +258,7 @@ function materializeLearningBatchTaskset(input) {
|
|
|
219
258
|
const asset2 = input.assets?.find((asset3) => asset3.id === grader.verifierRef.id);
|
|
220
259
|
if (!asset2) throw new Error(`Reward ${grader.id} is missing its immutable verifier source.`);
|
|
221
260
|
const module = learningVerifierModule(grader.verifierRef.contentHash);
|
|
222
|
-
if (!generatedFiles.some((file) => file.path === module)) generatedFiles.push({ path: module, role: "verifier", content:
|
|
261
|
+
if (!generatedFiles.some((file) => file.path === module)) generatedFiles.push({ path: module, role: "verifier", content: verifyLearningTextAsset2(asset2, grader.verifierRef) });
|
|
223
262
|
}
|
|
224
263
|
const taskset = TasksetSchema.parse({
|
|
225
264
|
schemaVersion: "openpond.taskset.v1",
|
|
@@ -236,9 +275,9 @@ function materializeLearningBatchTaskset(input) {
|
|
|
236
275
|
sourceRefs: [input.source],
|
|
237
276
|
datasetArtifact: null,
|
|
238
277
|
policy: release.policy,
|
|
239
|
-
environment: { protocolVersion: "openpond.taskEnvironment.v1", kind: "chat", entrypoint:
|
|
240
|
-
capabilities: { schemaVersion: "openpond.tasksetCapabilities.v1", taskKind: "chat", supportedSignals: signals.demonstrations.length ? ["demonstration", "reward"] : ["reward"], compatibleMethods: input.batch.purpose === "supervised_training" ? ["sft"] : input.batch.purpose === "reward_training" ? ["grpo", "ppo"] : ["none"], rewardKinds: ["deterministic"], requiresTools:
|
|
241
|
-
tasks:
|
|
278
|
+
environment: { protocolVersion: "openpond.taskEnvironment.v1", kind: work ? "work" : "chat", entrypoint: release.environment.entrypoint, stateful: release.environment.stateful, deterministicSeeds: release.environment.deterministicSeeds, toolNames: release.tools.map((tool) => tool.name), lifecycle: ["create", "reset", "step", "grade", "cleanup"], defaultTimeoutMs: release.environment.defaultTimeoutMs, networkPolicy: release.environment.networkPolicy, metadata: { portableEnvironment: release.environment, portableTools: release.tools } },
|
|
279
|
+
capabilities: { schemaVersion: "openpond.tasksetCapabilities.v1", taskKind: work ? "single_agent" : "chat", supportedSignals: signals.demonstrations.length ? ["demonstration", "reward"] : ["reward"], compatibleMethods: input.batch.purpose === "supervised_training" ? ["sft"] : input.batch.purpose === "reward_training" ? ["grpo", "ppo"] : ["none"], rewardKinds: ["deterministic"], requiresTools: release.tools.length > 0, requiresState: release.environment.stateful, requiresPrivilegedGrading: true, environmentPlacements: ["local", "remote"], exportable: true, portabilityBlockers: [] },
|
|
280
|
+
tasks: materialized.tasks.map((task) => ({ ...task, schemaVersion: "openpond.taskData.v1", sourceRefs: [sourceId], metadata: { admission: metadata.admissions.find((entry) => entry.taskId === task.id), exampleOrigin: input.evidence.find((evidence) => evidence.id === task.id)?.correctionFeedbackId ? "corrected" : "extracted" } })),
|
|
242
281
|
graders,
|
|
243
282
|
graderFixtures: fixtures,
|
|
244
283
|
learningSignals: signals,
|
|
@@ -247,9 +286,9 @@ function materializeLearningBatchTaskset(input) {
|
|
|
247
286
|
contentHash: "00000000",
|
|
248
287
|
createdAt: input.batch.sealedAt,
|
|
249
288
|
updatedAt: input.batch.sealedAt,
|
|
250
|
-
metadata: { learning: metadata, learningRelease: learningRef(release), trainingMethod: input.batch.purpose === "supervised_training" ? "sft" : input.batch.purpose === "reward_training" ? "grpo" : "none", tasksetOutputContract: { mode: "structured_json", jsonSchema: input.definition.outputSchema, renderer: null } }
|
|
289
|
+
metadata: { learning: metadata, learningRelease: learningRef(release), trainingMethod: input.batch.purpose === "supervised_training" ? "sft" : input.batch.purpose === "reward_training" ? "grpo" : "none", tasksetOutputContract: work ? { mode: "artifacts", requiredOutputSource: "task.requiredOutputs" } : { mode: "structured_json", jsonSchema: input.definition.outputSchema, renderer: null } }
|
|
251
290
|
});
|
|
252
|
-
return { taskset: TasksetSchema.parse({ ...taskset, contentHash: computeTasksetHash(taskset) }), release, generatedFiles };
|
|
291
|
+
return { taskset: TasksetSchema.parse({ ...taskset, contentHash: computeTasksetHash(taskset) }), release, generatedFiles, tasksetAssetBytes: materialized.tasksetAssetBytes };
|
|
253
292
|
}
|
|
254
293
|
function fixtureOutcome(grade) {
|
|
255
294
|
if (!grade) return null;
|
|
@@ -258,10 +297,22 @@ function fixtureOutcome(grade) {
|
|
|
258
297
|
return { passed: outcome.passed === true, rewardEligible: grade.training.status === "scored" };
|
|
259
298
|
}
|
|
260
299
|
function prepareReviewedLearningBatch(input) {
|
|
300
|
+
const inputAssetText = [];
|
|
301
|
+
let inputAssetSize = 0;
|
|
302
|
+
for (const ref of new Map(input.evidence.flatMap((item) => item.submission.assets.map((ref2) => [ref2.id, ref2]))).values()) {
|
|
303
|
+
const bytes2 = input.assetBytes?.get(ref.id);
|
|
304
|
+
const stored = input.assets?.find((asset2) => asset2.id === ref.id);
|
|
305
|
+
const size = bytes2?.byteLength ?? (stored ? new TextEncoder().encode(stored.text).byteLength : 0);
|
|
306
|
+
inputAssetSize += size;
|
|
307
|
+
if (inputAssetSize > MAX_TASKSET_PACKAGE_BYTES) throw new Error("Learning input assets exceed the training package limit.");
|
|
308
|
+
if (bytes2) inputAssetText.push(new TextDecoder().decode(bytes2));
|
|
309
|
+
else if (stored) inputAssetText.push(stored.text);
|
|
310
|
+
}
|
|
261
311
|
const scan = scanAndRedactEvidence(JSON.stringify({
|
|
262
312
|
tasks: input.evidence.map((item) => item.submission),
|
|
263
313
|
targets: input.decisions.map((item) => item.approvedTarget),
|
|
264
|
-
definition: input.definition
|
|
314
|
+
definition: input.definition,
|
|
315
|
+
inputAssets: inputAssetText
|
|
265
316
|
}));
|
|
266
317
|
if (scan.secretStatus !== "passed" || scan.piiStatus !== "passed") throw new Error(`Learning batch contains unresolved data findings (${scan.findings.join(", ")}). Correct the source examples and seal a revised batch before training.`);
|
|
267
318
|
const source = LearningBatchDatasetSourceRefSchema.parse({
|
|
@@ -704,7 +755,7 @@ function buildTasksetTrainingBundle(input) {
|
|
|
704
755
|
for (const reference of references) {
|
|
705
756
|
const asset2 = verifierAssets.find((asset3) => asset3.id === reference.id);
|
|
706
757
|
if (!asset2 || reference.visibility !== "verifier") throw new Error("Training bundle requires its private verifier asset.");
|
|
707
|
-
|
|
758
|
+
verifyLearningTextAsset3(asset2, reference);
|
|
708
759
|
}
|
|
709
760
|
addJsonAsset(assets, "reward-binding.json", { kind: "reward_binding_v1", binding: rewardExecution.binding, rewards: rewardExecution.rewards, assets: verifierAssets });
|
|
710
761
|
} else if (input.verifierAssets?.length) {
|