openpond-sdk 0.5.6 → 0.5.7
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/TRAINING_PROTOCOL.md +19 -0
- package/dist/chunk-ARUJ3FJT.js +447 -0
- package/dist/chunk-ARUJ3FJT.js.map +7 -0
- package/dist/chunk-QFT2MCIC.js +1526 -0
- package/dist/chunk-QFT2MCIC.js.map +7 -0
- package/dist/{chunk-NF63YMOL.js → chunk-QUOW6URQ.js} +7 -9
- package/dist/{chunk-NF63YMOL.js.map → chunk-QUOW6URQ.js.map} +3 -3
- package/dist/{chunk-25TBEGXB.js → chunk-TKJU3BOW.js} +2 -2
- package/dist/chunk-UJZ3XEE3.js +902 -0
- package/dist/chunk-UJZ3XEE3.js.map +7 -0
- package/dist/{chunk-EV4PKJWN.js → chunk-UKVK7MRJ.js} +320 -208
- package/dist/chunk-UKVK7MRJ.js.map +7 -0
- package/dist/index.js +3 -3
- package/dist/learning.js +3 -3
- package/dist/model-taskset-runs.js +2 -2
- package/dist/refiner.js +1 -1
- package/dist/taskset-drafts.js +35 -33
- package/dist/taskset-drafts.js.map +1 -1
- package/dist/taskset-packages.js +51 -465
- package/dist/taskset-packages.js.map +4 -4
- package/dist/training-bundle.js +459 -0
- package/dist/training-bundle.js.map +7 -0
- package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts +2 -2
- package/dist/types/packages/sdk/src/taskset-authored-files.d.ts +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-dataset-artifacts.d.ts +2 -2
- package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +1 -1
- package/dist/types/packages/sdk/src/training-bundle-contracts.d.ts +287 -0
- package/dist/types/packages/sdk/src/training-bundle-contracts.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-bundle.d.ts +48 -0
- package/dist/types/packages/sdk/src/training-bundle.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-learning-batch.d.ts +719 -0
- package/dist/types/packages/sdk/src/training-learning-batch.d.ts.map +1 -0
- package/package.json +6 -2
- package/dist/chunk-EV4PKJWN.js.map +0 -7
- package/dist/chunk-PXB6YY36.js +0 -2395
- package/dist/chunk-PXB6YY36.js.map +0 -7
- /package/dist/{chunk-25TBEGXB.js.map → chunk-TKJU3BOW.js.map} +0 -0
package/dist/taskset-packages.js
CHANGED
|
@@ -4,44 +4,60 @@ import {
|
|
|
4
4
|
ModelBatchReviewRequestSchema
|
|
5
5
|
} from "./chunk-K5ZCYOZO.js";
|
|
6
6
|
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
importedPackageGraders,
|
|
8
|
+
learningVerifierModule,
|
|
9
|
+
materializePortableTasksetRelease,
|
|
10
|
+
portableTasksetEnvironment,
|
|
11
|
+
portableTasksetTools,
|
|
12
|
+
projectLearningBatchGraders,
|
|
13
|
+
projectPortableTaskRecord,
|
|
14
|
+
projectPreferenceComparisonRelease,
|
|
15
|
+
resolvePortableTasksetRewardExecution
|
|
16
|
+
} from "./chunk-ARUJ3FJT.js";
|
|
17
|
+
import {
|
|
10
18
|
OpenPondTasksetPackageClient,
|
|
11
19
|
OpenPondTasksetPackageError,
|
|
12
20
|
TasksetDraftSchema,
|
|
13
|
-
TasksetEnvironmentResourceSchema,
|
|
14
|
-
TasksetPackageContentSchema,
|
|
15
|
-
TasksetPackageFileSchema,
|
|
16
|
-
TasksetPackageLearningResourcesSchema,
|
|
17
21
|
TasksetPackageModelConfigurationSchema,
|
|
18
22
|
TasksetPackagePublicationSchema,
|
|
19
23
|
TasksetPackageReadbackSchema,
|
|
20
24
|
TasksetPackageReceiptSchema,
|
|
25
|
+
configuredTasksetDraftFiles,
|
|
26
|
+
createTasksetDraft,
|
|
27
|
+
createTasksetDraftWorkspace,
|
|
28
|
+
decodeTasksetDraftWorkspaceFile,
|
|
29
|
+
isManagedTasksetDraftFilePath,
|
|
30
|
+
publishTasksetDraft,
|
|
31
|
+
renderTasksetDraftManifests,
|
|
32
|
+
validateTasksetDraftWorkspace
|
|
33
|
+
} from "./chunk-UJZ3XEE3.js";
|
|
34
|
+
import {
|
|
35
|
+
GraderFixtureSchema,
|
|
36
|
+
MAX_TASKSET_PACKAGE_BYTES,
|
|
37
|
+
TasksetEnvironmentResourceSchema,
|
|
38
|
+
TasksetPackageContentSchema,
|
|
39
|
+
TasksetPackageFileSchema,
|
|
40
|
+
TasksetPackageLearningResourcesSchema,
|
|
21
41
|
TasksetPackageSchema,
|
|
22
42
|
TasksetSchema,
|
|
23
43
|
TasksetSourceRefSchema,
|
|
24
44
|
assertModelTasksetAuthoring,
|
|
25
45
|
computeTasksetHash,
|
|
26
|
-
configuredTasksetDraftFiles,
|
|
27
|
-
createTasksetDraft,
|
|
28
|
-
createTasksetDraftWorkspace,
|
|
29
46
|
createTasksetPackage,
|
|
30
47
|
createTasksetPackageExecutionFile,
|
|
31
|
-
decodeTasksetDraftWorkspaceFile,
|
|
32
48
|
decodeTasksetPackageFile,
|
|
33
|
-
isManagedTasksetDraftFilePath,
|
|
34
49
|
learningPackageContextFiles,
|
|
35
50
|
modelAuthoredTasksetId,
|
|
36
|
-
publishTasksetDraft,
|
|
37
|
-
renderTasksetDraftManifests,
|
|
38
51
|
resolveTasksetPackageExecution,
|
|
39
52
|
resolveTasksetPackageInstructions,
|
|
40
53
|
tasksetPackageRewardBinding,
|
|
41
|
-
validateTasksetDraftWorkspace,
|
|
42
54
|
validateTasksetLearningResources,
|
|
43
55
|
validateTasksetPackage
|
|
44
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-QFT2MCIC.js";
|
|
57
|
+
import {
|
|
58
|
+
ModelStarterExecutionSchema,
|
|
59
|
+
modelStarterExecutionAssetId
|
|
60
|
+
} from "./chunk-4IDTRFW2.js";
|
|
45
61
|
import {
|
|
46
62
|
ModelTasksetAuthoringOwnerSchema,
|
|
47
63
|
ModelTasksetAuthoringSchema,
|
|
@@ -55,19 +71,12 @@ import {
|
|
|
55
71
|
} from "./chunk-S7I45WJQ.js";
|
|
56
72
|
import "./chunk-F5JBFRAH.js";
|
|
57
73
|
import "./chunk-A4ZDOZKP.js";
|
|
58
|
-
import
|
|
59
|
-
ModelStarterExecutionSchema,
|
|
60
|
-
modelStarterExecutionAssetId
|
|
61
|
-
} from "./chunk-4IDTRFW2.js";
|
|
62
|
-
import {
|
|
63
|
-
CapabilityRequirementSchema,
|
|
64
|
-
ToolDeclarationSchema
|
|
65
|
-
} from "./chunk-EV4PKJWN.js";
|
|
74
|
+
import "./chunk-UKVK7MRJ.js";
|
|
66
75
|
import {
|
|
67
76
|
ImmutableAssetRefSchema,
|
|
68
77
|
contentHash,
|
|
69
78
|
sha256
|
|
70
|
-
} from "./chunk-
|
|
79
|
+
} from "./chunk-QUOW6URQ.js";
|
|
71
80
|
import "./chunk-ZNFOVV7B.js";
|
|
72
81
|
|
|
73
82
|
// src/model-batch-review.ts
|
|
@@ -372,431 +381,8 @@ function requireOrdinaryPackage(value) {
|
|
|
372
381
|
return result;
|
|
373
382
|
}
|
|
374
383
|
|
|
375
|
-
// src/taskset-authored-portable-release.ts
|
|
376
|
-
import {
|
|
377
|
-
TaskRecordSchema,
|
|
378
|
-
GraderSpecSchema as PortableGraderSpecSchema,
|
|
379
|
-
TasksetReleaseContentSchema,
|
|
380
|
-
TasksetReleaseSchema as TasksetReleaseSchema2,
|
|
381
|
-
bindTasksetExecutionReleases,
|
|
382
|
-
createEnvironmentRelease,
|
|
383
|
-
createVerifierSetRelease as createVerifierSetRelease2,
|
|
384
|
-
EnvironmentReleaseSchema,
|
|
385
|
-
VerifierSetReleaseSchema,
|
|
386
|
-
verifyEnvironmentRelease,
|
|
387
|
-
verifyVerifierSetRelease,
|
|
388
|
-
verifyPreferenceComparisonRelease
|
|
389
|
-
} from "@openpond/evals";
|
|
390
|
-
import { TaskBatchPackageMetadataSchema } from "@openpond/evals/learning";
|
|
391
|
-
import { compileBoundGraders as compileBoundGraders2, RewardBindingSchema, RewardReleaseSchema } from "@openpond/evals/rewards";
|
|
392
|
-
import { portableDeterministicCheck } from "@openpond/evals/graders";
|
|
393
|
-
function resolvePortableTasksetRewardExecution(taskset, supplied) {
|
|
394
|
-
const learning = taskset.metadata.learning === void 0 ? null : TaskBatchPackageMetadataSchema.parse(taskset.metadata.learning);
|
|
395
|
-
const embedded = taskset.metadata.rewardExecution;
|
|
396
|
-
const execution = supplied ?? (embedded ? {
|
|
397
|
-
binding: RewardBindingSchema.parse(embedded.binding),
|
|
398
|
-
rewards: RewardReleaseSchema.array().parse(embedded.rewards)
|
|
399
|
-
} : learning);
|
|
400
|
-
if (taskset.metadata.rewardBinding !== void 0) {
|
|
401
|
-
const reference = taskset.metadata.rewardBinding;
|
|
402
|
-
if (!execution || !reference || reference.id !== execution.binding.id || reference.revision !== execution.binding.revision || reference.contentHash !== execution.binding.contentHash) {
|
|
403
|
-
throw new Error("Portable Taskset requires its exact published Reward binding.");
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
if (execution) compileBoundGraders2(execution.binding, execution.rewards);
|
|
407
|
-
return execution ? { binding: execution.binding, rewards: execution.rewards } : null;
|
|
408
|
-
}
|
|
409
|
-
function materializePortableTasksetRelease(input) {
|
|
410
|
-
const environment = portableEnvironment(input.taskset);
|
|
411
|
-
const tools = portableTools(input.taskset);
|
|
412
|
-
const learning = input.taskset.metadata.learning === void 0 ? null : TaskBatchPackageMetadataSchema.parse(input.taskset.metadata.learning);
|
|
413
|
-
const embedded = input.taskset.metadata.rewardExecution;
|
|
414
|
-
const rewardExecution = resolvePortableTasksetRewardExecution(input.taskset, input.rewardExecution);
|
|
415
|
-
const graders = rewardExecution ? compileBoundGraders2(rewardExecution.binding, rewardExecution.rewards) : input.taskset.graders.map(portableGrader);
|
|
416
|
-
const tasks = input.selectedTasks?.length ? input.selectedTasks : input.taskset.tasks;
|
|
417
|
-
if (!tasks.length) throw new Error("A portable Taskset release requires at least one task.");
|
|
418
|
-
const pinned = input.taskset.environment.metadata.portableExecutionResources;
|
|
419
|
-
if (environment.entrypoint === "openpond.javascript-environment.v1" && !pinned) throw new Error("Tool Taskset publication requires its pinned execution resources.");
|
|
420
|
-
const environmentRelease = pinned ? EnvironmentReleaseSchema.parse(pinned.environment) : createEnvironmentRelease({
|
|
421
|
-
schemaVersion: "openpond.environmentRelease.v1",
|
|
422
|
-
id: `environment-release-${input.taskset.id}-r${input.taskset.revision}`,
|
|
423
|
-
revision: input.taskset.revision,
|
|
424
|
-
contract: environment,
|
|
425
|
-
actionSchemaRef: null,
|
|
426
|
-
observationSchemaRef: null,
|
|
427
|
-
stateSchemaRef: null,
|
|
428
|
-
artifactCollection: {
|
|
429
|
-
maxArtifacts: 1e5,
|
|
430
|
-
maxTotalBytes: 25e7
|
|
431
|
-
},
|
|
432
|
-
adapterConformanceHashes: {
|
|
433
|
-
[input.adapterId]: contentHash({ adapterId: input.adapterId, environment, tools })
|
|
434
|
-
},
|
|
435
|
-
metadata: {
|
|
436
|
-
sourceTasksetId: input.taskset.id,
|
|
437
|
-
sourcePackageHash: input.taskset.metadata.sourcePackageHash ?? null,
|
|
438
|
-
resources: input.taskset.environment.resources ?? []
|
|
439
|
-
}
|
|
440
|
-
});
|
|
441
|
-
const verifierSetRelease = pinned?.verifierSet !== void 0 ? VerifierSetReleaseSchema.parse(pinned.verifierSet) : createVerifierSetRelease2({
|
|
442
|
-
schemaVersion: "openpond.verifierSetRelease.v1",
|
|
443
|
-
id: `verifier-set-release-${input.taskset.id}-r${input.taskset.revision}`,
|
|
444
|
-
revision: input.taskset.revision,
|
|
445
|
-
graders,
|
|
446
|
-
isolation: {
|
|
447
|
-
processBoundary: "isolated_process",
|
|
448
|
-
networkPolicy: "none",
|
|
449
|
-
defaultTimeoutMs: Math.min(input.taskset.environment.defaultTimeoutMs, 3e5)
|
|
450
|
-
},
|
|
451
|
-
calibrationReceiptRefs: [],
|
|
452
|
-
metadata: { sourceTasksetId: input.taskset.id }
|
|
453
|
-
});
|
|
454
|
-
if (!verifyEnvironmentRelease(environmentRelease) || !verifyVerifierSetRelease(verifierSetRelease) || contentHash(environmentRelease.contract) !== contentHash(environment) || contentHash(verifierSetRelease.graders) !== contentHash(graders)) {
|
|
455
|
-
throw new Error("Taskset execution resources differ from its declared environment or graders.");
|
|
456
|
-
}
|
|
457
|
-
const tasksetContent = TasksetReleaseContentSchema.parse({
|
|
458
|
-
schemaVersion: "openpond.tasksetRelease.v2",
|
|
459
|
-
id: input.taskset.metadata.derivedPortableMetadata === void 0 ? `taskset-release-${input.taskset.id}-r${input.taskset.revision}` : input.taskset.id,
|
|
460
|
-
revision: input.taskset.revision,
|
|
461
|
-
policy: {
|
|
462
|
-
policyVisibleFields: input.taskset.policy.policyVisibleFields,
|
|
463
|
-
privilegedFields: input.taskset.policy.privilegedFields,
|
|
464
|
-
hiddenGraderRefs: input.taskset.policy.hiddenGraderRefs,
|
|
465
|
-
connectedAppScopes: input.taskset.policy.connectedAppScopes
|
|
466
|
-
},
|
|
467
|
-
environment,
|
|
468
|
-
tools,
|
|
469
|
-
capabilities: portableCapabilities(input.taskset),
|
|
470
|
-
tasks: tasks.map(projectPortableTaskRecord),
|
|
471
|
-
graders,
|
|
472
|
-
...input.taskset.metrics ? { metrics: input.taskset.metrics } : {},
|
|
473
|
-
metadata: input.taskset.metadata.derivedPortableMetadata ?? {
|
|
474
|
-
sourceTasksetId: input.taskset.id,
|
|
475
|
-
sourceTasksetHash: input.taskset.contentHash,
|
|
476
|
-
sourcePackageHash: input.taskset.metadata.sourcePackageHash ?? null,
|
|
477
|
-
environmentResources: input.taskset.environment.resources ?? [],
|
|
478
|
-
ordinaryAuthoring: {
|
|
479
|
-
instructions: input.taskset.objective,
|
|
480
|
-
graderFixtures: input.taskset.graderFixtures,
|
|
481
|
-
judgeCalibrationFixtures: Object.fromEntries(input.taskset.graders.filter((grader) => grader.kind === "model_judge").map((grader) => [grader.id, grader.calibrationFixtureRefs]))
|
|
482
|
-
},
|
|
483
|
-
...learning ? { learning } : {},
|
|
484
|
-
// A sealed batch already pins these resources in learning metadata.
|
|
485
|
-
// Resolving that same binding at admission must not change its release.
|
|
486
|
-
...rewardExecution && !learning && (input.rewardExecution || embedded) ? { rewardExecution: { binding: rewardExecution.binding, rewards: rewardExecution.rewards } } : {}
|
|
487
|
-
}
|
|
488
|
-
});
|
|
489
|
-
const draft = input.admittedTasksetRelease ? TasksetReleaseSchema2.parse(input.admittedTasksetRelease) : TasksetReleaseSchema2.parse({
|
|
490
|
-
...tasksetContent,
|
|
491
|
-
contentHash: contentHash(tasksetContent)
|
|
492
|
-
});
|
|
493
|
-
const tasksetRelease = draft.environmentRelease ? assertReleaseBindings({ draft, environmentRelease, verifierSetRelease }) : bindTasksetExecutionReleases({
|
|
494
|
-
taskset: draft,
|
|
495
|
-
environment: environmentRelease,
|
|
496
|
-
verifierSet: verifierSetRelease
|
|
497
|
-
});
|
|
498
|
-
return { environmentRelease, verifierSetRelease, tasksetRelease };
|
|
499
|
-
}
|
|
500
|
-
function projectPreferenceComparisonRelease(input) {
|
|
501
|
-
if (!verifyPreferenceComparisonRelease(input.preferenceComparison)) {
|
|
502
|
-
throw new Error("Preference comparison release failed immutable content verification.");
|
|
503
|
-
}
|
|
504
|
-
const release = input.preferenceComparison;
|
|
505
|
-
if (release.tasksetRelease.id !== input.tasksetRelease.id || release.tasksetRelease.contentHash !== input.tasksetRelease.contentHash) {
|
|
506
|
-
throw new Error("Preference comparison release must reference the admitted portable Taskset release.");
|
|
507
|
-
}
|
|
508
|
-
return release;
|
|
509
|
-
}
|
|
510
|
-
function portableTasksetEnvironment(taskset) {
|
|
511
|
-
return portableEnvironment(taskset);
|
|
512
|
-
}
|
|
513
|
-
function portableTasksetTools(taskset) {
|
|
514
|
-
return portableTools(taskset);
|
|
515
|
-
}
|
|
516
|
-
function projectPortableTaskRecord(task) {
|
|
517
|
-
const admitted = task.metadata.portableTaskRecord;
|
|
518
|
-
if (admitted !== void 0) {
|
|
519
|
-
const original = TaskRecordSchema.parse(admitted);
|
|
520
|
-
const projected = TaskRecordSchema.parse({
|
|
521
|
-
...original,
|
|
522
|
-
id: task.id,
|
|
523
|
-
clusterKey: task.clusterKey,
|
|
524
|
-
split: task.split,
|
|
525
|
-
input: task.input,
|
|
526
|
-
expectedOutput: portableExpectedOutput(task),
|
|
527
|
-
policyVisibleContext: task.policyVisibleContext,
|
|
528
|
-
privilegedContextRef: task.privilegedContextRef,
|
|
529
|
-
tags: task.tags,
|
|
530
|
-
artifactRefs: task.assets === void 0 ? original.artifactRefs : task.assets.map((asset) => {
|
|
531
|
-
const previous = original.artifactRefs.find((item) => item.id === asset.id);
|
|
532
|
-
return {
|
|
533
|
-
id: asset.id,
|
|
534
|
-
path: previous?.path ?? `tasks/${segment(task.id)}/${segment(asset.fileName)}`,
|
|
535
|
-
contentHash: hash(asset.sha256),
|
|
536
|
-
sizeBytes: asset.sizeBytes,
|
|
537
|
-
mediaType: asset.mediaType,
|
|
538
|
-
visibility: previous?.visibility ?? "policy"
|
|
539
|
-
};
|
|
540
|
-
}),
|
|
541
|
-
requiredOutputs: task.requiredOutputs === void 0 ? original.requiredOutputs : task.requiredOutputs.map((output) => {
|
|
542
|
-
const previous = original.requiredOutputs?.find((item) => item.path === output.path);
|
|
543
|
-
return {
|
|
544
|
-
path: output.path,
|
|
545
|
-
mediaType: output.mediaType,
|
|
546
|
-
schemaRef: previous?.schemaRef && previous.schemaRef.id === output.schemaRef ? previous.schemaRef : null,
|
|
547
|
-
maxBytes: output.maxBytes ?? null,
|
|
548
|
-
metadata: {
|
|
549
|
-
...output.metadata,
|
|
550
|
-
...output.schemaRef && previous?.schemaRef?.id !== output.schemaRef ? { legacySchemaRef: output.schemaRef } : {}
|
|
551
|
-
}
|
|
552
|
-
};
|
|
553
|
-
})
|
|
554
|
-
});
|
|
555
|
-
if (projected.requiredOutputs === void 0) delete projected.requiredOutputs;
|
|
556
|
-
return projected;
|
|
557
|
-
}
|
|
558
|
-
return {
|
|
559
|
-
id: task.id,
|
|
560
|
-
clusterKey: task.clusterKey,
|
|
561
|
-
split: task.split,
|
|
562
|
-
input: task.input,
|
|
563
|
-
expectedOutput: portableExpectedOutput(task),
|
|
564
|
-
policyVisibleContext: task.policyVisibleContext,
|
|
565
|
-
privilegedContextRef: task.privilegedContextRef,
|
|
566
|
-
artifactRefs: (task.assets ?? []).map((item) => ({
|
|
567
|
-
id: item.id,
|
|
568
|
-
path: `tasks/${segment(task.id)}/${segment(item.fileName)}`,
|
|
569
|
-
contentHash: hash(item.sha256),
|
|
570
|
-
sizeBytes: item.sizeBytes,
|
|
571
|
-
mediaType: item.mediaType,
|
|
572
|
-
visibility: "policy"
|
|
573
|
-
})),
|
|
574
|
-
requiredOutputs: (task.requiredOutputs ?? []).map((output) => ({
|
|
575
|
-
path: output.path,
|
|
576
|
-
mediaType: output.mediaType,
|
|
577
|
-
schemaRef: null,
|
|
578
|
-
maxBytes: output.maxBytes ?? null,
|
|
579
|
-
metadata: {
|
|
580
|
-
...output.metadata,
|
|
581
|
-
legacySchemaRef: output.schemaRef ?? null
|
|
582
|
-
}
|
|
583
|
-
})),
|
|
584
|
-
tags: task.tags
|
|
585
|
-
};
|
|
586
|
-
}
|
|
587
|
-
function portableExpectedOutput(task) {
|
|
588
|
-
if (!task.expectedOutput) return null;
|
|
589
|
-
if ("artifactRenderer" in task.expectedOutput) {
|
|
590
|
-
throw new Error(
|
|
591
|
-
`Task ${task.id} embeds an artifact renderer. Put shared renderer configuration in Environment resources and reference it from the Scenario.`
|
|
592
|
-
);
|
|
593
|
-
}
|
|
594
|
-
return task.expectedOutput;
|
|
595
|
-
}
|
|
596
|
-
function portableEnvironment(taskset) {
|
|
597
|
-
const kind = taskset.environment.kind === "chat" ? "text" : taskset.environment.kind === "work" ? "work" : taskset.environment.kind === "program" ? "custom_program" : "agent";
|
|
598
|
-
return {
|
|
599
|
-
protocolVersion: "openpond.environment.v1",
|
|
600
|
-
kind,
|
|
601
|
-
entrypoint: taskset.environment.entrypoint,
|
|
602
|
-
stateful: taskset.environment.stateful,
|
|
603
|
-
deterministicSeeds: taskset.environment.deterministicSeeds,
|
|
604
|
-
lifecycle: ["create", "reset", "step", "collect", "destroy"],
|
|
605
|
-
networkPolicy: taskset.environment.networkPolicy,
|
|
606
|
-
defaultTimeoutMs: taskset.environment.defaultTimeoutMs
|
|
607
|
-
};
|
|
608
|
-
}
|
|
609
|
-
function portableTools(taskset) {
|
|
610
|
-
const admitted = taskset.environment.metadata.portableTools;
|
|
611
|
-
if (admitted !== void 0) {
|
|
612
|
-
return ToolDeclarationSchema.array().max(200).parse(admitted);
|
|
613
|
-
}
|
|
614
|
-
const bindings = taskset.environment.actionBindings ?? [];
|
|
615
|
-
if (bindings.length) return bindings.map((binding) => ({
|
|
616
|
-
name: binding.modelToolName,
|
|
617
|
-
description: binding.description,
|
|
618
|
-
inputSchema: binding.inputSchema,
|
|
619
|
-
inputSchemaHash: hash(binding.actionSchemaHash),
|
|
620
|
-
sideEffect: binding.sideEffect,
|
|
621
|
-
timeoutMs: binding.timeoutMs
|
|
622
|
-
}));
|
|
623
|
-
return taskset.environment.toolNames.map((name) => ({
|
|
624
|
-
name,
|
|
625
|
-
description: `Host-provided ${name} tool.`,
|
|
626
|
-
inputSchema: {},
|
|
627
|
-
inputSchemaHash: contentHash({}),
|
|
628
|
-
sideEffect: "write",
|
|
629
|
-
timeoutMs: taskset.environment.defaultTimeoutMs
|
|
630
|
-
}));
|
|
631
|
-
}
|
|
632
|
-
function portableGrader(grader) {
|
|
633
|
-
const base = {
|
|
634
|
-
id: grader.id,
|
|
635
|
-
version: grader.version,
|
|
636
|
-
weight: grader.weight,
|
|
637
|
-
hardGate: grader.hardGate,
|
|
638
|
-
rewardEligible: grader.rewardEligible,
|
|
639
|
-
privileged: grader.privileged
|
|
640
|
-
};
|
|
641
|
-
if (grader.kind === "model_judge") return {
|
|
642
|
-
...base,
|
|
643
|
-
kind: "model_judge",
|
|
644
|
-
rubricRef: rubricAsset(grader),
|
|
645
|
-
model: modelJudgeRef(grader),
|
|
646
|
-
temperature: grader.temperature,
|
|
647
|
-
calibrationStatus: grader.calibrationStatus
|
|
648
|
-
};
|
|
649
|
-
if (grader.kind === "custom_verifier") {
|
|
650
|
-
if (grader.metadata.portableVerifierRef === void 0) {
|
|
651
|
-
throw new Error(`Custom verifier ${grader.id} requires its immutable executable asset before publication.`);
|
|
652
|
-
}
|
|
653
|
-
const imported = PortableGraderSpecSchema.safeParse(grader.metadata.portableGrader);
|
|
654
|
-
const preserveDefault = imported.success && imported.data.kind === "custom_verifier" && imported.data.exportName === void 0 && grader.exportName === "verify";
|
|
655
|
-
return {
|
|
656
|
-
...base,
|
|
657
|
-
kind: "custom_verifier",
|
|
658
|
-
verifierRef: ImmutableAssetRefSchema.parse(grader.metadata.portableVerifierRef),
|
|
659
|
-
timeoutMs: grader.timeoutMs,
|
|
660
|
-
...preserveDefault ? {} : { exportName: grader.exportName },
|
|
661
|
-
networkPolicy: "none"
|
|
662
|
-
};
|
|
663
|
-
}
|
|
664
|
-
if (grader.kind === "human") return {
|
|
665
|
-
...base,
|
|
666
|
-
kind: "human",
|
|
667
|
-
rubricRef: rubricAsset(grader),
|
|
668
|
-
reviewerRole: grader.reviewerRole
|
|
669
|
-
};
|
|
670
|
-
return {
|
|
671
|
-
...base,
|
|
672
|
-
...portableDeterministicCheck(grader)
|
|
673
|
-
};
|
|
674
|
-
}
|
|
675
|
-
function portableCapabilities(taskset) {
|
|
676
|
-
const admitted = taskset.metadata.portableCapabilities;
|
|
677
|
-
if (admitted !== void 0) {
|
|
678
|
-
return CapabilityRequirementSchema.array().max(200).parse(admitted);
|
|
679
|
-
}
|
|
680
|
-
return [
|
|
681
|
-
...taskset.capabilities.requiresTools ? [{ id: "tools", required: true, scopes: taskset.environment.toolNames }] : [],
|
|
682
|
-
...taskset.capabilities.requiresState ? [{ id: "local-state", required: true, scopes: [] }] : [],
|
|
683
|
-
...taskset.capabilities.requiresPrivilegedGrading ? [{ id: "private-verifier", required: true, scopes: taskset.policy.hiddenGraderRefs }] : [],
|
|
684
|
-
...taskset.policy.connectedAppScopes.map((scope) => ({
|
|
685
|
-
id: `connected-app-${segment(scope)}`,
|
|
686
|
-
required: true,
|
|
687
|
-
scopes: [scope]
|
|
688
|
-
}))
|
|
689
|
-
].map((requirement) => ({
|
|
690
|
-
...requirement,
|
|
691
|
-
portability: requirement.id === "local-state" ? "host_adapter" : "portable"
|
|
692
|
-
}));
|
|
693
|
-
}
|
|
694
|
-
function assertReleaseBindings(input) {
|
|
695
|
-
if (input.draft.environmentRelease?.id !== input.environmentRelease.id || input.draft.environmentRelease.contentHash !== input.environmentRelease.contentHash) {
|
|
696
|
-
throw new Error("Admitted Taskset Release binds a different Environment Release.");
|
|
697
|
-
}
|
|
698
|
-
if (input.draft.verifierSetRelease?.id !== input.verifierSetRelease.id || input.draft.verifierSetRelease.contentHash !== input.verifierSetRelease.contentHash) {
|
|
699
|
-
throw new Error("Admitted Taskset Release binds a different Verifier Set Release.");
|
|
700
|
-
}
|
|
701
|
-
if (contentHash(input.draft.environment) !== contentHash(input.environmentRelease.contract)) {
|
|
702
|
-
throw new Error("Admitted Taskset Environment differs from its bound Environment Release.");
|
|
703
|
-
}
|
|
704
|
-
if (contentHash(input.draft.graders) !== contentHash(input.verifierSetRelease.graders)) {
|
|
705
|
-
throw new Error("Admitted Taskset graders differ from its bound Verifier Set Release.");
|
|
706
|
-
}
|
|
707
|
-
return input.draft;
|
|
708
|
-
}
|
|
709
|
-
function modelJudgeRef(grader) {
|
|
710
|
-
const previous = grader.metadata.portableGrader === void 0 ? null : PortableGraderSpecSchema.parse(grader.metadata.portableGrader);
|
|
711
|
-
const revision = previous?.kind === "model_judge" && previous.model?.providerId === grader.judge.providerId && previous.model.modelId === grader.judge.modelId ? previous.model.revision : null;
|
|
712
|
-
return { ...grader.judge, revision };
|
|
713
|
-
}
|
|
714
|
-
function rubricAsset(grader) {
|
|
715
|
-
const contentHash2 = sha256(grader.rubric);
|
|
716
|
-
const sizeBytes = new TextEncoder().encode(grader.rubric).byteLength;
|
|
717
|
-
const reference = grader.metadata.portableRubricRef;
|
|
718
|
-
if (reference !== void 0) {
|
|
719
|
-
const asset = ImmutableAssetRefSchema.parse(reference);
|
|
720
|
-
if (asset.contentHash !== contentHash2 || asset.sizeBytes !== sizeBytes || asset.visibility === "policy") throw new Error("Taskset rubric differs from its published private source.");
|
|
721
|
-
return asset;
|
|
722
|
-
}
|
|
723
|
-
return { id: `rubric-${grader.id}`, path: `graders/${segment(grader.id)}/rubric.md`, contentHash: contentHash2, sizeBytes, mediaType: "text/markdown", visibility: "verifier" };
|
|
724
|
-
}
|
|
725
|
-
function hash(value) {
|
|
726
|
-
return /^[a-f0-9]{64}$/.test(value) ? value : contentHash(value);
|
|
727
|
-
}
|
|
728
|
-
function segment(value) {
|
|
729
|
-
const normalized = value.trim().replace(/[^a-zA-Z0-9._-]+/g, "-").replace(/^-+|-+$/g, "");
|
|
730
|
-
return normalized || "asset";
|
|
731
|
-
}
|
|
732
|
-
|
|
733
|
-
// src/taskset-package-projection.ts
|
|
734
|
-
import { learningRef as learningRef5, taskBatchPackageMetadata as taskBatchPackageMetadata3, verifyLearningTextAsset as verifyLearningTextAsset3 } from "@openpond/evals/learning";
|
|
735
|
-
|
|
736
|
-
// src/taskset-package-grader-projection.ts
|
|
737
|
-
import { compileBoundGraders as compileBoundGraders3, resolveBoundRewards as resolveBoundRewards2 } from "@openpond/evals/rewards";
|
|
738
|
-
import { learningRef as learningRef4, verifyLearningTextAsset as verifyLearningTextAsset2 } from "@openpond/evals/learning";
|
|
739
|
-
import { z } from "zod";
|
|
740
|
-
function importedPackageGraders(value) {
|
|
741
|
-
const authoring = value.taskset.metadata.ordinaryAuthoring;
|
|
742
|
-
const calibrationFixtures = z.record(z.string(), z.array(z.string().min(1)).max(1e5)).parse(authoring?.judgeCalibrationFixtures ?? {});
|
|
743
|
-
return value.taskset.graders.map((grader) => {
|
|
744
|
-
const base = { ...grader, label: grader.id, metadata: { portableGrader: grader } };
|
|
745
|
-
if (grader.kind === "custom_verifier") return GraderSpecSchema.parse({
|
|
746
|
-
...base,
|
|
747
|
-
module: learningVerifierModule(grader.verifierRef.contentHash),
|
|
748
|
-
exportName: grader.exportName ?? "verify",
|
|
749
|
-
metadata: { ...base.metadata, portableVerifierRef: grader.verifierRef }
|
|
750
|
-
});
|
|
751
|
-
if (grader.kind === "human" || grader.kind === "model_judge") {
|
|
752
|
-
const file = value.files.find((file2) => file2.asset.id === grader.rubricRef.id);
|
|
753
|
-
if (!file) throw new Error(`Imported rubric is missing: ${grader.id}.`);
|
|
754
|
-
const rubric = new TextDecoder("utf-8", { fatal: true }).decode(decodeTasksetPackageFile(file));
|
|
755
|
-
const metadata = { ...base.metadata, portableRubricRef: grader.rubricRef };
|
|
756
|
-
if (grader.kind === "human") return GraderSpecSchema.parse({ ...base, rubric, metadata });
|
|
757
|
-
if (!grader.model) throw new Error(`Imported judge ${grader.id} requires its declared model before local preparation.`);
|
|
758
|
-
return GraderSpecSchema.parse({
|
|
759
|
-
...base,
|
|
760
|
-
rubric,
|
|
761
|
-
metadata,
|
|
762
|
-
judge: grader.model,
|
|
763
|
-
temperature: grader.temperature ?? 0,
|
|
764
|
-
calibrationStatus: "pending",
|
|
765
|
-
calibrationFixtureRefs: calibrationFixtures[grader.id] ?? []
|
|
766
|
-
});
|
|
767
|
-
}
|
|
768
|
-
return GraderSpecSchema.parse({
|
|
769
|
-
...base,
|
|
770
|
-
kind: grader.kind === "artifact" ? "file" : grader.kind,
|
|
771
|
-
config: grader.kind === "artifact" ? { ...grader.config, ...grader.config.refIncludes === void 0 ? {} : { pathIncludes: grader.config.refIncludes } } : grader.config
|
|
772
|
-
});
|
|
773
|
-
});
|
|
774
|
-
}
|
|
775
|
-
function projectLearningBatchGraders(binding, rewards, assets = []) {
|
|
776
|
-
const resolved = resolveBoundRewards2(binding, rewards);
|
|
777
|
-
return compileBoundGraders3(binding, rewards).map((grader) => {
|
|
778
|
-
const reward = resolved.find(({ source }) => source.graderId === grader.id).reward;
|
|
779
|
-
const base = { ...grader, label: reward.name, metadata: { rewardBinding: learningRef4(binding) } };
|
|
780
|
-
if (grader.kind === "model_judge") throw new Error(`Reward ${grader.id} needs a calibrated model execution adapter before preparation.`);
|
|
781
|
-
if (grader.kind === "custom_verifier") return GraderSpecSchema.parse({
|
|
782
|
-
...base,
|
|
783
|
-
module: learningVerifierModule(grader.verifierRef.contentHash),
|
|
784
|
-
exportName: grader.exportName ?? "verify",
|
|
785
|
-
metadata: { ...base.metadata, portableVerifierRef: grader.verifierRef }
|
|
786
|
-
});
|
|
787
|
-
if (grader.kind === "human") {
|
|
788
|
-
const asset = assets.find((asset2) => asset2.id === grader.rubricRef.id);
|
|
789
|
-
if (!asset) throw new Error(`Reward ${grader.id} is missing its immutable rubric.`);
|
|
790
|
-
return GraderSpecSchema.parse({ ...base, rubric: verifyLearningTextAsset2(asset, grader.rubricRef) });
|
|
791
|
-
}
|
|
792
|
-
return GraderSpecSchema.parse({ ...base, kind: grader.kind === "artifact" ? "file" : grader.kind });
|
|
793
|
-
});
|
|
794
|
-
}
|
|
795
|
-
function learningVerifierModule(hash2) {
|
|
796
|
-
return `graders/reward-${hash2}.js`;
|
|
797
|
-
}
|
|
798
|
-
|
|
799
384
|
// src/taskset-package-projection.ts
|
|
385
|
+
import { learningRef as learningRef4, taskBatchPackageMetadata as taskBatchPackageMetadata3, verifyLearningTextAsset as verifyLearningTextAsset2 } from "@openpond/evals/learning";
|
|
800
386
|
function prepareImportedTasksetPackage(input) {
|
|
801
387
|
const value = validateTasksetPackage(input.package);
|
|
802
388
|
const release = value.taskset;
|
|
@@ -827,7 +413,7 @@ function prepareImportedTasksetPackage(input) {
|
|
|
827
413
|
const file = value.files.find((file2) => file2.asset.id === grader.verifierRef.id);
|
|
828
414
|
if (!file) throw new Error(`Imported verifier source is missing: ${grader.id}.`);
|
|
829
415
|
const name = learningVerifierModule(grader.verifierRef.contentHash);
|
|
830
|
-
if (!files.some((file2) => file2.path === name)) files.push({ path: name, role: "verifier", content: asset ?
|
|
416
|
+
if (!files.some((file2) => file2.path === name)) files.push({ path: name, role: "verifier", content: asset ? verifyLearningTextAsset2(asset, grader.verifierRef) : new TextDecoder("utf-8", { fatal: true }).decode(decodeTasksetPackageFile(file)) });
|
|
831
417
|
}
|
|
832
418
|
const authoring = release.metadata.ordinaryAuthoring ?? release.metadata.starterAuthoring;
|
|
833
419
|
const fixtures = GraderFixtureSchema.array().max(1e5).parse(authoring?.graderFixtures ?? []);
|
|
@@ -919,8 +505,8 @@ function prepareImportedTasksetPackage(input) {
|
|
|
919
505
|
...learning ? { learning } : {},
|
|
920
506
|
portableFileInventory: value.files.map((file) => ({ asset: file.asset, sourcePath: file.asset.path })),
|
|
921
507
|
...resources ? {
|
|
922
|
-
taskDefinition:
|
|
923
|
-
rewardBinding:
|
|
508
|
+
taskDefinition: learningRef4(resources.taskDefinition),
|
|
509
|
+
rewardBinding: learningRef4(resources.rewardBinding),
|
|
924
510
|
rewardExecution: { binding: resources.rewardBinding, rewards: resources.rewards }
|
|
925
511
|
} : {},
|
|
926
512
|
portableCapabilities: release.capabilities,
|
|
@@ -935,12 +521,12 @@ function tasksetPackageSourceId(profileId, packageHash) {
|
|
|
935
521
|
}
|
|
936
522
|
|
|
937
523
|
// src/taskset-authored-files.ts
|
|
938
|
-
import { z
|
|
524
|
+
import { z } from "zod";
|
|
939
525
|
|
|
940
526
|
// src/taskset-authored-tool-environment.ts
|
|
941
|
-
import { createEnvironmentRelease
|
|
527
|
+
import { createEnvironmentRelease } from "@openpond/evals";
|
|
942
528
|
import { JavaScriptEnvironmentDefinitionSchema } from "@openpond/evals/javascript-environment";
|
|
943
|
-
import { learningRef as
|
|
529
|
+
import { learningRef as learningRef5, sealLearningContent as sealLearningContent3 } from "@openpond/evals/learning";
|
|
944
530
|
function prepareAuthoredToolEnvironment(taskset, bytes, inventory, adapterId) {
|
|
945
531
|
if (taskset.environment.entrypoint !== "openpond.javascript-environment.v1") return { taskset, inventory, generatedFiles: [] };
|
|
946
532
|
const declarationPath = "environment/execution.json";
|
|
@@ -961,7 +547,7 @@ function prepareAuthoredToolEnvironment(taskset, bytes, inventory, adapterId) {
|
|
|
961
547
|
module: repin(previous.javascript.module)
|
|
962
548
|
}));
|
|
963
549
|
if (contentHash(javascript.tools) !== contentHash(taskset.environment.metadata.portableTools) || contentHash(javascript.tools.map((tool) => tool.name)) !== contentHash(taskset.environment.toolNames)) throw new Error("Authored environment tools differ from the Taskset's declared tools.");
|
|
964
|
-
const environment =
|
|
550
|
+
const environment = createEnvironmentRelease({
|
|
965
551
|
schemaVersion: "openpond.environmentRelease.v1",
|
|
966
552
|
id: `environment-${taskset.id}`,
|
|
967
553
|
revision: taskset.revision,
|
|
@@ -971,7 +557,7 @@ function prepareAuthoredToolEnvironment(taskset, bytes, inventory, adapterId) {
|
|
|
971
557
|
stateSchemaRef: repin(previous.environment.stateSchemaRef),
|
|
972
558
|
artifactCollection: previous.environment.artifactCollection,
|
|
973
559
|
adapterConformanceHashes: {},
|
|
974
|
-
metadata: { javascriptEnvironment:
|
|
560
|
+
metadata: { javascriptEnvironment: learningRef5(javascript), resources: taskset.environment.resources ?? [] }
|
|
975
561
|
});
|
|
976
562
|
const prepared = TasksetSchema.parse({ ...taskset, environment: {
|
|
977
563
|
...taskset.environment,
|
|
@@ -989,9 +575,9 @@ function prepareAuthoredToolEnvironment(taskset, bytes, inventory, adapterId) {
|
|
|
989
575
|
}
|
|
990
576
|
|
|
991
577
|
// src/taskset-authored-files.ts
|
|
992
|
-
var AuthoredTasksetFileInventorySchema =
|
|
578
|
+
var AuthoredTasksetFileInventorySchema = z.array(z.object({
|
|
993
579
|
asset: ImmutableAssetRefSchema,
|
|
994
|
-
sourcePath:
|
|
580
|
+
sourcePath: z.string().min(1)
|
|
995
581
|
}).strict()).max(1e4);
|
|
996
582
|
var GENERATED_MANIFESTS = /* @__PURE__ */ new Set(["taskset.json", "capabilities.json", "data/tasks.jsonl", "graders/graders.json", "fixtures/grader-fixtures.json", "environment/taskset.ts"]);
|
|
997
583
|
function isGeneratedTasksetPublicationFilePath(path) {
|
|
@@ -1064,7 +650,7 @@ function prepareAuthoredTasksetSource(tasksetInput, sourceFiles, adapterId) {
|
|
|
1064
650
|
const { importedPackageHash, derivedPortableMetadata: _derived, ...metadata } = taskset.metadata;
|
|
1065
651
|
const environmentMetadata = { ...taskset.environment.metadata };
|
|
1066
652
|
if (environmentMetadata.portableExecutionResources !== void 0) {
|
|
1067
|
-
const resources =
|
|
653
|
+
const resources = z.object({ environment: z.unknown(), verifierSet: z.unknown().optional() }).parse(environmentMetadata.portableExecutionResources);
|
|
1068
654
|
environmentMetadata.portableExecutionResources = { environment: resources.environment };
|
|
1069
655
|
}
|
|
1070
656
|
const prepared = TasksetSchema.parse({
|
|
@@ -1105,17 +691,17 @@ function compileModelTasksetDraftWorkspace(input) {
|
|
|
1105
691
|
}
|
|
1106
692
|
|
|
1107
693
|
// src/taskset-draft-source.ts
|
|
1108
|
-
import { z as
|
|
1109
|
-
import { learningRef as
|
|
1110
|
-
var TasksetDraftSourceInitializationSchema =
|
|
694
|
+
import { z as z2 } from "zod";
|
|
695
|
+
import { learningRef as learningRef6, sameLearningRef as sameLearningRef4 } from "@openpond/evals/learning";
|
|
696
|
+
var TasksetDraftSourceInitializationSchema = z2.object({
|
|
1111
697
|
draft: TasksetDraftSchema,
|
|
1112
|
-
filePaths:
|
|
698
|
+
filePaths: z2.array(z2.object({ assetId: z2.string().min(1), paths: z2.array(TasksetDraftFilePathSchema).min(1).max(1e4) }).strict()).max(1e4)
|
|
1113
699
|
}).strict();
|
|
1114
700
|
function prepareTasksetDraftSource(input) {
|
|
1115
701
|
const source = validateTasksetPackage(input.source);
|
|
1116
702
|
const original = TasksetDraftSchema.parse(input.sourceDraft);
|
|
1117
703
|
const preparation = ModelTasksetDraftPreparationSchema.parse(input.preparation);
|
|
1118
|
-
if (source.contentHash !== preparation.sourcePackageHash || !sameLearningRef4(
|
|
704
|
+
if (source.contentHash !== preparation.sourcePackageHash || !sameLearningRef4(learningRef6(source.taskset), preparation.sourceTasksetRef)) throw new Error("Taskset draft preparation differs from its source package.");
|
|
1119
705
|
if (source.modelResources || source.learningResources) throw new Error("This Taskset requires its bound or reviewed authoring workflow.");
|
|
1120
706
|
const inventory = AuthoredTasksetFileInventorySchema.parse(original.metadata.portableFileInventory ?? []);
|
|
1121
707
|
const sourcePath = (relative) => isManagedTasksetDraftFilePath(relative) ? `source-artifacts/${source.contentHash}/${contentHash(relative)}/${relative.split("/").at(-1)}` : relative;
|