agentdb 3.0.0 → 3.2.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 (57) hide show
  1. package/README.md +13 -0
  2. package/dist/src/backends/ExactSearch.d.ts +22 -0
  3. package/dist/src/backends/ExactSearch.d.ts.map +1 -0
  4. package/dist/src/backends/ExactSearch.js +36 -0
  5. package/dist/src/backends/ExactSearch.js.map +1 -0
  6. package/dist/src/backends/VectorBackend.d.ts +33 -1
  7. package/dist/src/backends/VectorBackend.d.ts.map +1 -1
  8. package/dist/src/backends/VectorBackend.js +58 -4
  9. package/dist/src/backends/VectorBackend.js.map +1 -1
  10. package/dist/src/backends/rvf/SqlJsRvfBackend.d.ts.map +1 -1
  11. package/dist/src/backends/rvf/SqlJsRvfBackend.js +22 -12
  12. package/dist/src/backends/rvf/SqlJsRvfBackend.js.map +1 -1
  13. package/dist/src/controllers/EmbeddingService.d.ts +10 -0
  14. package/dist/src/controllers/EmbeddingService.d.ts.map +1 -1
  15. package/dist/src/controllers/EmbeddingService.js +12 -0
  16. package/dist/src/controllers/EmbeddingService.js.map +1 -1
  17. package/dist/src/controllers/ReasoningBank.d.ts +40 -4
  18. package/dist/src/controllers/ReasoningBank.d.ts.map +1 -1
  19. package/dist/src/controllers/ReasoningBank.js +124 -57
  20. package/dist/src/controllers/ReasoningBank.js.map +1 -1
  21. package/dist/src/controllers/ReflexionMemory.d.ts +20 -0
  22. package/dist/src/controllers/ReflexionMemory.d.ts.map +1 -1
  23. package/dist/src/controllers/ReflexionMemory.js +104 -17
  24. package/dist/src/controllers/ReflexionMemory.js.map +1 -1
  25. package/dist/src/controllers/SkillLibrary.d.ts +9 -0
  26. package/dist/src/controllers/SkillLibrary.d.ts.map +1 -1
  27. package/dist/src/controllers/SkillLibrary.js +60 -20
  28. package/dist/src/controllers/SkillLibrary.js.map +1 -1
  29. package/dist/src/controllers/WASMVectorSearch.d.ts.map +1 -1
  30. package/dist/src/controllers/WASMVectorSearch.js +48 -17
  31. package/dist/src/controllers/WASMVectorSearch.js.map +1 -1
  32. package/dist/src/controllers/episode-hybrid.d.ts +63 -0
  33. package/dist/src/controllers/episode-hybrid.d.ts.map +1 -0
  34. package/dist/src/controllers/episode-hybrid.js +117 -0
  35. package/dist/src/controllers/episode-hybrid.js.map +1 -0
  36. package/dist/src/mcp/agentdb-mcp-server.js +146 -3
  37. package/dist/src/mcp/agentdb-mcp-server.js.map +1 -1
  38. package/dist/src/search/conversation-retrieval.d.ts +56 -0
  39. package/dist/src/search/conversation-retrieval.d.ts.map +1 -0
  40. package/dist/src/search/conversation-retrieval.js +161 -0
  41. package/dist/src/search/conversation-retrieval.js.map +1 -0
  42. package/dist/src/search/cross-encoder.d.ts +17 -0
  43. package/dist/src/search/cross-encoder.d.ts.map +1 -0
  44. package/dist/src/search/cross-encoder.js +52 -0
  45. package/dist/src/search/cross-encoder.js.map +1 -0
  46. package/dist/src/security/mcp-policy.d.ts.map +1 -1
  47. package/dist/src/security/mcp-policy.js +4 -0
  48. package/dist/src/security/mcp-policy.js.map +1 -1
  49. package/dist/src/simd/simd-vector-ops.d.ts +11 -0
  50. package/dist/src/simd/simd-vector-ops.d.ts.map +1 -1
  51. package/dist/src/simd/simd-vector-ops.js +67 -0
  52. package/dist/src/simd/simd-vector-ops.js.map +1 -1
  53. package/dist/src/utils/top-k.d.ts +44 -0
  54. package/dist/src/utils/top-k.d.ts.map +1 -0
  55. package/dist/src/utils/top-k.js +111 -0
  56. package/dist/src/utils/top-k.js.map +1 -0
  57. package/package.json +2 -2
