@getplumb/core 0.1.1 → 0.1.3

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.
@@ -16,12 +16,14 @@
16
16
  export declare const EMBED_DIM = 384;
17
17
  /**
18
18
  * Embed a passage for indexing (no query prefix).
19
- * Returns a normalized Float32Array of length EMBED_DIM.
19
+ * Returns a normalized Float32Array of length EMBED_DIM, or a zero vector
20
+ * if @xenova/transformers is not available (graceful degradation).
20
21
  */
21
22
  export declare function embed(text: string): Promise<Float32Array>;
22
23
  /**
23
24
  * Embed a search query with BGE "query: " prefix.
24
- * Returns a normalized Float32Array of length EMBED_DIM.
25
+ * Returns a normalized Float32Array of length EMBED_DIM, or a zero vector
26
+ * if @xenova/transformers is not available (graceful degradation).
25
27
  */
26
28
  export declare function embedQuery(query: string): Promise<Float32Array>;
27
29
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../src/embedder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,sDAAsD;AACtD,eAAO,MAAM,SAAS,MAAM,CAAC;AAiB7B;;;GAGG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAI/D;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAIrE;AA4BD;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBvF"}
1
+ {"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../src/embedder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,sDAAsD;AACtD,eAAO,MAAM,SAAS,MAAM,CAAC;AA2B7B;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAK/D;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAKrE;AA+BD;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBvF"}
package/dist/embedder.js CHANGED
@@ -12,36 +12,52 @@
12
12
  * First call downloads the model (~100 MB for bge-small). Subsequent calls
13
13
  * use the local cache at ~/.cache/huggingface/hub/.
14
14
  */
15
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
16
- // @ts-ignore — @xenova/transformers has incomplete typings
17
- import { pipeline, env } from '@xenova/transformers';
18
15
  /** Embedding dimension for BAAI/bge-small-en-v1.5. */
19
16
  export const EMBED_DIM = 384;
20
- // Disable the remote model check in test/offline environments to use cache.
21
- // env.allowRemoteModels is already true by default; this line is a no-op but documents intent.
22
- env.allowLocalModels = true;
23
17
  let _embedPipeline = null;
18
+ let _embedLoadFailed = false;
24
19
  async function getEmbedPipeline() {
20
+ if (_embedLoadFailed)
21
+ return null;
25
22
  if (_embedPipeline === null) {
26
- _embedPipeline = (await pipeline('feature-extraction', 'Xenova/bge-small-en-v1.5'));
23
+ try {
24
+ // Dynamic import so the module is optional — if @xenova/transformers is not
25
+ // installed (e.g. on Windows via openclaw plugins install --ignore-scripts),
26
+ // we fall back to zero-vectors and skip embedding entirely.
27
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
28
+ // @ts-ignore — @xenova/transformers has incomplete typings
29
+ const { pipeline, env } = await import('@xenova/transformers');
30
+ env.allowLocalModels = true;
31
+ _embedPipeline = (await pipeline('feature-extraction', 'Xenova/bge-small-en-v1.5'));
32
+ }
33
+ catch {
34
+ _embedLoadFailed = true;
35
+ return null;
36
+ }
27
37
  }
28
38
  return _embedPipeline;
29
39
  }
30
40
  /**
31
41
  * Embed a passage for indexing (no query prefix).
32
- * Returns a normalized Float32Array of length EMBED_DIM.
42
+ * Returns a normalized Float32Array of length EMBED_DIM, or a zero vector
43
+ * if @xenova/transformers is not available (graceful degradation).
33
44
  */
34
45
  export async function embed(text) {
35
46
  const pipe = await getEmbedPipeline();
47
+ if (pipe === null)
48
+ return new Float32Array(EMBED_DIM);
36
49
  const output = await pipe(text, { pooling: 'mean', normalize: true });
37
50
  return new Float32Array(output.data);
38
51
  }
39
52
  /**
40
53
  * Embed a search query with BGE "query: " prefix.
41
- * Returns a normalized Float32Array of length EMBED_DIM.
54
+ * Returns a normalized Float32Array of length EMBED_DIM, or a zero vector
55
+ * if @xenova/transformers is not available (graceful degradation).
42
56
  */
43
57
  export async function embedQuery(query) {
44
58
  const pipe = await getEmbedPipeline();
59
+ if (pipe === null)
60
+ return new Float32Array(EMBED_DIM);
45
61
  const output = await pipe(`query: ${query}`, { pooling: 'mean', normalize: true });
46
62
  return new Float32Array(output.data);
47
63
  }
