@kohaku-ui/evals 0.3.0 → 0.4.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/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # @kohaku-ui/evals
2
2
 
3
+ ## 0.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#55](https://github.com/yosuque/kohaku/pull/55) [`730e625`](https://github.com/yosuque/kohaku/commit/730e62584b249056078792f6f646019cb225b049) Thanks [@yosuque](https://github.com/yosuque)! - Add Node-free subpaths for use in a browser host (the static playground, U5): `@kohaku-ui/storage-memory/memory`
8
+ re-exports `createMemoryStoragePort` (and `MAX_SPEC_CACHE_ENTRIES`) without `createFileStoragePort`'s
9
+ `node:fs`/`node:path`/`node:crypto` dependency; `@kohaku-ui/evals/judge` re-exports `createJudge` and the
10
+ `SchemaExtractor` pieces without `FixtureLlm`'s `node:fs`/`node:path`; `@kohaku-ui/evals/replay` adds a new
11
+ `ReplayLlm` (a replay-only `LlmPort` with no filesystem access, looking up a recorded response by the same
12
+ key function as `FixtureLlm` — also newly shared as `fixtureKeyOf`/`objectFixtureKey`/`textFixtureKey`).
13
+ All three existing top-level `"."` exports are unchanged.
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies [[`cc17b7b`](https://github.com/yosuque/kohaku/commit/cc17b7bc3c96e49b1b74197ac20cd7a3d8ee0b47), [`730e625`](https://github.com/yosuque/kohaku/commit/730e62584b249056078792f6f646019cb225b049), [`730e625`](https://github.com/yosuque/kohaku/commit/730e62584b249056078792f6f646019cb225b049), [`730e625`](https://github.com/yosuque/kohaku/commit/730e62584b249056078792f6f646019cb225b049), [`730e625`](https://github.com/yosuque/kohaku/commit/730e62584b249056078792f6f646019cb225b049), [`5d167cb`](https://github.com/yosuque/kohaku/commit/5d167cb386cc1f91102644f8a99bd5b5c2949ce0), [`730e625`](https://github.com/yosuque/kohaku/commit/730e62584b249056078792f6f646019cb225b049)]:
18
+ - @kohaku-ui/spec-core@0.4.0
19
+ - @kohaku-ui/composer@0.4.0
20
+ - @kohaku-ui/llm@0.4.0
21
+
3
22
  ## 0.3.0
4
23
 
5
24
  ### Minor Changes
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The fixture lookup key shared by FixtureLlm (record/replay against the filesystem) and ReplayLlm
3
+ * (replay-only, browser-safe): sha256 of `parts` joined by U+0000, truncated to the first 24 hex
4
+ * characters. Extracted from FixtureLlm's original private `keyOf` without changing its behavior — for a
5
+ * given part list this produces the exact same key it always has, so a fixture recorded through one of
6
+ * FixtureLlm / ReplayLlm replays under the identical key through the other.
7
+ */
8
+ export declare function fixtureKeyOf(parts: (string | undefined)[]): Promise<string>;
9
+ /** Fixture key for a `generateObject` call (matches FixtureLlm.generateObject's key derivation). */
10
+ export declare function objectFixtureKey(req: {
11
+ schemaName?: string;
12
+ system?: string;
13
+ prompt: string;
14
+ }): Promise<string>;
15
+ /** Fixture key for a `generateText` call (matches FixtureLlm.generateText's key derivation). */
16
+ export declare function textFixtureKey(req: {
17
+ system?: string;
18
+ prompt: string;
19
+ }): Promise<string>;
20
+ //# sourceMappingURL=fixture-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture-key.d.ts","sourceRoot":"","sources":["../src/fixture-key.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAEjF;AAED,oGAAoG;AACpG,wBAAgB,gBAAgB,CAAC,GAAG,EAAE;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAElB;AAED,gGAAgG;AAChG,wBAAgB,cAAc,CAAC,GAAG,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAExF"}
@@ -0,0 +1,20 @@
1
+ import { sha256Hex } from "@kohaku-ui/spec-core";
2
+ /**
3
+ * The fixture lookup key shared by FixtureLlm (record/replay against the filesystem) and ReplayLlm
4
+ * (replay-only, browser-safe): sha256 of `parts` joined by U+0000, truncated to the first 24 hex
5
+ * characters. Extracted from FixtureLlm's original private `keyOf` without changing its behavior — for a
6
+ * given part list this produces the exact same key it always has, so a fixture recorded through one of
7
+ * FixtureLlm / ReplayLlm replays under the identical key through the other.
8
+ */
9
+ export async function fixtureKeyOf(parts) {
10
+ return (await sha256Hex(parts.map((p) => p ?? "").join("\u0000"))).slice(0, 24);
11
+ }
12
+ /** Fixture key for a `generateObject` call (matches FixtureLlm.generateObject's key derivation). */
13
+ export function objectFixtureKey(req) {
14
+ return fixtureKeyOf(["object", req.schemaName, req.system, req.prompt]);
15
+ }
16
+ /** Fixture key for a `generateText` call (matches FixtureLlm.generateText's key derivation). */
17
+ export function textFixtureKey(req) {
18
+ return fixtureKeyOf(["text", req.system, req.prompt]);
19
+ }
20
+ //# sourceMappingURL=fixture-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture-key.js","sourceRoot":"","sources":["../src/fixture-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAA6B;IAC9D,OAAO,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,gBAAgB,CAAC,GAIhC;IACC,OAAO,YAAY,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,cAAc,CAAC,GAAwC;IACrE,OAAO,YAAY,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACxD,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { type GenerateObjectRequest, type GenerateObjectResult, type GenerateTextRequest, type LlmPort, type LlmUsage } from "@kohaku-ui/llm";
2
2
  /**
3
- * A record/replay LlmPort. The key is sha256(prompt + system + schemaName).
3
+ * A record/replay LlmPort. The key is sha256(prompt + system + schemaName) — see fixture-key.ts, shared
4
+ * with ReplayLlm (`./replay` subpath) so a fixture recorded here replays there under the identical key.
4
5
  * - replay (default): responds deterministically from fixtures (CI runs on this)
5
6
  * - record: delegates to a real LLM and writes the response back to a fixture (pass `{ record: true, live: <LlmPort> }` to the constructor; remove record when replaying)
6
7
  */
@@ -13,7 +14,6 @@ export declare class FixtureLlm implements LlmPort {
13
14
  record?: boolean;
14
15
  live?: LlmPort;
15
16
  });
16
- private keyOf;
17
17
  private read;
18
18
  private write;
19
19
  generateObject<T>(req: GenerateObjectRequest<T>): Promise<GenerateObjectResult<T>>;
@@ -1 +1 @@
1
- {"version":3,"file":"fixture-llm.d.ts","sourceRoot":"","sources":["../src/fixture-llm.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAGxB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACd,MAAM,gBAAgB,CAAC;AAKxB;;;;GAIG;AACH,qBAAa,UAAW,YAAW,OAAO;IAKtC,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IALvB,QAAQ,CAAC,QAAQ,aAAa;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,YACmB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAO,EAMjE;YAEa,KAAK;IAInB,OAAO,CAAC,IAAI;IAcZ,OAAO,CAAC,KAAK;IAKP,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CA6BvF;IAEK,YAAY,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,QAAQ,CAAA;KAAE,CAAC,CAevF;CACF"}
1
+ {"version":3,"file":"fixture-llm.d.ts","sourceRoot":"","sources":["../src/fixture-llm.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAGxB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACd,MAAM,gBAAgB,CAAC;AAKxB;;;;;GAKG;AACH,qBAAa,UAAW,YAAW,OAAO;IAKtC,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IALvB,QAAQ,CAAC,QAAQ,aAAa;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,YACmB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAO,EAMjE;IAED,OAAO,CAAC,IAAI;IAcZ,OAAO,CAAC,KAAK;IAKP,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CA6BvF;IAEK,YAAY,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,QAAQ,CAAA;KAAE,CAAC,CAevF;CACF"}
@@ -1,10 +1,11 @@
1
1
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { isZodSchema, LlmError, } from "@kohaku-ui/llm";
4
- import { sha256Hex } from "@kohaku-ui/spec-core";
4
+ import { objectFixtureKey, textFixtureKey } from "./fixture-key.js";
5
5
  const USAGE = { inputTokens: 0, outputTokens: 0 };
6
6
  /**
7
- * A record/replay LlmPort. The key is sha256(prompt + system + schemaName).
7
+ * A record/replay LlmPort. The key is sha256(prompt + system + schemaName) — see fixture-key.ts, shared
8
+ * with ReplayLlm (`./replay` subpath) so a fixture recorded here replays there under the identical key.
8
9
  * - replay (default): responds deterministically from fixtures (CI runs on this)
9
10
  * - record: delegates to a real LLM and writes the response back to a fixture (pass `{ record: true, live: <LlmPort> }` to the constructor; remove record when replaying)
10
11
  */
@@ -21,9 +22,6 @@ export class FixtureLlm {
21
22
  throw new LlmError("CONFIG", "FixtureLlm record mode requires a live LlmPort");
22
23
  }
23
24
  }
24
- async keyOf(parts) {
25
- return (await sha256Hex(parts.map((p) => p ?? "").join("\u0000"))).slice(0, 24);
26
- }
27
25
  read(key) {
28
26
  const path = join(this.dir, `${key}.json`);
29
27
  if (!existsSync(path))
@@ -41,7 +39,7 @@ export class FixtureLlm {
41
39
  writeFileSync(join(this.dir, `${key}.json`), JSON.stringify(value, null, 2) + "\n");
42
40
  }
43
41
  async generateObject(req) {
44
- const key = await this.keyOf(["object", req.schemaName, req.system, req.prompt]);
42
+ const key = await objectFixtureKey(req);
45
43
  const recorded = this.read(key);
46
44
  if (recorded !== undefined) {
47
45
  const object = recorded.object;
@@ -65,7 +63,7 @@ export class FixtureLlm {
65
63
  throw new LlmError("INVALID_OUTPUT", `FixtureLlm: no fixture for key ${key} (to record, construct with { record: true, live: <real LlmPort> } and run; remove record when replaying)`);
66
64
  }
67
65
  async generateText(req) {
68
- const key = await this.keyOf(["text", req.system, req.prompt]);
66
+ const key = await textFixtureKey(req);
69
67
  const recorded = this.read(key);
70
68
  if (recorded !== undefined) {
71
69
  return { text: recorded.text, usage: USAGE };
@@ -1 +1 @@
1
- {"version":3,"file":"fixture-llm.js","sourceRoot":"","sources":["../src/fixture-llm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fixture-llm.js","sourceRoot":"","sources":["../src/fixture-llm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { type ColumnMeta, createJudge, type Judge, type JudgeInput, type JudgeSpecInput, type JudgeVerdict, l1QualityRubric, l2PromotionRubric, l2PromotionRubricV0_1, l2PromotionRubricV0_2, l2PromotionRubricV0_3, type Rubric, } from "../judge.js";
2
+ export { createSchemaExtractor, extractDataRefs, SCHEMA_EXTRACTOR_ID, SCHEMA_EXTRACTOR_VERSION, type SchemaExtractionInput, type SchemaExtractionResult, type SchemaExtractor, SchemaSuggestionOutputSchema, type SuggestedDraft, } from "../schema-extraction.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/judge/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,UAAU,EACf,WAAW,EACX,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,MAAM,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,4BAA4B,EAC5B,KAAK,cAAc,GACpB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,7 @@
1
+ // The "./judge" subpath: the subset of @kohaku-ui/evals that has no Node-only dependency, additive to the
2
+ // "." barrel (index.ts, which still exports everything below plus FixtureLlm — this subpath does not
3
+ // replace it). Exists so a consumer that only needs createJudge/SchemaExtractor (e.g. sample-api's app.ts)
4
+ // does not also pull in FixtureLlm's node:fs/node:path through the shared "." barrel (see reports/u5-2.md).
5
+ export { createJudge, l1QualityRubric, l2PromotionRubric, l2PromotionRubricV0_1, l2PromotionRubricV0_2, l2PromotionRubricV0_3, } from "../judge.js";
6
+ export { createSchemaExtractor, extractDataRefs, SCHEMA_EXTRACTOR_ID, SCHEMA_EXTRACTOR_VERSION, SchemaSuggestionOutputSchema, } from "../schema-extraction.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/judge/index.ts"],"names":[],"mappings":"AAAA,0GAA0G;AAC1G,qGAAqG;AACrG,2GAA2G;AAC3G,4GAA4G;AAC5G,OAAO,EAEL,WAAW,EAKX,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,GAEtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EAIxB,4BAA4B,GAE7B,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { fixtureKeyOf, objectFixtureKey, textFixtureKey } from "../fixture-key.js";
2
+ export { type RecordedObjectResponse, type RecordedTextResponse, type ReplayFixtureEntry, type ReplayFixtures, type ReplayFixtureValue, ReplayLlm, } from "../replay-llm.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/replay/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,SAAS,GACV,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,5 @@
1
+ // The "./replay" subpath: ReplayLlm plus the fixture-key helpers, browser-safe (no Node-only dependency).
2
+ // Additive to the "." barrel (index.ts), which does not export ReplayLlm from the top level.
3
+ export { fixtureKeyOf, objectFixtureKey, textFixtureKey } from "../fixture-key.js";
4
+ export { ReplayLlm, } from "../replay-llm.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/replay/index.ts"],"names":[],"mappings":"AAAA,0GAA0G;AAC1G,6FAA6F;AAC7F,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAML,SAAS,GACV,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { type GenerateObjectRequest, type GenerateObjectResult, type GenerateTextRequest, type LlmPort, type LlmUsage } from "@kohaku-ui/llm";
2
+ /** A recorded `generateObject` response, in the same shape FixtureLlm writes to a `<key>.json` file. */
3
+ export interface RecordedObjectResponse {
4
+ object: unknown;
5
+ /** Recording-time provenance only; ignored on replay. */
6
+ prompt?: string;
7
+ }
8
+ /** A recorded `generateText` response, in the same shape FixtureLlm writes to a `<key>.json` file. */
9
+ export interface RecordedTextResponse {
10
+ text: string;
11
+ /** Recording-time provenance only; ignored on replay. */
12
+ prompt?: string;
13
+ }
14
+ export type ReplayFixtureValue = RecordedObjectResponse | RecordedTextResponse;
15
+ /** One fixture entry carrying its own lookup key, for the array constructor form (see ReplayLlm's doc). */
16
+ export type ReplayFixtureEntry = ReplayFixtureValue & {
17
+ key: string;
18
+ };
19
+ /**
20
+ * A fixture set: either a `Record<key, response>` (e.g. `JSON.parse`d straight from a bundled fixture
21
+ * asset keyed by fixtureKeyOf), or an array of `{ key, ...response }` entries (equivalent, just easier to
22
+ * hand-write or diff — see reports/u5-2.md for how u5-3's recording step is expected to produce either
23
+ * shape).
24
+ */
25
+ export type ReplayFixtures = ReplayFixtureEntry[] | Record<string, ReplayFixtureValue>;
26
+ /**
27
+ * A replay-only LlmPort, browser-safe (no filesystem access, unlike FixtureLlm): looks up a recorded
28
+ * response by the exact same key function FixtureLlm uses (`fixture-key.ts`'s `objectFixtureKey` /
29
+ * `textFixtureKey`), so a fixture recorded via `FixtureLlm({ record: true, live })`'s `<key>.json` files
30
+ * replays here unchanged once bundled into a `ReplayFixtures` set. Intended for the static playground
31
+ * (U5), where there is no server to record against and no filesystem to read from at runtime.
32
+ *
33
+ * Does not implement `streamObject` (optional on LlmPort) — a caller falls back to `generateObject`
34
+ * (behaviorally equivalent, no partials), matching FixtureLlm's own behavior.
35
+ */
36
+ export declare class ReplayLlm implements LlmPort {
37
+ readonly provider: string;
38
+ readonly modelId: string;
39
+ private readonly fixtures;
40
+ constructor(fixtures: ReplayFixtures, opts?: {
41
+ provider?: string;
42
+ modelId?: string;
43
+ });
44
+ generateObject<T>(req: GenerateObjectRequest<T>): Promise<GenerateObjectResult<T>>;
45
+ generateText(req: GenerateTextRequest): Promise<{
46
+ text: string;
47
+ usage: LlmUsage;
48
+ }>;
49
+ }
50
+ //# sourceMappingURL=replay-llm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay-llm.d.ts","sourceRoot":"","sources":["../src/replay-llm.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAGxB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACd,MAAM,gBAAgB,CAAC;AAKxB,wGAAwG;AACxG,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,sGAAsG;AACtG,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,GAAG,oBAAoB,CAAC;AAE/E,2GAA2G;AAC3G,MAAM,MAAM,kBAAkB,GAAG,kBAAkB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,kBAAkB,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAavF;;;;;;;;;GASG;AACH,qBAAa,SAAU,YAAW,OAAO;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAE3D,YAAY,QAAQ,EAAE,cAAc,EAAE,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,EAIvF;IAEK,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAqBvF;IAEK,YAAY,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,QAAQ,CAAA;KAAE,CAAC,CAUvF;CACF"}
@@ -0,0 +1,57 @@
1
+ import { isZodSchema, LlmError, } from "@kohaku-ui/llm";
2
+ import { objectFixtureKey, textFixtureKey } from "./fixture-key.js";
3
+ const USAGE = { inputTokens: 0, outputTokens: 0 };
4
+ function isObjectResponse(value) {
5
+ return "object" in value;
6
+ }
7
+ function toFixtureMap(fixtures) {
8
+ if (Array.isArray(fixtures)) {
9
+ return new Map(fixtures.map(({ key, ...value }) => [key, value]));
10
+ }
11
+ return new Map(Object.entries(fixtures));
12
+ }
13
+ /**
14
+ * A replay-only LlmPort, browser-safe (no filesystem access, unlike FixtureLlm): looks up a recorded
15
+ * response by the exact same key function FixtureLlm uses (`fixture-key.ts`'s `objectFixtureKey` /
16
+ * `textFixtureKey`), so a fixture recorded via `FixtureLlm({ record: true, live })`'s `<key>.json` files
17
+ * replays here unchanged once bundled into a `ReplayFixtures` set. Intended for the static playground
18
+ * (U5), where there is no server to record against and no filesystem to read from at runtime.
19
+ *
20
+ * Does not implement `streamObject` (optional on LlmPort) — a caller falls back to `generateObject`
21
+ * (behaviorally equivalent, no partials), matching FixtureLlm's own behavior.
22
+ */
23
+ export class ReplayLlm {
24
+ provider;
25
+ modelId;
26
+ fixtures;
27
+ constructor(fixtures, opts = {}) {
28
+ this.fixtures = toFixtureMap(fixtures);
29
+ this.provider = opts.provider ?? "replay";
30
+ this.modelId = opts.modelId ?? "replay";
31
+ }
32
+ async generateObject(req) {
33
+ const key = await objectFixtureKey(req);
34
+ const recorded = this.fixtures.get(key);
35
+ if (recorded === undefined || !isObjectResponse(recorded)) {
36
+ throw new LlmError("INVALID_OUTPUT", `ReplayLlm: no recorded fixture for key ${key} (prompt: ${req.prompt.slice(0, 120)})`);
37
+ }
38
+ if (isZodSchema(req.schema)) {
39
+ const parsed = req.schema.safeParse(recorded.object);
40
+ // Same rationale as FixtureLlm: never let a schema-mismatched recording flow downstream unvalidated.
41
+ if (!parsed.success) {
42
+ throw new LlmError("INVALID_OUTPUT", `ReplayLlm: recorded response for key ${key} does not match the schema: ${parsed.error.message.slice(0, 200)}`);
43
+ }
44
+ return { object: parsed.data, usage: USAGE, model: this.modelId };
45
+ }
46
+ return { object: recorded.object, usage: USAGE, model: this.modelId };
47
+ }
48
+ async generateText(req) {
49
+ const key = await textFixtureKey(req);
50
+ const recorded = this.fixtures.get(key);
51
+ if (recorded === undefined || isObjectResponse(recorded)) {
52
+ throw new LlmError("INVALID_OUTPUT", `ReplayLlm: no recorded fixture for key ${key} (prompt: ${req.prompt.slice(0, 120)})`);
53
+ }
54
+ return { text: recorded.text, usage: USAGE };
55
+ }
56
+ }
57
+ //# sourceMappingURL=replay-llm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay-llm.js","sourceRoot":"","sources":["../src/replay-llm.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kohaku-ui/evals",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Evaluation harness for kohaku: golden Spec regression, LLM-as-judge scoring and a record/replay LLM.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -8,18 +8,26 @@
8
8
  "types": "./dist/index.d.ts",
9
9
  "default": "./dist/index.js"
10
10
  },
11
+ "./judge": {
12
+ "types": "./dist/judge/index.d.ts",
13
+ "default": "./dist/judge/index.js"
14
+ },
15
+ "./replay": {
16
+ "types": "./dist/replay/index.d.ts",
17
+ "default": "./dist/replay/index.js"
18
+ },
11
19
  "./package.json": "./package.json"
12
20
  },
13
21
  "dependencies": {
14
- "@kohaku-ui/spec-core": "^0.3.0",
15
- "@kohaku-ui/composer": "^0.3.0",
16
- "@kohaku-ui/llm": "^0.3.0"
22
+ "@kohaku-ui/spec-core": "^0.4.0",
23
+ "@kohaku-ui/composer": "^0.4.0",
24
+ "@kohaku-ui/llm": "^0.4.0"
17
25
  },
18
26
  "peerDependencies": {
19
27
  "zod": "^4.6.5"
20
28
  },
21
29
  "devDependencies": {
22
- "@kohaku-ui/registry": "^0.3.0",
30
+ "@kohaku-ui/registry": "^0.4.0",
23
31
  "@types/node": "^26.6.2",
24
32
  "typescript": "7.0.2",
25
33
  "vitest": "^5.0.1",