@@ -19,6 +19,8 @@
19
19
  */
20
20
  import { normalizeRowId } from '../types/database.types.js';
21
21
  import { searchVectors } from '../backends/VectorBackend.js';
22
+ import { sqlExactSource } from '../backends/ExactSearch.js';
23
+ import { TopK, squaredNorm, blobToFloat32 } from '../utils/top-k.js';
22
24
  /** Parse JSON from DB row values without throwing on malformed data. */
23
25
  function safeJsonParse(value, fallback) {
24
26
  if (!value)
@@ -30,6 +32,27 @@ function safeJsonParse(value, fallback) {
30
32
  return fallback;
31
33
  }
32
34
  }
35
+ export const DEFAULT_RERANK_WEIGHTS = Object.freeze({
36
+ similarity: 0.7,
37
+ successRate: 0.2,
38
+ reward: 0.1,
39
+ });
40
+ function resolveWeights(base, override) {
41
+ const weights = { ...base, ...override };
42
+ for (const [name, value] of Object.entries(weights)) {
43
+ if (!Number.isFinite(value) || value < 0) {
44
+ throw new Error(`rerank weight ${name} must be a non-negative finite number`);
45
+ }
46
+ }
47
+ return weights;
48
+ }
49
+ const clamp01 = (x) => Number.isFinite(x) ? Math.min(1, Math.max(0, x)) : 0;
50
+ /** Rank score for a pattern with a similarity (ADR-015) */
51
+ export function rerankScore(similarity, successRate, avgReward, weights = DEFAULT_RERANK_WEIGHTS) {
52
+ return weights.similarity * similarity
53
+ + weights.successRate * clamp01(successRate)
54
+ + weights.reward * clamp01(avgReward);
55
+ }
33
56
  /** How long getPatternStats() results are reused */
34
57
  const PATTERN_STATS_TTL_MS = 5 * 60 * 1000;
