albex 0.6.0 → 0.7.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 +223 -0
- package/README.md +84 -30
- package/dist/_generated/inline-wasm.d.ts +2 -0
- package/dist/_generated/inline-wasm.d.ts.map +1 -0
- package/dist/_generated/inline-wasm.js +9 -0
- package/dist/_generated/inline-wasm.js.map +1 -0
- package/dist/albex-worker.d.ts +65 -2
- package/dist/albex-worker.d.ts.map +1 -1
- package/dist/albex-worker.js +98 -21
- package/dist/albex-worker.js.map +1 -1
- package/dist/albex.d.ts +250 -42
- package/dist/albex.d.ts.map +1 -1
- package/dist/albex.js +492 -120
- package/dist/albex.js.map +1 -1
- package/dist/errors.d.ts +35 -4
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +38 -3
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/inline.d.ts +10 -0
- package/dist/inline.d.ts.map +1 -0
- package/dist/inline.js +17 -0
- package/dist/inline.js.map +1 -0
- package/dist/persistence.js +2 -2
- package/dist/pool/coordinator.d.ts +14 -6
- package/dist/pool/coordinator.d.ts.map +1 -1
- package/dist/pool/coordinator.js +65 -28
- package/dist/pool/coordinator.js.map +1 -1
- package/dist/profile.js +2 -2
- package/dist/resource-manager.js +2 -2
- package/dist/tiered-store.js +2 -2
- package/dist/wasm-bindings.d.ts +50 -1
- package/dist/wasm-bindings.d.ts.map +1 -1
- package/dist/wasm-bindings.js +20 -12
- package/dist/wasm-bindings.js.map +1 -1
- package/dist/worker-protocol.d.ts +23 -2
- package/dist/worker-protocol.d.ts.map +1 -1
- package/dist/worker-protocol.js +2 -2
- package/dist/worker-runtime.js +17 -2
- package/dist/worker-runtime.js.map +1 -1
- package/package.json +14 -9
- package/src/_generated/inline-wasm.ts +9 -0
- package/src/albex-worker.ts +103 -18
- package/src/albex.ts +3053 -2524
- package/src/errors.ts +49 -4
- package/src/index.ts +81 -0
- package/src/inline.ts +9 -0
- package/src/pool/coordinator.ts +61 -34
- package/src/wasm-bindings.ts +78 -12
- package/src/worker-protocol.ts +12 -2
- package/src/worker-runtime.ts +16 -1
- package/wasm/pkg/albex_pdf.wasm +0 -0
- package/wasm/pkg/albex_wasm.wasm +0 -0
- package/wasm/pkg/albex_wasm_bg.wasm +0 -0
- package/wasm/pkg/albex_wasm_simd.wasm +0 -0
package/dist/albex.d.ts
CHANGED
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
* const results = engine.search('contrato marco');
|
|
14
14
|
* ```
|
|
15
15
|
*/
|
|
16
|
-
import { type Tier } from './profile.js';
|
|
17
16
|
export { AlbexError, AlbexInitError, AlbexUnsupportedFormatError, AlbexParseError, AlbexCapacityError, } from './errors.js';
|
|
18
17
|
export { listPersisted, deletePersisted } from './persistence.js';
|
|
19
18
|
export { detectProfile, pickTier, pickWorkerCount, shouldUseGpu } from './profile.js';
|
|
@@ -25,29 +24,80 @@ export type { AlbexPoolOptions } from './pool/coordinator.js';
|
|
|
25
24
|
export { BloomGpu, packBloomsFromChunks } from './gpu/bloom-runtime.js';
|
|
26
25
|
export { TieredStore } from './tiered-store.js';
|
|
27
26
|
export type { TieredStoreOptions } from './tiered-store.js';
|
|
27
|
+
/**
|
|
28
|
+
* Explicit engine capacity configuration. All fields optional — anything
|
|
29
|
+
* missing is completed from the std defaults, scaled to keep the std
|
|
30
|
+
* ratios when a related field IS provided (documented per field).
|
|
31
|
+
*
|
|
32
|
+
* Estimated WASM memory ≈ `maxChunks × 64 B` (32 B descriptor + 32 B
|
|
33
|
+
* trigram signature) `+ textPoolBytes + namePoolBytes + maxDocs × 28 B`,
|
|
34
|
+
* on top of the engine's fixed ~80 KB of scratch buffers. The std preset
|
|
35
|
+
* is ~22 MB; `'large'` is ~180 MB. WASM linear memory never shrinks: the
|
|
36
|
+
* high-water mark of the largest capacity ever initialised in a given
|
|
37
|
+
* engine stays committed until the engine is disposed.
|
|
38
|
+
*/
|
|
39
|
+
export interface AlbexCapacityConfig {
|
|
40
|
+
/** Maximum number of live documents. Default 128. Range 1–65 536. */
|
|
41
|
+
maxDocs?: number;
|
|
42
|
+
/** Maximum number of indexed chunks (≈ paragraphs; long paragraphs split
|
|
43
|
+
* every 512 bytes). Default `max(maxDocs × 782, 1024)` — the std ratio
|
|
44
|
+
* (100 000 chunks / 128 docs). Range maxDocs–4 194 304. */
|
|
45
|
+
maxChunks?: number;
|
|
46
|
+
/** Text pool size in bytes (total UTF-8 text the index can hold).
|
|
47
|
+
* Default `max(maxChunks × 168, 64 KiB)` — the std ratio (16 MiB /
|
|
48
|
+
* 100 000 chunks). Range 4 KiB–1 GiB. */
|
|
49
|
+
textPoolBytes?: number;
|
|
50
|
+
/** Filename pool size in bytes. Default `max(maxDocs × 256, 4 KiB)` —
|
|
51
|
+
* the std ratio (32 KiB / 128 docs). Range 256 B–16 MiB. */
|
|
52
|
+
namePoolBytes?: number;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Engine capacity (decision A16 — runtime capacity, single binary):
|
|
56
|
+
* `'std'` — 128 docs · 100k chunks · 16 MB text · 32 KB names (~22 MB).
|
|
57
|
+
* The default, identical to every previous release.
|
|
58
|
+
* `'large'` — 1 024 docs · 800k chunks · 128 MB text · 256 KB names
|
|
59
|
+
* (~180 MB) — the old compile-time "pro" tier.
|
|
60
|
+
* object — explicit {@link AlbexCapacityConfig}.
|
|
61
|
+
*/
|
|
62
|
+
export type AlbexCapacity = 'std' | 'large' | AlbexCapacityConfig;
|
|
28
63
|
export interface AlbexOptions {
|
|
29
64
|
/**
|
|
30
|
-
* Explicit URL to the main WASM binary.
|
|
31
|
-
*
|
|
32
|
-
* If you want automatic tier selection (mini/std/pro chosen from
|
|
33
|
-
* `deviceMemory`), pass `wasmBaseUrl` instead — the engine will fetch
|
|
34
|
-
* `albex_wasm_<tier>.wasm` from that directory.
|
|
65
|
+
* Explicit URL to the main WASM binary. If omitted, the baseline (or
|
|
66
|
+
* SIMD, when supported) binary packaged with albex is used.
|
|
35
67
|
*/
|
|
36
68
|
wasmUrl?: string;
|
|
37
69
|
/**
|
|
38
|
-
* Base directory containing
|
|
39
|
-
* `
|
|
70
|
+
* Base directory containing the two binaries (`albex_wasm.wasm`,
|
|
71
|
+
* `albex_wasm_simd.wasm`). Used when `wasmUrl` is omitted.
|
|
40
72
|
*/
|
|
41
73
|
wasmBaseUrl?: string;
|
|
42
74
|
/** URL to albex_pdf.wasm. Required only if you call indexFile() with PDFs. */
|
|
43
75
|
pdfWasmUrl?: string;
|
|
44
76
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
77
|
+
* Raw bytes of the main core WASM. When present, Albex instantiates from
|
|
78
|
+
* these directly and does NO network fetch — `wasmUrl`, `wasmBaseUrl` and
|
|
79
|
+
* SIMD auto-selection are all ignored. This is the escape hatch for
|
|
80
|
+
* bundlers that don't rewrite `new URL('…wasm', import.meta.url)` (esbuild,
|
|
81
|
+
* many Angular and Webpack setups): import the `.wasm` as an asset through
|
|
82
|
+
* your own bundler and hand the bytes here. The `albex/inline` entry point
|
|
83
|
+
* sets this automatically with an embedded baseline core — true zero-config.
|
|
84
|
+
*/
|
|
85
|
+
wasmBytes?: BufferSource;
|
|
86
|
+
/**
|
|
87
|
+
* Raw bytes of `albex_pdf.wasm`. Same rationale as {@link wasmBytes}; only
|
|
88
|
+
* needed if you index PDFs AND your bundler can't serve the binary. When
|
|
89
|
+
* present, the PDF module is compiled from these instead of fetched.
|
|
47
90
|
*/
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
91
|
+
pdfWasmBytes?: BufferSource;
|
|
92
|
+
/**
|
|
93
|
+
* Engine capacity. `'std'` (default) keeps the historical limits;
|
|
94
|
+
* `'large'` raises them to 1 024 docs / 800k chunks / 128 MB text; an
|
|
95
|
+
* object configures each pool explicitly (see {@link AlbexCapacityConfig}
|
|
96
|
+
* for defaults, ranges and the memory cost model). Replaces the removed
|
|
97
|
+
* compile-time `tier` option — capacity is now a runtime parameter of a
|
|
98
|
+
* single binary (`initWithCapacity`, ABI 7).
|
|
99
|
+
*/
|
|
100
|
+
capacity?: AlbexCapacity;
|
|
51
101
|
/**
|
|
52
102
|
* SIMD selection. When `'auto'` (default), Albex probes for v128 support
|
|
53
103
|
* and fetches the `_simd.wasm` variant when available. Pass `'off'` to
|
|
@@ -68,6 +118,16 @@ export interface AlbexOptions {
|
|
|
68
118
|
* the upload + dispatch overhead is bigger than the speedup. Default: 20_000.
|
|
69
119
|
*/
|
|
70
120
|
gpuThreshold?: number;
|
|
121
|
+
/**
|
|
122
|
+
* Maximum size (in bytes) of a file accepted by `indexFile`. Checked
|
|
123
|
+
* against `File.size` BEFORE the file is read, so an oversized input is
|
|
124
|
+
* rejected with a typed `AlbexCapacityError` (`limit: 'file'`) without
|
|
125
|
+
* ever being buffered or hashed. Default: 256 MiB — above any default
|
|
126
|
+
* text pool (16 MB std / 128 MB large), so this only stops pathological
|
|
127
|
+
* inputs (e.g. a 2 GB log file) from exhausting tab memory. Raise it if
|
|
128
|
+
* you configure a custom `capacity` with a text pool beyond 256 MiB.
|
|
129
|
+
*/
|
|
130
|
+
maxFileBytes?: number;
|
|
71
131
|
}
|
|
72
132
|
export interface IndexedDocument {
|
|
73
133
|
name: string;
|
|
@@ -80,27 +140,77 @@ export interface IndexedDocument {
|
|
|
80
140
|
/** 64-bit FNV-1a hex of the source file bytes. Stable across runs. */
|
|
81
141
|
contentHash: string;
|
|
82
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* One authoritative chunk of an indexed document — the exact unit Albex
|
|
145
|
+
* indexed and searches over. Returned by {@link AlbexEngine.listChunks} so a
|
|
146
|
+
* host can mirror Albex's chunking (e.g. to build a parallel vector index over
|
|
147
|
+
* the same units). A long paragraph is split into several ≤512-byte chunks that
|
|
148
|
+
* share a `location` but differ in `sub`.
|
|
149
|
+
*/
|
|
150
|
+
export interface AuthoritativeChunk {
|
|
151
|
+
/** WASM-side stable document id (survives compact()). */
|
|
152
|
+
docId: number;
|
|
153
|
+
/** Paragraph index (DOCX/TXT) or page number (PDF, 1-based). */
|
|
154
|
+
location: number;
|
|
155
|
+
/** Ordinal of this chunk within its document (0-based, compact()-stable). */
|
|
156
|
+
ord: number;
|
|
157
|
+
/** Ordinal of this chunk within its `location` group (0-based, informational). */
|
|
158
|
+
sub: number;
|
|
159
|
+
/** The exact UTF-8 text Albex indexed for this chunk. */
|
|
160
|
+
text: string;
|
|
161
|
+
/** Byte length of `text`. */
|
|
162
|
+
byteLen: number;
|
|
163
|
+
/**
|
|
164
|
+
* Canonical shared id `"<docId>::<ord>"`. Identical to the matching
|
|
165
|
+
* {@link SearchResult.chunkId}, and stable across compact() and snapshot
|
|
166
|
+
* save/load — so it is safe to persist alongside parallel structures
|
|
167
|
+
* (unlike the absolute chunk index, which compact() renumbers).
|
|
168
|
+
*/
|
|
169
|
+
id: string;
|
|
170
|
+
}
|
|
83
171
|
export interface MatchSpan {
|
|
84
|
-
/**
|
|
172
|
+
/** UTF-8 **byte** offset within `snippet` where this matched token begins.
|
|
173
|
+
* NOT a JS string index — for `snippet.slice()` use the UTF-16
|
|
174
|
+
* {@link SearchResult.snippetStart}/{@link SearchResult.snippetEnd} of the
|
|
175
|
+
* primary span instead. */
|
|
85
176
|
start: number;
|
|
86
|
-
/**
|
|
177
|
+
/** UTF-8 **byte** offset within `snippet` where this matched token ends
|
|
178
|
+
* (exclusive). See the note on `start`. */
|
|
87
179
|
end: number;
|
|
88
180
|
}
|
|
89
181
|
export interface SearchResult {
|
|
90
182
|
documentName: string;
|
|
183
|
+
/** WASM-side stable document id (survives compact()). Matches
|
|
184
|
+
* `AuthoritativeChunk.docId` from {@link AlbexEngine.listChunks}. */
|
|
185
|
+
docId: number;
|
|
91
186
|
/** Paragraph index (DOCX/TXT) or page number (PDF, 1-based). */
|
|
92
187
|
location: number;
|
|
188
|
+
/** Canonical chunk id `"<docId>::<ord>"` — identical to the matching
|
|
189
|
+
* {@link AuthoritativeChunk.id}, so a host can fuse search hits with a
|
|
190
|
+
* parallel index (e.g. embeddings) on this key. Stable across compact(). */
|
|
191
|
+
chunkId: string;
|
|
93
192
|
/** Relevance score 0–1000. */
|
|
94
193
|
score: number;
|
|
95
194
|
/** Snippet text. With `windowed` search options this is a substring with
|
|
96
195
|
* ASCII ellipsis sentinels (`"... "` / `" ..."`) the UI should render
|
|
97
196
|
* as `…`. Without windowing, the full chunk text. */
|
|
98
197
|
snippet: string;
|
|
99
|
-
/** Primary token match
|
|
198
|
+
/** Primary token match as UTF-8 **byte** offsets within the encoded
|
|
199
|
+
* snippet (kept for backwards compatibility; equal to `matches[0]`).
|
|
200
|
+
* Byte offsets drift from JS string indices as soon as the snippet
|
|
201
|
+
* contains accents/ñ/emoji — use {@link snippetStart}/{@link snippetEnd}
|
|
202
|
+
* for `snippet.slice()` / UI highlighting. */
|
|
100
203
|
matchStart: number;
|
|
101
204
|
matchEnd: number;
|
|
102
|
-
/** All matched token spans within `snippet
|
|
205
|
+
/** All matched token spans within `snippet` as UTF-8 **byte** offsets,
|
|
206
|
+
* in query order. Length 1–4. */
|
|
103
207
|
matches: MatchSpan[];
|
|
208
|
+
/** Primary token match start as a UTF-16 code-unit index into `snippet` —
|
|
209
|
+
* safe to pass directly to `snippet.slice(snippetStart, snippetEnd)`. */
|
|
210
|
+
snippetStart: number;
|
|
211
|
+
/** Primary token match end (exclusive) as a UTF-16 code-unit index into
|
|
212
|
+
* `snippet`. */
|
|
213
|
+
snippetEnd: number;
|
|
104
214
|
}
|
|
105
215
|
/**
|
|
106
216
|
* Options that change how snippets are produced. Both fields are optional.
|
|
@@ -127,15 +237,17 @@ export interface SearchOptions {
|
|
|
127
237
|
export interface EngineStats {
|
|
128
238
|
documents: number;
|
|
129
239
|
chunks: number;
|
|
240
|
+
/** Bytes of indexed text currently in the text pool. */
|
|
130
241
|
textUsed: number;
|
|
242
|
+
/** RUNTIME text pool capacity in bytes (= resolved `textPoolBytes`). */
|
|
131
243
|
textCapacity: number;
|
|
132
244
|
wasmMemoryBytes: number;
|
|
133
|
-
/**
|
|
134
|
-
tier: Tier | null;
|
|
135
|
-
/** Compile-time chunk capacity for the loaded tier. */
|
|
245
|
+
/** RUNTIME chunk capacity the engine was initialised with. */
|
|
136
246
|
maxChunks: number;
|
|
137
|
-
/**
|
|
247
|
+
/** RUNTIME document capacity the engine was initialised with. */
|
|
138
248
|
maxDocs: number;
|
|
249
|
+
/** RUNTIME filename pool capacity in bytes. */
|
|
250
|
+
namePoolBytes: number;
|
|
139
251
|
}
|
|
140
252
|
export interface SearchStats {
|
|
141
253
|
query: string;
|
|
@@ -144,6 +256,14 @@ export interface SearchStats {
|
|
|
144
256
|
bloomTested: number;
|
|
145
257
|
bloomPassed: number;
|
|
146
258
|
bitapMatched: number;
|
|
259
|
+
/** True if the query had more than 8 OR branches — the extras were
|
|
260
|
+
* discarded and did not contribute results. */
|
|
261
|
+
truncatedBranches?: boolean;
|
|
262
|
+
/** True if tokens were dropped (more than 4 per branch) or clipped
|
|
263
|
+
* (longer than 64 bytes). */
|
|
264
|
+
truncatedTokens?: boolean;
|
|
265
|
+
/** True if the raw query exceeded 1024 bytes and was cut. */
|
|
266
|
+
truncatedQuery?: boolean;
|
|
147
267
|
}
|
|
148
268
|
/**
|
|
149
269
|
* One structured warning recorded by the engine during indexFile or
|
|
@@ -232,22 +352,34 @@ export declare class AlbexEngine {
|
|
|
232
352
|
private _pdfMem;
|
|
233
353
|
private _docs;
|
|
234
354
|
private _lastSearch;
|
|
355
|
+
/** Raw truncation bitflags from the most recent prepareQuery (ABI 5):
|
|
356
|
+
* 1 = branches dropped, 2 = tokens dropped/clipped, 4 = query bytes cut.
|
|
357
|
+
* Captured right after prepareQuery so every _lastSearch built for that
|
|
358
|
+
* query (including per-branch OR runs) reports the same flags. */
|
|
359
|
+
private _lastTruncFlags;
|
|
235
360
|
/** Structured diagnostics collected during the most recent operation.
|
|
236
361
|
* Drained by `takeDiagnostics()`. Capped at 256 entries to avoid
|
|
237
362
|
* unbounded memory growth in pathological cases (very corrupted
|
|
238
363
|
* corpora producing thousands of recovery warnings). */
|
|
239
364
|
private _diagnostics;
|
|
240
|
-
|
|
365
|
+
/** Resolved runtime capacity (set in init(); reused by reset()). */
|
|
366
|
+
private _capacity;
|
|
241
367
|
private _simd;
|
|
242
368
|
private _profile;
|
|
243
369
|
private _resources;
|
|
244
370
|
private _gpu;
|
|
245
|
-
|
|
371
|
+
/** True when the GPU-resident Bloom array no longer mirrors the WASM
|
|
372
|
+
* chunk array. Set by EVERY index mutation (indexFile, removeDocument,
|
|
373
|
+
* compact, reset, load) and cleared after a successful upload. A plain
|
|
374
|
+
* chunk-count comparison is NOT enough: compact() can reorder blooms
|
|
375
|
+
* while keeping the count identical, which would silently filter the
|
|
376
|
+
* wrong chunks (audit 1.5). */
|
|
377
|
+
private _gpuUploadDirty;
|
|
246
378
|
private _unsubscribeResources;
|
|
247
379
|
private readonly _opts;
|
|
248
380
|
private _opChain;
|
|
249
381
|
private _busy;
|
|
250
|
-
constructor(opts
|
|
382
|
+
constructor(opts?: AlbexOptions);
|
|
251
383
|
/** Serialize an async engine operation behind any in-flight one. */
|
|
252
384
|
private _exclusive;
|
|
253
385
|
/** Guard a synchronous mutator/search: refuse to run mid-async-operation
|
|
@@ -256,30 +388,55 @@ export declare class AlbexEngine {
|
|
|
256
388
|
/** Compact opportunistically when tombstones pile up under text pressure,
|
|
257
389
|
* so repeated removeDocument/replaceDocument don't exhaust the pool. */
|
|
258
390
|
private _autoCompactIfNeeded;
|
|
259
|
-
/**
|
|
391
|
+
/**
|
|
392
|
+
* Load and initialise the main WASM module. Must be called before any
|
|
393
|
+
* other method.
|
|
394
|
+
*
|
|
395
|
+
* Resolves `opts.capacity` ('std' default · 'large' · explicit object)
|
|
396
|
+
* and sizes the WASM pools accordingly via `initWithCapacity` (ABI 7).
|
|
397
|
+
* Memory cost ≈ `maxChunks × 64 B + textPoolBytes + namePoolBytes` —
|
|
398
|
+
* ~22 MB for 'std', ~180 MB for 'large'. Throws `AlbexInitError` if the
|
|
399
|
+
* requested capacity is out of range or the allocation fails.
|
|
400
|
+
*/
|
|
260
401
|
init(): Promise<void>;
|
|
261
402
|
/**
|
|
262
|
-
*
|
|
263
|
-
* 1. `opts.
|
|
264
|
-
*
|
|
265
|
-
*
|
|
403
|
+
* Instantiate the main core WASM. Two sources, in order of precedence:
|
|
404
|
+
* 1. `opts.wasmBytes` — caller-provided bytes; NO network access. The
|
|
405
|
+
* `albex/inline` entry uses this with the embedded baseline core, and
|
|
406
|
+
* integrators on bundlers that don't rewrite `new URL(…, import.meta.
|
|
407
|
+
* url)` (esbuild / Angular / some Webpack) can import the `.wasm` as an
|
|
408
|
+
* asset and pass the bytes here.
|
|
409
|
+
* 2. a URL from `_resolveWasmUrl` (`wasmUrl` / `wasmBaseUrl` / the
|
|
410
|
+
* bundler-friendly default).
|
|
266
411
|
*
|
|
267
|
-
*
|
|
412
|
+
* The URL path prefers `instantiateStreaming` and falls back to
|
|
413
|
+
* `instantiate(arrayBuffer)` when the host serves the `.wasm` with the
|
|
414
|
+
* wrong MIME type — a common esbuild / static-server pitfall that
|
|
415
|
+
* otherwise rejects with an opaque "Incorrect response MIME type". A 404
|
|
416
|
+
* or a network error is rethrown as an `AlbexInitError` whose message
|
|
417
|
+
* points at the concrete fixes (inline entry / `wasmBytes` / `wasmUrl`).
|
|
418
|
+
*/
|
|
419
|
+
private _instantiateMainWasm;
|
|
420
|
+
/** Build the actionable "couldn't load the core" message shared by every
|
|
421
|
+
* main-WASM load failure. The default `albex` entry embeds the core, so a
|
|
422
|
+
* fetch only runs when the caller explicitly set `wasmUrl`/`wasmBaseUrl` —
|
|
423
|
+
* the message leads with the one-line exit (drop the option). */
|
|
424
|
+
private _wasmLoadHelp;
|
|
425
|
+
/**
|
|
426
|
+
* Decide which `.wasm` binary to fetch. Order of precedence:
|
|
268
427
|
* 1. `opts.wasmUrl` literal → use verbatim
|
|
269
|
-
* 2. `opts.wasmBaseUrl` +
|
|
428
|
+
* 2. `opts.wasmBaseUrl` + simd suffix → fetched from that directory
|
|
270
429
|
* 3. zero-config default → `albex_wasm_bg.wasm` packaged
|
|
271
430
|
* next to this file, resolved
|
|
272
431
|
* via `import.meta.url`
|
|
273
432
|
*
|
|
274
|
-
*
|
|
275
|
-
*
|
|
276
|
-
*
|
|
277
|
-
*
|
|
278
|
-
*
|
|
433
|
+
* There are exactly two main binaries (baseline + SIMD); capacity is a
|
|
434
|
+
* RUNTIME parameter since ABI 7, so it never affects which file is
|
|
435
|
+
* fetched. SIMD auto-detection is only active when `wasmBaseUrl` is
|
|
436
|
+
* given, because picking a URL at runtime would defeat any bundler's
|
|
437
|
+
* static asset rewriting.
|
|
279
438
|
*/
|
|
280
439
|
private _resolveWasmUrl;
|
|
281
|
-
/** The tier that was actually loaded. `null` until `init()` resolves. */
|
|
282
|
-
get tier(): Tier | null;
|
|
283
440
|
/** True if the SIMD-accelerated binary was loaded. */
|
|
284
441
|
get simdEnabled(): boolean;
|
|
285
442
|
/** True if a WebGPU device is acquired and the next search will use it. */
|
|
@@ -302,12 +459,23 @@ export declare class AlbexEngine {
|
|
|
302
459
|
* No-op if the GPU device hasn't been acquired yet — first call attempts
|
|
303
460
|
* `init()` lazily; if that fails, the candidate path is permanently
|
|
304
461
|
* disabled for this engine instance.
|
|
462
|
+
*
|
|
463
|
+
* IMPORTANT: this method CLOBBERS the scratchpad (the candidate bitset
|
|
464
|
+
* is pushed through it via `setCandidateMask`). Any pattern previously
|
|
465
|
+
* staged by `selectQueryBranch` is destroyed — the caller MUST re-select
|
|
466
|
+
* the active branch before calling `searchBegin`, which snapshots the
|
|
467
|
+
* pattern from the scratchpad (audit 1.2).
|
|
305
468
|
*/
|
|
306
469
|
private _gpuPreFilter;
|
|
307
470
|
private _u8;
|
|
308
471
|
private _writePad;
|
|
309
472
|
private _writeStr;
|
|
310
473
|
private _readPad;
|
|
474
|
+
/** Copy `n` scratchpad bytes out of WASM memory. The copy is private to
|
|
475
|
+
* JS, so it survives later WASM calls (and memory growth) — used when the
|
|
476
|
+
* caller needs both the raw bytes (UTF-16 span mapping) and the decoded
|
|
477
|
+
* string of the same payload. */
|
|
478
|
+
private _readPadBytes;
|
|
311
479
|
private _feedText;
|
|
312
480
|
/**
|
|
313
481
|
* Compute the FNV-1a 64-bit content hash of `bytes` via the WASM
|
|
@@ -320,6 +488,11 @@ export declare class AlbexEngine {
|
|
|
320
488
|
private _contentHash;
|
|
321
489
|
private _feedXmlBytes;
|
|
322
490
|
private _ensurePdfWasm;
|
|
491
|
+
/** Fetch + compile the PDF module from a URL. Split out of
|
|
492
|
+
* `_ensurePdfWasm` so the `pdfWasmBytes` (no-network) path stays trivial.
|
|
493
|
+
* Falls back to a buffered compile when the host serves the binary with
|
|
494
|
+
* the wrong MIME type (same pitfall as the core loader). */
|
|
495
|
+
private _fetchPdfModule;
|
|
323
496
|
private _indexDocx;
|
|
324
497
|
private _indexXlsx;
|
|
325
498
|
private _indexPdf;
|
|
@@ -404,7 +577,9 @@ export declare class AlbexEngine {
|
|
|
404
577
|
private _indexRtf;
|
|
405
578
|
private static readonly _INDEXERS;
|
|
406
579
|
/**
|
|
407
|
-
* Index a file. Supported formats: DOCX, XLSX, PDF,
|
|
580
|
+
* Index a file. Supported formats (11, with varying depth): DOCX, XLSX, PDF,
|
|
581
|
+
* HTML, MD, JSON, CSV, EML, RTF, TXT, XML. Several are deliberately "lite"
|
|
582
|
+
* (CSV is RFC-4180-lite, EML is MIME-lite, RTF is regex-stripped).
|
|
408
583
|
* Throws for unsupported formats or parse errors.
|
|
409
584
|
*/
|
|
410
585
|
indexFile(file: File): Promise<IndexedDocument>;
|
|
@@ -432,6 +607,21 @@ export declare class AlbexEngine {
|
|
|
432
607
|
* references (e.g. in a UI) remain valid.
|
|
433
608
|
*/
|
|
434
609
|
compact(): void;
|
|
610
|
+
/**
|
|
611
|
+
* Enumerate the authoritative chunks Albex indexed for a document, in order.
|
|
612
|
+
* Lets a host mirror Albex's exact chunking — e.g. embed the same units for a
|
|
613
|
+
* parallel semantic index keyed on the same {@link AuthoritativeChunk.id}
|
|
614
|
+
* (`"<docId>::<ord>"`, identical to {@link SearchResult.chunkId}). `docId` is
|
|
615
|
+
* `IndexedDocument.docId` from {@link indexFile}; returns `[]` if no live
|
|
616
|
+
* document has that id.
|
|
617
|
+
*
|
|
618
|
+
* The returned `id`/`ord`/`sub` are stable across {@link compact} and
|
|
619
|
+
* snapshot save/load. Never key persistent structures on a search result's
|
|
620
|
+
* absolute `chunkIdx`, which {@link compact} renumbers.
|
|
621
|
+
*/
|
|
622
|
+
listChunks(docId: number): AuthoritativeChunk[];
|
|
623
|
+
/** Doc-table slot (0..getDocCount) whose stable id is `docId`, or -1. */
|
|
624
|
+
private _docSlotOf;
|
|
435
625
|
/**
|
|
436
626
|
* Search the index. Supports:
|
|
437
627
|
* - Simple queries: `contrato` (AND of tokens, accent-insensitive)
|
|
@@ -440,6 +630,11 @@ export declare class AlbexEngine {
|
|
|
440
630
|
*
|
|
441
631
|
* Pass `{ windowed: true }` to receive cropped snippets with ASCII ellipsis
|
|
442
632
|
* markers instead of full chunk text. Defaults: 60 bytes before, 120 after.
|
|
633
|
+
*
|
|
634
|
+
* Note: this synchronous path never uses the GPU pre-filter — the WebGPU
|
|
635
|
+
* scan is asynchronous by nature. Only `searchCooperative` (the budgeted
|
|
636
|
+
* path) engages the GPU; `search()` always runs the CPU Bloom pre-filter,
|
|
637
|
+
* regardless of the `gpu` option.
|
|
443
638
|
*/
|
|
444
639
|
search(query: string, opts?: SearchOptions): SearchResult[];
|
|
445
640
|
/** Read the WASM-compiled tokens of branch `i` for phrase post-filter.
|
|
@@ -481,12 +676,24 @@ export declare class AlbexEngine {
|
|
|
481
676
|
* may eat the entire budget, which is also fine.
|
|
482
677
|
*/
|
|
483
678
|
private _runSearchBudgeted;
|
|
679
|
+
/** Truncation booleans for SearchStats, decoded from the flags the WASM
|
|
680
|
+
* reported for the most recent prepareQuery (audit 1.6 — the engine used
|
|
681
|
+
* to drop OR branches past 8 and tokens past 4 in silence). */
|
|
682
|
+
private _truncStats;
|
|
484
683
|
/** Materialise results [0..count) into the public SearchResult shape.
|
|
485
684
|
* When `phraseTokens` is given, each result is kept only if those tokens
|
|
486
685
|
* appear adjacently in the FULL chunk text — independent of any display
|
|
487
|
-
* windowing — so phrase queries stay correct under `{ windowed: true }`.
|
|
686
|
+
* windowing — so phrase queries stay correct under `{ windowed: true }`.
|
|
687
|
+
*
|
|
688
|
+
* Frontier discipline (audit 2.1): all numeric fields of every result are
|
|
689
|
+
* read in ONE DataView pass over the `#[repr(C)]` RESULTS array
|
|
690
|
+
* (`getResultsPtr`/`getResultStride`, ABI 6) — the old path made 12-15
|
|
691
|
+
* frontier calls per result. Strings still need calls, minimised to one
|
|
692
|
+
* snippet read per result plus one doc-name read per DISTINCT document
|
|
693
|
+
* (the old `getResultDocName` was additionally O(doc_count) inside WASM
|
|
694
|
+
* for every single result). */
|
|
488
695
|
private _collectResults;
|
|
489
|
-
/** Run all OR branches and merge dedup-by-(
|
|
696
|
+
/** Run all OR branches and merge dedup-by-(chunkId, matchStart). The
|
|
490
697
|
* branches are already compiled inside the WASM (by prepareQuery); we
|
|
491
698
|
* iterate them with selectQueryBranch. The "rawQuery" param is kept
|
|
492
699
|
* only for the lastSearch.query field. */
|
|
@@ -495,7 +702,8 @@ export declare class AlbexEngine {
|
|
|
495
702
|
* active (set via selectQueryBranch). Returns the materialised
|
|
496
703
|
* SearchResult[]. Caller is responsible for activating a branch first. */
|
|
497
704
|
private _runSearch;
|
|
498
|
-
/** Returns current engine statistics
|
|
705
|
+
/** Returns current engine statistics (capacities are the RUNTIME values
|
|
706
|
+
* the engine was initialised with via the `capacity` option). */
|
|
499
707
|
getStats(): EngineStats;
|
|
500
708
|
/** Returns stats from the most recent search, or null. */
|
|
501
709
|
getLastSearchStats(): SearchStats | null;
|
package/dist/albex.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"albex.d.ts","sourceRoot":"","sources":["../src/albex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"albex.d.ts","sourceRoot":"","sources":["../src/albex.ts"],"names":[],"mappings":"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"}
|