@openpond/evals 0.10.9 → 0.10.10
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 +15 -0
- package/dist/graders.js +19 -4
- package/dist/learning/budgeted-reward-fixtures.js +34 -0
- package/dist/learning/contracts.js +3 -0
- package/dist/learning/grade-judge-budget.js +26 -0
- package/dist/learning/index.js +6 -0
- package/dist/learning/intake-history.js +2 -1
- package/dist/learning/intake-text.js +14 -0
- package/dist/learning/intake.js +5 -2
- package/dist/learning/judge-budget.js +59 -0
- package/dist/learning/model-judge.js +49 -0
- package/dist/learning/operations.js +3 -1
- package/dist/learning/reward-authoring.js +4 -0
- package/dist/learning/reward-calibration.js +66 -0
- package/dist/learning/reward-check-budget.js +27 -0
- package/dist/learning/reward-check-service.js +2 -2
- package/dist/learning/reward-check-worker.js +10 -2
- package/dist/learning/reward-checks.js +4 -1
- package/dist/learning/reward-fixture-executor.js +3 -2
- package/dist/learning/service.js +30 -5
- package/dist/rewards.js +15 -3
- package/dist/rollouts.js +2 -2
- package/dist/types/graders.d.ts +51 -0
- package/dist/types/graders.d.ts.map +1 -1
- package/dist/types/learning/admission.d.ts +5 -0
- package/dist/types/learning/admission.d.ts.map +1 -1
- package/dist/types/learning/budgeted-reward-fixtures.d.ts +27 -0
- package/dist/types/learning/budgeted-reward-fixtures.d.ts.map +1 -0
- package/dist/types/learning/contracts.d.ts +301 -0
- package/dist/types/learning/contracts.d.ts.map +1 -1
- package/dist/types/learning/grade-judge-budget.d.ts +10 -0
- package/dist/types/learning/grade-judge-budget.d.ts.map +1 -0
- package/dist/types/learning/index.d.ts +6 -0
- package/dist/types/learning/index.d.ts.map +1 -1
- package/dist/types/learning/intake-history.d.ts.map +1 -1
- package/dist/types/learning/intake-text.d.ts +6 -0
- package/dist/types/learning/intake-text.d.ts.map +1 -0
- package/dist/types/learning/intake.d.ts +1 -0
- package/dist/types/learning/intake.d.ts.map +1 -1
- package/dist/types/learning/iteration-dispatch-contracts.d.ts +1 -1
- package/dist/types/learning/iteration-reservation-contracts.d.ts +1 -1
- package/dist/types/learning/judge-budget.d.ts +43 -0
- package/dist/types/learning/judge-budget.d.ts.map +1 -0
- package/dist/types/learning/model-judge.d.ts +29 -0
- package/dist/types/learning/model-judge.d.ts.map +1 -0
- package/dist/types/learning/operations.d.ts +41 -0
- package/dist/types/learning/operations.d.ts.map +1 -1
- package/dist/types/learning/repository.d.ts +177 -4
- package/dist/types/learning/repository.d.ts.map +1 -1
- package/dist/types/learning/reward-authoring.d.ts.map +1 -1
- package/dist/types/learning/reward-calibration.d.ts +129 -0
- package/dist/types/learning/reward-calibration.d.ts.map +1 -0
- package/dist/types/learning/reward-check-budget.d.ts +12 -0
- package/dist/types/learning/reward-check-budget.d.ts.map +1 -0
- package/dist/types/learning/reward-check-service.d.ts +1 -1
- package/dist/types/learning/reward-check-service.d.ts.map +1 -1
- package/dist/types/learning/reward-check-worker.d.ts.map +1 -1
- package/dist/types/learning/reward-checks.d.ts +84 -0
- package/dist/types/learning/reward-checks.d.ts.map +1 -1
- package/dist/types/learning/reward-fixture-executor.d.ts +3 -0
- package/dist/types/learning/reward-fixture-executor.d.ts.map +1 -1
- package/dist/types/learning/schedule-contracts.d.ts +1 -1
- package/dist/types/learning/service.d.ts.map +1 -1
- package/dist/types/learning/transport.d.ts +198 -5
- package/dist/types/learning/transport.d.ts.map +1 -1
- package/dist/types/rewards.d.ts +107 -0
- package/dist/types/rewards.d.ts.map +1 -1
- package/dist/types/rollouts.d.ts.map +1 -1
- package/package.json +1 -1
- package/schemas/learning/v1/command-request.schema.json +225 -169
- package/schemas/learning/v1/decision.schema.json +192 -0
- package/schemas/learning/v1/grade.schema.json +335 -3
- package/schemas/learning/v1/reward.schema.json +22 -0
- package/schemas/learning/v1/reward_check.schema.json +335 -3
package/dist/learning/service.js
CHANGED
|
@@ -4,7 +4,8 @@ import { reserveLearningIteration } from "./iteration-reservation-service.js";
|
|
|
4
4
|
import { synchronizeLearningSchedule } from "./schedule-service.js";
|
|
5
5
|
import { inspectLearningPolicy } from "./policy-inspection.js";
|
|
6
6
|
import { requireCurrentLearningEvidence as currentEvidence, sealLearningBatch } from "./batch-service.js";
|
|
7
|
-
import { saveAuthoringDraft, archiveAuthoringDraft, finalizeAuthoringDraft } from "./authoring-service.js";
|
|
7
|
+
import { saveAuthoringDraft, archiveAuthoringDraft, finalizeAuthoringDraft, currentDraft } from "./authoring-service.js";
|
|
8
|
+
import { assertRewardCalibration, qualifyRewardCheck } from "./reward-calibration.js";
|
|
8
9
|
import { queueRewardCheck, cancelRewardCheck } from "./reward-check-service.js";
|
|
9
10
|
import { LearningDomainError } from "./errors.js";
|
|
10
11
|
import { contentHash } from "@openpond/harness";
|
|
@@ -36,6 +37,29 @@ export function createLearningService(repository, options = {}) {
|
|
|
36
37
|
}
|
|
37
38
|
let pointers;
|
|
38
39
|
switch (input.action) {
|
|
40
|
+
case "publish_checked_reward": {
|
|
41
|
+
const draft = await currentDraft(transaction, input.draft);
|
|
42
|
+
if (draft.targetKind !== "reward")
|
|
43
|
+
throw new LearningDomainError("reward_calibration_draft_kind_invalid", 422);
|
|
44
|
+
const base = draft.baseRelease ? await requireLearningRelease(transaction, "reward", draft.baseRelease) : null;
|
|
45
|
+
const check = await requireLearningResource(transaction, "reward_check", input.checkId, input.checkRevision);
|
|
46
|
+
const qualified = qualifyRewardCheck(draft, base, check);
|
|
47
|
+
const { contentHash: _rewardHash, ...content } = qualified.reward;
|
|
48
|
+
const publication = { action: "publish_resources", operationId: input.operationId,
|
|
49
|
+
finalizeDraft: { draft: input.draft, targetKind: "reward", release: learningRef(qualified.reward) },
|
|
50
|
+
resources: [
|
|
51
|
+
...qualified.assets.map(({ contentHash: _assetHash, ...content }) => ({ kind: "asset", expectedRevision: 0, content })),
|
|
52
|
+
{ kind: "reward", expectedRevision: base?.revision ?? 0, content },
|
|
53
|
+
],
|
|
54
|
+
};
|
|
55
|
+
pointers = [];
|
|
56
|
+
for (const resource of publication.resources)
|
|
57
|
+
pointers.push(await publish(transaction, { ...resource, action: "publish", operationId: input.operationId }));
|
|
58
|
+
const finalized = await finalizeAuthoringDraft(transaction, publication, pointers, now());
|
|
59
|
+
if (finalized)
|
|
60
|
+
pointers.push(finalized);
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
39
63
|
case "import_intake":
|
|
40
64
|
pointers = await importTaskIntake(transaction, input, now(), submit);
|
|
41
65
|
break;
|
|
@@ -50,7 +74,7 @@ export function createLearningService(repository, options = {}) {
|
|
|
50
74
|
pointers = await reserveLearningIteration(transaction, input, context.actor.id, now());
|
|
51
75
|
break;
|
|
52
76
|
case "queue_reward_check":
|
|
53
|
-
pointers = [await queueRewardCheck(transaction, input, operationId, now())];
|
|
77
|
+
pointers = [await queueRewardCheck(transaction, input, operationId, now(), context.actor.id)];
|
|
54
78
|
break;
|
|
55
79
|
case "cancel_reward_check":
|
|
56
80
|
pointers = [await cancelRewardCheck(transaction, input, now())];
|
|
@@ -83,7 +107,7 @@ export function createLearningService(repository, options = {}) {
|
|
|
83
107
|
pointers = [await resolveFeedback(transaction, input, context.actor.id)];
|
|
84
108
|
break;
|
|
85
109
|
case "queue_grade":
|
|
86
|
-
pointers = [await queueGrade(transaction, input, operationId)];
|
|
110
|
+
pointers = [await queueGrade(transaction, input, operationId, context.actor.id)];
|
|
87
111
|
break;
|
|
88
112
|
case "cancel_grade":
|
|
89
113
|
pointers = [await cancelGrade(transaction, input)];
|
|
@@ -118,6 +142,7 @@ export function createLearningService(repository, options = {}) {
|
|
|
118
142
|
}
|
|
119
143
|
case "reward": {
|
|
120
144
|
resource = createRewardRelease(input.content);
|
|
145
|
+
await assertRewardCalibration(transaction, resource);
|
|
121
146
|
const implementation = input.content.implementation;
|
|
122
147
|
const references = [
|
|
123
148
|
...input.content.assets,
|
|
@@ -282,7 +307,7 @@ export function createLearningService(repository, options = {}) {
|
|
|
282
307
|
await transaction.put("feedback", resolved, feedback.revision, { parentId: learningEvidenceId(feedback.submission.sourceId, feedback.submission.exampleId, feedback.submission.attemptId), status: resolved.status });
|
|
283
308
|
return pointer("feedback", resolved);
|
|
284
309
|
}
|
|
285
|
-
async function queueGrade(transaction, input, operationId) {
|
|
310
|
+
async function queueGrade(transaction, input, operationId, requestedBy) {
|
|
286
311
|
const evidence = await currentEvidence(transaction, input.evidence);
|
|
287
312
|
const definition = await requireLearningRelease(transaction, "definition", evidence.submission.taskDefinition);
|
|
288
313
|
if (!inspectTaskEvidence(evidence, definition).taskReady)
|
|
@@ -296,7 +321,7 @@ export function createLearningService(repository, options = {}) {
|
|
|
296
321
|
schemaVersion: "openpond.taskGradeRun.v1", id: `grade-${operationId}`, revision: 1,
|
|
297
322
|
evidence: learningRef(evidence), binding: definition.rewardBinding, target: input.target, output,
|
|
298
323
|
status: "queued", composition: null, leaseOwner: null, leaseExpiresAt: null, attemptCount: 0,
|
|
299
|
-
timeoutMs: input.timeoutMs, maximumSpendUsd: input.maximumSpendUsd, failure: null, createdAt: now(), updatedAt: now(),
|
|
324
|
+
timeoutMs: input.timeoutMs, maximumSpendUsd: input.maximumSpendUsd, requestedBy, failure: null, createdAt: now(), updatedAt: now(),
|
|
300
325
|
});
|
|
301
326
|
await transaction.put("grade", grade, 0, { parentId: evidence.id, status: grade.status });
|
|
302
327
|
return pointer("grade", grade);
|
package/dist/rewards.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { LearningDomainError } from "./learning/errors.js";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { ImmutableAssetRefSchema, ImmutableReleaseRefSchema, ReleaseHashSchema, ReleaseIdSchema, contentHash } from "@openpond/harness";
|
|
4
|
-
import { gradeEvidence } from "./graders.js";
|
|
4
|
+
import { gradeEvidence, GraderEvidenceSchema } from "./graders.js";
|
|
5
5
|
import { CustomVerifierGraderSpecSchema, DeterministicGraderSpecSchema, GraderSpecSchema, HumanGraderSpecSchema, ModelJudgeGraderSpecSchema } from "./tasksets.js";
|
|
6
6
|
import { assertBoundedTaskJson, validateTaskSchema } from "./task-schema.js";
|
|
7
7
|
const bindingFields = { id: true, version: true, weight: true, hardGate: true, rewardEligible: true, privileged: true };
|
|
@@ -22,6 +22,7 @@ export const RewardReleaseContentSchema = z.object({
|
|
|
22
22
|
rawScore: z.object({ minimum: z.number().finite(), maximum: z.number().finite() }).strict(),
|
|
23
23
|
assets: z.array(ImmutableAssetRefSchema).max(1_000),
|
|
24
24
|
fixtureSetRef: ImmutableAssetRefSchema.optional(),
|
|
25
|
+
calibrationCheckRef: ImmutableReleaseRefSchema.extend({ revision: z.number().int().positive() }).optional(),
|
|
25
26
|
}).strict().superRefine((reward, context) => {
|
|
26
27
|
if (reward.fixtureSetRef && (reward.fixtureSetRef.visibility !== "verifier" || !reward.assets.some(asset => contentHash(asset) === contentHash(reward.fixtureSetRef))))
|
|
27
28
|
context.addIssue({ code: "custom", path: ["fixtureSetRef"], message: "Reward fixtures must be included as a private verifier asset." });
|
|
@@ -86,6 +87,7 @@ export const BoundRewardResultSchema = z.object({
|
|
|
86
87
|
normalizedScore: z.number().min(0).max(1).nullable(),
|
|
87
88
|
passed: z.boolean().nullable(),
|
|
88
89
|
evidenceHashes: z.array(ReleaseHashSchema).max(1_000),
|
|
90
|
+
graderEvidence: GraderEvidenceSchema.optional(),
|
|
89
91
|
message: z.string().max(20_000).nullable(),
|
|
90
92
|
}).strict();
|
|
91
93
|
export const RewardCompositionContentSchema = z.object({
|
|
@@ -136,6 +138,8 @@ export function compileBoundGraders(binding, rewards) {
|
|
|
136
138
|
}
|
|
137
139
|
export async function executeRewardBinding(input) {
|
|
138
140
|
const resolved = resolveBoundRewards(input.binding, input.rewards);
|
|
141
|
+
if (input.purpose === "fixture_calibration" && resolved.some(({ source }) => source.role !== "evaluation"))
|
|
142
|
+
throw new LearningDomainError("reward_calibration_requires_evaluation_binding");
|
|
139
143
|
const results = [];
|
|
140
144
|
for (const { source, reward } of resolved) {
|
|
141
145
|
input.signal?.throwIfAborted();
|
|
@@ -154,10 +158,10 @@ export async function executeRewardBinding(input) {
|
|
|
154
158
|
}
|
|
155
159
|
}
|
|
156
160
|
else {
|
|
157
|
-
const [evidence] = await gradeEvidence({ task: input.task, evidence: input.evidence, graders: [compileSource(source, reward)], modelJudge: input.modelJudge, customVerifier: input.customVerifier });
|
|
161
|
+
const [evidence] = await gradeEvidence({ task: input.task, evidence: input.evidence, graders: [compileSource(source, reward)], modelJudge: input.modelJudge, customVerifier: input.customVerifier, purpose: input.purpose, signal: input.signal });
|
|
158
162
|
if (!evidence)
|
|
159
163
|
throw new LearningDomainError("reward_evidence_missing");
|
|
160
|
-
Object.assign(result, { status: evidence.score === null ? "unavailable" : "scored", rawScore: evidence.score, passed: evidence.score === null ? null : evidence.passed, evidenceHashes: [evidence.contentHash], message: evidence.feedback.join("\n") });
|
|
164
|
+
Object.assign(result, { status: evidence.score === null ? "unavailable" : "scored", rawScore: evidence.score, passed: evidence.score === null ? null : evidence.passed, evidenceHashes: [evidence.contentHash], graderEvidence: evidence, message: evidence.feedback.join("\n") });
|
|
161
165
|
}
|
|
162
166
|
if (result.status === "scored") {
|
|
163
167
|
if (result.rawScore === null || !Number.isFinite(result.rawScore) || result.rawScore < reward.rawScore.minimum || result.rawScore > reward.rawScore.maximum)
|
|
@@ -186,6 +190,14 @@ export function composeBoundRewards(input) {
|
|
|
186
190
|
const result = results.find((candidate) => candidate.graderId === source.graderId);
|
|
187
191
|
if (!result || contentHash(result.reward) !== contentHash(source.reward) || result.role !== source.role)
|
|
188
192
|
throw new LearningDomainError("reward_result_binding_mismatch");
|
|
193
|
+
if (result.graderEvidence) {
|
|
194
|
+
const { contentHash: evidenceHash, ...body } = result.graderEvidence;
|
|
195
|
+
if (contentHash(body) !== evidenceHash || !result.evidenceHashes.includes(evidenceHash)
|
|
196
|
+
|| body.graderId !== source.graderId || body.graderVersion !== String(source.reward.revision))
|
|
197
|
+
throw new LearningDomainError("reward_grader_evidence_mismatch");
|
|
198
|
+
if (result.status === "scored" && (body.score !== result.rawScore || body.passed !== result.passed))
|
|
199
|
+
throw new LearningDomainError("reward_grader_evidence_score_mismatch");
|
|
200
|
+
}
|
|
189
201
|
if ((result.status === "scored") !== (result.rawScore !== null && result.normalizedScore !== null && result.passed !== null))
|
|
190
202
|
throw new LearningDomainError("reward_result_score_state_invalid");
|
|
191
203
|
if (result.status !== "scored" && (result.rawScore !== null || result.normalizedScore !== null || result.passed !== null))
|
package/dist/rollouts.js
CHANGED
|
@@ -116,7 +116,7 @@ export const CanonicalRolloutRecordSchema = z.object({
|
|
|
116
116
|
...CanonicalRolloutRecordFieldsSchema.shape,
|
|
117
117
|
contentHash: ReleaseHashSchema,
|
|
118
118
|
}).strict().superRefine(validateCanonicalRolloutRecord);
|
|
119
|
-
export const RolloutQualificationSchema = z.object({
|
|
119
|
+
export const RolloutQualificationSchema = /* @__PURE__ */ (() => z.object({
|
|
120
120
|
schemaVersion: z.literal("openpond.rolloutQualification.v1"),
|
|
121
121
|
rolloutCount: z.number().int().nonnegative(),
|
|
122
122
|
scoredCount: z.number().int().nonnegative(),
|
|
@@ -128,7 +128,7 @@ export const RolloutQualificationSchema = z.object({
|
|
|
128
128
|
distinctRewardCount: z.number().int().nonnegative(),
|
|
129
129
|
eligibleForRl: z.boolean(),
|
|
130
130
|
reasons: z.array(z.string().trim().min(1).max(1_000)).max(100),
|
|
131
|
-
}).strict();
|
|
131
|
+
}).strict())();
|
|
132
132
|
export function createCanonicalRolloutRecord(input) {
|
|
133
133
|
const attemptReceipt = AttemptReceiptSchema.parse(input.attemptReceipt);
|
|
134
134
|
if (!verifyAttemptReceipt(attemptReceipt)) {
|
package/dist/types/graders.d.ts
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import type { GraderSpec, TaskRecord } from "./tasksets.js";
|
|
3
3
|
export { evaluateDeterministicGrader, portableDeterministicCheck } from "./deterministic-graders.js";
|
|
4
|
+
export declare const ModelJudgeReceiptSchema: z.ZodObject<{
|
|
5
|
+
schemaVersion: z.ZodLiteral<"openpond.modelJudgeReceipt.v1">;
|
|
6
|
+
providerId: z.ZodString;
|
|
7
|
+
modelId: z.ZodString;
|
|
8
|
+
modelRevision: z.ZodNullable<z.ZodString>;
|
|
9
|
+
responseId: z.ZodNullable<z.ZodString>;
|
|
10
|
+
requestHash: z.ZodString;
|
|
11
|
+
responseHash: z.ZodString;
|
|
12
|
+
inputTokens: z.ZodNullable<z.ZodNumber>;
|
|
13
|
+
outputTokens: z.ZodNullable<z.ZodNumber>;
|
|
14
|
+
costUsd: z.ZodNullable<z.ZodNumber>;
|
|
15
|
+
}, z.core.$strict>;
|
|
4
16
|
export declare const GraderEvidenceContentSchema: z.ZodObject<{
|
|
5
17
|
schemaVersion: z.ZodLiteral<"openpond.graderEvidence.v1">;
|
|
6
18
|
graderId: z.ZodString;
|
|
@@ -19,6 +31,18 @@ export declare const GraderEvidenceContentSchema: z.ZodObject<{
|
|
|
19
31
|
feedback: z.ZodArray<z.ZodString>;
|
|
20
32
|
visibleEvidenceRefs: z.ZodArray<z.ZodString>;
|
|
21
33
|
privilegedEvidenceRefs: z.ZodArray<z.ZodString>;
|
|
34
|
+
modelJudgeReceipt: z.ZodOptional<z.ZodObject<{
|
|
35
|
+
schemaVersion: z.ZodLiteral<"openpond.modelJudgeReceipt.v1">;
|
|
36
|
+
providerId: z.ZodString;
|
|
37
|
+
modelId: z.ZodString;
|
|
38
|
+
modelRevision: z.ZodNullable<z.ZodString>;
|
|
39
|
+
responseId: z.ZodNullable<z.ZodString>;
|
|
40
|
+
requestHash: z.ZodString;
|
|
41
|
+
responseHash: z.ZodString;
|
|
42
|
+
inputTokens: z.ZodNullable<z.ZodNumber>;
|
|
43
|
+
outputTokens: z.ZodNullable<z.ZodNumber>;
|
|
44
|
+
costUsd: z.ZodNullable<z.ZodNumber>;
|
|
45
|
+
}, z.core.$strict>>;
|
|
22
46
|
}, z.core.$strict>;
|
|
23
47
|
export declare const GraderEvidenceSchema: z.ZodObject<{
|
|
24
48
|
schemaVersion: z.ZodLiteral<"openpond.graderEvidence.v1">;
|
|
@@ -38,6 +62,18 @@ export declare const GraderEvidenceSchema: z.ZodObject<{
|
|
|
38
62
|
feedback: z.ZodArray<z.ZodString>;
|
|
39
63
|
visibleEvidenceRefs: z.ZodArray<z.ZodString>;
|
|
40
64
|
privilegedEvidenceRefs: z.ZodArray<z.ZodString>;
|
|
65
|
+
modelJudgeReceipt: z.ZodOptional<z.ZodObject<{
|
|
66
|
+
schemaVersion: z.ZodLiteral<"openpond.modelJudgeReceipt.v1">;
|
|
67
|
+
providerId: z.ZodString;
|
|
68
|
+
modelId: z.ZodString;
|
|
69
|
+
modelRevision: z.ZodNullable<z.ZodString>;
|
|
70
|
+
responseId: z.ZodNullable<z.ZodString>;
|
|
71
|
+
requestHash: z.ZodString;
|
|
72
|
+
responseHash: z.ZodString;
|
|
73
|
+
inputTokens: z.ZodNullable<z.ZodNumber>;
|
|
74
|
+
outputTokens: z.ZodNullable<z.ZodNumber>;
|
|
75
|
+
costUsd: z.ZodNullable<z.ZodNumber>;
|
|
76
|
+
}, z.core.$strict>>;
|
|
41
77
|
contentHash: z.ZodString;
|
|
42
78
|
}, z.core.$strict>;
|
|
43
79
|
export type AttemptEvidence = {
|
|
@@ -52,6 +88,7 @@ export type ModelJudgeRunner = (input: {
|
|
|
52
88
|
}>;
|
|
53
89
|
task: TaskRecord;
|
|
54
90
|
evidence: AttemptEvidence;
|
|
91
|
+
signal?: AbortSignal;
|
|
55
92
|
}) => Promise<Omit<GraderEvidence, "schemaVersion" | "graderId" | "graderVersion" | "contentHash">>;
|
|
56
93
|
export type CustomVerifierRunner = (input: {
|
|
57
94
|
grader: Extract<GraderSpec, {
|
|
@@ -66,6 +103,8 @@ export declare function gradeEvidence(input: {
|
|
|
66
103
|
graders: GraderSpec[];
|
|
67
104
|
modelJudge?: ModelJudgeRunner;
|
|
68
105
|
customVerifier?: CustomVerifierRunner;
|
|
106
|
+
purpose?: "grading" | "fixture_calibration";
|
|
107
|
+
signal?: AbortSignal;
|
|
69
108
|
}): Promise<GraderEvidence[]>;
|
|
70
109
|
export type GraderEvidence = z.infer<typeof GraderEvidenceSchema>;
|
|
71
110
|
declare const GradeSummarySchema: z.ZodObject<{
|
|
@@ -132,6 +171,18 @@ export declare const TaskGradeSchema: z.ZodObject<{
|
|
|
132
171
|
feedback: z.ZodArray<z.ZodString>;
|
|
133
172
|
visibleEvidenceRefs: z.ZodArray<z.ZodString>;
|
|
134
173
|
privilegedEvidenceRefs: z.ZodArray<z.ZodString>;
|
|
174
|
+
modelJudgeReceipt: z.ZodOptional<z.ZodObject<{
|
|
175
|
+
schemaVersion: z.ZodLiteral<"openpond.modelJudgeReceipt.v1">;
|
|
176
|
+
providerId: z.ZodString;
|
|
177
|
+
modelId: z.ZodString;
|
|
178
|
+
modelRevision: z.ZodNullable<z.ZodString>;
|
|
179
|
+
responseId: z.ZodNullable<z.ZodString>;
|
|
180
|
+
requestHash: z.ZodString;
|
|
181
|
+
responseHash: z.ZodString;
|
|
182
|
+
inputTokens: z.ZodNullable<z.ZodNumber>;
|
|
183
|
+
outputTokens: z.ZodNullable<z.ZodNumber>;
|
|
184
|
+
costUsd: z.ZodNullable<z.ZodNumber>;
|
|
185
|
+
}, z.core.$strict>>;
|
|
135
186
|
contentHash: z.ZodString;
|
|
136
187
|
}, z.core.$strict>>;
|
|
137
188
|
contentHash: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graders.d.ts","sourceRoot":"","sources":["../../../../src/graders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAA2B,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAErF,OAAO,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAErG,eAAO,MAAM,2BAA2B
|
|
1
|
+
{"version":3,"file":"graders.d.ts","sourceRoot":"","sources":["../../../../src/graders.ts"],"names":[],"mappings":"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"}
|
|
@@ -337,6 +337,11 @@ export declare const TaskBatchPackageMetadataSchema: z.ZodObject<{
|
|
|
337
337
|
host_private: "host_private";
|
|
338
338
|
}>;
|
|
339
339
|
}, z.core.$strict>>;
|
|
340
|
+
calibrationCheckRef: z.ZodOptional<z.ZodObject<{
|
|
341
|
+
id: z.ZodString;
|
|
342
|
+
contentHash: z.ZodString;
|
|
343
|
+
revision: z.ZodNumber;
|
|
344
|
+
}, z.core.$strict>>;
|
|
340
345
|
contentHash: z.ZodString;
|
|
341
346
|
}, z.core.$strict>>;
|
|
342
347
|
admissions: z.ZodArray<z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admission.d.ts","sourceRoot":"","sources":["../../../../../src/learning/admission.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"admission.d.ts","sourceRoot":"","sources":["../../../../../src/learning/admission.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { executeJavaScriptVerifier } from "../javascript-verifier.js";
|
|
2
|
+
import { type BoundJudgeRequest, type BoundJudgeResponse } from "./model-judge.js";
|
|
3
|
+
import { type LearningRepository } from "./repository.js";
|
|
4
|
+
import type { RewardCheckRun, RewardCheckRuntime } from "./reward-checks.js";
|
|
5
|
+
import type { RewardFixtureExecutor } from "./reward-check-worker.js";
|
|
6
|
+
export interface BoundJudgeProvider {
|
|
7
|
+
/** Resolve exact model configuration and a conservative charge ceiling without
|
|
8
|
+
* performing inference. dispatch settles after the provider request closes. */
|
|
9
|
+
prepare(request: BoundJudgeRequest, context?: {
|
|
10
|
+
scope: string;
|
|
11
|
+
run: Pick<RewardCheckRun, "id" | "requestedBy">;
|
|
12
|
+
}): Promise<{
|
|
13
|
+
maximumChargeUsd: number;
|
|
14
|
+
dispatch(signal?: AbortSignal): Promise<BoundJudgeResponse>;
|
|
15
|
+
}>;
|
|
16
|
+
cancel(input: {
|
|
17
|
+
scope: string;
|
|
18
|
+
run: Pick<RewardCheckRun, "id" | "judgeCalls">;
|
|
19
|
+
}): Promise<boolean>;
|
|
20
|
+
}
|
|
21
|
+
export declare function createBudgetedRewardFixtureExecutor(options: {
|
|
22
|
+
runtime: RewardCheckRuntime;
|
|
23
|
+
repository: LearningRepository;
|
|
24
|
+
provider: BoundJudgeProvider;
|
|
25
|
+
executeJavaScript: typeof executeJavaScriptVerifier;
|
|
26
|
+
}): RewardFixtureExecutor;
|
|
27
|
+
//# sourceMappingURL=budgeted-reward-fixtures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budgeted-reward-fixtures.d.ts","sourceRoot":"","sources":["../../../../../src/learning/budgeted-reward-fixtures.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAG3E,OAAO,EAA+B,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGhH,OAAO,EAA2B,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEtE,MAAM,WAAW,kBAAkB;IACjC;mFAC+E;IAC/E,OAAO,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,aAAa,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;KAAE,CAAC,CAAC;IACtN,MAAM,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,YAAY,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACpG;AAED,wBAAgB,mCAAmC,CAAC,OAAO,EAAE;IAC3D,OAAO,EAAE,kBAAkB,CAAC;IAAC,UAAU,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAC;IAC1F,iBAAiB,EAAE,OAAO,yBAAyB,CAAC;CACrD,GAAG,qBAAqB,CAwBxB"}
|