@intentic/iq-engine 1.176.2 → 1.209.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 (63) hide show
  1. package/README.md +61 -3
  2. package/dist/embed/vector-cache.d.ts +9 -0
  3. package/dist/embed/vector-cache.d.ts.map +1 -0
  4. package/dist/embed/vector-cache.js +103 -0
  5. package/dist/embed/vector-cache.js.map +1 -0
  6. package/dist/engines/semantic.d.ts +2 -1
  7. package/dist/engines/semantic.d.ts.map +1 -1
  8. package/dist/engines/semantic.js +51 -24
  9. package/dist/engines/semantic.js.map +1 -1
  10. package/dist/index.d.ts +17 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +49 -16
  13. package/dist/index.js.map +1 -1
  14. package/dist/indexer/index-worker.d.ts +3 -0
  15. package/dist/indexer/index-worker.d.ts.map +1 -1
  16. package/dist/indexer/index-worker.js +26 -10
  17. package/dist/indexer/index-worker.js.map +1 -1
  18. package/dist/indexer/indexer.d.ts.map +1 -1
  19. package/dist/indexer/indexer.js +2 -1
  20. package/dist/indexer/indexer.js.map +1 -1
  21. package/dist/query/query-worker.d.ts +34 -0
  22. package/dist/query/query-worker.d.ts.map +1 -0
  23. package/dist/query/query-worker.js +38 -0
  24. package/dist/query/query-worker.js.map +1 -0
  25. package/dist/query/scorer.d.ts +22 -0
  26. package/dist/query/scorer.d.ts.map +1 -0
  27. package/dist/query/scorer.js +18 -0
  28. package/dist/query/scorer.js.map +1 -0
  29. package/dist/query/worker-scorer.d.ts +15 -0
  30. package/dist/query/worker-scorer.d.ts.map +1 -0
  31. package/dist/query/worker-scorer.js +85 -0
  32. package/dist/query/worker-scorer.js.map +1 -0
  33. package/dist/store/db.d.ts +1 -0
  34. package/dist/store/db.d.ts.map +1 -1
  35. package/dist/store/db.js +51 -5
  36. package/dist/store/db.js.map +1 -1
  37. package/dist/store/index-store.d.ts.map +1 -1
  38. package/dist/store/index-store.js +8 -6
  39. package/dist/store/index-store.js.map +1 -1
  40. package/dist/store/vectors.d.ts +11 -0
  41. package/dist/store/vectors.d.ts.map +1 -0
  42. package/dist/store/vectors.js +42 -0
  43. package/dist/store/vectors.js.map +1 -0
  44. package/dist/testing.d.ts.map +1 -1
  45. package/dist/testing.js +6 -5
  46. package/dist/testing.js.map +1 -1
  47. package/dist/types.d.ts +2 -0
  48. package/dist/types.d.ts.map +1 -1
  49. package/dist/verbs/dispatch.d.ts +2 -5
  50. package/dist/verbs/dispatch.d.ts.map +1 -1
  51. package/dist/verbs/dispatch.js +30 -18
  52. package/dist/verbs/dispatch.js.map +1 -1
  53. package/dist/workspace/floor.d.ts +1 -1
  54. package/dist/workspace/floor.d.ts.map +1 -1
  55. package/dist/workspace/floor.js +18 -4
  56. package/dist/workspace/floor.js.map +1 -1
  57. package/dist/workspace/glob.d.ts.map +1 -1
  58. package/dist/workspace/glob.js +3 -1
  59. package/dist/workspace/glob.js.map +1 -1
  60. package/dist/workspace/scan.d.ts.map +1 -1
  61. package/dist/workspace/scan.js +2 -1
  62. package/dist/workspace/scan.js.map +1 -1
  63. package/package.json +9 -8
@@ -1,7 +1,8 @@
1
1
  import { parentPort, workerData } from "node:worker_threads";
2
- import { loadEmbedder } from "../embed/embedder.js";
2
+ import { loadEmbedder, MODEL_ID } from "../embed/embedder.js";
3
+ import { openVectorCache, vectorCachePath } from "../embed/vector-cache.js";
3
4
  import { embedPending } from "../engines/semantic.js";
4
- import { openIndex } from "../store/db.js";
5
+ import { compactIndex, openIndex } from "../store/db.js";
5
6
  import { readIndexStatus } from "../store/index-store.js";
6
7
  import { sweep } from "../workspace/scan.js";
7
8
  import { revalidate, syncModel } from "./indexer.js";
@@ -16,27 +17,31 @@ const post = (event) => {
16
17
  };
17
18
  const db = openIndex(indexDir, "write");
18
19
  syncModel(db, modelDir);
20
+ const vectorCache = openVectorCache(vectorCachePath(indexDir), MODEL_ID);
19
21
  let embedderPromise;
20
22
  const getEmbedder = () => (embedderPromise ??= loadEmbedder(modelDir));
21
23
  let requested = 0;
22
24
  let applied = 0;
23
25
  let draining = false;