35
58
  export class ReasoningBank {
@@ -42,6 +65,8 @@ export class ReasoningBank {
42
65
  // Maps pattern ID (number) to vector backend ID (string) for hybrid mode
43
66
  idMapping = new Map();
44
67
  nextVectorId = 0;
68
+ rerankByDefault;
69
+ rerankWeights;
45
70
  /**
46
71
  * Constructor supports both legacy (v1) and new (v2) modes
47
72
  *
@@ -51,11 +76,13 @@ export class ReasoningBank {
51
76
  * New mode (v2 - with VectorBackend):
52
77
  * new ReasoningBank(db, embedder, vectorBackend, learningBackend?)
53
78
  */
54
- constructor(db, embedder, vectorBackend, learningBackend) {
79
+ constructor(db, embedder, vectorBackend, learningBackend, options = {}) {
55
80
  this.db = db;
56
81
  this.embedder = embedder;
57
82
  this.vectorBackend = vectorBackend;
58
83
  this.learningBackend = learningBackend;
84
+ this.rerankByDefault = options.rerank ?? true;
85
+ this.rerankWeights = resolveWeights(DEFAULT_RERANK_WEIGHTS, options.rerankWeights);
59
86
  this.cache = new Map();
60
87
  this.initializeSchema();
61
88
  }
@@ -118,10 +145,9 @@ export class ReasoningBank {
118
145
  successRate: pattern.successRate,
119
146
  });
120
147
  }
121
- else {
122
- // v1: Use legacy SQLite storage (backward compatible)
123
- this.storePatternEmbedding(patternId, embedding);
124
- }
148
+ // Always keep the SQL copy: v1 searches it, and v2 falls back to it when
149
+ // the index is small or comes back short (ADR-015)
150
+ this.storePatternEmbedding(patternId, embedding);
125
151
  // Invalidate cache
126
152
  this.cache.clear();
127
153
  return patternId;
@@ -130,7 +156,7 @@ export class ReasoningBank {
130
156
  * Store pattern embedding
131
157
  */
132
158
  storePatternEmbedding(patternId, embedding) {
133
- const blob = Buffer.from(embedding.buffer);
159
+ const blob = Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength);
134
160
  const stmt = this.db.prepare(`
135
161
  INSERT OR REPLACE INTO pattern_embeddings (pattern_id, embedding)
136
162
  VALUES (?, ?)
@@ -189,10 +215,37 @@ export class ReasoningBank {
189
215
  queryEmbedding = this.learningBackend.enhance(queryEmbedding, neighborEmbeddings, weights);
190
216
  }
191
217
  }
192
- // Perform vector search
193
- const results = await searchVectors(this.vectorBackend, queryEmbedding, k, { threshold });
194
- // Hydrate with metadata from SQLite
195
- return this.hydratePatterns(results);
218
+ // Reranking needs a candidate pool wider than k
219
+ const weights = this.weightsFor(query);
220
+ const poolSize = weights ? k * 3 : k;
221
+ // Perform vector search; small or short index answers are completed by
222
+ // exact cosine over pattern_embeddings (ADR-015)
223
+ const results = await searchVectors(this.vectorBackend, queryEmbedding, poolSize, { threshold }, this.exactPatternSource());
224
+ // Hydrate with metadata from SQLite. A shared backend can return other
225
+ // controllers' vectors, which carry no patternId.
226
+ const patterns = this.hydratePatterns(results.filter((r) => r.metadata?.patternId != null));
227
+ if (!weights)
228
+ return patterns.slice(0, k);
229
+ for (const p of patterns)
230
+ p.score = rerankScore(p.similarity ?? 0, p.successRate, p.avgReward, weights);
231
+ return patterns.sort((a, b) => b.score - a.score).slice(0, k);
232
+ }
233
+ /** Rerank weights for this query, or null when reranking is off */
234
+ weightsFor(query) {
235
+ if (!(query.rerank ?? this.rerankByDefault))
236
+ return null;
237
+ return query.rerankWeights ? resolveWeights(this.rerankWeights, query.rerankWeights) : this.rerankWeights;
238
+ }
239
+ /** pattern_embeddings as an exact-search source; index ids are per-process, so dedupe on patternId */
240
+ exactPatternSource() {
241
+ return sqlExactSource(this.db, {
242
+ table: 'pattern_embeddings',
243
+ idColumn: 'pattern_id',
244
+ vectorId: (id) => `pattern:${id}`,
245
+ metadata: (id) => ({ patternId: id }),
246
+ owns: (hit) => hit.metadata?.patternId != null,
247
+ key: (hit) => String(hit.metadata?.patternId),
248
+ });
196
249
  }
197
250
  /**
198
251
  * v1: Legacy search using SQLite (backward compatible)
@@ -240,30 +293,33 @@ export class ReasoningBank {
240
293
  ${whereClause}
241
294
  `);
242
295
  const rows = stmt.all(...params);
243
- // Calculate similarities
244
- const candidates = rows.map(row => {
245
- const embedding = new Float32Array(row.embedding.buffer, row.embedding.byteOffset, row.embedding.byteLength / 4);
246
- const similarity = this.cosineSimilarity(query.taskEmbedding, embedding);
247
- return {
248
- id: row.id,
249
- taskType: row.task_type,
250
- approach: row.approach,
251
- successRate: row.success_rate,
252
- uses: row.uses,
253
- avgReward: row.avg_reward,
254
- tags: safeJsonParse(row.tags, []),
255
- metadata: safeJsonParse(row.metadata, {}),
256
- createdAt: row.ts,
257
- embedding,
258
- similarity,
259
- };
260
- });
261
- // Filter by threshold and sort by similarity
262
- const filtered = candidates
263
- .filter(c => c.similarity >= threshold)
264
- .sort((a, b) => b.similarity - a.similarity)
265
- .slice(0, k);
266
- return filtered;
296
+ // Threshold on similarity, then rank by the rerank score (or similarity
297
+ // when reranking is off) in a bounded top-k; only winners are converted.
298
+ const weights = this.weightsFor(query);
299
+ const queryNorm = Math.sqrt(squaredNorm(query.taskEmbedding));
300
+ const top = new TopK(k);
301
+ for (const row of rows) {
302
+ const embedding = blobToFloat32(row.embedding);
303
+ const similarity = this.cosineSimilarity(query.taskEmbedding, embedding, queryNorm);
304
+ if (!(similarity >= threshold))
305
+ continue;
306
+ const score = weights ? rerankScore(similarity, row.success_rate, row.avg_reward, weights) : similarity;
307
+ top.push(score, { row, embedding, similarity });
308
+ }
309
+ return top.sorted().map(({ score, item: { row, embedding, similarity } }) => ({
310
+ id: row.id,
311
+ taskType: row.task_type,
312
+ approach: row.approach,
313
+ successRate: row.success_rate,
314
+ uses: row.uses,
315
+ avgReward: row.avg_reward,
316
+ tags: safeJsonParse(row.tags, []),
317
+ metadata: safeJsonParse(row.metadata, {}),
318
+ createdAt: row.ts,
319
+ embedding,
320
+ similarity,
321
+ ...(weights ? { score } : {}),
322
+ }));
267
323
  }
268
324
  /**
269
325
  * Hydrate search results with metadata from SQLite
@@ -273,27 +329,27 @@ export class ReasoningBank {
273
329
  const stmt = this.db.prepare(`
274
330
  SELECT * FROM reasoning_patterns WHERE id = ?
275
331
  `);
276
- return results.map(result => {
332
+ return results.flatMap(result => {
277
333
  const patternId = result.metadata?.patternId;
278
334
  if (!patternId) {
279
335
  throw new Error(`VectorBackend result missing patternId: ${result.id}`);
280
336
  }
281
337
  const row = stmt.get(patternId);
282
- if (!row) {
283
- throw new Error(`Pattern ${patternId} not found in database`);
284
- }
285
- return {
286
- id: row.id,
287
- taskType: row.task_type,
288
- approach: row.approach,
289
- successRate: row.success_rate,
290
- uses: row.uses,
291
- avgReward: row.avg_reward,
292
- tags: safeJsonParse(row.tags, []),
293
- metadata: safeJsonParse(row.metadata, {}),
294
- createdAt: row.ts,
295
- similarity: result.similarity,
296
- };
338
+ // Deleted pattern still present in the index: skip it
339
+ if (!row)
340
+ return [];
341
+ return [{
342
+ id: row.id,
343
+ taskType: row.task_type,
344
+ approach: row.approach,
345
+ successRate: row.success_rate,
346
+ uses: row.uses,
347
+ avgReward: row.avg_reward,
348
+ tags: safeJsonParse(row.tags, []),
349
+ metadata: safeJsonParse(row.metadata, {}),
350
+ createdAt: row.ts,
351
+ similarity: result.similarity,
352
+ }];
297
353
  });
298
354
  }
299
355
  /**
@@ -391,9 +447,10 @@ export class ReasoningBank {
391
447
  avg_reward = (avg_reward * uses + ?) / (uses + 1)
392
448
  WHERE id = ?
393
449
  `);
394
- stmt.run(success ? 1 : 0, reward, patternId);
450
+ const result = stmt.run(success ? 1 : 0, reward, patternId);
395
451
  // Invalidate cache
396
452
  this.cache.clear();
453
+ return result.changes > 0;
397
454
  }
398
455
  /**
399
456
  * Record pattern outcome for GNN learning (v2 feature)
@@ -401,14 +458,22 @@ export class ReasoningBank {
401
458
  * Updates pattern stats and adds training sample to LearningBackend
402
459
  * for future GNN model improvements.
403
460
  *
461
+ * The updated success rate and average reward feed the reward-aware
462
+ * rerank in searchPatterns() (ADR-015).
463
+ *
404
464
  * @param patternId - Pattern ID to update
405
465
  * @param success - Whether the pattern was successful
406
466
  * @param reward - Optional reward value (default: 1 for success, 0 for failure)
467
+ * @returns false when no pattern has that id
407
468
  */
408
469
  async recordOutcome(patternId, success, reward) {
470
+ if (reward !== undefined && !Number.isFinite(reward)) {
471
+ throw new Error('reward must be a finite number');
472
+ }
409
473
  // Update pattern statistics
410
474
  const actualReward = reward !== undefined ? reward : (success ? 1.0 : 0.0);
411
- this.updatePatternStats(patternId, success, actualReward);
475
+ if (!this.updatePatternStats(patternId, success, actualReward))
476
+ return false;
412
477
  // Add to GNN training buffer if available
413
478
  if (this.learningBackend) {
414
479
  const pattern = this.getPattern(patternId);
@@ -417,6 +482,7 @@ export class ReasoningBank {
417
482
  this.learningBackend.addSample(embedding, success);
418
483
  }
419
484
  }
485
+ return true;
420
486
  }
421
487
  /**
422
488
  * Train GNN model on collected samples (v2 feature)
@@ -476,6 +542,8 @@ export class ReasoningBank {
476
542
  * Delete pattern by ID
477
543
  */
478
544
  deletePattern(patternId) {
545
+ // Foreign-key cascades are off unless the connection enables them
546
+ this.db.prepare('DELETE FROM pattern_embeddings WHERE pattern_id = ?').run(patternId);
479
547
  const stmt = this.db.prepare('DELETE FROM reasoning_patterns WHERE id = ?');
480
548
  const result = stmt.run(patternId);
481
549
  // Invalidate cache
@@ -489,21 +557,20 @@ export class ReasoningBank {
489
557
  this.cache.clear();
490
558
  }
491
559
  /**
492
- * Calculate cosine similarity between two vectors
560
+ * Calculate cosine similarity between two vectors (`normA` is a's
561
+ * precomputed Math.sqrt(squaredNorm(a)))
493
562
  */
494
- cosineSimilarity(a, b) {
563
+ cosineSimilarity(a, b, normA) {
495
564
  if (a.length !== b.length) {
496
565
  throw new Error('Vectors must have same length');
497
566
  }
498
567
  let dotProduct = 0;
499
- let normA = 0;
500
568
  let normB = 0;
501
569
  for (let i = 0; i < a.length; i++) {
502
570
  dotProduct += a[i] * b[i];
503
- normA += a[i] * a[i];
504
571
  normB += b[i] * b[i];
505
572
  }
506
- const denom = Math.sqrt(normA) * Math.sqrt(normB);
573
+ const denom = normA * Math.sqrt(normB);
507
574
  return denom === 0 ? 0 : dotProduct / denom;
508
575
  }
509
576
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ReasoningBank.js","sourceRoot":"","sources":["../../../src/controllers/ReasoningBank.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReasoningBank.js","sourceRoot":"","sources":["../../../src/controllers/ReasoningBank.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,16 @@ export interface ReflexionQuery {
40
40
  onlyFailures?: boolean;
41
41
  onlySuccesses?: boolean;
42
42
  timeWindowDays?: number;
43
+ /**
44
+ * Fuse BM25 keyword ranking with the dense ranking (ADR-016). Default true; false restores pure vector order.
45
+ * Not applied with a graph backend, whose episode ids are not SQL row ids.
46
+ */
47
+ hybrid?: boolean;
48
+ /**
49
+ * Rerank the top candidates with a local cross-encoder (ADR-016). Default false: it costs about 200 ms per call
50
+ * on CPU and downloads a 23 MB model on first use. Needs hybrid; falls back to the hybrid order on any error.
51
+ */
52
+ rerank?: boolean;
43
53
  }
44
54
  export declare class ReflexionMemory {
45
55
  private db;
@@ -48,6 +58,7 @@ export declare class ReflexionMemory {
48
58
  private learningBackend?;
49
59
  private graphBackend?;
50
60
  private queryCache;
61
+ private lexicalIndex?;
51
62
  constructor(db: IDatabaseConnection, embedder: EmbeddingService, vectorBackend?: VectorBackend, learningBackend?: LearningBackend, graphBackend?: GraphBackend, cacheConfig?: QueryCacheConfig);
52
63
  /**
53
64
  * Store a new episode with its critique and outcome
@@ -66,6 +77,15 @@ export declare class ReflexionMemory {
66
77
  * Results are cached for improved performance
67
78
  */
68
79
  retrieveRelevant(query: ReflexionQuery): Promise<EpisodeWithEmbedding[]>;
80
+ /**
81
+ * Re-rank a dense candidate list by fusing it with BM25 over episode text, then optionally with a cross-encoder
82
+ * (ADR-016). Episodes found only by keyword are fetched, filtered like dense hits, and given their cosine
83
+ * similarity. Falls back to the dense order if the keyword index cannot be built, and to the hybrid order if
84
+ * the cross-encoder cannot run.
85
+ */
86
+ private hybridRank;
87
+ /** Fetches keyword-only hits, applies the query's filters, and records their cosine similarity. */
88
+ private loadKeywordHits;
69
89
  /**
70
90
  * Prepare and enhance query embedding for search
71
91
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ReflexionMemory.d.ts","sourceRoot":"","sources":["../../../src/controllers/ReflexionMemory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReflexionMemory.d.ts","sourceRoot":"","sources":["../../../src/controllers/ReflexionMemory.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,11 @@
9
9
  */
10
10
  import { normalizeRowId } from '../types/database.types.js';
11
11
  import { searchVectors } from '../backends/VectorBackend.js';
12
+ import { sqlExactSource } from '../backends/ExactSearch.js';
12
13
  import { NodeIdMapper } from '../utils/NodeIdMapper.js';
13
14
  import { QueryCache } from '../core/QueryCache.js';
15
+ import { TopK, squaredNorm, cosineWithQueryNorm } from '../utils/top-k.js';
16
+ import { applyCrossEncoder, EpisodeLexicalIndex, fuseEpisodeScores, HYBRID_MAX_POOL, orderByScore, RERANK_DEPTH, } from './episode-hybrid.js';
14
17
  function finiteNumber(value, name) {
15
18
  const n = Number(value);
16
19
  if (!Number.isFinite(n))
@@ -43,6 +46,7 @@ export class ReflexionMemory {
43
46
  learningBackend;
44
47
  graphBackend;
45
48
  queryCache;
49
+ lexicalIndex;
46
50
  constructor(db, embedder, vectorBackend, learningBackend, graphBackend, cacheConfig) {
47
51
  this.db = db;
48
52
  this.embedder = embedder;
@@ -175,8 +179,10 @@ export class ReflexionMemory {
175
179
  */
176
180
  async retrieveRelevant(query) {
177
181
  const { task, currentState = '', k = 5, minReward, onlyFailures = false, onlySuccesses = false, timeWindowDays, } = query;
182
+ const hybrid = query.hybrid !== false && !this.graphBackend;
183
+ const rerank = hybrid && query.rerank === true;
178
184
  // Check cache first
179
- const cacheKey = this.queryCache.generateKey('retrieveRelevant', [task, currentState, k, minReward, onlyFailures, onlySuccesses, timeWindowDays], 'episodes');
185
+ const cacheKey = this.queryCache.generateKey('retrieveRelevant', [task, currentState, k, minReward, onlyFailures, onlySuccesses, timeWindowDays, hybrid, rerank], 'episodes');
180
186
  const cached = this.queryCache.get(cacheKey);
181
187
  if (cached) {
182
188
  return cached;
@@ -191,16 +197,90 @@ export class ReflexionMemory {
191
197
  else if (this.graphBackend && 'execute' in this.graphBackend) {
192
198
  episodes = await this.retrieveFromGenericGraph(query);
193
199
  }
194
- else if (this.vectorBackend) {
195
- episodes = await this.retrieveFromVectorBackend(queryEmbedding, query);
196
- }
197
200
  else {
198
- episodes = await this.retrieveFromSQLFallback(queryEmbedding, query);
201
+ // Hybrid retrieval widens the dense pool, then fuses it with the BM25 ranking.
202
+ const pooled = hybrid ? { ...query, k: Math.min(Math.max(k * 4, 50), HYBRID_MAX_POOL) } : query;
203
+ episodes = this.vectorBackend
204
+ ? await this.retrieveFromVectorBackend(queryEmbedding, pooled)
205
+ : await this.retrieveFromSQLFallback(queryEmbedding, pooled);
206
+ if (hybrid) {
207
+ episodes = await this.hybridRank([task, currentState].filter(Boolean).join('\n'), episodes, { ...query, rerank }, queryEmbedding);
208
+ }
199
209
  }
200
210
  // Cache and return results
201
211
  this.queryCache.set(cacheKey, episodes);
202
212
  return episodes;
203
213
  }
214
+ /**
215
+ * Re-rank a dense candidate list by fusing it with BM25 over episode text, then optionally with a cross-encoder
216
+ * (ADR-016). Episodes found only by keyword are fetched, filtered like dense hits, and given their cosine
217
+ * similarity. Falls back to the dense order if the keyword index cannot be built, and to the hybrid order if
218
+ * the cross-encoder cannot run.
219
+ */
220
+ async hybridRank(text, dense, query, queryEmbedding) {
221
+ const k = query.k ?? 5;
222
+ let lexical = [];
223
+ try {
224
+ lexical = (this.lexicalIndex ??= new EpisodeLexicalIndex(this.db)).search(text, HYBRID_MAX_POOL);
225
+ }
226
+ catch {
227
+ if (!query.rerank)
228
+ return dense.slice(0, k);
229
+ }
230
+ if (lexical.length === 0 && !query.rerank)
231
+ return dense.slice(0, k);
232
+ const byId = new Map(dense.filter((e) => e.id !== undefined).map((e) => [e.id, e]));
233
+ // Load the keyword hits the fusion will see, so every fused episode has a true cosine similarity; the dense
234
+ // side is then the cosine order over (dense pool + keyword hits), the same ranking the benchmark fuses.
235
+ const lexHead = lexical.slice(0, Math.max(dense.length, query.rerank ? RERANK_DEPTH : 0));
236
+ const missing = lexHead.map((l) => l.id).filter((id) => !byId.has(id));
237
+ if (missing.length > 0)
238
+ this.loadKeywordHits(missing, byId, query, queryEmbedding);
239
+ const lexUsed = lexHead.filter((l) => byId.has(l.id)); // keyword hits that failed the filters drop out
240
+ const denseIds = [...byId.values()]
241
+ .sort((a, z) => (z.similarity ?? 0) - (a.similarity ?? 0) || z.id - a.id)
242
+ .map((e) => e.id);
243
+ const score = fuseEpisodeScores(denseIds, lexUsed);
244
+ const candidates = query.rerank
245
+ ? [...new Set([...denseIds.slice(0, RERANK_DEPTH), ...lexUsed.slice(0, RERANK_DEPTH).map((l) => l.id)])]
246
+ : [];
247
+ if (query.rerank) {
248
+ try {
249
+ await applyCrossEncoder(text, score, candidates, (id) => {
250
+ const ep = byId.get(id);
251
+ return ep ? [ep.task, ep.input, ep.output, ep.critique].filter(Boolean).join('\n') : undefined;
252
+ });
253
+ }
254
+ catch {
255
+ // Model unavailable (offline, unsupported platform): keep the hybrid order.
256
+ }
257
+ }
258
+ const out = [];
259
+ for (const id of orderByScore(score, denseIds)) {
260
+ const ep = byId.get(id);
261
+ if (ep)
262
+ out.push(ep);
263
+ if (out.length >= k)
264
+ break;
265
+ }
266
+ return out;
267
+ }
268
+ /** Fetches keyword-only hits, applies the query's filters, and records their cosine similarity. */
269
+ loadKeywordHits(ids, byId, query, queryEmbedding) {
270
+ const marks = ids.map(() => '?').join(',');
271
+ const embeddings = new Map(this.db
272
+ .prepare(`SELECT episode_id, embedding FROM episode_embeddings WHERE episode_id IN (${marks})`)
273
+ .all(...ids)
274
+ .map((r) => [r.episode_id, this.deserializeEmbedding(r.embedding)]));
275
+ const queryNorm = Math.sqrt(squaredNorm(queryEmbedding));
276
+ for (const row of this.fetchEpisodesByIds(ids)) {
277
+ if (!this.passesEpisodeFilters(row, query))
278
+ continue;
279
+ const emb = embeddings.get(row.id);
280
+ const similarity = emb && emb.length === queryEmbedding.length ? cosineWithQueryNorm(queryEmbedding, queryNorm, emb) : 0;
281
+ byId.set(row.id, this.convertDatabaseEpisode(row, similarity));
282
+ }
283
+ }
204
284
  /**
205
285
  * Prepare and enhance query embedding for search
206
286
  */
@@ -247,10 +327,14 @@ export class ReflexionMemory {
247
327
  */
248
328
  async retrieveFromVectorBackend(queryEmbedding, query) {
249
329
  const { k = 5, minReward, onlyFailures, onlySuccesses, timeWindowDays } = query;
250
- // Get candidates from vector backend
251
- const searchResults = await searchVectors(this.vectorBackend, queryEmbedding, k * 3, {
252
- threshold: 0.0,
253
- });
330
+ // Get candidates from vector backend; small or short answers are
331
+ // completed by exact cosine over episode_embeddings (ADR-015)
332
+ const searchResults = await searchVectors(this.vectorBackend, queryEmbedding, k * 3, { threshold: 0.0 }, sqlExactSource(this.db, {
333
+ table: 'episode_embeddings',
334
+ idColumn: 'episode_id',
335
+ vectorId: (id) => String(id),
336
+ owns: (hit) => EPISODE_VECTOR_ID.test(hit.id),
337
+ }));
254
338
  // The vector backend may be shared with other controllers ("skill:N",
255
339
  // "causal-edge:N"); episode vectors use the bare numeric row id.
256
340
  const episodeResults = searchResults.filter((r) => EPISODE_VECTOR_ID.test(r.id));
@@ -295,15 +379,18 @@ export class ReflexionMemory {
295
379
  ORDER BY e.reward DESC
296
380
  `);
297
381
  const rows = stmt.all(...params);
298
- // Calculate similarities and convert
299
- const episodes = rows.map((row) => {
382
+ // Bounded top-k over the scan; only the winners are converted. Ordering
383
+ // matches the old sort on (similarity || 0) with scan order on ties.
384
+ const queryNorm = Math.sqrt(squaredNorm(queryEmbedding));
385
+ const top = new TopK(k);
386
+ for (const row of rows) {
300
387
  const embedding = this.deserializeEmbedding(row.embedding);
301
- const similarity = this.cosineSimilarity(queryEmbedding, embedding);
302
- return this.convertDatabaseEpisode(row, similarity, embedding);
303
- });
304
- // Sort by similarity and return top-k
305
- episodes.sort((a, b) => (b.similarity || 0) - (a.similarity || 0));
306
- return episodes.slice(0, k);
388
+ const similarity = cosineWithQueryNorm(queryEmbedding, queryNorm, embedding);
389
+ top.push(similarity || 0, { row, embedding, similarity });
390
+ }
391
+ return top
392
+ .sorted()
393
+ .map(({ item }) => this.convertDatabaseEpisode(item.row, item.similarity, item.embedding));
307
394
  }
308
395
  /**
309
396
  * Apply episode filters to search results