fastrmemory 0.4.0 → 0.6.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.
Files changed (149) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/.cursor/mcp.json +1 -1
  4. package/.cursor/skills/fastr-setup/SKILL.md +4 -4
  5. package/.cursor/skills/skills.json +1 -1
  6. package/README.md +87 -36
  7. package/dist/bin/fastr.js +131 -17
  8. package/dist/bin/fastr.js.map +1 -1
  9. package/dist/src/bench/harness.d.ts.map +1 -1
  10. package/dist/src/bench/harness.js +4 -0
  11. package/dist/src/bench/harness.js.map +1 -1
  12. package/dist/src/bench/marker-corpus.d.ts +98 -0
  13. package/dist/src/bench/marker-corpus.d.ts.map +1 -0
  14. package/dist/src/bench/marker-corpus.js +306 -0
  15. package/dist/src/bench/marker-corpus.js.map +1 -0
  16. package/dist/src/bench/mcp-stdio.d.ts +55 -0
  17. package/dist/src/bench/mcp-stdio.d.ts.map +1 -0
  18. package/dist/src/bench/mcp-stdio.js +146 -0
  19. package/dist/src/bench/mcp-stdio.js.map +1 -0
  20. package/dist/src/bench/public-datasets.d.ts +2 -0
  21. package/dist/src/bench/public-datasets.d.ts.map +1 -1
  22. package/dist/src/bench/public-datasets.js +2 -1
  23. package/dist/src/bench/public-datasets.js.map +1 -1
  24. package/dist/src/bench/public-harness.d.ts +14 -0
  25. package/dist/src/bench/public-harness.d.ts.map +1 -1
  26. package/dist/src/bench/public-harness.js +83 -8
  27. package/dist/src/bench/public-harness.js.map +1 -1
  28. package/dist/src/bench/public-pins.js +5 -5
  29. package/dist/src/bench/public-pins.js.map +1 -1
  30. package/dist/src/bench/split.d.ts +33 -0
  31. package/dist/src/bench/split.d.ts.map +1 -0
  32. package/dist/src/bench/split.js +56 -0
  33. package/dist/src/bench/split.js.map +1 -0
  34. package/dist/src/bench/stats.d.ts +40 -0
  35. package/dist/src/bench/stats.d.ts.map +1 -0
  36. package/dist/src/bench/stats.js +99 -0
  37. package/dist/src/bench/stats.js.map +1 -0
  38. package/dist/src/bench/vs-engines.d.ts +51 -0
  39. package/dist/src/bench/vs-engines.d.ts.map +1 -0
  40. package/dist/src/bench/vs-engines.js +121 -0
  41. package/dist/src/bench/vs-engines.js.map +1 -0
  42. package/dist/src/config.d.ts +33 -0
  43. package/dist/src/config.d.ts.map +1 -1
  44. package/dist/src/config.js +84 -1
  45. package/dist/src/config.js.map +1 -1
  46. package/dist/src/db/doctor.d.ts +8 -0
  47. package/dist/src/db/doctor.d.ts.map +1 -1
  48. package/dist/src/db/doctor.js +65 -1
  49. package/dist/src/db/doctor.js.map +1 -1
  50. package/dist/src/db/fts-queue.d.ts +35 -0
  51. package/dist/src/db/fts-queue.d.ts.map +1 -0
  52. package/dist/src/db/fts-queue.js +78 -0
  53. package/dist/src/db/fts-queue.js.map +1 -0
  54. package/dist/src/db/repository.d.ts +63 -1
  55. package/dist/src/db/repository.d.ts.map +1 -1
  56. package/dist/src/db/repository.js +244 -50
  57. package/dist/src/db/repository.js.map +1 -1
  58. package/dist/src/db/schema.d.ts +1 -1
  59. package/dist/src/db/schema.d.ts.map +1 -1
  60. package/dist/src/db/schema.js +63 -2
  61. package/dist/src/db/schema.js.map +1 -1
  62. package/dist/src/installer/copilot.d.ts +21 -0
  63. package/dist/src/installer/copilot.d.ts.map +1 -1
  64. package/dist/src/installer/copilot.js +72 -1
  65. package/dist/src/installer/copilot.js.map +1 -1
  66. package/dist/src/installer/gemini.d.ts +13 -0
  67. package/dist/src/installer/gemini.d.ts.map +1 -1
  68. package/dist/src/installer/gemini.js +64 -1
  69. package/dist/src/installer/gemini.js.map +1 -1
  70. package/dist/src/installer/hooks.d.ts +42 -5
  71. package/dist/src/installer/hooks.d.ts.map +1 -1
  72. package/dist/src/installer/hooks.js +270 -62
  73. package/dist/src/installer/hooks.js.map +1 -1
  74. package/dist/src/installer/json-config.d.ts +25 -1
  75. package/dist/src/installer/json-config.d.ts.map +1 -1
  76. package/dist/src/installer/json-config.js +95 -2
  77. package/dist/src/installer/json-config.js.map +1 -1
  78. package/dist/src/installer/mcp-command.d.ts +19 -0
  79. package/dist/src/installer/mcp-command.d.ts.map +1 -0
  80. package/dist/src/installer/mcp-command.js +57 -0
  81. package/dist/src/installer/mcp-command.js.map +1 -0
  82. package/dist/src/installer/mcp-init.d.ts +16 -0
  83. package/dist/src/installer/mcp-init.d.ts.map +1 -1
  84. package/dist/src/installer/mcp-init.js +34 -13
  85. package/dist/src/installer/mcp-init.js.map +1 -1
  86. package/dist/src/installer/opencode.d.ts +18 -0
  87. package/dist/src/installer/opencode.d.ts.map +1 -1
  88. package/dist/src/installer/opencode.js +81 -1
  89. package/dist/src/installer/opencode.js.map +1 -1
  90. package/dist/src/installer/setup.d.ts +7 -11
  91. package/dist/src/installer/setup.d.ts.map +1 -1
  92. package/dist/src/installer/setup.js +34 -31
  93. package/dist/src/installer/setup.js.map +1 -1
  94. package/dist/src/mcp/profiles.d.ts +9 -6
  95. package/dist/src/mcp/profiles.d.ts.map +1 -1
  96. package/dist/src/mcp/profiles.js +12 -9
  97. package/dist/src/mcp/profiles.js.map +1 -1
  98. package/dist/src/mcp/server.d.ts +1 -1
  99. package/dist/src/mcp/server.d.ts.map +1 -1
  100. package/dist/src/mcp/server.js +80 -0
  101. package/dist/src/mcp/server.js.map +1 -1
  102. package/dist/src/search/aggregate.d.ts +24 -0
  103. package/dist/src/search/aggregate.d.ts.map +1 -0
  104. package/dist/src/search/aggregate.js +59 -0
  105. package/dist/src/search/aggregate.js.map +1 -0
  106. package/dist/src/search/backfill.d.ts.map +1 -1
  107. package/dist/src/search/backfill.js +7 -2
  108. package/dist/src/search/backfill.js.map +1 -1
  109. package/dist/src/search/budget.d.ts +2 -0
  110. package/dist/src/search/budget.d.ts.map +1 -1
  111. package/dist/src/search/budget.js.map +1 -1
  112. package/dist/src/search/embeddings.d.ts +35 -2
  113. package/dist/src/search/embeddings.d.ts.map +1 -1
  114. package/dist/src/search/embeddings.js +128 -5
  115. package/dist/src/search/embeddings.js.map +1 -1
  116. package/dist/src/search/hybrid-rrf.d.ts +45 -0
  117. package/dist/src/search/hybrid-rrf.d.ts.map +1 -1
  118. package/dist/src/search/hybrid-rrf.js +212 -56
  119. package/dist/src/search/hybrid-rrf.js.map +1 -1
  120. package/dist/src/search/static-model-install.d.ts +43 -0
  121. package/dist/src/search/static-model-install.d.ts.map +1 -0
  122. package/dist/src/search/static-model-install.js +112 -0
  123. package/dist/src/search/static-model-install.js.map +1 -0
  124. package/dist/src/search/static-model.d.ts +63 -0
  125. package/dist/src/search/static-model.d.ts.map +1 -0
  126. package/dist/src/search/static-model.js +244 -0
  127. package/dist/src/search/static-model.js.map +1 -0
  128. package/dist/src/search/temporal.d.ts +32 -0
  129. package/dist/src/search/temporal.d.ts.map +1 -0
  130. package/dist/src/search/temporal.js +164 -0
  131. package/dist/src/search/temporal.js.map +1 -0
  132. package/dist/src/ui/server.d.ts.map +1 -1
  133. package/dist/src/ui/server.js +10 -0
  134. package/dist/src/ui/server.js.map +1 -1
  135. package/dist-ui/assets/{ActionsPage-B3quzFNF.js → ActionsPage-CI-IRMeS.js} +1 -1
  136. package/dist-ui/assets/{GraphPage-DetiATmC.js → GraphPage-BdYMF7yz.js} +1 -1
  137. package/dist-ui/assets/{ObservatoryPage-QIGMwENf.js → ObservatoryPage-BG_vg8B9.js} +1 -1
  138. package/dist-ui/assets/{TreemapPage-C7uLZd37.js → TreemapPage-CZreyyLA.js} +1 -1
  139. package/dist-ui/assets/index-Ca9pma3Q.css +1 -0
  140. package/dist-ui/assets/{index-DWAH--Fu.js → index-MlNuiu0T.js} +17 -17
  141. package/dist-ui/assets/{maximize-2-BebkGbZA.js → maximize-2-_nvSvCC7.js} +1 -1
  142. package/dist-ui/build-manifest.json +11 -11
  143. package/dist-ui/index.html +2 -2
  144. package/llms-install.md +3 -3
  145. package/package.json +5 -1
  146. package/server.json +1 -1
  147. package/skills/fastr-setup/SKILL.md +4 -4
  148. package/skills/skills.json +1 -1
  149. package/dist-ui/assets/index-BJnPINTu.css +0 -1
