@crowandraven/evalkeeper 0.1.1 → 0.3.0
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/README.md +2 -2
- package/dist/attention.js +2 -1
- package/dist/attention.js.map +1 -1
- package/dist/board.d.ts +2 -0
- package/dist/glossary.d.ts +1 -1
- package/dist/glossary.js +1 -1
- package/dist/glossary.js.map +1 -1
- package/dist/health.js +1 -1
- package/dist/health.js.map +1 -1
- package/dist/importCases.d.ts +94 -0
- package/dist/importCases.js +185 -0
- package/dist/importCases.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/labels.d.ts +9 -3
- package/dist/labels.js +2 -0
- package/dist/labels.js.map +1 -1
- package/dist/memoryStore.js +3 -2
- package/dist/memoryStore.js.map +1 -1
- package/dist/models.d.ts +44 -7
- package/dist/models.js +48 -7
- package/dist/models.js.map +1 -1
- package/dist/runner.d.ts +25 -1
- package/dist/runner.js +64 -7
- package/dist/runner.js.map +1 -1
- package/dist/settings.d.ts +42 -3
- package/dist/settings.js +101 -11
- package/dist/settings.js.map +1 -1
- package/dist/store.d.ts +18 -2
- package/dist/suggest.js +4 -2
- package/dist/suggest.js.map +1 -1
- package/dist/testing.js +48 -0
- package/dist/testing.js.map +1 -1
- package/dist/types.d.ts +11 -0
- package/dist/types.js.map +1 -1
- package/dist/weekly.js +5 -2
- package/dist/weekly.js.map +1 -1
- package/package.json +2 -2
- package/src/attention.ts +2 -1
- package/src/board.ts +2 -0
- package/src/glossary.ts +1 -1
- package/src/health.ts +3 -1
- package/src/importCases.ts +252 -0
- package/src/index.ts +1 -0
- package/src/labels.ts +9 -4
- package/src/memoryStore.ts +6 -2
- package/src/models.ts +83 -10
- package/src/runner.ts +102 -15
- package/src/settings.ts +125 -14
- package/src/store.ts +19 -2
- package/src/suggest.ts +3 -1
- package/src/testing.ts +56 -0
- package/src/types.ts +11 -0
- package/src/weekly.ts +5 -2
- package/templates/app/evals/[suite]/page.tsx +1 -2
- package/templates/app/evals/feedback/page.tsx +11 -6
- package/templates/app/evals/page.tsx +40 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# evalkeeper
|
|
1
|
+
# @crowandraven/evalkeeper
|
|
2
2
|
|
|
3
|
-
The core of [Evalkeeper](
|
|
3
|
+
The core of [Evalkeeper](https://github.com/seanhudson/evalkeeper), an eval harness for the AI features in TypeScript apps: suite and check types, stats,
|
|
4
4
|
paired comparisons, model suggestions, suite health, grader helpers, and
|
|
5
5
|
the runner. Pure TypeScript; the runner (`@crowandraven/evalkeeper/runner`) is
|
|
6
6
|
server-only, and `@crowandraven/evalkeeper/memory` is an in-memory store for tests and
|
package/dist/attention.js
CHANGED
|
@@ -7,7 +7,8 @@ export function attention(boards) {
|
|
|
7
7
|
let slowest = null;
|
|
8
8
|
let costliest = null;
|
|
9
9
|
for (const b of boards) {
|
|
10
|
-
|
|
10
|
+
// The best model's score: a baseline is code, not a model to switch to.
|
|
11
|
+
const tested = b.rows.filter((r) => !r.baseline && current(r));
|
|
11
12
|
if (tested.length) {
|
|
12
13
|
const rateOf = (r) => {
|
|
13
14
|
const t = current(r);
|
package/dist/attention.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attention.js","sourceRoot":"","sources":["../src/attention.ts"],"names":[],"mappings":"AAkCA,MAAM,OAAO,GAAG,CAAC,CAAW,EAAE,EAAE,CAC9B,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAEnE;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,IAAI,OAAO,GAAyB,IAAI,CAAC;IACzC,IAAI,OAAO,GAAyB,IAAI,CAAC;IACzC,IAAI,SAAS,GAA2B,IAAI,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"attention.js","sourceRoot":"","sources":["../src/attention.ts"],"names":[],"mappings":"AAkCA,MAAM,OAAO,GAAG,CAAC,CAAW,EAAE,EAAE,CAC9B,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAEnE;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,IAAI,OAAO,GAAyB,IAAI,CAAC;IACzC,IAAI,OAAO,GAAyB,IAAI,CAAC;IACzC,IAAI,SAAS,GAA2B,IAAI,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,wEAAwE;QACxE,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,CAAC,CAAW,EAAE,EAAE;gBAC7B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACrB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,CAAC,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,OAAO,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI;gBACjC,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5E,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC;YACxD,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3E,IACE,IAAI;YACJ,CAAC,EAAE,aAAa;YAChB,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC;YAE/C,SAAS,GAAG;gBACV,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,GAAG,EAAE,CAAC,CAAC,aAAa;aACrB,CAAC;IACN,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CACxB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACnD,IAAI,CACL,CAAC;IACF,OAAO;QACL,OAAO;QACP,OAAO;QACP,SAAS;QACT,MAAM,EAAE;YACN,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjD,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI;YACtB,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI;YAC1B,IAAI,EAAE,IAAI,EAAE,QAAQ,IAAI,CAAC;SAC1B;KACF,CAAC;AACJ,CAAC"}
|
package/dist/board.d.ts
CHANGED
|
@@ -17,6 +17,8 @@ export type BoardRow = {
|
|
|
17
17
|
label: string;
|
|
18
18
|
live: boolean;
|
|
19
19
|
fallback: boolean;
|
|
20
|
+
/** Code, not a model (`ModelInfo.baseline`): compared, never made live or the fallback. */
|
|
21
|
+
baseline: boolean;
|
|
20
22
|
testing: boolean;
|
|
21
23
|
/** The newest test failed: why, in a line. Older results still show. */
|
|
22
24
|
failed: string | null;
|
package/dist/glossary.d.ts
CHANGED
|
@@ -33,7 +33,7 @@ export declare const GLOSSARY: {
|
|
|
33
33
|
readonly makeCase: "Turns this rating into a draft case on its real input. A thumbs down needs a person to write the right answer; a thumbs up proposes the model's answer for a person to confirm.";
|
|
34
34
|
readonly needsAnswer: "A draft case with no answer yet. Write what a good answer is; until then, tests leave it out.";
|
|
35
35
|
readonly weeklyCheck: "Each suite's quick set, answered again on its live model every week. A drop of 15 points or more against last week's check of the same model, instructions, and grading is drift.";
|
|
36
|
-
readonly versions: "Each numbered version of this feature's settings (model, fallback, reasoning), with who changed it, when, why, and
|
|
36
|
+
readonly versions: "Each numbered version of this feature's settings (model, fallback, reasoning, output limit, temperature), with who changed it, when, why, and its evidence. Any version can be made live again.";
|
|
37
37
|
readonly suites: "One suite per AI feature: its cases, the answers people confirmed, and the checks that grade any model against them. Open one to compare models and choose the live one.";
|
|
38
38
|
readonly answerKey: "The cases and the answers tests grade against. Only confirmed answers count: a model can draft answers, but they stay pending until a person confirms them. Open a case to see how each model did on it.";
|
|
39
39
|
readonly checks: "What a good answer gets right, one thing per check. Serious checks catch mistakes that change what your product does; minor ones, fair differences of judgment. Each has a bar its pass rate should reach.";
|
package/dist/glossary.js
CHANGED
|
@@ -33,7 +33,7 @@ export const GLOSSARY = {
|
|
|
33
33
|
makeCase: "Turns this rating into a draft case on its real input. A thumbs down needs a person to write the right answer; a thumbs up proposes the model's answer for a person to confirm.",
|
|
34
34
|
needsAnswer: "A draft case with no answer yet. Write what a good answer is; until then, tests leave it out.",
|
|
35
35
|
weeklyCheck: "Each suite's quick set, answered again on its live model every week. A drop of 15 points or more against last week's check of the same model, instructions, and grading is drift.",
|
|
36
|
-
versions: "Each numbered version of this feature's settings (model, fallback, reasoning), with who changed it, when, why, and
|
|
36
|
+
versions: "Each numbered version of this feature's settings (model, fallback, reasoning, output limit, temperature), with who changed it, when, why, and its evidence. Any version can be made live again.",
|
|
37
37
|
suites: "One suite per AI feature: its cases, the answers people confirmed, and the checks that grade any model against them. Open one to compare models and choose the live one.",
|
|
38
38
|
answerKey: "The cases and the answers tests grade against. Only confirmed answers count: a model can draft answers, but they stay pending until a person confirms them. Open a case to see how each model did on it.",
|
|
39
39
|
checks: "What a good answer gets right, one thing per check. Serious checks catch mistakes that change what your product does; minor ones, fair differences of judgment. Each has a bar its pass rate should reach.",
|
package/dist/glossary.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glossary.js","sourceRoot":"","sources":["../src/glossary.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,KAAK,EACH,mJAAmJ;IACrJ,eAAe,EACb,yGAAyG;IAC3G,IAAI,EAAE,6GAA6G;IACnH,IAAI,EAAE,oEAAoE;IAC1E,WAAW,EACT,uIAAuI;IACzI,IAAI,EAAE,qCAAqC;IAC3C,QAAQ,EACN,gGAAgG;IAClG,QAAQ,EACN,+HAA+H;IACjI,SAAS,EACP,uHAAuH;IACzH,OAAO,EACL,6HAA6H;IAC/H,KAAK,EACH,4GAA4G;IAC9G,GAAG,EAAE,wCAAwC;IAC7C,SAAS,EAAE,6DAA6D;IACxE,WAAW,EACT,0GAA0G;IAC5G,OAAO,EACL,yFAAyF;IAC3F,GAAG,EAAE,2EAA2E;IAChF,IAAI,EAAE,6GAA6G;IACnH,UAAU,EACR,wIAAwI;IAC1I,QAAQ,EACN,+IAA+I;IACjJ,OAAO,EACL,wFAAwF;IAC1F,IAAI,EAAE,wEAAwE;IAC9E,OAAO,EACL,+GAA+G;IACjH,OAAO,EACL,qEAAqE;IACvE,SAAS,EAAE,iEAAiE;IAC5E,MAAM,EACJ,6FAA6F;IAC/F,SAAS,EACP,qJAAqJ;IACvJ,QAAQ,EACN,iLAAiL;IACnL,WAAW,EACT,+FAA+F;IACjG,WAAW,EACT,mLAAmL;IACrL,QAAQ,EACN,
|
|
1
|
+
{"version":3,"file":"glossary.js","sourceRoot":"","sources":["../src/glossary.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,KAAK,EACH,mJAAmJ;IACrJ,eAAe,EACb,yGAAyG;IAC3G,IAAI,EAAE,6GAA6G;IACnH,IAAI,EAAE,oEAAoE;IAC1E,WAAW,EACT,uIAAuI;IACzI,IAAI,EAAE,qCAAqC;IAC3C,QAAQ,EACN,gGAAgG;IAClG,QAAQ,EACN,+HAA+H;IACjI,SAAS,EACP,uHAAuH;IACzH,OAAO,EACL,6HAA6H;IAC/H,KAAK,EACH,4GAA4G;IAC9G,GAAG,EAAE,wCAAwC;IAC7C,SAAS,EAAE,6DAA6D;IACxE,WAAW,EACT,0GAA0G;IAC5G,OAAO,EACL,yFAAyF;IAC3F,GAAG,EAAE,2EAA2E;IAChF,IAAI,EAAE,6GAA6G;IACnH,UAAU,EACR,wIAAwI;IAC1I,QAAQ,EACN,+IAA+I;IACjJ,OAAO,EACL,wFAAwF;IAC1F,IAAI,EAAE,wEAAwE;IAC9E,OAAO,EACL,+GAA+G;IACjH,OAAO,EACL,qEAAqE;IACvE,SAAS,EAAE,iEAAiE;IAC5E,MAAM,EACJ,6FAA6F;IAC/F,SAAS,EACP,qJAAqJ;IACvJ,QAAQ,EACN,iLAAiL;IACnL,WAAW,EACT,+FAA+F;IACjG,WAAW,EACT,mLAAmL;IACrL,QAAQ,EACN,iMAAiM;IACnM,MAAM,EACJ,0KAA0K;IAC5K,SAAS,EACP,0MAA0M;IAC5M,MAAM,EACJ,4MAA4M;IAC9M,kBAAkB,EAChB,wKAAwK;IAC1K,gBAAgB,EACd,wKAAwK;IAC1K,mBAAmB,EACjB,+FAA+F;IACjG,qBAAqB,EACnB,qIAAqI;CAC/H,CAAC"}
|
package/dist/health.js
CHANGED
|
@@ -19,7 +19,7 @@ provisional = 0,
|
|
|
19
19
|
/** Your model catalog, for retirements and the fallback's provider. */
|
|
20
20
|
models = {}) {
|
|
21
21
|
const liveRow = rows.find((r) => r.live) ?? null;
|
|
22
|
-
const testedModels = rows.filter((r) => r.test && !r.test.stale).length;
|
|
22
|
+
const testedModels = rows.filter((r) => !r.baseline && r.test && !r.test.stale).length;
|
|
23
23
|
const t = liveRow?.test;
|
|
24
24
|
const live = liveRow && t ? { label: liveRow.label, rate: t.right / t.total } : null;
|
|
25
25
|
const base = { live, testedModels };
|
package/dist/health.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../src/health.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAqC,MAAM,YAAY,CAAC;AAwBzE,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AAErD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CACzB,IAAgB,EAChB,MAAkB,EAClB,QAAuB,EACvB,KAAa;AACb,0CAA0C;AAC1C,WAAW,GAAG,CAAC;AACf,uEAAuE;AACvE,SAAuB,EAAE;IAEzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACjD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../src/health.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { EvalStore } from "./store.js";
|
|
2
|
+
import type { AnySuite } from "./types.js";
|
|
3
|
+
/** One row of an import, mapped to the suite's shapes. */
|
|
4
|
+
export type ImportedCase = {
|
|
5
|
+
/** Stable within its source (a row id in the file), so a rerun skips it. */
|
|
6
|
+
id: string;
|
|
7
|
+
/** The suite's input; checked against `suite.input`. */
|
|
8
|
+
input: unknown;
|
|
9
|
+
/** The answer, checked against `suite.labelValue`; null: none yet. */
|
|
10
|
+
label: unknown;
|
|
11
|
+
tags?: string[];
|
|
12
|
+
note?: string | null;
|
|
13
|
+
/** This row's set, instead of the import's `split`. */
|
|
14
|
+
split?: "DEV" | "TEST";
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* How imported answers arrive. Pending (the default): a person confirms
|
|
18
|
+
* each one on the pages before tests use it. Provisional: tests use them
|
|
19
|
+
* now, every score says it rests on unreviewed answers, and the rows carry
|
|
20
|
+
* `tag` so the review queue is findable. Use provisional only when the
|
|
21
|
+
* owner said so; `allowedBy` and `at` record who and when. Nothing is
|
|
22
|
+
* imported confirmed: only a person confirms an answer.
|
|
23
|
+
*/
|
|
24
|
+
export type ImportAnswers = {
|
|
25
|
+
status: "PENDING";
|
|
26
|
+
} | {
|
|
27
|
+
status: "PROVISIONAL";
|
|
28
|
+
/** Who drafted the answers: an agent's name, recorded as the rater. */
|
|
29
|
+
rater: string;
|
|
30
|
+
/** The person who allowed using them before review. */
|
|
31
|
+
allowedBy: string;
|
|
32
|
+
/** When they allowed it; default now. */
|
|
33
|
+
at?: Date;
|
|
34
|
+
/** Added to each row's tags; default "needs-review". */
|
|
35
|
+
tag?: string;
|
|
36
|
+
};
|
|
37
|
+
/** A row that couldn't be imported, and why. */
|
|
38
|
+
export type ImportProblem = {
|
|
39
|
+
id: string;
|
|
40
|
+
problem: string;
|
|
41
|
+
};
|
|
42
|
+
/** Rows that don't fit the suite. Nothing was written. */
|
|
43
|
+
export declare class CaseImportError extends Error {
|
|
44
|
+
readonly problems: ImportProblem[];
|
|
45
|
+
constructor(source: string, problems: ImportProblem[]);
|
|
46
|
+
}
|
|
47
|
+
/** What an import did. */
|
|
48
|
+
export type ImportResult = {
|
|
49
|
+
/** Cases created. */
|
|
50
|
+
added: number;
|
|
51
|
+
/** Rows imported before (by source and id), left alone. */
|
|
52
|
+
skipped: number;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Imports existing test data as cases for one suite. Every row is mapped
|
|
56
|
+
* and checked against the suite's input and answer schemas first; if any
|
|
57
|
+
* row fails, nothing is written and `CaseImportError` lists them. Rows
|
|
58
|
+
* imported before (same source and id, retired ones included) are skipped,
|
|
59
|
+
* so it can run again after the file grows.
|
|
60
|
+
*
|
|
61
|
+
* Splits: "DEV" for cases you tune against, "TEST" for a held-out file,
|
|
62
|
+
* "auto" (the default) for new cases, split like cases added by hand.
|
|
63
|
+
*
|
|
64
|
+
* Run it against your development database; an app's own guard should
|
|
65
|
+
* refuse a production one.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* const { added, skipped } = await importCases({
|
|
70
|
+
* store,
|
|
71
|
+
* suite: ticketTriage,
|
|
72
|
+
* source: "tickets-heldout.json",
|
|
73
|
+
* rows: JSON.parse(await readFile("tickets-heldout.json", "utf8")),
|
|
74
|
+
* map: (r) => ({ id: r.id, input: { body: r.text }, label: { queue: r.queue } }),
|
|
75
|
+
* split: "TEST",
|
|
76
|
+
* });
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export declare function importCases<Row>(opts: {
|
|
80
|
+
store: EvalStore;
|
|
81
|
+
suite: AnySuite;
|
|
82
|
+
/** Where the rows came from, such as a file name. */
|
|
83
|
+
source: string;
|
|
84
|
+
rows: readonly Row[];
|
|
85
|
+
map: (row: Row, index: number) => ImportedCase;
|
|
86
|
+
split?: "DEV" | "TEST" | "auto";
|
|
87
|
+
answers?: ImportAnswers;
|
|
88
|
+
}): Promise<ImportResult>;
|
|
89
|
+
/**
|
|
90
|
+
* Adds a suite's `starter` cases as drafts with pending answers, for a
|
|
91
|
+
* person to confirm on the pages. Safe to run again: starters already
|
|
92
|
+
* added (by their input) are skipped.
|
|
93
|
+
*/
|
|
94
|
+
export declare function importStarters(store: EvalStore, suite: AnySuite): Promise<ImportResult>;
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { nextSplit } from "./quickSet.js";
|
|
2
|
+
import { stableJson } from "./stableJson.js";
|
|
3
|
+
/** Rows that don't fit the suite. Nothing was written. */
|
|
4
|
+
export class CaseImportError extends Error {
|
|
5
|
+
problems;
|
|
6
|
+
constructor(source, problems) {
|
|
7
|
+
super(`${problems.length} row${problems.length === 1 ? "" : "s"} in ${source} can't be imported, so none were: ${problems
|
|
8
|
+
.slice(0, 5)
|
|
9
|
+
.map((p) => `${p.id} (${p.problem})`)
|
|
10
|
+
.join("; ")}${problems.length > 5 ? "; …" : ""}`);
|
|
11
|
+
this.name = "CaseImportError";
|
|
12
|
+
this.problems = problems;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
const sourceRefOf = (source, id) => `${source}#${id}`;
|
|
16
|
+
/**
|
|
17
|
+
* Imports existing test data as cases for one suite. Every row is mapped
|
|
18
|
+
* and checked against the suite's input and answer schemas first; if any
|
|
19
|
+
* row fails, nothing is written and `CaseImportError` lists them. Rows
|
|
20
|
+
* imported before (same source and id, retired ones included) are skipped,
|
|
21
|
+
* so it can run again after the file grows.
|
|
22
|
+
*
|
|
23
|
+
* Splits: "DEV" for cases you tune against, "TEST" for a held-out file,
|
|
24
|
+
* "auto" (the default) for new cases, split like cases added by hand.
|
|
25
|
+
*
|
|
26
|
+
* Run it against your development database; an app's own guard should
|
|
27
|
+
* refuse a production one.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* const { added, skipped } = await importCases({
|
|
32
|
+
* store,
|
|
33
|
+
* suite: ticketTriage,
|
|
34
|
+
* source: "tickets-heldout.json",
|
|
35
|
+
* rows: JSON.parse(await readFile("tickets-heldout.json", "utf8")),
|
|
36
|
+
* map: (r) => ({ id: r.id, input: { body: r.text }, label: { queue: r.queue } }),
|
|
37
|
+
* split: "TEST",
|
|
38
|
+
* });
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export async function importCases(opts) {
|
|
42
|
+
const { store, suite, source } = opts;
|
|
43
|
+
const answers = opts.answers ?? { status: "PENDING" };
|
|
44
|
+
// 1. Map and check every row before writing anything.
|
|
45
|
+
const problems = [];
|
|
46
|
+
const seen = new Set();
|
|
47
|
+
const mapped = [];
|
|
48
|
+
opts.rows.forEach((row, i) => {
|
|
49
|
+
let c;
|
|
50
|
+
try {
|
|
51
|
+
c = opts.map(row, i);
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
problems.push({
|
|
55
|
+
id: `row ${i + 1}`,
|
|
56
|
+
problem: e instanceof Error ? e.message : String(e),
|
|
57
|
+
});
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const id = c.id || `row ${i + 1}`;
|
|
61
|
+
if (!c.id)
|
|
62
|
+
problems.push({ id, problem: "no id" });
|
|
63
|
+
else if (seen.has(c.id))
|
|
64
|
+
problems.push({ id, problem: "the same id as an earlier row" });
|
|
65
|
+
seen.add(c.id);
|
|
66
|
+
const input = suite.input.safeParse(c.input);
|
|
67
|
+
if (!input.success)
|
|
68
|
+
problems.push({
|
|
69
|
+
id,
|
|
70
|
+
problem: `input: ${input.error.issues[0]?.message ?? "invalid"}`,
|
|
71
|
+
});
|
|
72
|
+
let label = null;
|
|
73
|
+
if (c.label !== null && c.label !== undefined) {
|
|
74
|
+
const l = suite.labelValue.safeParse(c.label);
|
|
75
|
+
if (!l.success)
|
|
76
|
+
problems.push({
|
|
77
|
+
id,
|
|
78
|
+
problem: `answer: ${l.error.issues[0]?.message ?? "invalid"}`,
|
|
79
|
+
});
|
|
80
|
+
else
|
|
81
|
+
label = l.data;
|
|
82
|
+
}
|
|
83
|
+
if (input.success)
|
|
84
|
+
mapped.push({ ...c, input: input.data, label });
|
|
85
|
+
});
|
|
86
|
+
if (problems.length)
|
|
87
|
+
throw new CaseImportError(source, problems);
|
|
88
|
+
// 2. Skip what's already there, retired cases included.
|
|
89
|
+
const existing = await store.listCases(suite.key, { includeRetired: true });
|
|
90
|
+
const refs = new Set(existing.map((c) => c.sourceRef));
|
|
91
|
+
const counts = { DEV: 0, TEST: 0 };
|
|
92
|
+
for (const c of existing)
|
|
93
|
+
if (c.status !== "RETIRED")
|
|
94
|
+
counts[c.split] += 1;
|
|
95
|
+
const at = answers.status === "PROVISIONAL" ? (answers.at ?? new Date()) : null;
|
|
96
|
+
let added = 0;
|
|
97
|
+
let skipped = 0;
|
|
98
|
+
for (const c of mapped) {
|
|
99
|
+
const sourceRef = sourceRefOf(source, c.id);
|
|
100
|
+
if (refs.has(sourceRef)) {
|
|
101
|
+
skipped += 1;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const split = c.split ??
|
|
105
|
+
(opts.split === "DEV" || opts.split === "TEST"
|
|
106
|
+
? opts.split
|
|
107
|
+
: nextSplit(counts));
|
|
108
|
+
counts[split] += 1;
|
|
109
|
+
const labels = [];
|
|
110
|
+
if (c.label !== null)
|
|
111
|
+
labels.push(answers.status === "PROVISIONAL"
|
|
112
|
+
? {
|
|
113
|
+
kind: "EXPECTED",
|
|
114
|
+
status: "PROVISIONAL",
|
|
115
|
+
value: c.label,
|
|
116
|
+
raterRole: "AGENT",
|
|
117
|
+
raterId: answers.rater,
|
|
118
|
+
note: `Drafted by ${answers.rater}; ${answers.allowedBy} allowed testing on it before review (${at?.toISOString().slice(0, 10)}).`,
|
|
119
|
+
}
|
|
120
|
+
: {
|
|
121
|
+
kind: "EXPECTED",
|
|
122
|
+
status: "PENDING",
|
|
123
|
+
value: c.label,
|
|
124
|
+
raterRole: "IMPORT",
|
|
125
|
+
raterId: null,
|
|
126
|
+
note: null,
|
|
127
|
+
});
|
|
128
|
+
const tags = [...(c.tags ?? [])];
|
|
129
|
+
if (answers.status === "PROVISIONAL" && c.label !== null) {
|
|
130
|
+
const tag = answers.tag ?? "needs-review";
|
|
131
|
+
if (!tags.includes(tag))
|
|
132
|
+
tags.push(tag);
|
|
133
|
+
}
|
|
134
|
+
const data = {
|
|
135
|
+
suite: suite.key,
|
|
136
|
+
input: c.input,
|
|
137
|
+
tags,
|
|
138
|
+
split,
|
|
139
|
+
// In use only with an answer tests may grade against.
|
|
140
|
+
status: c.label !== null && answers.status === "PROVISIONAL"
|
|
141
|
+
? "ACTIVE"
|
|
142
|
+
: "DRAFT",
|
|
143
|
+
source: "IMPORT",
|
|
144
|
+
sourceRef,
|
|
145
|
+
note: c.note ?? null,
|
|
146
|
+
labels,
|
|
147
|
+
};
|
|
148
|
+
await store.createCase(data);
|
|
149
|
+
refs.add(sourceRef);
|
|
150
|
+
added += 1;
|
|
151
|
+
}
|
|
152
|
+
return { added, skipped };
|
|
153
|
+
}
|
|
154
|
+
/** A short, stable id for a starter case: a hash of its input. */
|
|
155
|
+
function starterId(input) {
|
|
156
|
+
// FNV-1a: the core stays free of node:crypto; this only names rows.
|
|
157
|
+
let h = 0x811c9dc5;
|
|
158
|
+
for (const ch of stableJson(input)) {
|
|
159
|
+
h ^= ch.charCodeAt(0);
|
|
160
|
+
h = Math.imul(h, 0x01000193) >>> 0;
|
|
161
|
+
}
|
|
162
|
+
return h.toString(16).padStart(8, "0");
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Adds a suite's `starter` cases as drafts with pending answers, for a
|
|
166
|
+
* person to confirm on the pages. Safe to run again: starters already
|
|
167
|
+
* added (by their input) are skipped.
|
|
168
|
+
*/
|
|
169
|
+
export function importStarters(store, suite) {
|
|
170
|
+
return importCases({
|
|
171
|
+
store,
|
|
172
|
+
suite,
|
|
173
|
+
source: `starter:${suite.key}`,
|
|
174
|
+
rows: suite.starter ?? [],
|
|
175
|
+
map: (s) => ({
|
|
176
|
+
id: starterId(s.input),
|
|
177
|
+
input: s.input,
|
|
178
|
+
label: s.label,
|
|
179
|
+
tags: s.tags,
|
|
180
|
+
note: s.note,
|
|
181
|
+
split: s.split,
|
|
182
|
+
}),
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=importCases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importCases.js","sourceRoot":"","sources":["../src/importCases.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -31,4 +31,5 @@ export * from "./store.js";
|
|
|
31
31
|
export * from "./labels.js";
|
|
32
32
|
// Server-only (node:crypto): import from "@crowandraven/evalkeeper/runner".
|
|
33
33
|
// In-memory store for tests and demos: "@crowandraven/evalkeeper/memory".
|
|
34
|
+
export * from "./importCases.js";
|
|
34
35
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,4EAA4E;AAC5E,0EAA0E"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,4EAA4E;AAC5E,0EAA0E;AAC1E,cAAc,kBAAkB,CAAC"}
|
package/dist/labels.d.ts
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
/** What the answer-in-use rule needs from a label: the store's, or an app's own row. */
|
|
2
|
+
export type LabelLike = {
|
|
3
|
+
status: string;
|
|
4
|
+
updatedAt: Date;
|
|
5
|
+
};
|
|
2
6
|
/**
|
|
3
7
|
* The EXPECTED answer tests use: the newest confirmed one, or failing that a
|
|
4
8
|
* provisional one (put to use before review). Pending answers never count.
|
|
9
|
+
* Generic, so pages that read their own label rows (with extra columns)
|
|
10
|
+
* share the rule and keep their row type.
|
|
5
11
|
*/
|
|
6
|
-
export declare function confirmedLabel(labels:
|
|
12
|
+
export declare function confirmedLabel<L extends LabelLike>(labels: readonly L[]): L | null;
|
|
7
13
|
/** In use on an answer nobody has reviewed yet. */
|
|
8
|
-
export declare function isProvisional(labels:
|
|
14
|
+
export declare function isProvisional(labels: readonly LabelLike[]): boolean;
|
package/dist/labels.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The EXPECTED answer tests use: the newest confirmed one, or failing that a
|
|
3
3
|
* provisional one (put to use before review). Pending answers never count.
|
|
4
|
+
* Generic, so pages that read their own label rows (with extra columns)
|
|
5
|
+
* share the rule and keep their row type.
|
|
4
6
|
*/
|
|
5
7
|
export function confirmedLabel(labels) {
|
|
6
8
|
const newest = (status) => labels
|
package/dist/labels.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labels.js","sourceRoot":"","sources":["../src/labels.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"labels.js","sourceRoot":"","sources":["../src/labels.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAoB;IAEpB,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,EAAE,CAChC,MAAM;SACH,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;SAClC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC5D,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC;AACtD,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,aAAa,CAAC,MAA4B;IACxD,OAAO,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC;AAC1D,CAAC"}
|
package/dist/memoryStore.js
CHANGED
|
@@ -127,9 +127,10 @@ export function memoryStore() {
|
|
|
127
127
|
f.updatedAt = now();
|
|
128
128
|
}
|
|
129
129
|
},
|
|
130
|
-
async listCases(suite) {
|
|
130
|
+
async listCases(suite, opts) {
|
|
131
131
|
return cases
|
|
132
|
-
.filter((c) => c.suite === suite &&
|
|
132
|
+
.filter((c) => c.suite === suite &&
|
|
133
|
+
(opts?.includeRetired || c.status !== "RETIRED"))
|
|
133
134
|
.sort((a, b) => +a.createdAt - +b.createdAt);
|
|
134
135
|
},
|
|
135
136
|
async createCase({ labels = [], ...data }) {
|
package/dist/memoryStore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memoryStore.js","sourceRoot":"","sources":["../src/memoryStore.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACL,gBAAgB,GAIjB,MAAM,eAAe,CAAC;AAQvB;;;GAGG;AACH,MAAM,UAAU,WAAW;IAUzB,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,EAAE,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IACjE,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;IAE7B,OAAO;QACL,KAAK;QACL,IAAI;QACJ,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,OAAO;QACP,KAAK,CAAC,WAAW,CAAC,SAAS;YACzB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/B,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;QACnD,CAAC;QACD,KAAK,CAAC,YAAY,CAAC,SAAS;YAC1B,OAAO,QAAQ;iBACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC;iBACxC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE;YACpC,mEAAmE;YACnE,OAAO,OAAO;iBACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC;iBACxC,OAAO,EAAE;iBACT,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC;QACtC,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE;YAC1B,sDAAsD;YACtD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;YAC3C,IAAI,MAAM,KAAK,EAAE,CAAC,UAAU;gBAAE,MAAM,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACpE,IAAI,EAA+B,CAAC;YACpC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;gBACd,MAAM,IAAI,GAAG,QAAQ;qBAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC;qBACxC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9C,EAAE,GAAG;oBACH,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ;oBACrB,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;oBACb,SAAS;oBACT,MAAM,EAAE,IAAI,GAAG,CAAC;oBAChB,aAAa,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa;oBACtC,SAAS,EAAE,GAAG,EAAE;iBACjB,CAAC;gBACF,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,EAAE,GAAG,QAAQ,CAAC,IAAI,CAChB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAC1D,CAAC;gBACF,IAAI,CAAC,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAC/D,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;gBACb,SAAS;gBACT,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,aAAa,EAAE,MAAM;gBACrB,WAAW,EAAE,EAAE,CAAC,EAAE;gBAClB,MAAM,EAAE,EAAE,CAAC,MAAM;gBACjB,EAAE,EAAE,EAAE,CAAC,EAAE;gBACT,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,IAAI;gBAC7B,SAAS,EAAE,GAAG,EAAE;aACjB,CAAC,CAAC;YACH,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,CAAC;YACV,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CACzB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO;gBACvB,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS;gBAC3B,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,CAC5B,CAAC;YACF,IAAI,KAAK,EAAE,CAAC;gBACV,uCAAuC;gBACvC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;oBAC9B,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;oBACtB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;gBACtB,CAAC;gBACD,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3C,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,CAAC,GAAmB;gBACxB,GAAG,CAAC;gBACJ,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;gBACZ,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,EAAE;gBACb,SAAS,EAAE,EAAE;aACd,CAAC;YACF,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ;YAC5C,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAC1B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,OAAO,KAAK,OAAO;gBACrB,CAAC,CAAC,SAAS,KAAK,SAAS;gBACzB,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAC1B,CAAC;YACF,IAAI,CAAC,IAAI,CAAC;gBAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,EAAE;YAC1B,OAAO,QAAQ;iBACZ,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC;gBACnD,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC;gBAC1C,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC;gBAC1C,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,CAC7C;iBACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;iBAC3C,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC;QACtC,CAAC;QACD,KAAK,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;YACvD,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;YACpD,IAAI,CAAC,EAAE,CAAC;gBACN,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;gBAClB,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;gBAClB,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,KAAK;
|
|
1
|
+
{"version":3,"file":"memoryStore.js","sourceRoot":"","sources":["../src/memoryStore.ts"],"names":[],"mappings":"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"}
|
package/dist/models.d.ts
CHANGED
|
@@ -2,10 +2,19 @@
|
|
|
2
2
|
* What Evalkeeper needs to know about the models your app can use. You
|
|
3
3
|
* pass a catalog in; Evalkeeper never picks a provider itself. Pure.
|
|
4
4
|
*/
|
|
5
|
-
/**
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
/**
|
|
6
|
+
* The reasoning settings providers name, lowest first, so a setting one
|
|
7
|
+
* model lacks can be placed against the ones it has. A model's own
|
|
8
|
+
* `efforts` say which it takes.
|
|
9
|
+
*/
|
|
10
|
+
export declare const REASONING_EFFORTS: readonly ["none", "minimal", "low", "medium", "high", "xhigh", "max"];
|
|
11
|
+
/** A setting from REASONING_EFFORTS. */
|
|
12
|
+
export type KnownReasoningEffort = (typeof REASONING_EFFORTS)[number];
|
|
13
|
+
/**
|
|
14
|
+
* A reasoning setting a model may accept: one of REASONING_EFFORTS, or any
|
|
15
|
+
* other name a provider uses. The catalog's `efforts` order them per model.
|
|
16
|
+
*/
|
|
17
|
+
export type ReasoningEffort = KnownReasoningEffort | (string & {});
|
|
9
18
|
/**
|
|
10
19
|
* What Evalkeeper needs to know about one model: its label, provider, prices, reasoning
|
|
11
20
|
* settings, and retirement date.
|
|
@@ -17,6 +26,16 @@ export type ModelInfo = {
|
|
|
17
26
|
/** USD per 1M tokens, for estimates and the cost of each answer. */
|
|
18
27
|
inputPer1M?: number;
|
|
19
28
|
outputPer1M?: number;
|
|
29
|
+
/**
|
|
30
|
+
* USD per 1M input tokens read from the provider's prompt cache. Unset:
|
|
31
|
+
* cached input costs `inputPer1M`, which overstates rather than flatters.
|
|
32
|
+
*/
|
|
33
|
+
cachedInputPer1M?: number;
|
|
34
|
+
/**
|
|
35
|
+
* USD per 1M input tokens written to the prompt cache (Anthropic bills
|
|
36
|
+
* these above the input price). Unset: they cost `inputPer1M`.
|
|
37
|
+
*/
|
|
38
|
+
cacheWriteInputPer1M?: number;
|
|
20
39
|
/** Reasoning efforts it accepts, lowest first. */
|
|
21
40
|
efforts?: ReasoningEffort[];
|
|
22
41
|
/**
|
|
@@ -32,19 +51,37 @@ export type ModelInfo = {
|
|
|
32
51
|
* model's own estimate written out, with no distribution for choices.
|
|
33
52
|
*/
|
|
34
53
|
decisions?: "native" | "prompted";
|
|
54
|
+
/**
|
|
55
|
+
* Code your app runs instead of a model (a matcher, a rules engine) or
|
|
56
|
+
* alongside it, tested so the board shows whether a model beats it. A
|
|
57
|
+
* baseline is compared like any model but never suggested as live or as
|
|
58
|
+
* the fallback. Give it a label that says what it is.
|
|
59
|
+
*/
|
|
60
|
+
baseline?: boolean;
|
|
35
61
|
};
|
|
36
62
|
/** Your app's models, by id. */
|
|
37
63
|
export type ModelCatalog = Record<string, ModelInfo>;
|
|
64
|
+
/** Whether a catalog entry is a baseline (code, not a model): never suggested. */
|
|
65
|
+
export declare function isBaseline(models: ModelCatalog, model: string): boolean;
|
|
38
66
|
/** "January 2027" for a retiring model; null when it isn't retiring. */
|
|
39
67
|
export declare function retiresLabel(models: ModelCatalog, model: string): string | null;
|
|
40
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* The cost of a call from its token counts; null when the price is unknown.
|
|
70
|
+
* `cachedInput` and `cacheWriteInput` are the parts of `input` read from
|
|
71
|
+
* and written to the provider's prompt cache, priced at the model's cache
|
|
72
|
+
* prices when it has them.
|
|
73
|
+
*/
|
|
41
74
|
export declare function priceCall(models: ModelCatalog, model: string, tokens: {
|
|
42
75
|
input: number;
|
|
43
76
|
output: number;
|
|
77
|
+
cachedInput?: number;
|
|
78
|
+
cacheWriteInput?: number;
|
|
44
79
|
}): number | null;
|
|
45
80
|
/**
|
|
46
81
|
* The effort a model actually gets for a requested one: the same if it
|
|
47
|
-
* takes it;
|
|
48
|
-
*
|
|
82
|
+
* takes it; one below the lowest it takes (say "none" on a model that
|
|
83
|
+
* starts at "minimal"), its lowest; one above its highest, its highest;
|
|
84
|
+
* otherwise (a name it doesn't place) its own default. Undefined: send
|
|
85
|
+
* nothing.
|
|
49
86
|
*/
|
|
50
87
|
export declare function effortFor(models: ModelCatalog, model: string, requested: ReasoningEffort | null | undefined): ReasoningEffort | undefined;
|