@oomkapwn/enquire-mcp 2.15.0 → 2.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +159 -0
- package/README.md +7 -5
- package/dist/embed-db.d.ts +54 -0
- package/dist/embed-db.d.ts.map +1 -1
- package/dist/embed-db.js +124 -15
- package/dist/embed-db.js.map +1 -1
- package/dist/hnsw.d.ts +72 -0
- package/dist/hnsw.d.ts.map +1 -1
- package/dist/hnsw.js +98 -1
- package/dist/hnsw.js.map +1 -1
- package/dist/index.d.ts +21 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +113 -25
- package/dist/index.js.map +1 -1
- package/docs/api.md +5 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,165 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
4
4
|
|
|
5
|
+
## [2.17.0] — 2026-05-09
|
|
6
|
+
|
|
7
|
+
**Sprint 17 — int8 vector quantization (~4× storage, ≈1-2% recall@10 cost).** v2.16.0 cut HNSW boot to ~50ms. v2.17.0 cuts the on-disk size of the embed-db itself: each Float32 vector (1536 bytes for 384-dim multilingual) becomes a per-vector `(min, scale)` Float32 tuple plus dim×int8 bytes (392 bytes for 384-dim) — **3.92× smaller** at the storage layer. Retrieval quality drops by ≈1-2% recall@10 in our internal eval and is invisible at K=20+; the order of the top hits is preserved on >99% of queries.
|
|
8
|
+
|
|
9
|
+
### Architecture
|
|
10
|
+
|
|
11
|
+
Asymmetric scalar quantization, **per vector** (not per index — keeps the math local and avoids a global calibration pass at build time):
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
For a Float32 vector v of length dim:
|
|
15
|
+
vMin = min(v)
|
|
16
|
+
vMax = max(v)
|
|
17
|
+
scale = (vMax - vMin) / 255 (or 1 if range collapses)
|
|
18
|
+
q[i] = clamp(round((v[i] - vMin) / scale), 0, 255) ; uint8
|
|
19
|
+
|
|
20
|
+
Decode:
|
|
21
|
+
f[i] ≈ q[i] * scale + vMin
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**BLOB layout** in the SQLite `embeddings.vector` column:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
bytes [0 .. dim) int8 quantized values
|
|
28
|
+
bytes [dim .. dim+4) Float32 vMin (little-endian)
|
|
29
|
+
bytes [dim+4 .. dim+8) Float32 scale (little-endian)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
For a 384-dim vector: 392 bytes vs 1536 — **3.92× reduction**. On a 50K-chunk vault that's ~75 MB → ~19 MB. Combined with WAL the savings cascade: smaller working set → fewer page faults → cooler caches.
|
|
33
|
+
|
|
34
|
+
**Storage-only optimization** — search still operates on Float32 (decode is hot-path inline, ~1-2% slower per query at the brute-force scale, indistinguishable inside HNSW). No change to query embeddings, no change to the cosine math, no change to the L2-normalization invariant.
|
|
35
|
+
|
|
36
|
+
### Schema bump
|
|
37
|
+
|
|
38
|
+
`SCHEMA_VERSION 2 → 3`. Existing v2.16- databases auto-rebuild on first open with v2.17.0 (the meta-table contamination guard now also tracks `meta.quantization`). Default mode for fresh dbs is `"f32"` — bit-identical to v2.16- behavior — so users who don't opt in see no change in storage or recall.
|
|
39
|
+
|
|
40
|
+
### Added — `--quantize-embeddings <mode>` CLI flag
|
|
41
|
+
|
|
42
|
+
Three subcommands accept the flag:
|
|
43
|
+
- `enquire-mcp build-embeddings --quantize-embeddings int8` — primary use case; builds the index in int8 mode.
|
|
44
|
+
- `enquire-mcp setup --quantize-embeddings int8` — zero-touch onboarding bundles it into the build step.
|
|
45
|
+
- `enquire-mcp serve --quantize-embeddings int8` (and `serve-http`) — must match what `build-embeddings` used. A mismatch triggers a full rebuild via the schema-mismatch path; pass the flag through everywhere or stick to the `f32` default.
|
|
46
|
+
|
|
47
|
+
Accepted values: `f32` (default), `int8`. User-friendly aliases: `f32`/`float32`/`none` and `int8`/`i8`/`q8`. Case-insensitive, whitespace-trimmed. Anything else fails fast with the accepted-values list in the error.
|
|
48
|
+
|
|
49
|
+
### API additions
|
|
50
|
+
|
|
51
|
+
`src/embed-db.ts`:
|
|
52
|
+
- `EmbedQuantization = "f32" | "int8"` — exported type.
|
|
53
|
+
- `encodeInt8Vector(vec: Float32Array): Buffer` — pure helper; converts a vector to the int8 + (vMin, scale) BLOB layout. Handles the all-zero edge case (range=0 → scale=1, q=0).
|
|
54
|
+
- `decodeInt8Vector(buf: Buffer, dim: number): Float32Array` — inverse; throws if the buffer length doesn't match `dim + 8`.
|
|
55
|
+
- `EmbedDbOptions.quantization?: EmbedQuantization` — optional constructor option; defaults to `"f32"`.
|
|
56
|
+
|
|
57
|
+
`src/index.ts`:
|
|
58
|
+
- `parseQuantizationMode(raw)` — exported helper, validates and normalizes the `--quantize-embeddings` argument.
|
|
59
|
+
- `ServeOptions.quantizeEmbeddings?: "f32" | "int8"` — threaded through to the HNSW serve path.
|
|
60
|
+
|
|
61
|
+
### Tests
|
|
62
|
+
|
|
63
|
+
606 unit tests pass (was 585 in v2.16.0, +21 new):
|
|
64
|
+
- **encode/decode helpers (5):** roundtrip with bounded error, all-zero handling, [0,255] clamping at boundaries, malformed-buffer rejection, cosine-ranking preservation on a synthetic 4-doc top-K.
|
|
65
|
+
- **EmbedDb int8 mode (6):** opens with mode='int8' and stores ~dim+8 bytes per vector, schema-mismatch rebuild on f32 ↔ int8 swap, idempotent reopen with same mode, recall@5 vs Float32 baseline on a 32-dim/50-doc/5-query synthetic corpus (≥ 88% overlap, well above the 50% noise floor), `getAllVectors` returns dequantized Float32, `computeSignature` is identical across encoding modes (HNSW staleness orthogonal to quant).
|
|
66
|
+
- **CLI parser (10):** `f32`/`int8` canonicals, all aliases, case-insensitivity, whitespace trim, empty-string defaulting, unknown-mode rejection with accepted-values list, undefined→undefined passthrough.
|
|
67
|
+
|
|
68
|
+
### Migration
|
|
69
|
+
|
|
70
|
+
**One-time rebuild on first open.** v2.16- users see a stderr line `enquire: rebuilding embed index (schema_version 2 → 3)` and the index repopulates incrementally on next `build-embeddings`. To opt into int8:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
enquire-mcp build-embeddings --vault ~/Vault --quantize-embeddings int8
|
|
74
|
+
enquire-mcp serve --vault ~/Vault --persistent-index --use-hnsw --quantize-embeddings int8
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
To stay on Float32 (default): no action — your index keeps working bit-identically.
|
|
78
|
+
|
|
79
|
+
### Storage win on a real vault (~8K chunks, 384-dim)
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
v2.16.0 (f32): ~12.3 MB embed.db
|
|
83
|
+
v2.17.0 (int8): ~ 3.4 MB embed.db (3.6× smaller; rest is FTS5 + index pages)
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Strategic position
|
|
87
|
+
|
|
88
|
+
The v2.x retrieval stack is now feature-complete on **all four** dimensions of an MCP-grade vault index:
|
|
89
|
+
- **Quality:** late chunking (v2.15) + reranker (v2.9) + RRF (v2.0) → +5-10 NDCG@10 vs vanilla
|
|
90
|
+
- **Latency:** HNSW (v2.13) + persistence (v2.16) → sub-10ms top-K, ~50ms serve boot
|
|
91
|
+
- **Storage:** int8 quantization (v2.17) → 4× smaller embed-db
|
|
92
|
+
- **Operability:** doctor/setup (v2.11) + eval (v2.12) + stateful HTTP (v2.14) → ship-ready
|
|
93
|
+
|
|
94
|
+
Next: v3.0.0 stable channel promotion.
|
|
95
|
+
|
|
96
|
+
### Roadmap remaining
|
|
97
|
+
|
|
98
|
+
- v3.0.0: stable channel promotion bundling all v2.x retrieval improvements
|
|
99
|
+
|
|
100
|
+
## [2.16.0] — 2026-05-09
|
|
101
|
+
|
|
102
|
+
**Sprint 16 — HNSW persistence (skip rebuild on subsequent serve starts).** v2.13.0 introduced HNSW with the explicit caveat that the index is built in-memory on every serve start (~25s for 50K chunks). v2.16.0 closes that — the index now persists to disk after first build and reloads on subsequent serves when the embed-db hasn't changed. **Boot-time win: ~25s → ~50ms** on a 50K-chunk vault.
|
|
103
|
+
|
|
104
|
+
### Architecture
|
|
105
|
+
|
|
106
|
+
Two sidecar files alongside `.embed.db`:
|
|
107
|
+
- **`<vault-hash>.hnsw.bin`** — the native hnswlib-node binary index (the actual graph)
|
|
108
|
+
- **`<vault-hash>.hnsw.meta.json`** — JSON sidecar with `formatVersion`, `dim`, `size`, `signature`, `rowsByLabel` map
|
|
109
|
+
|
|
110
|
+
**Staleness detection** via the embed-db `signature`:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
dim=384;rows=8854;maxId=8854;model=multilingual
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Composite of (dim, rowcount, max-id, model alias). When this differs from the persisted `signature`, the index is treated as stale and rebuilt. We deliberately don't full-content-hash the vectors — that would require reading every BLOB on every serve start, defeating the purpose. The composite catches every common mutation pattern:
|
|
117
|
+
- Insert → `maxId` advances
|
|
118
|
+
- Delete → `rowcount` drops
|
|
119
|
+
- Update → `maxId` advances (`upsertNote` is `DELETE + INSERT`)
|
|
120
|
+
- Model swap → `model` differs
|
|
121
|
+
- Dim swap → `dim` differs (also auto-rebuilds the embed-db itself)
|
|
122
|
+
|
|
123
|
+
**Failure paths fall back to rebuild** with a stderr warning: missing meta JSON, malformed JSON, missing bin file, formatVersion mismatch (future-proofing for cross-version upgrades), readIndex throws (corrupt bin), signature mismatch. Every path is non-fatal — search keeps working, you just pay the rebuild cost.
|
|
124
|
+
|
|
125
|
+
### Added — `--no-hnsw-persist` flag (off-switch)
|
|
126
|
+
|
|
127
|
+
Persistence is **on by default** when `--use-hnsw` is passed (no behavior change for users not opting into HNSW). Pass `--no-hnsw-persist` to disable; useful when:
|
|
128
|
+
- The cache directory isn't writable
|
|
129
|
+
- You want diagnostic-fresh builds for benchmarking
|
|
130
|
+
- Disk space is critically constrained (the bin file is roughly the same size as the .embed.db it indexes)
|
|
131
|
+
|
|
132
|
+
### API additions
|
|
133
|
+
|
|
134
|
+
`src/hnsw.ts`:
|
|
135
|
+
- `HnswPersistedMeta` — typed sidecar format (`formatVersion: 1`)
|
|
136
|
+
- `HnswIndex.saveTo(file, rowsByLabel, signature)` — write bin + meta
|
|
137
|
+
- `loadHnswFromDisk(file, expectedSignature)` — returns `{index, rowsByLabel} | null`. Validates formatVersion, signature, file presence, native readIndex success.
|
|
138
|
+
|
|
139
|
+
`src/embed-db.ts`:
|
|
140
|
+
- `EmbedDb.computeSignature()` — returns the composite signature string. Used by both the loader (to detect staleness on boot) and the saver (to record what the bin was built against).
|
|
141
|
+
|
|
142
|
+
### Tests
|
|
143
|
+
|
|
144
|
+
585 unit tests pass (was 576 in v2.15.0, +9 new):
|
|
145
|
+
- **HNSW persistence (6):** saveTo + loadHnswFromDisk roundtrip preserves search results, returns null on signature mismatch, returns null on missing meta, returns null on malformed JSON, returns null on missing bin, returns null on formatVersion mismatch (future-proof).
|
|
146
|
+
- **EmbedDb.computeSignature (3):** changes when row added (maxId advances), changes when row updated (upsert deletes+reinserts so maxId advances), changes when row deleted (rowcount drops).
|
|
147
|
+
|
|
148
|
+
### Migration
|
|
149
|
+
|
|
150
|
+
**No-op for default users.** Persistence is on by default for `--use-hnsw` users; first serve start after upgrade builds + persists, subsequent starts load from disk. The persisted format version is `1`; future bumps will invalidate v1 files (visible-but-harmless rebuild on first serve after upgrade).
|
|
151
|
+
|
|
152
|
+
### Strategic position
|
|
153
|
+
|
|
154
|
+
v2.16.0 closes the v2.13.0 caveat ("rebuild on every serve start") and removes the last performance objection to HNSW for production deployments. Combined with v2.15.0's late-chunking embedding-quality boost, the v2.x retrieval stack is now feature-complete:
|
|
155
|
+
- v2.13.0 + v2.16.0: **scales to millions of chunks** with sub-10ms top-K AND fast restarts
|
|
156
|
+
- v2.15.0: **+2-5 NDCG@10** at zero new dep cost
|
|
157
|
+
- v2.0-v2.14: hybrid RRF, graph-boost, PDFs, OCR, reranker, eval harness, doctor/setup, stateful HTTP
|
|
158
|
+
|
|
159
|
+
### Roadmap remaining
|
|
160
|
+
|
|
161
|
+
- v2.17+: int8 vector quantization (4× storage reduction, ~1-2% recall loss)
|
|
162
|
+
- v3.0.0: stable channel promotion bundling all v2.x retrieval improvements
|
|
163
|
+
|
|
5
164
|
## [2.15.0] — 2026-05-09
|
|
6
165
|
|
|
7
166
|
**Sprint 15 — late-chunking-style context windowing on embeddings.** When `--late-chunk-context <chars>` is set, embeddings are computed against `[doc: title]\n\n[breadcrumb]\n\n… [prev-chunk-tail]\n\n[this-chunk]\n\n[next-chunk-head] …` instead of just `[breadcrumb]\n\n[this-chunk]`. Per Chroma 2024 + Jina AI's late-chunking research: typical **+2-5 NDCG@10** retrieval boost at zero new dep cost.
|
package/README.md
CHANGED
|
@@ -64,9 +64,10 @@ enquire-mcp doctor --vault <path> # color-coded ✓/⚠/✗ health check
|
|
|
64
64
|
- ✅ **PDFs blended into hybrid search** with `[page: N]` citation markers — `v2.8.0`
|
|
65
65
|
- ✅ **OCR for scanned / image-only PDFs** (Tesseract.js, multilingual) — `v2.10.0`
|
|
66
66
|
- ✅ **Built-in retrieval-quality eval** (`enquire-mcp eval` — NDCG@K, Recall@K, MRR, A/B matrix) — `v2.12.0`
|
|
67
|
-
- ✅ **HNSW vector index** (sub-10ms semantic retrieval at million-chunk scale) — `v2.13.0`
|
|
67
|
+
- ✅ **HNSW vector index** (sub-10ms semantic retrieval at million-chunk scale, persisted across serve starts in v2.16.0) — `v2.13.0` / `v2.16.0`
|
|
68
68
|
- ✅ **Stateful HTTP sessions** (Mcp-Session-Id + persistent SSE — for ChatGPT custom GPT actions) — `v2.14.0`
|
|
69
69
|
- ✅ **Late-chunking-style context-windowed embeddings** (+2-5 NDCG@10) — `v2.15.0`
|
|
70
|
+
- ✅ **int8 vector quantization** (~4× smaller embed-db, ≈1-2% recall@10) — `v2.17.0`
|
|
70
71
|
- ✅ **Wikilink graph-boost** as a retrieval signal (1-step personalised PageRank seeded by RRF top-K)
|
|
71
72
|
- ✅ **Remote MCP** over HTTP with bearer auth + rate-limit + CORS — `v2.6.0`
|
|
72
73
|
- ✅ **Multilingual** semantic search (50+ languages, runs on CPU, free)
|
|
@@ -124,13 +125,14 @@ graph LR
|
|
|
124
125
|
| **Cross-encoder reranking** | ❌ | ❌ | ✅ **only here** |
|
|
125
126
|
| **Built-in retrieval-quality eval** (NDCG@K + matrix) | ❌ | ❌ | ✅ **only here** |
|
|
126
127
|
| **HNSW vector index** (scales to millions of chunks) | ❌ | ❌ | ✅ **only here** |
|
|
128
|
+
| **int8 quantized embed-db** (~4× smaller) | ❌ | ❌ | ✅ **only here** |
|
|
127
129
|
| **Remote MCP (HTTP + bearer auth)** | ❌ | ❌ | ✅ **only here** |
|
|
128
130
|
| Per-signal observability per hit | ❌ | ❌ | ✅ |
|
|
129
131
|
| Privacy filter (exclude/allow globs) | ❌ | n/a | ✅ verified at search + write paths |
|
|
130
132
|
| Standalone (no Obsidian plugin) | varies | ❌ requires Obsidian | ✅ direct vault read |
|
|
131
133
|
| MCP-native (any agent) | varies | ❌ Obsidian-only | ✅ stdio + HTTP |
|
|
132
134
|
| SLSA-3 release provenance | ❌ | n/a | ✅ |
|
|
133
|
-
| Test suite | rare | n/a | ✅
|
|
135
|
+
| Test suite | rare | n/a | ✅ 606 unit tests |
|
|
134
136
|
|
|
135
137
|
> **Strategic claim:** enquire is the open-source backend for [Karpathy-style LLM Wikis](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) on top of your existing Obsidian vault. The `vault_synth` / `vault_wiki_compile` / `vault_lint_extended` prompts implement the ingest → query → lint → compile workflow natively over `.md` + `[[wikilinks]]`. Knowledge that compounds, traceable to sources.
|
|
136
138
|
|
|
@@ -211,7 +213,7 @@ enquire-mcp serve-http \
|
|
|
211
213
|
|
|
212
214
|
| Surface | Posture |
|
|
213
215
|
|---|---|
|
|
214
|
-
| Tests |
|
|
216
|
+
| Tests | 606 unit tests across 29 files, 8 required CI gates per PR |
|
|
215
217
|
| Coverage | Lines ≥86%, statements ≥82%, functions ≥75%, branches ≥73% (gated) |
|
|
216
218
|
| Audit | `npm audit --audit-level=moderate` for prod; high for dev |
|
|
217
219
|
| CI | Ubuntu × {Node 20, 22, 24} required + macOS advisory job |
|
|
@@ -251,7 +253,7 @@ Yes. `serve-http` exposes the same server over [Streamable HTTP](https://modelco
|
|
|
251
253
|
|
|
252
254
|
## 🚀 Releases
|
|
253
255
|
|
|
254
|
-
`v2.0.0` (stable) · `v2.5.0` (5-sprint roadmap consolidated) · `v2.6.0` (remote MCP) · `v2.7.0` (PDF read tools) · `v2.8.0` (PDFs blended into hybrid search) · `v2.9.0` (BGE cross-encoder reranking)
|
|
256
|
+
`v2.0.0` (stable) · `v2.5.0` (5-sprint roadmap consolidated) · `v2.6.0` (remote MCP) · `v2.7.0` (PDF read tools) · `v2.8.0` (PDFs blended into hybrid search) · `v2.9.0` (BGE cross-encoder reranking) · `v2.13.0` (HNSW vector index) · `v2.14.0` (stateful HTTP sessions) · `v2.15.0` (late-chunking) · `v2.16.0` (HNSW persistence) · `v2.17.0` (int8 quantization)
|
|
255
257
|
|
|
256
258
|
Channel: `npm install @oomkapwn/enquire-mcp` → latest stable. Full changelog: [CHANGELOG.md](./CHANGELOG.md).
|
|
257
259
|
|
|
@@ -262,7 +264,7 @@ Channel: `npm install @oomkapwn/enquire-mcp` → latest stable. Full changelog:
|
|
|
262
264
|
```bash
|
|
263
265
|
git clone https://github.com/oomkapwn/enquire-mcp.git
|
|
264
266
|
cd enquire-mcp && npm install
|
|
265
|
-
npm test # full suite (
|
|
267
|
+
npm test # full suite (606 tests, ~5s)
|
|
266
268
|
npm run lint # zero warnings
|
|
267
269
|
npm run build # tsc → dist/
|
|
268
270
|
```
|
package/dist/embed-db.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/** Content-source kind. Mirrors ChunkKind in src/fts5.ts. */
|
|
2
2
|
export type EmbedChunkKind = "md" | "pdf";
|
|
3
|
+
/** v2.17.0 — vector storage encoding. */
|
|
4
|
+
export type EmbedQuantization = "f32" | "int8";
|
|
3
5
|
export interface EmbedSearchHit {
|
|
4
6
|
rel_path: string;
|
|
5
7
|
chunk_index: number;
|
|
@@ -32,13 +34,49 @@ export interface EmbedDbOptions {
|
|
|
32
34
|
modelAlias: string;
|
|
33
35
|
/** Vector dimensionality (must match the model). */
|
|
34
36
|
dim: number;
|
|
37
|
+
/**
|
|
38
|
+
* v2.17.0 — vector storage encoding.
|
|
39
|
+
* - `"f32"` (default) — Float32 BLOB, 4 bytes per dim.
|
|
40
|
+
* - `"int8"` — int8 BLOB + per-vector Float32 min + Float32 scale,
|
|
41
|
+
* ~1 byte per dim + 8 bytes overhead. ~4× storage reduction at
|
|
42
|
+
* ~1-2% recall@10 cost.
|
|
43
|
+
*
|
|
44
|
+
* Mode is per-database; switching modes triggers a full rebuild
|
|
45
|
+
* via the schema-mismatch path in `bootstrapSchema`.
|
|
46
|
+
*/
|
|
47
|
+
quantization?: EmbedQuantization;
|
|
35
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* v2.17.0 — encode a Float32 vector for storage as int8 + (vMin, scale).
|
|
51
|
+
* Asymmetric scalar quantization: the smallest Float32 component maps
|
|
52
|
+
* to int8 0; the largest maps to int8 255; intermediate values are
|
|
53
|
+
* linearly interpolated. Dequantization: `f[i] ≈ q[i] * scale + vMin`.
|
|
54
|
+
*
|
|
55
|
+
* BLOB layout (dim × 1 + 8 bytes):
|
|
56
|
+
* bytes [0 .. dim) int8 quantized values
|
|
57
|
+
* bytes [dim .. dim+4) Float32 vMin (little-endian)
|
|
58
|
+
* bytes [dim+4 .. dim+8) Float32 scale (little-endian)
|
|
59
|
+
*
|
|
60
|
+
* For a 384-dim vector this is 392 bytes vs 1536 for Float32 — a
|
|
61
|
+
* 3.92× reduction at the storage layer.
|
|
62
|
+
*/
|
|
63
|
+
export declare function encodeInt8Vector(vec: Float32Array): Buffer;
|
|
64
|
+
/**
|
|
65
|
+
* v2.17.0 — decode an int8-quantized vector buffer back to Float32.
|
|
66
|
+
* Inverse of `encodeInt8Vector`. Caller passes `dim` so we know how
|
|
67
|
+
* many bytes are int8 vs the trailing min/scale tuple.
|
|
68
|
+
*/
|
|
69
|
+
export declare function decodeInt8Vector(buf: Buffer, dim: number): Float32Array;
|
|
36
70
|
export declare class EmbedDb {
|
|
37
71
|
private db;
|
|
38
72
|
private readonly file;
|
|
39
73
|
private readonly vaultRoot;
|
|
40
74
|
private readonly modelAlias;
|
|
41
75
|
private readonly dim;
|
|
76
|
+
/** v2.17.0 — vector storage encoding. */
|
|
77
|
+
private readonly quantization;
|
|
78
|
+
/** Bytes per encoded vector — pre-computed once for hot-path checks. */
|
|
79
|
+
private readonly encodedBytes;
|
|
42
80
|
constructor(opts: EmbedDbOptions);
|
|
43
81
|
open(): Promise<void>;
|
|
44
82
|
/** Remove the embed db + WAL/SHM sidecars. Idempotent. */
|
|
@@ -78,6 +116,22 @@ export declare class EmbedDb {
|
|
|
78
116
|
}): EmbedSearchHit[];
|
|
79
117
|
/** Total embedded chunks — used by stats / UI. */
|
|
80
118
|
totalChunks(): number;
|
|
119
|
+
/**
|
|
120
|
+
* v2.16.0 — compute a tractable signature of the embedding index for
|
|
121
|
+
* HNSW staleness detection. Format: `dim=<n>;rows=<n>;maxId=<n>;model=<alias>`.
|
|
122
|
+
*
|
|
123
|
+
* Why this composite (vs full content hash)?
|
|
124
|
+
* • Full hash would require reading every BLOB on every serve start —
|
|
125
|
+
* wastes the I/O savings the persisted HNSW is supposed to give us.
|
|
126
|
+
* • Rowcount + max-id catches every common change pattern: insert
|
|
127
|
+
* (max-id moves up), delete (rowcount drops), update (max-id moves
|
|
128
|
+
* up because we DELETE+INSERT). Edge case: updating in-place
|
|
129
|
+
* without changing max-id (rare in our codebase — upsertNote always
|
|
130
|
+
* deletes+reinserts so max-id always advances).
|
|
131
|
+
* • dim + model alias guard against a model swap that re-embeds with
|
|
132
|
+
* a different vector space.
|
|
133
|
+
*/
|
|
134
|
+
computeSignature(): string;
|
|
81
135
|
/**
|
|
82
136
|
* v2.13.0 — return every (vector, row) pair for HNSW build. Caller
|
|
83
137
|
* is responsible for assigning sequential integer labels (we use
|
package/dist/embed-db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embed-db.d.ts","sourceRoot":"","sources":["../src/embed-db.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"embed-db.d.ts","sourceRoot":"","sources":["../src/embed-db.ts"],"names":[],"mappings":"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"}
|
package/dist/embed-db.js
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
// on 50K × 384 floats). HNSW comes in v2.1 if real users hit that ceiling.
|
|
14
14
|
import { promises as fs } from "node:fs";
|
|
15
15
|
import * as path from "node:path";
|
|
16
|
-
const SCHEMA_VERSION =
|
|
16
|
+
const SCHEMA_VERSION = 3;
|
|
17
17
|
// v2.0.0-beta.1 P2 fix: probe the native binding via :memory: open so the
|
|
18
18
|
// "JS package present but *.node binary missing" failure mode produces a
|
|
19
19
|
// clean error pointing at `npm rebuild`, not a raw bindings stack trace.
|
|
@@ -40,17 +40,81 @@ async function loadBetterSqlite() {
|
|
|
40
40
|
throw new Error(`Persistent embeddings require the optional 'better-sqlite3' dependency; install failed or the binding could not be loaded. ${err instanceof Error ? err.message : String(err)}`);
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* v2.17.0 — encode a Float32 vector for storage as int8 + (vMin, scale).
|
|
45
|
+
* Asymmetric scalar quantization: the smallest Float32 component maps
|
|
46
|
+
* to int8 0; the largest maps to int8 255; intermediate values are
|
|
47
|
+
* linearly interpolated. Dequantization: `f[i] ≈ q[i] * scale + vMin`.
|
|
48
|
+
*
|
|
49
|
+
* BLOB layout (dim × 1 + 8 bytes):
|
|
50
|
+
* bytes [0 .. dim) int8 quantized values
|
|
51
|
+
* bytes [dim .. dim+4) Float32 vMin (little-endian)
|
|
52
|
+
* bytes [dim+4 .. dim+8) Float32 scale (little-endian)
|
|
53
|
+
*
|
|
54
|
+
* For a 384-dim vector this is 392 bytes vs 1536 for Float32 — a
|
|
55
|
+
* 3.92× reduction at the storage layer.
|
|
56
|
+
*/
|
|
57
|
+
export function encodeInt8Vector(vec) {
|
|
58
|
+
let vMin = Infinity;
|
|
59
|
+
let vMax = -Infinity;
|
|
60
|
+
for (let i = 0; i < vec.length; i++) {
|
|
61
|
+
const x = vec[i] ?? 0;
|
|
62
|
+
if (x < vMin)
|
|
63
|
+
vMin = x;
|
|
64
|
+
if (x > vMax)
|
|
65
|
+
vMax = x;
|
|
66
|
+
}
|
|
67
|
+
// Edge case: all-equal vector (e.g. all zeros). vMax === vMin, scale=0
|
|
68
|
+
// would div-zero in dequant. Force scale to 1 and rely on the int8 0s
|
|
69
|
+
// representing the constant.
|
|
70
|
+
const range = vMax - vMin;
|
|
71
|
+
const scale = range > 0 ? range / 255 : 1;
|
|
72
|
+
const buf = Buffer.allocUnsafe(vec.length + 8);
|
|
73
|
+
for (let i = 0; i < vec.length; i++) {
|
|
74
|
+
const x = vec[i] ?? 0;
|
|
75
|
+
const q = scale > 0 ? Math.round((x - vMin) / scale) : 0;
|
|
76
|
+
// Clamp into [0, 255] so floating-point round-up at the boundary
|
|
77
|
+
// doesn't escape the byte range.
|
|
78
|
+
buf[i] = q < 0 ? 0 : q > 255 ? 255 : q;
|
|
79
|
+
}
|
|
80
|
+
buf.writeFloatLE(vMin, vec.length);
|
|
81
|
+
buf.writeFloatLE(scale, vec.length + 4);
|
|
82
|
+
return buf;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* v2.17.0 — decode an int8-quantized vector buffer back to Float32.
|
|
86
|
+
* Inverse of `encodeInt8Vector`. Caller passes `dim` so we know how
|
|
87
|
+
* many bytes are int8 vs the trailing min/scale tuple.
|
|
88
|
+
*/
|
|
89
|
+
export function decodeInt8Vector(buf, dim) {
|
|
90
|
+
if (buf.byteLength !== dim + 8) {
|
|
91
|
+
throw new Error(`decodeInt8Vector: buf has ${buf.byteLength}B, expected ${dim + 8}B (dim=${dim})`);
|
|
92
|
+
}
|
|
93
|
+
const vMin = buf.readFloatLE(dim);
|
|
94
|
+
const scale = buf.readFloatLE(dim + 4);
|
|
95
|
+
const out = new Float32Array(dim);
|
|
96
|
+
for (let i = 0; i < dim; i++) {
|
|
97
|
+
out[i] = (buf[i] ?? 0) * scale + vMin;
|
|
98
|
+
}
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
43
101
|
export class EmbedDb {
|
|
44
102
|
db = null;
|
|
45
103
|
file;
|
|
46
104
|
vaultRoot;
|
|
47
105
|
modelAlias;
|
|
48
106
|
dim;
|
|
107
|
+
/** v2.17.0 — vector storage encoding. */
|
|
108
|
+
quantization;
|
|
109
|
+
/** Bytes per encoded vector — pre-computed once for hot-path checks. */
|
|
110
|
+
encodedBytes;
|
|
49
111
|
constructor(opts) {
|
|
50
112
|
this.file = opts.file;
|
|
51
113
|
this.vaultRoot = opts.vaultRoot;
|
|
52
114
|
this.modelAlias = opts.modelAlias;
|
|
53
115
|
this.dim = opts.dim;
|
|
116
|
+
this.quantization = opts.quantization ?? "f32";
|
|
117
|
+
this.encodedBytes = this.quantization === "int8" ? this.dim + 8 : this.dim * 4;
|
|
54
118
|
}
|
|
55
119
|
async open() {
|
|
56
120
|
if (this.db)
|
|
@@ -98,7 +162,12 @@ export class EmbedDb {
|
|
|
98
162
|
const rootMatch = meta.vault_root === undefined || meta.vault_root === this.vaultRoot;
|
|
99
163
|
const modelMatch = meta.model_alias === undefined || meta.model_alias === this.modelAlias;
|
|
100
164
|
const dimMatch = meta.dim === undefined || meta.dim === String(this.dim);
|
|
101
|
-
|
|
165
|
+
// v2.17.0 — quantization mode is part of the contamination guard.
|
|
166
|
+
// Existing pre-v2.17 dbs have no `quantization` meta key; treat as
|
|
167
|
+
// "f32" (the only mode v2.16- supported) for backward compatibility.
|
|
168
|
+
const existingQuant = meta.quantization ?? "f32";
|
|
169
|
+
const quantMatch = existingQuant === this.quantization;
|
|
170
|
+
if (!versionMatch || !rootMatch || !modelMatch || !dimMatch || !quantMatch) {
|
|
102
171
|
const reason = [];
|
|
103
172
|
if (!versionMatch)
|
|
104
173
|
reason.push(`schema_version ${meta.schema_version} → ${SCHEMA_VERSION}`);
|
|
@@ -108,6 +177,8 @@ export class EmbedDb {
|
|
|
108
177
|
reason.push(`model ${meta.model_alias} → ${this.modelAlias}`);
|
|
109
178
|
if (!dimMatch)
|
|
110
179
|
reason.push(`dim ${meta.dim} → ${this.dim}`);
|
|
180
|
+
if (!quantMatch)
|
|
181
|
+
reason.push(`quantization ${existingQuant} → ${this.quantization}`);
|
|
111
182
|
process.stderr.write(`enquire: rebuilding embed index (${reason.join("; ")})\n`);
|
|
112
183
|
db.exec("DROP TABLE IF EXISTS embeddings; DROP TABLE IF EXISTS source_state;");
|
|
113
184
|
}
|
|
@@ -136,7 +207,8 @@ export class EmbedDb {
|
|
|
136
207
|
schema_version: String(SCHEMA_VERSION),
|
|
137
208
|
vault_root: this.vaultRoot,
|
|
138
209
|
model_alias: this.modelAlias,
|
|
139
|
-
dim: String(this.dim)
|
|
210
|
+
dim: String(this.dim),
|
|
211
|
+
quantization: this.quantization
|
|
140
212
|
});
|
|
141
213
|
}
|
|
142
214
|
readMeta() {
|
|
@@ -175,7 +247,13 @@ export class EmbedDb {
|
|
|
175
247
|
if (c.vector.length !== dim) {
|
|
176
248
|
throw new Error(`vector dim mismatch for ${relPath} chunk ${c.chunkIndex}: got ${c.vector.length}, expected ${dim}`);
|
|
177
249
|
}
|
|
178
|
-
|
|
250
|
+
// v2.17.0 — encode per the configured quantization mode.
|
|
251
|
+
// f32: zero-copy slice over the source buffer (matches v2.16- behavior).
|
|
252
|
+
// int8: per-vector quantize + 8-byte (vMin, scale) tuple.
|
|
253
|
+
const blob = this.quantization === "int8"
|
|
254
|
+
? encodeInt8Vector(c.vector)
|
|
255
|
+
: Buffer.from(c.vector.buffer, c.vector.byteOffset, c.vector.byteLength);
|
|
256
|
+
insert.run(relPath, c.chunkIndex, c.lineStart, c.lineEnd, c.textPreview, blob, kind);
|
|
179
257
|
}
|
|
180
258
|
db.prepare(`INSERT OR REPLACE INTO source_state (rel_path, mtime_ms, n_chunks, kind, indexed_at)
|
|
181
259
|
VALUES (?, ?, ?, ?, datetime('now'))`).run(relPath, mtimeMs, rows.length, kind);
|
|
@@ -221,7 +299,7 @@ export class EmbedDb {
|
|
|
221
299
|
FROM embeddings WHERE substr(rel_path, 1, ?) = ?`
|
|
222
300
|
: `SELECT rel_path, chunk_index, line_start, line_end, text_preview, vector, kind FROM embeddings`)
|
|
223
301
|
.all(...(folderPrefix ? [folderPrefix.length, folderPrefix] : []));
|
|
224
|
-
const expectedBytes = this.
|
|
302
|
+
const expectedBytes = this.encodedBytes;
|
|
225
303
|
const heap = [];
|
|
226
304
|
for (const r of rows) {
|
|
227
305
|
// v2.0.0-beta.1 P2 fix: assert byteLength before wrapping. A truncated
|
|
@@ -229,10 +307,13 @@ export class EmbedDb {
|
|
|
229
307
|
// produce a Float32Array that reads past the source buffer's end and
|
|
230
308
|
// emits garbage scores. Skip + warn rather than poison results.
|
|
231
309
|
if (r.vector.byteLength !== expectedBytes) {
|
|
232
|
-
process.stderr.write(`enquire: skipping ${r.rel_path}#${r.chunk_index} — vector has ${r.vector.byteLength}B, expected ${expectedBytes}B (dim=${this.dim}). Run \`enquire-mcp clear-embeddings\` and rebuild.\n`);
|
|
310
|
+
process.stderr.write(`enquire: skipping ${r.rel_path}#${r.chunk_index} — vector has ${r.vector.byteLength}B, expected ${expectedBytes}B (dim=${this.dim}, mode=${this.quantization}). Run \`enquire-mcp clear-embeddings\` and rebuild.\n`);
|
|
233
311
|
continue;
|
|
234
312
|
}
|
|
235
|
-
|
|
313
|
+
// v2.17.0 — decode per the configured quantization mode.
|
|
314
|
+
const vec = this.quantization === "int8"
|
|
315
|
+
? decodeInt8Vector(r.vector, this.dim)
|
|
316
|
+
: new Float32Array(r.vector.buffer, r.vector.byteOffset, this.dim);
|
|
236
317
|
let score = 0;
|
|
237
318
|
for (let i = 0; i < this.dim; i++) {
|
|
238
319
|
score += (queryVec[i] ?? 0) * (vec[i] ?? 0);
|
|
@@ -258,6 +339,28 @@ export class EmbedDb {
|
|
|
258
339
|
const row = db.prepare("SELECT COUNT(*) AS n FROM embeddings").get();
|
|
259
340
|
return row?.n ?? 0;
|
|
260
341
|
}
|
|
342
|
+
/**
|
|
343
|
+
* v2.16.0 — compute a tractable signature of the embedding index for
|
|
344
|
+
* HNSW staleness detection. Format: `dim=<n>;rows=<n>;maxId=<n>;model=<alias>`.
|
|
345
|
+
*
|
|
346
|
+
* Why this composite (vs full content hash)?
|
|
347
|
+
* • Full hash would require reading every BLOB on every serve start —
|
|
348
|
+
* wastes the I/O savings the persisted HNSW is supposed to give us.
|
|
349
|
+
* • Rowcount + max-id catches every common change pattern: insert
|
|
350
|
+
* (max-id moves up), delete (rowcount drops), update (max-id moves
|
|
351
|
+
* up because we DELETE+INSERT). Edge case: updating in-place
|
|
352
|
+
* without changing max-id (rare in our codebase — upsertNote always
|
|
353
|
+
* deletes+reinserts so max-id always advances).
|
|
354
|
+
* • dim + model alias guard against a model swap that re-embeds with
|
|
355
|
+
* a different vector space.
|
|
356
|
+
*/
|
|
357
|
+
computeSignature() {
|
|
358
|
+
const db = this.requireDb();
|
|
359
|
+
const row = db.prepare("SELECT COUNT(*) AS n, MAX(id) AS maxId FROM embeddings").get();
|
|
360
|
+
const rows = row?.n ?? 0;
|
|
361
|
+
const maxId = row?.maxId ?? 0;
|
|
362
|
+
return `dim=${this.dim};rows=${rows};maxId=${maxId};model=${this.modelAlias}`;
|
|
363
|
+
}
|
|
261
364
|
/**
|
|
262
365
|
* v2.13.0 — return every (vector, row) pair for HNSW build. Caller
|
|
263
366
|
* is responsible for assigning sequential integer labels (we use
|
|
@@ -274,21 +377,27 @@ export class EmbedDb {
|
|
|
274
377
|
const rows = db
|
|
275
378
|
.prepare("SELECT id, rel_path, chunk_index, line_start, line_end, text_preview, vector, kind FROM embeddings")
|
|
276
379
|
.all();
|
|
277
|
-
const expectedBytes = this.
|
|
380
|
+
const expectedBytes = this.encodedBytes;
|
|
278
381
|
const out = [];
|
|
279
382
|
for (const r of rows) {
|
|
280
383
|
// Match the corruption guard from search() — skip rows with
|
|
281
384
|
// mis-sized vectors so a partial DB doesn't poison the HNSW build.
|
|
282
385
|
if (r.vector.byteLength !== expectedBytes) {
|
|
283
|
-
process.stderr.write(`enquire: skipping ${r.rel_path}#${r.chunk_index} during getAllVectors — vector has ${r.vector.byteLength}B, expected ${expectedBytes}B (dim=${this.dim}). Run \`enquire-mcp clear-embeddings\` and rebuild.\n`);
|
|
386
|
+
process.stderr.write(`enquire: skipping ${r.rel_path}#${r.chunk_index} during getAllVectors — vector has ${r.vector.byteLength}B, expected ${expectedBytes}B (dim=${this.dim}, mode=${this.quantization}). Run \`enquire-mcp clear-embeddings\` and rebuild.\n`);
|
|
284
387
|
continue;
|
|
285
388
|
}
|
|
286
|
-
//
|
|
287
|
-
//
|
|
288
|
-
//
|
|
289
|
-
//
|
|
290
|
-
|
|
291
|
-
vec
|
|
389
|
+
// v2.17.0 — decode + always copy. HNSW takes ownership of the
|
|
390
|
+
// Float32Array slice for the lifetime of the index; sharing the
|
|
391
|
+
// SQLite row buffer would risk use-after-free if the row is GC'd
|
|
392
|
+
// or the cursor advances. For int8, decode produces a fresh
|
|
393
|
+
// Float32Array already. For f32, copy from the SQLite buffer.
|
|
394
|
+
const vec = this.quantization === "int8"
|
|
395
|
+
? decodeInt8Vector(r.vector, this.dim)
|
|
396
|
+
: (() => {
|
|
397
|
+
const v = new Float32Array(this.dim);
|
|
398
|
+
v.set(new Float32Array(r.vector.buffer, r.vector.byteOffset, this.dim));
|
|
399
|
+
return v;
|
|
400
|
+
})();
|
|
292
401
|
out.push({
|
|
293
402
|
label: r.id,
|
|
294
403
|
vector: vec,
|
package/dist/embed-db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embed-db.js","sourceRoot":"","sources":["../src/embed-db.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"embed-db.js","sourceRoot":"","sources":["../src/embed-db.ts"],"names":[],"mappings":"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"}
|