@@ -14,6 +14,8 @@ export interface PublicEngine {
14
14
  retrieval: RetrievalConfig;
15
15
  requiresEmbeddings?: boolean;
16
16
  embeddingModel?: 'hash' | 'minilm';
17
+ /** Result depth the engine returns (default 10). */
18
+ limit?: number;
17
19
  }
18
20
  export declare const PUBLIC_ENGINES: PublicEngine[];
19
21
  export interface PublicCaseResult {
@@ -27,11 +29,16 @@ export interface PublicCaseResult {
27
29
  hitAt10: number;
28
30
  recallAt5: number;
29
31
  fullRecallAt5: number;
32
+ /** Strict@10: every gold id is present in the top 10. */
33
+ fullRecallAt10: number;
30
34
  goldCount: number;
31
35
  retrieved: string[];
32
36
  goldIds: string[];
33
37
  tokens: number;
34
38
  latencyMs: number;
39
+ /** Parsed temporal window applied to this case, when the engine used one. */
40
+ temporalWindow?: string;
41
+ temporalFallback?: boolean;
35
42
  }
36
43
  export interface PublicMetrics {
37
44
  count: number;
@@ -41,6 +48,8 @@ export interface PublicMetrics {
41
48
  mrr: number;
42
49
  evidenceRecallAt5: number;
43
50
  fullRecallAt5: number;
51
+ /** Strict@10 = all gold ids in the top 10, averaged over cases. */
52
+ fullRecallAt10: number;
44
53
  avgTokens: number;
45
54
  p50LatencyMs: number;
46
55
  p95LatencyMs: number;
@@ -48,11 +57,16 @@ export interface PublicMetrics {
48
57
  export interface PublicCategoryMetrics extends PublicMetrics {
49
58
  category: string;
50
59
  }
60
+ /** Metrics restricted to cases with an exact gold count (the aggregate-question slice). */
61
+ export interface PublicGoldBucket extends PublicMetrics {
62
+ goldCount: number;
63
+ }
51
64
  export interface PublicEngineEval {
52
65
  name: string;
53
66
  config: RetrievalConfig;
54
67
  overall: PublicMetrics;
55
68
  byCategory: PublicCategoryMetrics[];
69
+ byGoldCount: PublicGoldBucket[];
56
70
  cases: PublicCaseResult[];
57
71
  }
58
72
  export interface PublicHarnessOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"public-harness.d.ts","sourceRoot":"","sources":["../../../src/bench/public-harness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"public-harness.d.ts","sourceRoot":"","sources":["../../../src/bench/public-harness.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEtE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,eAAe,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACnC,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,cAAc,EAAE,YAAY,EAyFxC,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,2FAA2F;AAC3F,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG;IAAE,EAAE,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE,CAsCrG;AAED,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAaD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,aAAa,CA+BzE;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,EAAE,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,gBAAgB,CA2BlB;AAED,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,YAAY,EAChB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,gBAAgB,CAAC,CA8C3B"}
@@ -9,22 +9,78 @@ import { DatabaseSync } from 'node:sqlite';
9
9
  import { applySchema } from '../db/schema.js';
10
10
  import { FastrRepository } from '../db/repository.js';
11
11
  import { backfillEmbeddings } from '../search/backfill.js';
12
+ import { drainFtsQueue } from '../db/fts-queue.js';
12
13
  import { searchMemories } from '../search/hybrid-rrf.js';
13
14
  export const PUBLIC_ENGINES = [
14
15
  {
15
16
  name: 'bm25_only',
16
- retrieval: { enableBm25: true, enableVector: false, enableGraph: false, trapBoost: 1, verifiedBoost: 1 }
17
+ retrieval: {
18
+ enableBm25: true,
19
+ enableVector: false,
20
+ enableGraph: false,
21
+ trapBoost: 1,
22
+ verifiedBoost: 1,
23
+ aggregateCoverage: false
24
+ }
25
+ },
26
+ {
27
+ // Same first stage, plus the parsed date window as a pre-ranking filter.
28
+ name: 'bm25_temporal',
29
+ retrieval: {
30
+ enableBm25: true,
31
+ enableVector: false,
32
+ enableGraph: false,
33
+ trapBoost: 1,
34
+ verifiedBoost: 1,
35
+ temporalFilter: true,
36
+ aggregateCoverage: false
37
+ }
38
+ },
39
+ {
40
+ // Counting questions search with their content terms only and return the full set.
41
+ name: 'bm25_aggregate',
42
+ retrieval: {
43
+ enableBm25: true,
44
+ enableVector: false,
45
+ enableGraph: false,
46
+ trapBoost: 1,
47
+ verifiedBoost: 1,
48
+ aggregateCoverage: true,
49
+ aggregateLimit: 20
50
+ }
51
+ },
52
+ {
53
+ // Both stages: the window removes out-of-range rows, the aggregate pass removes
54
+ // scaffolding from the lexical query.
55
+ name: 'bm25_temporal_aggregate',
56
+ retrieval: {
57
+ enableBm25: true,
58
+ enableVector: false,
59
+ enableGraph: false,
60
+ trapBoost: 1,
61
+ verifiedBoost: 1,
62
+ temporalFilter: true,
63
+ aggregateCoverage: true,
64
+ aggregateLimit: 20
65
+ }
66
+ },
67
+ {
68
+ // The shipped default after P0: full pipeline, vector stream off unless a semantic
69
+ // provider is loaded. This is what a user gets with no configuration at all.
70
+ name: 'default_config',
71
+ retrieval: {}
17
72
  },
18
73
  {
19
74
  name: 'full_hash',
20
75
  retrieval: {
21
76
  enableBm25: true,
22
- enableVector: true,
77
+ vectorMode: 'hash',
23
78
  enableGraph: true,
24
79
  graphSeedFromCandidates: false,
25
80
  trapBoost: 2.0,
26
81
  trapBoostMode: 'conditional',
27
- verifiedBoost: 1.25
82
+ verifiedBoost: 1.25,
83
+ aggregateCoverage: false
28
84
  },
29
85
  requiresEmbeddings: true,
30
86
  embeddingModel: 'hash'
@@ -33,12 +89,13 @@ export const PUBLIC_ENGINES = [
33
89
  name: 'full_minilm',
34
90
  retrieval: {
35
91
  enableBm25: true,
36
- enableVector: true,
92
+ vectorMode: 'semantic',
37
93
  enableGraph: true,
38
94
  graphSeedFromCandidates: false,
39
95
  trapBoost: 2.0,
40
96
  trapBoostMode: 'conditional',
41
- verifiedBoost: 1.25
97
+ verifiedBoost: 1.25,
98
+ aggregateCoverage: false
42
99
  },
43
100
  requiresEmbeddings: true,
44
101
  embeddingModel: 'minilm'
@@ -65,6 +122,8 @@ export function loadPublicDataset(dataset) {
65
122
  db.exec('ROLLBACK');
66
123
  throw error;
67
124
  }
125
+ // Seeding is not timed; index everything so the first measured query is a warm query.
126
+ drainFtsQueue(db, { limit: 1_000_000, schema: 'main' });
68
127
  return { db, repo };
69
128
  }
70
129
  export async function prepareEmbeddings(db, repo, dataset, engine) {
@@ -98,6 +157,7 @@ export function metricsFromCases(cases) {
98
157
  mrr: 0,
99
158
  evidenceRecallAt5: 0,
100
159
  fullRecallAt5: 0,
160
+ fullRecallAt10: 0,
101
161
  avgTokens: 0,
102
162
  p50LatencyMs: 0,
103
163
  p95LatencyMs: 0
@@ -112,6 +172,7 @@ export function metricsFromCases(cases) {
112
172
  mrr: round(cases.reduce((sum, item) => sum + item.reciprocalRank, 0) / count, 3),
113
173
  evidenceRecallAt5: round(cases.reduce((sum, item) => sum + item.recallAt5, 0) / count, 3),
114
174
  fullRecallAt5: round((cases.reduce((sum, item) => sum + item.fullRecallAt5, 0) / count) * 100, 1),
175
+ fullRecallAt10: round((cases.reduce((sum, item) => sum + item.fullRecallAt10, 0) / count) * 100, 1),
115
176
  avgTokens: Math.round(cases.reduce((sum, item) => sum + item.tokens, 0) / count),
116
177
  p50LatencyMs: round(percentile(latencies, 50), 2),
117
178
  p95LatencyMs: round(percentile(latencies, 95), 2)
@@ -124,6 +185,8 @@ export function caseResult(item, retrieved, tokens, latencyMs) {
124
185
  const top5 = retrieved.slice(0, 5);
125
186
  const foundAt5 = top5.filter((id) => gold.has(id)).length;
126
187
  const recallAt5 = gold.size === 0 ? 0 : foundAt5 / gold.size;
188
+ const foundAt10 = retrieved.slice(0, 10).filter((id) => gold.has(id)).length;
189
+ const fullRecallAt10 = gold.size > 0 && foundAt10 === gold.size ? 1 : 0;
127
190
  return {
128
191
  caseId: item.id,
129
192
  category: item.category,
@@ -135,6 +198,7 @@ export function caseResult(item, retrieved, tokens, latencyMs) {
135
198
  hitAt10: rank > 0 && rank <= 10 ? 1 : 0,
136
199
  recallAt5: round(recallAt5, 3),
137
200
  fullRecallAt5: recallAt5 === 1 ? 1 : 0,
201
+ fullRecallAt10,
138
202
  goldCount: item.goldIds.length,
139
203
  retrieved,
140
204
  goldIds: item.goldIds,
@@ -145,6 +209,7 @@ export function caseResult(item, retrieved, tokens, latencyMs) {
145
209
  export async function evaluatePublicEngine(db, dataset, engine, options = {}) {
146
210
  const selected = options.limit ? dataset.cases.slice(0, options.limit) : dataset.cases;
147
211
  const budgetTokens = options.budgetTokens ?? 1_000_000;
212
+ const resultLimit = engine.limit ?? 10;
148
213
  const results = [];
149
214
  for (const item of selected) {
150
215
  const start = performance.now();
@@ -152,14 +217,20 @@ export async function evaluatePublicEngine(db, dataset, engine, options = {}) {
152
217
  projectId: item.projectId,
153
218
  query: item.query,
154
219
  budgetTokens,
155
- limit: 10,
220
+ limit: resultLimit,
156
221
  backfill: false,
157
- retrieval: engine.retrieval
222
+ retrieval: { ...engine.retrieval, questionDate: item.questionDate }
158
223
  });
159
224
  const latencyMs = performance.now() - start;
160
- results.push(caseResult(item, response.memories.map((memory) => memory.memory.id), response.totalTokens, latencyMs));
225
+ const caseRow = caseResult(item, response.memories.map((memory) => memory.memory.id), response.totalTokens, latencyMs);
226
+ if (response.temporalWindow) {
227
+ caseRow.temporalWindow = response.temporalWindow.label;
228
+ caseRow.temporalFallback = response.temporalFallback === true;
229
+ }
230
+ results.push(caseRow);
161
231
  }
162
232
  const categories = Array.from(new Set(results.map((item) => item.category))).sort();
233
+ const goldCounts = Array.from(new Set(results.map((item) => item.goldCount))).sort((a, b) => a - b);
163
234
  return {
164
235
  name: engine.name,
165
236
  config: engine.retrieval,
@@ -168,6 +239,10 @@ export async function evaluatePublicEngine(db, dataset, engine, options = {}) {
168
239
  category,
169
240
  ...metricsFromCases(results.filter((item) => item.category === category))
170
241
  })),
242
+ byGoldCount: goldCounts.map((goldCount) => ({
243
+ goldCount,
244
+ ...metricsFromCases(results.filter((item) => item.goldCount === goldCount))
245
+ })),
171
246
  cases: results
172
247
  };
173
248
  }
@@ -1 +1 @@
1
- {"version":3,"file":"public-harness.js","sourceRoot":"","sources":["../../../src/bench/public-harness.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAwB,MAAM,yBAAyB,CAAC;AAU/E,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C;QACE,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE;KACzG;IACD;QACE,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE;YACT,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,IAAI;YACjB,uBAAuB,EAAE,KAAK;YAC9B,SAAS,EAAE,GAAG;YACd,aAAa,EAAE,aAAa;YAC5B,aAAa,EAAE,IAAI;SACpB;QACD,kBAAkB,EAAE,IAAI;QACxB,cAAc,EAAE,MAAM;KACvB;IACD;QACE,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE;YACT,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,IAAI;YACjB,uBAAuB,EAAE,KAAK;YAC9B,SAAS,EAAE,GAAG;YACd,aAAa,EAAE,aAAa;YAC5B,aAAa,EAAE,IAAI;SACpB;QACD,kBAAkB,EAAE,IAAI;QACxB,cAAc,EAAE,QAAQ;KACzB;CACF,CAAC;AAmDF,MAAM,UAAU,iBAAiB,CAAC,OAAsB;IACtD,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;IACxC,WAAW,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAKzB,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC;QACH,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,CACR,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,SAAS,EAChB,cAAc,EACd,UAAU,EACV,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,OAAO,EACd,UAAU,EACV,GAAG,EACH,MAAM,CAAC,SAAS,EAChB,IAAI,EACJ,MAAM,CAAC,SAAS,CACjB,CAAC;QACJ,CAAC;QACD,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpB,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAAgB,EAChB,IAAqB,EACrB,OAAsB,EACtB,MAAoB;IAEpB,IAAI,CAAC,MAAM,CAAC,kBAAkB;QAAE,OAAO,CAAC,CAAC;IACzC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACpF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,QAAQ,IAAI,MAAM,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,UAAU,CAAC,MAAgB,EAAE,CAAS;IAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjG,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,MAAc;IAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAyB;IACxD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IAC3B,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO;YACL,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;YACV,GAAG,EAAE,CAAC;YACN,iBAAiB,EAAE,CAAC;YACpB,aAAa,EAAE,CAAC;YAChB,SAAS,EAAE,CAAC;YACZ,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;SAChB,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD,OAAO;QACL,KAAK;QACL,MAAM,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACnF,MAAM,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACnF,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACrF,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;QAChF,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;QACzF,aAAa,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACjG,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;QAChF,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACjD,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,IAAgB,EAChB,SAAmB,EACnB,MAAc,EACd,SAAiB;IAEjB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAC7D,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,IAAI;QACJ,cAAc,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9B,aAAa,EAAE,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;QAC9B,SAAS;QACT,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM;QACN,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,EAAgB,EAChB,OAAsB,EACtB,MAAoB,EACpB,UAAgC,EAAE;IAElC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACvF,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,SAAS,CAAC;IACvD,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE;YACxC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY;YACZ,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAC5C,OAAO,CAAC,IAAI,CACV,UAAU,CACR,IAAI,EACJ,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EACnD,QAAQ,CAAC,WAAW,EACpB,SAAS,CACV,CACF,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACpF,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,SAAS;QACxB,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;QAClC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACxC,QAAQ;YACR,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;SAC1E,CAAC,CAAC;QACH,KAAK,EAAE,OAAO;KACf,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"public-harness.js","sourceRoot":"","sources":["../../../src/bench/public-harness.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAwB,MAAM,yBAAyB,CAAC;AAY/E,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C;QACE,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE;YACT,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,KAAK;YACnB,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,CAAC;YAChB,iBAAiB,EAAE,KAAK;SACzB;KACF;IACD;QACE,yEAAyE;QACzE,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE;YACT,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,KAAK;YACnB,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,CAAC;YAChB,cAAc,EAAE,IAAI;YACpB,iBAAiB,EAAE,KAAK;SACzB;KACF;IACD;QACE,mFAAmF;QACnF,IAAI,EAAE,gBAAgB;QACtB,SAAS,EAAE;YACT,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,KAAK;YACnB,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,CAAC;YAChB,iBAAiB,EAAE,IAAI;YACvB,cAAc,EAAE,EAAE;SACnB;KACF;IACD;QACE,gFAAgF;QAChF,sCAAsC;QACtC,IAAI,EAAE,yBAAyB;QAC/B,SAAS,EAAE;YACT,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,KAAK;YACnB,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,CAAC;YAChB,cAAc,EAAE,IAAI;YACpB,iBAAiB,EAAE,IAAI;YACvB,cAAc,EAAE,EAAE;SACnB;KACF;IACD;QACE,mFAAmF;QACnF,6EAA6E;QAC7E,IAAI,EAAE,gBAAgB;QACtB,SAAS,EAAE,EAAE;KACd;IACD;QACE,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE;YACT,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,MAAM;YAClB,WAAW,EAAE,IAAI;YACjB,uBAAuB,EAAE,KAAK;YAC9B,SAAS,EAAE,GAAG;YACd,aAAa,EAAE,aAAa;YAC5B,aAAa,EAAE,IAAI;YACnB,iBAAiB,EAAE,KAAK;SACzB;QACD,kBAAkB,EAAE,IAAI;QACxB,cAAc,EAAE,MAAM;KACvB;IACD;QACE,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE;YACT,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,UAAU;YACtB,WAAW,EAAE,IAAI;YACjB,uBAAuB,EAAE,KAAK;YAC9B,SAAS,EAAE,GAAG;YACd,aAAa,EAAE,aAAa;YAC5B,aAAa,EAAE,IAAI;YACnB,iBAAiB,EAAE,KAAK;SACzB;QACD,kBAAkB,EAAE,IAAI;QACxB,cAAc,EAAE,QAAQ;KACzB;CACF,CAAC;AAgEF,MAAM,UAAU,iBAAiB,CAAC,OAAsB;IACtD,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;IACxC,WAAW,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAKzB,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC;QACH,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,CACR,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,SAAS,EAChB,cAAc,EACd,UAAU,EACV,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,OAAO,EACd,UAAU,EACV,GAAG,EACH,MAAM,CAAC,SAAS,EAChB,IAAI,EACJ,MAAM,CAAC,SAAS,CACjB,CAAC;QACJ,CAAC;QACD,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpB,MAAM,KAAK,CAAC;IACd,CAAC;IAED,sFAAsF;IACtF,aAAa,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAExD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAAgB,EAChB,IAAqB,EACrB,OAAsB,EACtB,MAAoB;IAEpB,IAAI,CAAC,MAAM,CAAC,kBAAkB;QAAE,OAAO,CAAC,CAAC;IACzC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACpF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,QAAQ,IAAI,MAAM,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,UAAU,CAAC,MAAgB,EAAE,CAAS;IAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjG,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,MAAc;IAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAyB;IACxD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IAC3B,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO;YACL,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;YACV,GAAG,EAAE,CAAC;YACN,iBAAiB,EAAE,CAAC;YACpB,aAAa,EAAE,CAAC;YAChB,cAAc,EAAE,CAAC;YACjB,SAAS,EAAE,CAAC;YACZ,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;SAChB,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD,OAAO;QACL,KAAK;QACL,MAAM,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACnF,MAAM,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACnF,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACrF,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;QAChF,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;QACzF,aAAa,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACjG,cAAc,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACnG,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;QAChF,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACjD,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,IAAgB,EAChB,SAAmB,EACnB,MAAc,EACd,SAAiB;IAEjB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAC7D,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7E,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,IAAI;QACJ,cAAc,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9B,aAAa,EAAE,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,cAAc;QACd,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;QAC9B,SAAS;QACT,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM;QACN,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,EAAgB,EAChB,OAAsB,EACtB,MAAoB,EACpB,UAAgC,EAAE;IAElC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACvF,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,SAAS,CAAC;IACvD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IACvC,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE;YACxC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY;YACZ,KAAK,EAAE,WAAW;YAClB,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;SACpE,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAC5C,MAAM,OAAO,GAAG,UAAU,CACxB,IAAI,EACJ,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EACnD,QAAQ,CAAC,WAAW,EACpB,SAAS,CACV,CAAC;QACF,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC5B,OAAO,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC;YACvD,OAAO,CAAC,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,KAAK,IAAI,CAAC;QAChE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACpF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpG,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,SAAS;QACxB,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;QAClC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACxC,QAAQ;YACR,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;SAC1E,CAAC,CAAC;QACH,WAAW,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC1C,SAAS;YACT,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;SAC5E,CAAC,CAAC;QACH,KAAK,EAAE,OAAO;KACf,CAAC;AACJ,CAAC"}
@@ -8,11 +8,11 @@ import * as crypto from 'node:crypto';
8
8
  import * as fs from 'node:fs';
9
9
  export const PUBLIC_DATASET_PINS = {
10
10
  longmemeval: {
11
- file: 'longmemeval_s.json',
12
- revision: '2ec2a557f339b6c0369619b1ed5793734cc87533',
13
- sha256: '08D8DAD4BE43EE2049A22FF5674EB86725D0CE5FF434CDE2627E5E8E7E117894',
14
- url: 'https://huggingface.co/datasets/xiaowu0162/longmemeval',
15
- source: 'huggingface:xiaowu0162/longmemeval'
11
+ file: 'longmemeval_s_cleaned.json',
12
+ revision: '98d7416c24c778c2fee6e6f3006e7a073259d48f',
13
+ sha256: 'D6F21EA9D60A0D56F34A05B609C79C88A451D2AE03597821EA3D5A9678C3A442',
14
+ url: 'https://huggingface.co/datasets/xiaowu0162/longmemeval-cleaned',
15
+ source: 'huggingface:xiaowu0162/longmemeval-cleaned'
16
16
  },
17
17
  locomo: {
18
18
  file: 'locomo10.json',
@@ -1 +1 @@
1
- {"version":3,"file":"public-pins.js","sourceRoot":"","sources":["../../../src/bench/public-pins.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAY9B,MAAM,CAAC,MAAM,mBAAmB,GAA0C;IACxE,WAAW,EAAE;QACX,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,0CAA0C;QACpD,MAAM,EAAE,kEAAkE;QAC1E,GAAG,EAAE,wDAAwD;QAC7D,MAAM,EAAE,oCAAoC;KAC7C;IACD,MAAM,EAAE;QACN,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,0CAA0C;QACpD,MAAM,EAAE,kEAAkE;QAC1E,GAAG,EAAE,yCAAyC;QAC9C,MAAM,EAAE,6BAA6B;KACtC;CACF,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAe,EAAE,IAAY,EAAE,aAAsB;IACpF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,sBAAsB,GAAG,CAAC,GAAG,gBAAgB,GAAG,CAAC,QAAQ,oBAAoB,IAAI,EAAE,CACjH,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,6BAA6B,IAAI,cAAc,GAAG,CAAC,MAAM,cAAc,MAAM,+DAA+D,CAC7I,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"public-pins.js","sourceRoot":"","sources":["../../../src/bench/public-pins.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAY9B,MAAM,CAAC,MAAM,mBAAmB,GAA0C;IACxE,WAAW,EAAE;QACX,IAAI,EAAE,4BAA4B;QAClC,QAAQ,EAAE,0CAA0C;QACpD,MAAM,EAAE,kEAAkE;QAC1E,GAAG,EAAE,gEAAgE;QACrE,MAAM,EAAE,4CAA4C;KACrD;IACD,MAAM,EAAE;QACN,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,0CAA0C;QACpD,MAAM,EAAE,kEAAkE;QAC1E,GAAG,EAAE,yCAAyC;QAC9C,MAAM,EAAE,6BAA6B;KACtC;CACF,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAe,EAAE,IAAY,EAAE,aAAsB;IACpF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,sBAAsB,GAAG,CAAC,GAAG,gBAAgB,GAAG,CAAC,QAAQ,oBAAoB,IAAI,EAAE,CACjH,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,6BAA6B,IAAI,cAAc,GAAG,CAAC,MAAM,cAAc,MAAM,+DAA+D,CAC7I,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Deterministic evaluation split.
3
+ *
4
+ * The split is derived from a SHA-256 of the case id and never from the case content,
5
+ * question type, or result. Sorting by that hash and cutting at the midpoint produces an
6
+ * exactly balanced 60/60 split for a 120-case slice and is stable across machines, Node
7
+ * versions, and runs.
8
+ *
9
+ * Tuning happens on `dev` only. The `test` half is reported but never used to choose a
10
+ * default, a threshold, or a fusion weight.
11
+ */
12
+ export type BenchSplitName = 'dev' | 'test';
13
+ export interface SplitCase {
14
+ id: string;
15
+ }
16
+ export declare function splitKey(id: string): string;
17
+ /**
18
+ * Partitions cases into dev/test halves. The ordering of the input never matters: both
19
+ * halves are returned in the input order, but membership is decided by the hash rank.
20
+ */
21
+ export declare function splitCases<T extends SplitCase>(cases: T[], devFraction?: number): {
22
+ dev: T[];
23
+ test: T[];
24
+ };
25
+ export declare function selectSplit<T extends SplitCase>(cases: T[], split: BenchSplitName | 'all'): T[];
26
+ /**
27
+ * Takes the first `perType` cases of every category, in dataset order. This is the
28
+ * documented slice rule: first 20 answerable questions per question_type x 6 types.
29
+ */
30
+ export declare function slicePerType<T extends {
31
+ category: string;
32
+ }>(cases: T[], perType: number): T[];
33
+ //# sourceMappingURL=split.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split.d.ts","sourceRoot":"","sources":["../../../src/bench/split.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,CAAC;AAE5C,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,WAAW,SAAM,GAAG;IAC9E,GAAG,EAAE,CAAC,EAAE,CAAC;IACT,IAAI,EAAE,CAAC,EAAE,CAAC;CACX,CAaA;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,GAAG,KAAK,GAAG,CAAC,EAAE,CAG/F;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE,CAU7F"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Deterministic evaluation split.
3
+ *
4
+ * The split is derived from a SHA-256 of the case id and never from the case content,
5
+ * question type, or result. Sorting by that hash and cutting at the midpoint produces an
6
+ * exactly balanced 60/60 split for a 120-case slice and is stable across machines, Node
7
+ * versions, and runs.
8
+ *
9
+ * Tuning happens on `dev` only. The `test` half is reported but never used to choose a
10
+ * default, a threshold, or a fusion weight.
11
+ */
12
+ import { createHash } from 'node:crypto';
13
+ export function splitKey(id) {
14
+ return createHash('sha256').update(id, 'utf8').digest('hex');
15
+ }
16
+ /**
17
+ * Partitions cases into dev/test halves. The ordering of the input never matters: both
18
+ * halves are returned in the input order, but membership is decided by the hash rank.
19
+ */
20
+ export function splitCases(cases, devFraction = 0.5) {
21
+ if (cases.length === 0)
22
+ return { dev: [], test: [] };
23
+ const ranked = [...cases].sort((a, b) => {
24
+ const ka = splitKey(a.id);
25
+ const kb = splitKey(b.id);
26
+ return ka < kb ? -1 : ka > kb ? 1 : 0;
27
+ });
28
+ const devCount = Math.round(ranked.length * devFraction);
29
+ const devIds = new Set(ranked.slice(0, devCount).map((item) => item.id));
30
+ return {
31
+ dev: cases.filter((item) => devIds.has(item.id)),
32
+ test: cases.filter((item) => !devIds.has(item.id))
33
+ };
34
+ }
35
+ export function selectSplit(cases, split) {
36
+ if (split === 'all')
37
+ return cases;
38
+ return splitCases(cases)[split];
39
+ }
40
+ /**
41
+ * Takes the first `perType` cases of every category, in dataset order. This is the
42
+ * documented slice rule: first 20 answerable questions per question_type x 6 types.
43
+ */
44
+ export function slicePerType(cases, perType) {
45
+ const counts = new Map();
46
+ const selected = [];
47
+ for (const item of cases) {
48
+ const current = counts.get(item.category) ?? 0;
49
+ if (current >= perType)
50
+ continue;
51
+ counts.set(item.category, current + 1);
52
+ selected.push(item);
53
+ }
54
+ return selected;
55
+ }
56
+ //# sourceMappingURL=split.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split.js","sourceRoot":"","sources":["../../../src/bench/split.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQzC,MAAM,UAAU,QAAQ,CAAC,EAAU;IACjC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAsB,KAAU,EAAE,WAAW,GAAG,GAAG;IAI3E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1B,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO;QACL,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAsB,KAAU,EAAE,KAA6B;IACxF,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAClC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAiC,KAAU,EAAE,OAAe;IACtF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,QAAQ,GAAQ,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,OAAO,IAAI,OAAO;YAAE,SAAS;QACjC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Paired statistics for retrieval benchmarks.
3
+ *
4
+ * Every published delta in this repo is reported with a confidence interval, and every
5
+ * strict-recall comparison uses an exact McNemar test, because the two engines are run on
6
+ * the same cases and the correct comparison is the discordant pairs, not two independent
7
+ * proportions.
8
+ */
9
+ /** Wilson score interval for a binomial proportion, in percentage points. */
10
+ export declare function wilson(successes: number, n: number, z?: number): [number, number];
11
+ /**
12
+ * Two-sided exact McNemar test on discordant pairs.
13
+ * `b` = baseline correct / candidate wrong, `c` = baseline wrong / candidate correct.
14
+ * Returns the exact binomial p-value; when b + c is 0 the result is p = 1.
15
+ */
16
+ export declare function mcnemarExact(b: number, c: number): number;
17
+ /**
18
+ * Paired bootstrap over per-case differences.
19
+ * Resamples case indices with replacement, so the interval reflects case-level variance
20
+ * rather than the variance of two independent samples.
21
+ */
22
+ export declare function pairedBootstrap(diffs: number[], options?: {
23
+ iterations?: number;
24
+ seed?: number;
25
+ }): {
26
+ mean: number;
27
+ low: number;
28
+ high: number;
29
+ iterations: number;
30
+ };
31
+ /** Convenience wrapper: paired comparison of two per-case 0/1 vectors keyed by case id. */
32
+ export declare function pairedCompare(baseline: Map<string, number>, candidate: Map<string, number>): {
33
+ n: number;
34
+ fixed: number;
35
+ broken: number;
36
+ unchanged: number;
37
+ mcnemarP: number;
38
+ bootstrap: ReturnType<typeof pairedBootstrap>;
39
+ };
40
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/bench/stats.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,6EAA6E;AAC7E,wBAAgB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,SAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAU/E;AAQD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAOzD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACnD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAwBjE;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAA;CAAE,CAoBlI"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Paired statistics for retrieval benchmarks.
3
+ *
4
+ * Every published delta in this repo is reported with a confidence interval, and every
5
+ * strict-recall comparison uses an exact McNemar test, because the two engines are run on
6
+ * the same cases and the correct comparison is the discordant pairs, not two independent
7
+ * proportions.
8
+ */
9
+ /** Wilson score interval for a binomial proportion, in percentage points. */
10
+ export function wilson(successes, n, z = 1.96) {
11
+ if (n === 0)
12
+ return [0, 0];
13
+ const p = successes / n;
14
+ const denom = 1 + (z * z) / n;
15
+ const center = (p + (z * z) / (2 * n)) / denom;
16
+ const spread = (z * Math.sqrt((p * (1 - p)) / n + (z * z) / (4 * n * n))) / denom;
17
+ return [
18
+ Math.round(Math.max(0, center - spread) * 1000) / 10,
19
+ Math.round(Math.min(1, center + spread) * 1000) / 10
20
+ ];
21
+ }
22
+ function logChoose(n, k) {
23
+ let sum = 0;
24
+ for (let i = 1; i <= k; i++)
25
+ sum += Math.log(n - k + i) - Math.log(i);
26
+ return sum;
27
+ }
28
+ /**
29
+ * Two-sided exact McNemar test on discordant pairs.
30
+ * `b` = baseline correct / candidate wrong, `c` = baseline wrong / candidate correct.
31
+ * Returns the exact binomial p-value; when b + c is 0 the result is p = 1.
32
+ */
33
+ export function mcnemarExact(b, c) {
34
+ const n = b + c;
35
+ if (n === 0)
36
+ return 1;
37
+ const k = Math.min(b, c);
38
+ let tail = 0;
39
+ for (let i = 0; i <= k; i++)
40
+ tail += Math.exp(logChoose(n, i) - n * Math.LN2);
41
+ return Math.min(1, Math.round(tail * 2 * 1e6) / 1e6);
42
+ }
43
+ /**
44
+ * Paired bootstrap over per-case differences.
45
+ * Resamples case indices with replacement, so the interval reflects case-level variance
46
+ * rather than the variance of two independent samples.
47
+ */
48
+ export function pairedBootstrap(diffs, options = {}) {
49
+ const iterations = options.iterations ?? 10_000;
50
+ if (diffs.length === 0)
51
+ return { mean: 0, low: 0, high: 0, iterations };
52
+ const mean = diffs.reduce((sum, value) => sum + value, 0) / diffs.length;
53
+ // Deterministic LCG so a published interval is reproducible without a seed file.
54
+ let state = options.seed ?? 0x9e3779b9;
55
+ const next = () => {
56
+ state = (state * 1664525 + 1013904223) >>> 0;
57
+ return state / 0x100000000;
58
+ };
59
+ const means = [];
60
+ for (let i = 0; i < iterations; i++) {
61
+ let sum = 0;
62
+ for (let j = 0; j < diffs.length; j++)
63
+ sum += diffs[Math.floor(next() * diffs.length)];
64
+ means.push(sum / diffs.length);
65
+ }
66
+ means.sort((a, b) => a - b);
67
+ const at = (q) => means[Math.min(means.length - 1, Math.max(0, Math.floor(q * means.length)))];
68
+ return {
69
+ mean: Math.round(mean * 1000) / 1000,
70
+ low: Math.round(at(0.025) * 1000) / 1000,
71
+ high: Math.round(at(0.975) * 1000) / 1000,
72
+ iterations
73
+ };
74
+ }
75
+ /** Convenience wrapper: paired comparison of two per-case 0/1 vectors keyed by case id. */
76
+ export function pairedCompare(baseline, candidate) {
77
+ const ids = [...baseline.keys()].filter((id) => candidate.has(id));
78
+ let fixed = 0;
79
+ let broken = 0;
80
+ const diffs = [];
81
+ for (const id of ids) {
82
+ const a = baseline.get(id);
83
+ const b = candidate.get(id);
84
+ if (a === 0 && b === 1)
85
+ fixed++;
86
+ else if (a === 1 && b === 0)
87
+ broken++;
88
+ diffs.push(b - a);
89
+ }
90
+ return {
91
+ n: ids.length,
92
+ fixed,
93
+ broken,
94
+ unchanged: ids.length - fixed - broken,
95
+ mcnemarP: mcnemarExact(broken, fixed),
96
+ bootstrap: pairedBootstrap(diffs)
97
+ };
98
+ }
99
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/bench/stats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Engine descriptors for the cross-engine comparison.
3
+ *
4
+ * Each descriptor pins a package version, states how to start it over MCP stdio, how to
5
+ * isolate its on-disk state, and how to map one marker document and one query onto its
6
+ * tools. Nothing engine-specific lives outside this file.
7
+ *
8
+ * Isolation was verified by probing, not assumed:
9
+ * - fastrmemory honours `FASTR_HOME` for the global database and `--project` for the
10
+ * project database.
11
+ * - agentmemory ignores `AGENTMEMORY_DATA_DIR` and resolves `homedir()/.agentmemory`,
12
+ * so `USERPROFILE` and `HOME` both point at a fresh directory per case.
13
+ * - hippo's MCP server ignores `HIPPO_HOME` and writes to `~/.hippo` unless the working
14
+ * directory contains a `.hippo` store, so each case runs `hippo init` in its own
15
+ * project directory first and also gets a fresh home.
16
+ */
17
+ import type { MarkerDoc } from './marker-corpus.js';
18
+ import type { McpServerSpec } from './mcp-stdio.js';
19
+ export interface CaseDirs {
20
+ /** Root of the throwaway directory tree for this engine run. */
21
+ root: string;
22
+ /** Project directory handed to the engine. */
23
+ project: string;
24
+ /** Fresh home directory, so nothing escapes into the real user profile. */
25
+ home: string;
26
+ }
27
+ export interface VsEngine {
28
+ id: string;
29
+ label: string;
30
+ /** Pinned version, reported in the artifact. */
31
+ version: string;
32
+ /** Absolute path of the JavaScript entry point that is launched with `node`. */
33
+ entry: string;
34
+ bootstrap: (dirs: CaseDirs) => Promise<void>;
35
+ spec: (dirs: CaseDirs) => McpServerSpec;
36
+ rememberTool: string;
37
+ rememberArgs: (doc: MarkerDoc) => Record<string, unknown>;
38
+ recallTool: string;
39
+ recallArgs: (query: string, budgetTokens: number) => Record<string, unknown>;
40
+ /** True when the engine needs a project directory that already exists. */
41
+ needsProjectDir: boolean;
42
+ }
43
+ export interface EngineEnvironment {
44
+ repoRoot: string;
45
+ /** Directory holding the pinned third-party installs. */
46
+ externalDir: string;
47
+ }
48
+ export declare function createVsEngines(environment: EngineEnvironment): VsEngine[];
49
+ /** Fails early with an actionable message instead of timing out inside the MCP handshake. */
50
+ export declare function assertEngineAvailable(engine: VsEngine, externalDir: string): void;
51
+ //# sourceMappingURL=vs-engines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vs-engines.d.ts","sourceRoot":"","sources":["../../../src/bench/vs-engines.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,WAAW,QAAQ;IACvB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,aAAa,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7E,0EAA0E;IAC1E,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;CACrB;AAOD,wBAAgB,eAAe,CAAC,WAAW,EAAE,iBAAiB,GAAG,QAAQ,EAAE,CAyF1E;AAED,6FAA6F;AAC7F,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAQjF"}