24
26
  let warmed = false;
27
+ let lastGeneration = 0;
28
+ const EMBED_SLICE_CHUNKS = 512;
29
+ const EMBED_SLICE_MS = 3_000;
25
30
  const pass = async (target) => {
26
31
  const sweepStart = Date.now();
27
32
  const entries = await sweep(root, false);
28
33
  post({ type: "swept", entries, sweepStart });
29
34
  const { generation } = await revalidate(db, entries, parseEntry);
35
+ lastGeneration = generation;
30
36
  applied = target;
31
37
  post({ type: "indexed", generation, seq: applied });
38
+ };
39
+ const embedSlice = async () => {
32
40
  const embedder = await getEmbedder();
33
- if (embedder !== undefined) {
34
- await embedPending(db, embedder, Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);
35
- }
36
- if (!warmed) {
37
- warmed = true;
38
- post({ type: "warmed", status: readIndexStatus(db, generation) });
41
+ if (embedder === undefined) {
42
+ return 0;
39
43
  }
44
+ return embedPending(db, embedder, vectorCache, EMBED_SLICE_CHUNKS, EMBED_SLICE_MS);
40
45
  };
41
46
  const drain = async () => {
42
47
  if (draining) {
@@ -46,10 +51,21 @@ const drain = async () => {
46
51
  try {
47
52
  for (;;) {
48
53
  const target = requested;
49
- if (applied >= target) {
54
+ if (applied < target) {
55
+ await pass(target);
56
+ continue;
57
+ }
58
+ const remaining = await embedSlice();
59
+ post({ type: "embedding", remaining });
60
+ if (remaining === 0) {
61
+ compactIndex(db);
62
+ vectorCache?.compact();
63
+ if (!warmed) {
64
+ warmed = true;
65
+ post({ type: "warmed", status: readIndexStatus(db, lastGeneration) });
66
+ }
50
67
  return;
51
68
  }
52
- await pass(target);
53
69
  }
54
70
  }
55
71
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"index-worker.js","sourceRoot":"","sources":["../../src/indexer/index-worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index-worker.js","sourceRoot":"","sources":["../../src/indexer/index-worker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/indexer/indexer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAY9C,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAYlE,MAAM,MAAM,SAAS,GAAG,CACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,MAAM,KACd;IAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEzF,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B;AAMD,eAAO,MAAM,SAAS,OAAQ,OAAO,YAAY,MAAM,GAAG,SAAS,KAAG,IAQrE,CAAC;AAsBF,eAAO,MAAM,QAAQ,OAAQ,OAAO,WAAW,SAAS,SAAS,EAAE,KAAG,MAgBrE,CAAC;AAIF,eAAO,MAAM,UAAU,OAAc,OAAO,WAAW,SAAS,SAAS,EAAE,UAAU,SAAS,KAAG,OAAO,CAAC,gBAAgB,CAqFxH,CAAC"}
1
+ {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/indexer/indexer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAa9C,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAYlE,MAAM,MAAM,SAAS,GAAG,CACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,MAAM,KACd;IAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEzF,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B;AAMD,eAAO,MAAM,SAAS,OAAQ,OAAO,YAAY,MAAM,GAAG,SAAS,KAAG,IAQrE,CAAC;AAsBF,eAAO,MAAM,QAAQ,OAAQ,OAAO,WAAW,SAAS,SAAS,EAAE,KAAG,MAgBrE,CAAC;AAIF,eAAO,MAAM,UAAU,OAAc,OAAO,WAAW,SAAS,SAAS,EAAE,UAAU,SAAS,KAAG,OAAO,CAAC,gBAAgB,CAqFxH,CAAC"}
@@ -2,6 +2,7 @@ import { createHash } from "node:crypto";
2
2
  import { readFile } from "node:fs/promises";
3
3
  import { MODEL_ID } from "../embed/embedder.js";
4
4
  import { bumpGeneration, deleteFile, generationOf, getMeta, listFiles, replaceFile, setMeta, touchFile, } from "../store/index-store.js";
5
+ import { clearVectors } from "../store/vectors.js";
5
6
  import { langOf } from "../workspace/scan.js";
6
7
  const MAX_FILE_BYTES = 1024 * 1024;
7
8
  const PARSER_VERSION = "3";
@@ -11,7 +12,7 @@ export const syncModel = (db, modelDir) => {
11
12
  return;
12
13
  }
13
14
  if (getMeta(db, "model_id") !== MODEL_ID) {
14
- db.run("UPDATE chunks SET embedding = NULL");
15
+ clearVectors(db);
15
16
  setMeta(db, "model_id", MODEL_ID);
16
17
  }
17
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../src/indexer/indexer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../src/indexer/indexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EACH,cAAc,EACd,UAAU,EACV,YAAY,EACZ,OAAO,EACP,SAAS,EACT,WAAW,EACX,OAAO,EAEP,SAAS,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC;AAKnC,MAAM,cAAc,GAAG,GAAG,CAAC;AAgB3B,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAW,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAI3D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAW,EAAE,QAA4B,EAAQ,EAAE;IACzE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO;IACX,CAAC;IACD,IAAI,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,KAAK,QAAQ,EAAE,CAAC;QACvC,YAAY,CAAC,EAAE,CAAC,CAAC;QACjB,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;AACL,CAAC,CAAC;AAIF,MAAM,OAAO,GAAG,CAAC,KAAgB,EAAE,QAAgC,EAAW,EAAE,CAC5E,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC;AAY7G,MAAM,UAAU,GAAG,CAAC,KAAgB,EAAE,QAAgC,EAAW,EAAE,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC;AAK3I,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAW,EAAE,OAA6B,EAAU,EAAE;IAC3E,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC5C,GAAG,IAAI,CAAC,CAAC;QACb,CAAC;IACL,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,GAAG,IAAI,CAAC,CAAC;QACb,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,EAAW,EAAE,OAA6B,EAAE,KAAiB,EAA6B,EAAE;IACzH,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,UAAU,GAAG,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,EAAE,EAAE,gBAAgB,CAAC,KAAK,cAAc,CAAC;IAC3F,IAAI,OAAO,GAAG,CAAC,CAAC;IAGhB,MAAM,SAAS,GAAG,CAAC,KAAgB,EAAQ,EAAE;QACzC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAChB,WAAW,CACP,EAAE,EACF,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,EAC3H,EAAE,EACF,EAAE,EACF,EAAE,CACL,CACJ,CAAC;QACF,OAAO,EAAE,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,KAAgB,EAAE,QAA4C,EAAE,GAAuB,EAAQ,EAAE;QAChH,MAAM,IAAI,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAGhE,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;YAC7D,SAAS,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO;QACX,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAClE,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACtD,OAAO;QACX,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpG,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC7G,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAChB,WAAW,CACP,EAAE,EACF,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,EAC3H,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,CACjB,CACJ,CAAC;QACF,OAAO,EAAE,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,MAAM,GAAwH,EAAE,CAAC;IACvI,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC1C,SAAS;QACb,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACtD,CAAC;IAID,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3C,KAAK,IAAI,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YACnF,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC;YAChC,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,cAAc,EAAE,CAAC;gBACvE,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACxE,CAAC;QACL,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,cAAc,EAAE,CAAC;YACnC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtB,SAAS;QACb,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;IAC1B,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACvE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;AACzD,CAAC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { EngineHit } from "../types.js";
2
+ export interface QueryWorkerData {
3
+ readonly indexDir: string;
4
+ readonly modelDir: string | undefined;
5
+ }
6
+ export type QueryWorkerRequest = {
7
+ readonly type: "semantic";
8
+ readonly id: number;
9
+ readonly query: string;
10
+ readonly allowed: string[];
11
+ } | {
12
+ readonly type: "rerank";
13
+ readonly id: number;
14
+ readonly query: string;
15
+ readonly passages: string[];
16
+ };
17
+ export type QueryWorkerResponse = {
18
+ readonly type: "semantic";
19
+ readonly id: number;
20
+ readonly hits: EngineHit[];
21
+ readonly pending: number;
22
+ } | {
23
+ readonly type: "rerank";
24
+ readonly id: number;
25
+ readonly scores: number[];
26
+ } | {
27
+ readonly type: "absent";
28
+ readonly id: number;
29
+ } | {
30
+ readonly type: "failed";
31
+ readonly id: number;
32
+ readonly error: string;
33
+ };
34
+ //# sourceMappingURL=query-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-worker.d.ts","sourceRoot":"","sources":["../../src/query/query-worker.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAwB7C,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAGD,MAAM,MAAM,kBAAkB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GACtG;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAI5G,MAAM,MAAM,mBAAmB,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxG;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,GAC3E;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { parentPort, workerData } from "node:worker_threads";
2
+ import { loadEmbedder } from "../embed/embedder.js";
3
+ import { loadReranker } from "../embed/reranker.js";
4
+ import { semanticSearch } from "../engines/semantic.js";
5
+ import { openIndex } from "../store/db.js";
6
+ const port = parentPort;
7
+ if (port === null) {
8
+ throw new Error("iq query worker: not started as a worker thread");
9
+ }
10
+ const { indexDir, modelDir } = workerData;
11
+ const db = openIndex(indexDir, "read");
12
+ const embedderReady = loadEmbedder(modelDir);
13
+ const rerankerReady = loadReranker(modelDir);
14
+ const answer = async (request) => {
15
+ const { id } = request;
16
+ if (request.type === "semantic") {
17
+ const embedder = await embedderReady;
18
+ if (embedder === undefined) {
19
+ return { type: "absent", id };
20
+ }
21
+ const pending = Number(db.get("SELECT COUNT(*) AS n FROM chunks WHERE embedded = 0")?.["n"] ?? 0);
22
+ const hits = semanticSearch(db, await embedder.embedQuery(request.query), new Set(request.allowed));
23
+ return { type: "semantic", id, hits, pending };
24
+ }
25
+ const reranker = await rerankerReady;
26
+ if (reranker === undefined) {
27
+ return { type: "absent", id };
28
+ }
29
+ return { type: "rerank", id, scores: await reranker.rerank(request.query, request.passages) };
30
+ };
31
+ port.on("message", (request) => {
32
+ void answer(request).then((response) => {
33
+ port.postMessage(response);
34
+ }, (error) => {
35
+ port.postMessage({ type: "failed", id: request.id, error: error instanceof Error ? error.message : String(error) });
36
+ });
37
+ });
38
+ //# sourceMappingURL=query-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-worker.js","sourceRoot":"","sources":["../../src/query/query-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AA2C3C,MAAM,IAAI,GAAG,UAAU,CAAC;AACxB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;IAChB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,UAA6B,CAAC;AAE7D,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACvC,MAAM,aAAa,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC7C,MAAM,aAAa,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AAE7C,MAAM,MAAM,GAAG,KAAK,EAAE,OAA2B,EAAgC,EAAE;IAC/E,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IACvB,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC;QACrC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QAClC,CAAC;QAGD,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,qDAAqD,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAClG,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,EAAE,MAAM,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACpG,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACnD,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC;IACrC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;AAClG,CAAC,CAAC;AAEF,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAA2B,EAAE,EAAE;IAC/C,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CACrB,CAAC,QAAQ,EAAE,EAAE;QACT,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;QAGf,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxH,CAAC,CACJ,CAAC;AACN,CAAC,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { Embedder } from "../embed/embedder.js";
2
+ import type { Reranker } from "../embed/reranker.js";
3
+ import type { VectorCache } from "../embed/vector-cache.js";
4
+ import type { IndexDb } from "../store/db.js";
5
+ import type { EngineHit } from "../types.js";
6
+ export interface SemanticOutcome {
7
+ readonly hits: EngineHit[];
8
+ readonly pending: number;
9
+ }
10
+ export interface QueryScorer {
11
+ semantic(query: string, allowed: ReadonlySet<string>): Promise<SemanticOutcome | undefined>;
12
+ rerank(query: string, passages: readonly string[]): Promise<number[] | undefined>;
13
+ }
14
+ export interface InThreadScorerOptions {
15
+ readonly db: IndexDb;
16
+ readonly embedder: () => Promise<Embedder | undefined>;
17
+ readonly reranker: () => Promise<Reranker | undefined>;
18
+ readonly topUpEmbeddings: boolean;
19
+ readonly cache: () => VectorCache | undefined;
20
+ }
21
+ export declare const inThreadScorer: (options: InThreadScorerOptions) => QueryScorer;
22
+ //# sourceMappingURL=scorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scorer.d.ts","sourceRoot":"","sources":["../../src/query/scorer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;IAE3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B;AAeD,MAAM,WAAW,WAAW;IAGxB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IAG5F,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,qBAAqB;IAGlC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;IACvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;IAIvD,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAGlC,QAAQ,CAAC,KAAK,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;CACjD;AAGD,eAAO,MAAM,cAAc,YAAa,qBAAqB,KAAG,WAe9D,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { embedPending, semanticSearch } from "../engines/semantic.js";
2
+ export const inThreadScorer = (options) => ({
3
+ async semantic(query, allowed) {
4
+ const embedder = await options.embedder();
5
+ if (embedder === undefined) {
6
+ return undefined;
7
+ }
8
+ const pending = options.topUpEmbeddings
9
+ ? await embedPending(options.db, embedder, options.cache())
10
+ : Number(options.db.get("SELECT COUNT(*) AS n FROM chunks WHERE embedded = 0")?.["n"] ?? 0);
11
+ return { hits: semanticSearch(options.db, await embedder.embedQuery(query), allowed), pending };
12
+ },
13
+ async rerank(query, passages) {
14
+ const reranker = await options.reranker();
15
+ return reranker === undefined ? undefined : reranker.rerank(query, passages);
16
+ },
17
+ });
18
+ //# sourceMappingURL=scorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scorer.js","sourceRoot":"","sources":["../../src/query/scorer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAgDtE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAA8B,EAAe,EAAE,CAAC,CAAC;IAC5E,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO;QACzB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe;YACnC,CAAC,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;YAC3D,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,qDAAqD,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAChG,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpG,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ;QACxB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC1C,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACjF,CAAC;CACJ,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { QueryScorer } from "./scorer.js";
2
+ export interface WorkerScorerOptions {
3
+ readonly indexDir: string;
4
+ readonly modelDir: string | undefined;
5
+ readonly onError?: (error: Error) => void;
6
+ }
7
+ export interface WorkerScorer extends QueryScorer {
8
+ metrics(): {
9
+ readonly live: boolean;
10
+ readonly pendingRequests: number;
11
+ };
12
+ close(): Promise<void>;
13
+ }
14
+ export declare const workerScorer: (options: WorkerScorerOptions) => WorkerScorer;
15
+ //# sourceMappingURL=worker-scorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-scorer.d.ts","sourceRoot":"","sources":["../../src/query/worker-scorer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO/C,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAItC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC7C,OAAO,IAAI;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAQD,eAAO,MAAM,YAAY,YAAa,mBAAmB,KAAG,YAiG3D,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { join } from "node:path";
2
+ import { pathToFileURL } from "node:url";
3
+ import { Worker } from "node:worker_threads";
4
+ import { packageRoot } from "@intentic/constants/node";
5
+ const WORKER_URL = pathToFileURL(join(packageRoot(import.meta.url), "dist/query/query-worker.js"));
6
+ export const workerScorer = (options) => {
7
+ const pending = new Map();
8
+ let worker;
9
+ let nextId = 0;
10
+ let closed = false;
11
+ const settleAll = () => {
12
+ const waiting = [...pending.values()];
13
+ pending.clear();
14
+ for (const settle of waiting) {
15
+ settle(undefined);
16
+ }
17
+ };
18
+ const abandon = (dead, error) => {
19
+ if (worker === dead) {
20
+ worker = undefined;
21
+ }
22
+ settleAll();
23
+ options.onError?.(error);
24
+ };
25
+ const live = () => {
26
+ if (worker !== undefined) {
27
+ return worker;
28
+ }
29
+ const spawned = new Worker(WORKER_URL, {
30
+ workerData: { indexDir: options.indexDir, modelDir: options.modelDir },
31
+ });
32
+ spawned.on("message", (response) => {
33
+ const settle = pending.get(response.id);
34
+ pending.delete(response.id);
35
+ settle?.(response);
36
+ });
37
+ spawned.on("error", (error) => {
38
+ abandon(spawned, error);
39
+ });
40
+ spawned.on("exit", () => {
41
+ if (worker === spawned) {
42
+ abandon(spawned, new Error("iq query worker exited"));
43
+ }
44
+ });
45
+ worker = spawned;
46
+ return spawned;
47
+ };
48
+ live();
49
+ const send = async (request) => {
50
+ if (closed) {
51
+ return undefined;
52
+ }
53
+ const id = nextId++;
54
+ const message = request(id);
55
+ const answered = new Promise((resolve) => {
56
+ pending.set(id, resolve);
57
+ });
58
+ live().postMessage(message);
59
+ const response = await answered;
60
+ if (response?.type === "failed") {
61
+ options.onError?.(new Error(`iq query worker: ${message.type} failed: ${response.error}`));
62
+ return undefined;
63
+ }
64
+ return response;
65
+ };
66
+ return {
67
+ metrics: () => ({ live: worker !== undefined, pendingRequests: pending.size }),
68
+ async semantic(query, allowed) {
69
+ const response = await send((id) => ({ type: "semantic", id, query, allowed: [...allowed] }));
70
+ return response?.type === "semantic" ? { hits: response.hits, pending: response.pending } : undefined;
71
+ },
72
+ async rerank(query, passages) {
73
+ const response = await send((id) => ({ type: "rerank", id, query, passages: [...passages] }));
74
+ return response?.type === "rerank" ? response.scores : undefined;
75
+ },
76
+ async close() {
77
+ closed = true;
78
+ const running = worker;
79
+ worker = undefined;
80
+ settleAll();
81
+ await running?.terminate();
82
+ },
83
+ };
84
+ };
85
+ //# sourceMappingURL=worker-scorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-scorer.js","sourceRoot":"","sources":["../../src/query/worker-scorer.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export interface IndexDb {
6
6
  transaction(fn: () => void): void;
7
7
  close(): void;
8
8
  }
9
+ export declare const compactIndex: (db: IndexDb) => boolean;
9
10
  export type IndexMode = "write" | "read";
10
11
  export declare const isIndexBusy: (error: unknown) => boolean;
11
12
  export declare const openIndex: (dir: string, mode: IndexMode) => IndexDb;
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/store/db.ts"],"names":[],"mappings":"AAiEA,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC;AAI/E,MAAM,WAAW,OAAO;IACpB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;IACrF,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,SAAS,CAAC;IAC/F,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;IACpF,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAClC,KAAK,IAAI,IAAI,CAAC;CACjB;AAKD,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAsDzC,eAAO,MAAM,WAAW,UAAW,OAAO,KAAG,OACuD,CAAC;AAOrG,eAAO,MAAM,SAAS,QAAS,MAAM,QAAQ,SAAS,KAAG,OAUxD,CAAC"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/store/db.ts"],"names":[],"mappings":"AAsGA,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC;AAI/E,MAAM,WAAW,OAAO;IACpB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;IACrF,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,SAAS,CAAC;IAC/F,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;IACpF,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAClC,KAAK,IAAI,IAAI,CAAC;CACjB;AAKD,eAAO,MAAM,YAAY,OAAQ,OAAO,KAAG,OAQ1C,CAAC;AAKF,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AA8EzC,eAAO,MAAM,WAAW,UAAW,OAAO,KAAG,OACuD,CAAC;AAOrG,eAAO,MAAM,SAAS,QAAS,MAAM,QAAQ,SAAS,KAAG,OAUxD,CAAC"}
package/dist/store/db.js CHANGED
@@ -1,7 +1,10 @@
1
1
  import { mkdirSync, rmSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { DatabaseSync } from "node:sqlite";
4
- const SCHEMA_VERSION = "5";
4
+ import { getLoadablePath } from "sqlite-vec";
5
+ const SCHEMA_VERSION = "7";
6
+ const EMBEDDING_DIM = 384;
7
+ const COMPACT_FREELIST_RATIO = 0.25;
5
8
  const DDL = `
6
9
  CREATE TABLE IF NOT EXISTS meta (key TEXT PRIMARY KEY, value TEXT NOT NULL);
7
10
  CREATE TABLE IF NOT EXISTS files (
@@ -43,10 +46,17 @@ CREATE TABLE IF NOT EXISTS chunks (
43
46
  end_line INTEGER NOT NULL,
44
47
  hash TEXT NOT NULL,
45
48
  text TEXT NOT NULL,
46
- embedding BLOB
49
+ -- Whether chunk_vectors holds a row for this chunk. Denormalized because the two questions asked of it are
50
+ -- asked constantly and neither is cheap against the vector table: "which chunks still need embedding" runs
51
+ -- every top-up batch, and "how many are left" runs on every natural-language query, for the "embeddings
52
+ -- 87%" note. Counting the vector table instead measured 7.5ms; the partial index below answers both in
53
+ -- microseconds and shrinks to nothing as coverage completes. Written in the same statement pair as the
54
+ -- vector row, so the two cannot disagree.
55
+ embedded INTEGER NOT NULL DEFAULT 0
47
56
  );
48
57
  CREATE INDEX IF NOT EXISTS chunks_file ON chunks(file_id);
49
58
  CREATE INDEX IF NOT EXISTS chunks_hash ON chunks(hash);
59
+ CREATE INDEX IF NOT EXISTS chunks_unembedded ON chunks(id) WHERE embedded = 0;
50
60
  -- BM25 over chunk text (the sparse tier of hybrid retrieval). External-content: rows live in chunks; the
51
61
  -- triggers keep the FTS index in sync — verified to fire on FK-cascade deletes too. tokenchars keeps
52
62
  -- snake_case/$identifiers whole.
@@ -57,7 +67,32 @@ END;
57
67
  CREATE TRIGGER IF NOT EXISTS chunks_fts_ad AFTER DELETE ON chunks BEGIN
58
68
  INSERT INTO chunks_fts(chunks_fts, rowid, text) VALUES ('delete', old.id, old.text);
59
69
  END;
70
+ -- The dense tier, and the counterpart to chunks_fts above: sqlite-vec ranks the whole corpus inside SQLite and
71
+ -- returns only the k rows asked for, where this used to hand every vector to JavaScript and score them there.
72
+ -- file_id is a metadata column rather than an auxiliary (+) one specifically so a scoped query can filter on it
73
+ -- DURING the ranking pass — filtering afterwards would return the top k of the workspace and then discard the
74
+ -- ones out of scope, which is a different (and wrong) answer.
75
+ CREATE VIRTUAL TABLE IF NOT EXISTS chunk_vectors USING vec0(
76
+ chunk_id INTEGER PRIMARY KEY,
77
+ embedding int8[${EMBEDDING_DIM}] distance_metric=cosine,
78
+ file_id INTEGER
79
+ );
80
+ -- vec0 is not a real table, so it is outside foreign keys: nothing cascades into it. This trigger is what
81
+ -- deletes a vector when its chunk goes, including on the FK cascade from files that chunks_fts_ad also relies on.
82
+ CREATE TRIGGER IF NOT EXISTS chunks_vec_ad AFTER DELETE ON chunks BEGIN
83
+ DELETE FROM chunk_vectors WHERE chunk_id = old.id;
84
+ END;
60
85
  `;
86
+ const pragmaNumber = (db, name) => Number(db.get(`PRAGMA ${name}`)?.[name] ?? 0);
87
+ export const compactIndex = (db) => {
88
+ const pageCount = pragmaNumber(db, "page_count");
89
+ const freePages = pragmaNumber(db, "freelist_count");
90
+ if (pageCount === 0 || freePages / pageCount < COMPACT_FREELIST_RATIO) {
91
+ return false;
92
+ }
93
+ db.run("PRAGMA incremental_vacuum");
94
+ return true;
95
+ };
61
96
  const wrap = (db) => ({
62
97
  all: (sql, ...params) => db.prepare(sql).all(...params),
63
98
  get: (sql, ...params) => db.prepare(sql).get(...params),
@@ -77,16 +112,27 @@ const wrap = (db) => ({
77
112
  },
78
113
  close: () => db.close(),
79
114
  });
115
+ const loadVectorExtension = (db) => {
116
+ db.enableLoadExtension(true);
117
+ db.loadExtension(getLoadablePath());
118
+ db.enableLoadExtension(false);
119
+ };
80
120
  const open = (dir, mode) => {
81
121
  if (mode === "read") {
82
- const readOnly = new DatabaseSync(join(dir, "index.db"), { readOnly: true });
122
+ const readOnly = new DatabaseSync(join(dir, "index.db"), { readOnly: true, allowExtension: true });
83
123
  readOnly.exec("PRAGMA busy_timeout = 5000;");
124
+ loadVectorExtension(readOnly);
84
125
  return wrap(readOnly);
85
126
  }
86
- mkdirSync(join(dir, "spool"), { recursive: true });
87
- const db = new DatabaseSync(join(dir, "index.db"));
127
+ mkdirSync(dir, { recursive: true });
128
+ const db = new DatabaseSync(join(dir, "index.db"), { allowExtension: true });
88
129
  db.exec("PRAGMA busy_timeout = 5000;");
130
+ const pageCount = Number(db.prepare("PRAGMA page_count").get()?.["page_count"] ?? 0);
131
+ if (pageCount === 0) {
132
+ db.exec("PRAGMA auto_vacuum = INCREMENTAL;");
133
+ }
89
134
  db.exec("PRAGMA journal_mode = WAL; PRAGMA synchronous = NORMAL; PRAGMA foreign_keys = ON;");
135
+ loadVectorExtension(db);
90
136
  db.exec(DDL);
91
137
  const wrapped = wrap(db);
92
138
  const version = wrapped.get("SELECT value FROM meta WHERE key = 'schema_version'")?.["value"];
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/store/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/store/db.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index-store.d.ts","sourceRoot":"","sources":["../../src/store/index-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,SAAS,OAAQ,OAAO,KAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAc7D,CAAC;AAEF,eAAO,MAAM,SAAS,OAAQ,OAAO,MAAM,MAAM,WAAW,MAAM,QAAQ,MAAM,KAAG,IAElF,CAAC;AAEF,eAAO,MAAM,UAAU,OAAQ,OAAO,MAAM,MAAM,KAAG,IAEpD,CAAC;AAIF,eAAO,MAAM,WAAW,OAChB,OAAO,QACL;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,WAClI,SAAS,SAAS,EAAE,UACrB,SAAS,QAAQ,EAAE,WAClB,SAAS,MAAM,EAAE,KAC3B,IA+CF,CAAC;AAEF,eAAO,MAAM,OAAO,OAAQ,OAAO,OAAO,MAAM,KAAG,MAAM,GAAG,SAC4B,CAAC;AAEzF,eAAO,MAAM,OAAO,OAAQ,OAAO,OAAO,MAAM,SAAS,MAAM,KAAG,IAEjE,CAAC;AAEF,eAAO,MAAM,cAAc,OAAQ,OAAO,KAAG,MAI5C,CAAC;AAEF,eAAO,MAAM,YAAY,OAAQ,OAAO,KAAG,MAAkD,CAAC;AAI9F,eAAO,MAAM,eAAe,OAAQ,OAAO,cAAc,MAAM,KAAG,WAUjE,CAAC"}
1
+ {"version":3,"file":"index-store.d.ts","sourceRoot":"","sources":["../../src/store/index-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGvC,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,SAAS,OAAQ,OAAO,KAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAc7D,CAAC;AAEF,eAAO,MAAM,SAAS,OAAQ,OAAO,MAAM,MAAM,WAAW,MAAM,QAAQ,MAAM,KAAG,IAElF,CAAC;AAEF,eAAO,MAAM,UAAU,OAAQ,OAAO,MAAM,MAAM,KAAG,IAEpD,CAAC;AAIF,eAAO,MAAM,WAAW,OAChB,OAAO,QACL;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,WAClI,SAAS,SAAS,EAAE,UACrB,SAAS,QAAQ,EAAE,WAClB,SAAS,MAAM,EAAE,KAC3B,IA8CF,CAAC;AAEF,eAAO,MAAM,OAAO,OAAQ,OAAO,OAAO,MAAM,KAAG,MAAM,GAAG,SAC4B,CAAC;AAEzF,eAAO,MAAM,OAAO,OAAQ,OAAO,OAAO,MAAM,SAAS,MAAM,KAAG,IAEjE,CAAC;AAEF,eAAO,MAAM,cAAc,OAAQ,OAAO,KAAG,MAI5C,CAAC;AAEF,eAAO,MAAM,YAAY,OAAQ,OAAO,KAAG,MAAkD,CAAC;AAI9F,eAAO,MAAM,eAAe,OAAQ,OAAO,cAAc,MAAM,KAAG,WAUjE,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { copyVector, vectorsOfFile } from "./vectors.js";
1
2
  export const listFiles = (db) => {
2
3
  const map = new Map();
3
4
  for (const row of db.all("SELECT id, path, repo, lang, mtime_ms, size, hash FROM files")) {
@@ -20,10 +21,7 @@ export const deleteFile = (db, id) => {
20
21
  db.run("DELETE FROM files WHERE id = ?", id);
21
22
  };
22
23
  export const replaceFile = (db, file, symbols, chunks, imports) => {
23
- const previousEmbeddings = new Map();
24
- for (const row of db.all("SELECT c.hash, c.embedding FROM chunks c JOIN files f ON f.id = c.file_id WHERE f.path = ? AND c.embedding IS NOT NULL", file.path)) {
25
- previousEmbeddings.set(row["hash"], row["embedding"]);
26
- }
24
+ const previousEmbeddings = vectorsOfFile(db, file.path);
27
25
  db.run("DELETE FROM files WHERE path = ?", file.path);
28
26
  db.run("INSERT INTO files (path, repo, lang, mtime_ms, size, hash, complexity) VALUES (?, ?, ?, ?, ?, ?, ?)", file.path, file.repo ?? null, file.lang ?? null, Math.round(file.mtimeMs), file.size, file.hash, file.complexity);
29
27
  const id = Number(db.get("SELECT id FROM files WHERE path = ?", file.path)["id"]);
@@ -34,7 +32,11 @@ export const replaceFile = (db, file, symbols, chunks, imports) => {
34
32
  db.run("INSERT INTO imports (file_id, specifier) VALUES (?, ?)", id, specifier);
35
33
  }
36
34
  for (const chunk of chunks) {
37
- db.run("INSERT INTO chunks (file_id, start_line, end_line, hash, text, embedding) VALUES (?, ?, ?, ?, ?, ?)", id, chunk.startLine, chunk.endLine, chunk.hash, chunk.text, previousEmbeddings.get(chunk.hash) ?? null);
35
+ const inserted = db.get("INSERT INTO chunks (file_id, start_line, end_line, hash, text) VALUES (?, ?, ?, ?, ?) RETURNING id", id, chunk.startLine, chunk.endLine, chunk.hash, chunk.text);
36
+ const carried = previousEmbeddings.get(chunk.hash);
37
+ if (carried !== undefined) {
38
+ copyVector(db, Number(inserted["id"]), id, carried);
39
+ }
38
40
  }
39
41
  };
40
42
  export const getMeta = (db, key) => db.get("SELECT value FROM meta WHERE key = ?", key)?.["value"];
@@ -53,7 +55,7 @@ export const readIndexStatus = (db, generation) => {
53
55
  files: count("SELECT COUNT(*) AS n FROM files"),
54
56
  symbols: count("SELECT COUNT(*) AS n FROM symbols"),
55
57
  chunks: count("SELECT COUNT(*) AS n FROM chunks"),
56
- embedded: count("SELECT COUNT(*) AS n FROM chunks WHERE embedding IS NOT NULL"),
58
+ embedded: count("SELECT COUNT(*) AS n FROM chunks WHERE embedded = 1"),
57
59
  generation,
58
60
  freshness: { state: "fresh", ageMs: 0 },
59
61
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index-store.js","sourceRoot":"","sources":["../../src/store/index-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index-store.js","sourceRoot":"","sources":["../../src/store/index-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { IndexDb } from "./db.js";
2
+ export declare const putVector: (db: IndexDb, chunkId: number, fileId: number, vec: Float32Array) => void;
3
+ export declare const copyVector: (db: IndexDb, chunkId: number, fileId: number, quantized: Uint8Array) => void;
4
+ export declare const vectorsOfFile: (db: IndexDb, path: string) => Map<string, Uint8Array>;
5
+ export declare const clearVectors: (db: IndexDb) => void;
6
+ export interface VectorHit {
7
+ readonly chunkId: number;
8
+ readonly score: number;
9
+ }
10
+ export declare const nearestChunks: (db: IndexDb, queryVec: Float32Array, k: number, allowedFileIds: readonly number[] | undefined) => VectorHit[];
11
+ //# sourceMappingURL=vectors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectors.d.ts","sourceRoot":"","sources":["../../src/store/vectors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAuCvC,eAAO,MAAM,SAAS,OAAQ,OAAO,WAAW,MAAM,UAAU,MAAM,OAAO,YAAY,KAAG,IAQ3F,CAAC;AAGF,eAAO,MAAM,UAAU,OAAQ,OAAO,WAAW,MAAM,UAAU,MAAM,aAAa,UAAU,KAAG,IAKhG,CAAC;AAGF,eAAO,MAAM,aAAa,OAAQ,OAAO,QAAQ,MAAM,KAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAS/E,CAAC;AAGF,eAAO,MAAM,YAAY,OAAQ,OAAO,KAAG,IAG1C,CAAC;AAEF,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B;AAMD,eAAO,MAAM,aAAa,OAAQ,OAAO,YAAY,YAAY,KAAK,MAAM,kBAAkB,SAAS,MAAM,EAAE,GAAG,SAAS,KAAG,SAAS,EAetI,CAAC"}