@@ -52,6 +68,9 @@ async function getRerankPipeline() {
52
68
  return null;
53
69
  if (_rerankPipeline === null) {
54
70
  try {
71
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
72
+ // @ts-ignore — @xenova/transformers has incomplete typings
73
+ const { pipeline } = await import('@xenova/transformers');
55
74
  _rerankPipeline = (await pipeline('text-classification', 'Xenova/ms-marco-MiniLM-L-6-v2'));
56
75
  }
57
76
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"embedder.js","sourceRoot":"","sources":["../src/embedder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"embedder.js","sourceRoot":"","sources":["../src/embedder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { MessageExchange, Fact } from './types.js';
2
+ /**
3
+ * Extraction function signature expected by ExtractionQueue.
4
+ * Takes an exchange and userId, returns extracted facts.
5
+ * LocalStore binds extractFacts with its own store + llmConfig.
6
+ */
7
+ export type ExtractFn = (exchange: MessageExchange, userId: string) => Promise<Fact[]>;
8
+ export interface ExtractionQueueOptions {
9
+ /** Drain interval in milliseconds. Defaults to PLUMB_EXTRACT_INTERVAL_MS env var or 300000 (5 min). */
10
+ intervalMs?: number;
11
+ /** Max queue size before early flush. Defaults to PLUMB_EXTRACT_BATCH_SIZE env var or 10. */
12
+ batchSize?: number;
13
+ }
14
+ /**
15
+ * ExtractionQueue — batched fact extraction queue.
16
+ *
17
+ * Replaces the immediate fire-and-forget extractFacts() call inside ingest() with
18
+ * a deferred queue. Raw exchanges are buffered in memory; a background drain loop
19
+ * flushes the queue periodically (default 5 min) or when batch size is reached (default 10).
20
+ *
21
+ * This is a pure cost optimization: one extractFacts() call per exchange, just deferred.
22
+ *
23
+ * Usage:
24
+ * const queue = new ExtractionQueue(extractFn, { intervalMs: 300_000, batchSize: 10 });
25
+ * queue.start();
26
+ * queue.enqueue(exchange, userId);
27
+ * // ... later
28
+ * await queue.stop(); // flushes remaining items
29
+ *
30
+ * @see T-071
31
+ */
32
+ export declare class ExtractionQueue {
33
+ private readonly extractFn;
34
+ private queue;
35
+ private timer;
36
+ private readonly intervalMs;
37
+ private readonly batchSize;
38
+ private flushing;
39
+ constructor(extractFn: ExtractFn, opts?: ExtractionQueueOptions);
40
+ /**
41
+ * Enqueue an exchange for fact extraction.
42
+ * Triggers early flush if batch size threshold is reached.
43
+ */
44
+ enqueue(exchange: MessageExchange, userId: string): void;
45
+ /**
46
+ * Start the background drain loop.
47
+ * Call this once after construction (e.g., in plugin activate()).
48
+ */
49
+ start(): void;
50
+ /**
51
+ * Stop the background drain loop and flush remaining items.
52
+ * Call this before shutdown (e.g., in plugin session_end or process exit).
53
+ */
54
+ stop(): Promise<void>;
55
+ /**
56
+ * Flush the queue immediately: drain all pending items and call extractFn for each.
57
+ * Uses Promise.allSettled() so one failed extraction doesn't drop others.
58
+ * Safe to call concurrently — only one flush runs at a time.
59
+ */
60
+ flush(): Promise<void>;
61
+ }
62
+ //# sourceMappingURL=extraction-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extraction-queue.d.ts","sourceRoot":"","sources":["../src/extraction-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAExD;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAIvF,MAAM,WAAW,sBAAsB;IACrC,uGAAuG;IACvG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,eAAe;IAQxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAP5B,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAS;gBAGN,SAAS,EAAE,SAAS,EACrC,IAAI,CAAC,EAAE,sBAAsB;IAM/B;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAOxD;;;OAGG;IACH,KAAK,IAAI,IAAI;IAKb;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAkB7B"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * ExtractionQueue — batched fact extraction queue.
3
+ *
4
+ * Replaces the immediate fire-and-forget extractFacts() call inside ingest() with
5
+ * a deferred queue. Raw exchanges are buffered in memory; a background drain loop
6
+ * flushes the queue periodically (default 5 min) or when batch size is reached (default 10).
7
+ *
8
+ * This is a pure cost optimization: one extractFacts() call per exchange, just deferred.
9
+ *
10
+ * Usage:
11
+ * const queue = new ExtractionQueue(extractFn, { intervalMs: 300_000, batchSize: 10 });
12
+ * queue.start();
13
+ * queue.enqueue(exchange, userId);
14
+ * // ... later
15
+ * await queue.stop(); // flushes remaining items
16
+ *
17
+ * @see T-071
18
+ */
19
+ export class ExtractionQueue {
20
+ extractFn;
21
+ queue = [];
22
+ timer = null;
23
+ intervalMs;
24
+ batchSize;
25
+ flushing = false; // Prevent concurrent flush() calls
26
+ constructor(extractFn, opts) {
27
+ this.extractFn = extractFn;
28
+ this.intervalMs = opts?.intervalMs ?? Number(process.env.PLUMB_EXTRACT_INTERVAL_MS ?? 300_000);
29
+ this.batchSize = opts?.batchSize ?? Number(process.env.PLUMB_EXTRACT_BATCH_SIZE ?? 10);
30
+ }
31
+ /**
32
+ * Enqueue an exchange for fact extraction.
33
+ * Triggers early flush if batch size threshold is reached.
34
+ */
35
+ enqueue(exchange, userId) {
36
+ this.queue.push({ exchange, userId });
37
+ if (this.queue.length >= this.batchSize) {
38
+ void this.flush();
39
+ }
40
+ }
41
+ /**
42
+ * Start the background drain loop.
43
+ * Call this once after construction (e.g., in plugin activate()).
44
+ */
45
+ start() {
46
+ if (this.timer !== null)
47
+ return; // Already started
48
+ this.timer = setInterval(() => void this.flush(), this.intervalMs);
49
+ }
50
+ /**
51
+ * Stop the background drain loop and flush remaining items.
52
+ * Call this before shutdown (e.g., in plugin session_end or process exit).
53
+ */
54
+ async stop() {
55
+ if (this.timer !== null) {
56
+ clearInterval(this.timer);
57
+ this.timer = null;
58
+ }
59
+ await this.flush();
60
+ }
61
+ /**
62
+ * Flush the queue immediately: drain all pending items and call extractFn for each.
63
+ * Uses Promise.allSettled() so one failed extraction doesn't drop others.
64
+ * Safe to call concurrently — only one flush runs at a time.
65
+ */
66
+ async flush() {
67
+ // Prevent concurrent flush() calls
68
+ if (this.flushing)
69
+ return;
70
+ this.flushing = true;
71
+ try {
72
+ // Snapshot the queue and clear it atomically
73
+ const batch = this.queue.splice(0);
74
+ if (batch.length === 0)
75
+ return;
76
+ // Extract facts for each item in parallel
77
+ await Promise.allSettled(batch.map(item => this.extractFn(item.exchange, item.userId)));
78
+ }
79
+ finally {
80
+ this.flushing = false;
81
+ }
82
+ }
83
+ }
84
+ //# sourceMappingURL=extraction-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extraction-queue.js","sourceRoot":"","sources":["../src/extraction-queue.ts"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,eAAe;IAQP;IAPX,KAAK,GAAgB,EAAE,CAAC;IACxB,KAAK,GAA0C,IAAI,CAAC;IAC3C,UAAU,CAAS;IACnB,SAAS,CAAS;IAC3B,QAAQ,GAAG,KAAK,CAAC,CAAC,mCAAmC;IAE7D,YACmB,SAAoB,EACrC,IAA6B;QADZ,cAAS,GAAT,SAAS,CAAW;QAGrC,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,OAAO,CAAC,CAAC;QAC/F,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;IACzF,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,QAAyB,EAAE,MAAc;QAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACxC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO,CAAC,kBAAkB;QACnD,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACrE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,mCAAmC;QACnC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC;YACH,6CAA6C;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAE/B,0CAA0C;YAC1C,MAAM,OAAO,CAAC,UAAU,CACtB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAC9D,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -5,6 +5,8 @@ export type { RawLogChunk, ScoreResult } from './scorer.js';
5
5
  export { computeDecay, scoreFact, scoreRawLog } from './scorer.js';
6
6
  export { LocalStore } from './local-store.js';
7
7
  export type { LocalStoreOptions, RawLogSearchResult, RawFact, RawLogEntry, ExportData } from './local-store.js';
8
+ export { ExtractionQueue } from './extraction-queue.js';
9
+ export type { ExtractFn, ExtractionQueueOptions } from './extraction-queue.js';
8
10
  export { extractFacts } from './extractor.js';
9
11
  export { callLLM, callLLMWithConfig, resolveAnthropicKey } from './llm-client.js';
10
12
  export type { LLMConfig } from './llm-client.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACjG,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAClF,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACzF,YAAY,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC1G,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACjG,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAClF,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACzF,YAAY,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC1G,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export { DecayRate } from './types.js';
2
2
  export { computeDecay, scoreFact, scoreRawLog } from './scorer.js';
3
3
  export { LocalStore } from './local-store.js';
4
+ export { ExtractionQueue } from './extraction-queue.js';
4
5
  export { extractFacts } from './extractor.js';
5
6
  export { callLLM, callLLMWithConfig, resolveAnthropicKey } from './llm-client.js';
6
7
  export { embed, embedQuery, rerankScores, EMBED_DIM } from './embedder.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAElF,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEzF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAElF,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEzF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC"}
@@ -3,6 +3,7 @@ import type { MemoryStore } from './store.js';
3
3
  import type { Fact, IngestResult, MessageExchange, SearchResult, StoreStatus } from './types.js';
4
4
  import { type LLMConfig } from './llm-client.js';
5
5
  import { type RawLogSearchResult } from './raw-log-search.js';
6
+ import { ExtractionQueue } from './extraction-queue.js';
6
7
  export type { RawLogSearchResult };
7
8
  export interface RawFact {
8
9
  readonly id: string;
@@ -46,6 +47,11 @@ export interface LocalStoreOptions {
46
47
  * instead of reading from environment variables, avoiding process.env mutation.
47
48
  */
48
49
  llmConfig?: LLMConfig;
50
+ /**
51
+ * Extraction queue for batched fact extraction. When provided, ingest() enqueues exchanges
52
+ * instead of immediately calling extractFacts(). Defaults to a new ExtractionQueue instance.
53
+ */
54
+ extractionQueue?: ExtractionQueue;
49
55
  }
50
56
  export type { LLMConfig };
51
57
  export declare class LocalStore implements MemoryStore {
@@ -54,6 +60,8 @@ export declare class LocalStore implements MemoryStore {
54
60
  get db(): Database.Database;
55
61
  /** Expose userId for plugin use */
56
62
  get userId(): string;
63
+ /** Expose extraction queue for lifecycle management (start/stop) */
64
+ get extractionQueue(): ExtractionQueue;
57
65
  constructor(options?: LocalStoreOptions);
58
66
  store(fact: Omit<Fact, 'id'>): Promise<string>;
59
67
  search(query: string, limit?: number): Promise<readonly SearchResult[]>;
@@ -66,8 +74,9 @@ export declare class LocalStore implements MemoryStore {
66
74
  */
67
75
  searchRawLog(query: string, limit?: number): Promise<readonly RawLogSearchResult[]>;
68
76
  /**
69
- * Wait for all in-flight fact extractions to complete.
77
+ * Wait for all queued fact extractions to complete.
70
78
  * Call this before close() to ensure all async work is done.
79
+ * Delegates to ExtractionQueue.flush().
71
80
  */
72
81
  drain(): Promise<void>;
73
82
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"local-store.d.ts","sourceRoot":"","sources":["../src/local-store.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAOtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEjG,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGpE,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG5E,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAEnC,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,iBAAiB;IAChC,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B,qBAAa,UAAW,YAAW,WAAW;;IAM5C,0DAA0D;IAC1D,IAAI,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAE1B;IAED,mCAAmC;IACnC,IAAI,MAAM,IAAI,MAAM,CAEnB;gBAEW,OAAO,GAAE,iBAAsB;IAiBrC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAiD9C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC;IAInE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjC,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC;IAwB9B,MAAM,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;IAyF9D;;;OAGG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAAC;IAIrF;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;;;;;;;;;;OAWG;IACG,gBAAgB,CAAC,UAAU,SAAO,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IA8ElG;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAWjF;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IA6DrC,qEAAqE;IACrE,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"local-store.d.ts","sourceRoot":"","sources":["../src/local-store.ts"],"names":[],"mappings":"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"}
@@ -11,11 +11,12 @@ import { embed } from './embedder.js';
11
11
  import { formatExchange } from './chunker.js';
12
12
  import { searchRawLog } from './raw-log-search.js';
13
13
  import { searchFacts } from './fact-search.js';
14
+ import { ExtractionQueue } from './extraction-queue.js';
14
15
  export class LocalStore {
15
16
  #db;
16
17
  #userId;
17
18
  #llmConfig;
18
- #inFlightExtractions = new Set();
19
+ #extractionQueue;
19
20
  /** Expose database for plugin use (e.g., NudgeManager) */
20
21
  get db() {
21
22
  return this.#db;
@@ -24,6 +25,10 @@ export class LocalStore {
24
25
  get userId() {
25
26
  return this.#userId;
26
27
  }
28
+ /** Expose extraction queue for lifecycle management (start/stop) */
29
+ get extractionQueue() {
30
+ return this.#extractionQueue;
31
+ }
27
32
  constructor(options = {}) {
28
33
  const dbPath = options.dbPath ?? join(homedir(), '.plumb', 'memory.db');
29
34
  this.#userId = options.userId ?? 'default';
@@ -35,6 +40,15 @@ export class LocalStore {
35
40
  // Load sqlite-vec extension — vector operations implemented in T-004.
36
41
  sqliteVec.load(this.#db);
37
42
  applySchema(this.#db);
43
+ // Initialize extraction queue — either use provided queue or create a default one.
44
+ // Bind extractFacts with this store and llmConfig so the queue only needs (exchange, userId).
45
+ const extractFn = (exchange, userId) => {
46
+ const llmFn = this.#llmConfig
47
+ ? (prompt) => callLLMWithConfig(prompt, this.#llmConfig)
48
+ : undefined;
49
+ return extractFacts(exchange, userId, this, llmFn);
50
+ };
51
+ this.#extractionQueue = options.extractionQueue ?? new ExtractionQueue(extractFn);
38
52
  }
39
53
  async store(fact) {
40
54
  const id = crypto.randomUUID();
@@ -121,20 +135,9 @@ export class LocalStore {
121
135
  // Re-throw other errors (e.g., real DB issues).
122
136
  throw err;
123
137
  }
124
- // Layer 2: fire-and-forget fact extraction never blocks ingest().
125
- // Track the promise so drain() can wait for completion before close().
126
- const llmFn = this.#llmConfig
127
- ? (prompt) => callLLMWithConfig(prompt, this.#llmConfig)
128
- : undefined;
129
- const extractionPromise = extractFacts(exchange, this.#userId, this, llmFn)
130
- .catch((err) => {
131
- console.error('[plumb/local-store] Fact extraction failed:', err);
132
- return []; // Return empty array on error
133
- })
134
- .finally(() => {
135
- this.#inFlightExtractions.delete(extractionPromise);
136
- });
137
- this.#inFlightExtractions.add(extractionPromise);
138
+ // Layer 2: enqueue exchange for batched fact extraction (T-071).
139
+ // ExtractionQueue handles draining on interval or batch size threshold.
140
+ this.#extractionQueue.enqueue(exchange, this.#userId);
138
141
  return {
139
142
  rawLogId,
140
143
  factsExtracted: 0,
@@ -149,13 +152,12 @@ export class LocalStore {
149
152
  return searchRawLog(this.#db, this.#userId, query, limit);
150
153
  }
151
154
  /**
152
- * Wait for all in-flight fact extractions to complete.
155
+ * Wait for all queued fact extractions to complete.
153
156
  * Call this before close() to ensure all async work is done.
157
+ * Delegates to ExtractionQueue.flush().
154
158
  */
155
159
  async drain() {
156
- if (this.#inFlightExtractions.size === 0)
157
- return;
158
- await Promise.allSettled(Array.from(this.#inFlightExtractions));
160
+ await this.#extractionQueue.flush();
159
161
  }
160
162
  /**
161
163
  * Re-extract facts for orphaned raw_log chunks (chunks with no corresponding facts).
@@ -1 +1 @@
1
- {"version":3,"file":"local-store.js","sourceRoot":"","sources":["../src/local-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-store.js","sourceRoot":"","sources":["../src/local-store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getplumb/core",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Plumb memory engine — storage abstraction, types, and local SQLite driver",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -33,12 +33,12 @@
33
33
  "typescript": "^5.4.0"
34
34
  },
35
35
  "dependencies": {
36
- "@xenova/transformers": "^2.17.2",
37
36
  "better-sqlite3": "^12.6.2",
38
37
  "openai": "^4.80.0",
39
38
  "sqlite-vec": "0.1.7-alpha.2"
40
39
  },
41
40
  "optionalDependencies": {
42
- "@anthropic-ai/sdk": "^0.78.0"
41
+ "@anthropic-ai/sdk": "^0.78.0",
42
+ "@xenova/transformers": "^2.17.2"
43
43
  }
44
44
  }