@speakeasy-api/docs-mcp-core 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +1 -1
  2. package/dist/chunk-cache.d.ts +17 -0
  3. package/dist/chunk-cache.d.ts.map +1 -0
  4. package/dist/chunk-cache.js +123 -0
  5. package/dist/chunk-cache.js.map +1 -0
  6. package/dist/chunking.d.ts +6 -0
  7. package/dist/chunking.d.ts.map +1 -1
  8. package/dist/chunking.js +102 -11
  9. package/dist/chunking.js.map +1 -1
  10. package/dist/embedding-cache.d.ts +2 -2
  11. package/dist/embedding-cache.d.ts.map +1 -1
  12. package/dist/embedding-cache.js +26 -2
  13. package/dist/embedding-cache.js.map +1 -1
  14. package/dist/embedding.d.ts +41 -1
  15. package/dist/embedding.d.ts.map +1 -1
  16. package/dist/embedding.js +269 -1
  17. package/dist/embedding.js.map +1 -1
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +2 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/lancedb.d.ts +18 -0
  23. package/dist/lancedb.d.ts.map +1 -1
  24. package/dist/lancedb.js +37 -5
  25. package/dist/lancedb.js.map +1 -1
  26. package/dist/manifest-schema.d.ts +63 -0
  27. package/dist/manifest-schema.d.ts.map +1 -0
  28. package/dist/manifest-schema.js +68 -0
  29. package/dist/manifest-schema.js.map +1 -0
  30. package/dist/manifest.d.ts +6 -1
  31. package/dist/manifest.d.ts.map +1 -1
  32. package/dist/manifest.js +26 -0
  33. package/dist/manifest.js.map +1 -1
  34. package/dist/metadata.d.ts +6 -1
  35. package/dist/metadata.d.ts.map +1 -1
  36. package/dist/metadata.js +15 -3
  37. package/dist/metadata.js.map +1 -1
  38. package/dist/search-common.d.ts +6 -0
  39. package/dist/search-common.d.ts.map +1 -1
  40. package/dist/search-common.js +26 -0
  41. package/dist/search-common.js.map +1 -1
  42. package/dist/search.d.ts +4 -1
  43. package/dist/search.d.ts.map +1 -1
  44. package/dist/search.js +21 -3
  45. package/dist/search.js.map +1 -1
  46. package/dist/types.d.ts +28 -0
  47. package/dist/types.d.ts.map +1 -1
  48. package/package.json +8 -3
package/dist/embedding.js CHANGED
@@ -20,6 +20,7 @@ export class NoopEmbeddingProvider {
20
20
  name = "none";
21
21
  model = "none";
22
22
  dimensions = 0;
23
+ costPerMillionTokens = 0;
23
24
  configFingerprint;
24
25
  constructor() {
25
26
  this.configFingerprint = computeConfigFingerprint({
@@ -36,6 +37,7 @@ export class HashEmbeddingProvider {
36
37
  name = "hash";
37
38
  model;
38
39
  dimensions;
40
+ costPerMillionTokens = 0;
39
41
  configFingerprint;
40
42
  constructor(options = {}) {
41
43
  this.dimensions = options.dimensions ?? 256;
@@ -50,11 +52,25 @@ export class HashEmbeddingProvider {
50
52
  return texts.map((text) => hashToUnitVector(text, this.dimensions));
51
53
  }
52
54
  }
55
+ /**
56
+ * Conservative character limit per text input to stay under the 8191-token
57
+ * context window of OpenAI embedding models. We use ~3 chars/token as a
58
+ * safety margin so 8000 * 3 = 24 000 characters.
59
+ */
60
+ const DEFAULT_MAX_INPUT_CHARS = 24_000;
61
+ /** Known pricing in USD per 1M input tokens for OpenAI embedding models. */
62
+ const OPENAI_COST_PER_M_TOKENS = {
63
+ "text-embedding-3-large": 0.13,
64
+ "text-embedding-3-small": 0.02,
65
+ "text-embedding-ada-002": 0.10,
66
+ };
53
67
  export class OpenAIEmbeddingProvider {
54
68
  name = "openai";
55
69
  model;
56
70
  dimensions;
71
+ costPerMillionTokens;
57
72
  configFingerprint;
73
+ batchApiThreshold;
58
74
  apiKey;
59
75
  batchSize;
60
76
  baseUrl;
@@ -62,19 +78,25 @@ export class OpenAIEmbeddingProvider {
62
78
  maxRetries;
63
79
  retryBaseDelayMs;
64
80
  retryMaxDelayMs;
81
+ batchName;
82
+ onBatchProgress;
65
83
  constructor(options) {
66
84
  if (!options.apiKey.trim()) {
67
85
  throw new Error("OpenAIEmbeddingProvider requires a non-empty apiKey");
68
86
  }
69
87
  this.apiKey = options.apiKey;
70
88
  this.model = options.model ?? "text-embedding-3-large";
89
+ this.costPerMillionTokens = OPENAI_COST_PER_M_TOKENS[this.model] ?? 0;
71
90
  this.dimensions = options.dimensions ?? 3072;
72
91
  this.batchSize = options.batchSize ?? 128;
92
+ this.batchApiThreshold = options.batchApiThreshold ?? 2500;
93
+ this.batchName = options.batchName ?? "";
73
94
  this.baseUrl = (options.baseUrl ?? "https://api.openai.com/v1").replace(/\/$/, "");
74
95
  this.concurrency = normalizeInt(options.concurrency, 4, 1, 32);
75
96
  this.maxRetries = normalizeInt(options.maxRetries, 3, 0, 10);
76
97
  this.retryBaseDelayMs = normalizeInt(options.retryBaseDelayMs, 500, 50, 60_000);
77
98
  this.retryMaxDelayMs = normalizeInt(options.retryMaxDelayMs, 10_000, 100, 120_000);
99
+ this.onBatchProgress = options.onBatchProgress;
78
100
  this.configFingerprint = computeConfigFingerprint({
79
101
  provider: "openai",
80
102
  model: this.model,
@@ -86,6 +108,9 @@ export class OpenAIEmbeddingProvider {
86
108
  if (texts.length === 0) {
87
109
  return [];
88
110
  }
111
+ if (this.batchApiThreshold > 0 && texts.length >= this.batchApiThreshold) {
112
+ return this.embedViaBatchApi(texts);
113
+ }
89
114
  const vectors = new Array(texts.length);
90
115
  const batches = [];
91
116
  for (let i = 0; i < texts.length; i += this.batchSize) {
@@ -107,6 +132,15 @@ export class OpenAIEmbeddingProvider {
107
132
  }
108
133
  async embedBatchWithRetry(batch) {
109
134
  let attempt = 0;
135
+ const truncated = batch.map((text) => {
136
+ if (text.length > DEFAULT_MAX_INPUT_CHARS) {
137
+ const source = text.match(/^Context: (.+)\n/)?.[1] ?? "unknown";
138
+ console.warn(`[docs-mcp] Embedding input truncated from ${text.length} to ${DEFAULT_MAX_INPUT_CHARS} characters (source: ${source}). ` +
139
+ `Consider lowering max_chunk_size in your chunking strategy to avoid content loss.`);
140
+ return text.slice(0, DEFAULT_MAX_INPUT_CHARS);
141
+ }
142
+ return text;
143
+ });
110
144
  while (true) {
111
145
  const response = await fetch(`${this.baseUrl}/embeddings`, {
112
146
  method: "POST",
@@ -116,7 +150,7 @@ export class OpenAIEmbeddingProvider {
116
150
  },
117
151
  body: JSON.stringify({
118
152
  model: this.model,
119
- input: batch,
153
+ input: truncated,
120
154
  dimensions: this.dimensions
121
155
  })
122
156
  });
@@ -141,6 +175,224 @@ export class OpenAIEmbeddingProvider {
141
175
  attempt += 1;
142
176
  }
143
177
  }
178
+ buildBatchJsonl(texts) {
179
+ const lines = [];
180
+ for (let i = 0; i < texts.length; i++) {
181
+ let text = texts[i];
182
+ if (text.length > DEFAULT_MAX_INPUT_CHARS) {
183
+ text = text.slice(0, DEFAULT_MAX_INPUT_CHARS);
184
+ }
185
+ lines.push(JSON.stringify({
186
+ custom_id: `req-${i}`,
187
+ method: "POST",
188
+ url: "/v1/embeddings",
189
+ body: {
190
+ model: this.model,
191
+ input: text,
192
+ dimensions: this.dimensions,
193
+ },
194
+ }));
195
+ }
196
+ return lines.join("\n");
197
+ }
198
+ async uploadBatchFile(jsonl) {
199
+ const blob = new Blob([jsonl], { type: "application/jsonl" });
200
+ const formData = new FormData();
201
+ formData.append("purpose", "batch");
202
+ formData.append("file", blob, "batch-embeddings.jsonl");
203
+ const response = await fetch(`${this.baseUrl}/files`, {
204
+ method: "POST",
205
+ headers: { Authorization: `Bearer ${this.apiKey}` },
206
+ body: formData,
207
+ });
208
+ if (!response.ok) {
209
+ const body = await response.text();
210
+ throw new Error(`OpenAI file upload failed (${response.status}): ${body.slice(0, 500)}`);
211
+ }
212
+ const payload = (await response.json());
213
+ return payload.id;
214
+ }
215
+ async createBatch(fileId, contentSha) {
216
+ const response = await fetch(`${this.baseUrl}/batches`, {
217
+ method: "POST",
218
+ headers: {
219
+ "Content-Type": "application/json",
220
+ Authorization: `Bearer ${this.apiKey}`,
221
+ },
222
+ body: JSON.stringify({
223
+ input_file_id: fileId,
224
+ endpoint: "/v1/embeddings",
225
+ completion_window: "24h",
226
+ metadata: {
227
+ ...(this.batchName ? { batch_name: this.batchName } : {}),
228
+ content_sha: contentSha,
229
+ },
230
+ }),
231
+ });
232
+ if (!response.ok) {
233
+ const body = await response.text();
234
+ throw new Error(`OpenAI batch creation failed (${response.status}): ${body.slice(0, 500)}`);
235
+ }
236
+ const payload = (await response.json());
237
+ return payload.id;
238
+ }
239
+ /**
240
+ * Search recent OpenAI batches for one whose metadata.content_sha matches,
241
+ * indicating the same embedding inputs were already submitted.
242
+ * Returns the batch if found in a usable state; null otherwise.
243
+ */
244
+ async findExistingBatch(contentSha) {
245
+ try {
246
+ const response = await fetch(`${this.baseUrl}/batches?limit=100`, {
247
+ headers: { Authorization: `Bearer ${this.apiKey}` },
248
+ });
249
+ if (!response.ok) {
250
+ return null; // Non-critical — fall through to creating a new batch
251
+ }
252
+ const payload = (await response.json());
253
+ for (const batch of payload.data) {
254
+ if (this.batchName && batch.metadata?.batch_name && batch.metadata.batch_name !== this.batchName)
255
+ continue;
256
+ if (batch.metadata?.content_sha !== contentSha)
257
+ continue;
258
+ // Skip terminal failure states — we'll create a new batch
259
+ if (batch.status === "failed" || batch.status === "expired" || batch.status === "cancelled") {
260
+ continue;
261
+ }
262
+ return {
263
+ id: batch.id,
264
+ status: batch.status,
265
+ ...(batch.output_file_id ? { output_file_id: batch.output_file_id } : {}),
266
+ };
267
+ }
268
+ }
269
+ catch {
270
+ // Network error listing batches — non-critical
271
+ }
272
+ return null;
273
+ }
274
+ async pollBatchUntilComplete(batchId) {
275
+ const maxWaitMs = 2 * 60 * 60 * 1000; // 2 hours
276
+ const intervals = [10_000, 10_000, 10_000, 30_000, 30_000, 60_000]; // escalating
277
+ const startTime = Date.now();
278
+ let pollIndex = 0;
279
+ let firstProgressTime;
280
+ let firstProgressCompleted;
281
+ while (true) {
282
+ const interval = intervals[Math.min(pollIndex, intervals.length - 1)];
283
+ const response = await fetch(`${this.baseUrl}/batches/${batchId}`, {
284
+ headers: { Authorization: `Bearer ${this.apiKey}` },
285
+ });
286
+ if (!response.ok) {
287
+ const body = await response.text();
288
+ throw new Error(`OpenAI batch poll failed (${response.status}): ${body.slice(0, 500)}`);
289
+ }
290
+ const batch = (await response.json());
291
+ if (batch.status === "completed") {
292
+ if (!batch.output_file_id) {
293
+ throw new Error("OpenAI batch completed but no output_file_id returned");
294
+ }
295
+ return batch.output_file_id;
296
+ }
297
+ if (batch.status === "failed" || batch.status === "expired" || batch.status === "cancelled") {
298
+ throw new Error(`OpenAI batch ${batch.status}`);
299
+ }
300
+ if (Date.now() - startTime >= maxWaitMs) {
301
+ throw new Error(`OpenAI batch timed out after ${maxWaitMs / 1000}s`);
302
+ }
303
+ const intervalSec = interval / 1000;
304
+ const counts = batch.request_counts;
305
+ // Track first time we see progress to compute ETA
306
+ if (counts && counts.completed > 0 && firstProgressTime === undefined) {
307
+ firstProgressTime = Date.now();
308
+ firstProgressCompleted = counts.completed;
309
+ }
310
+ let etaSec;
311
+ if (firstProgressTime !== undefined && firstProgressCompleted !== undefined && counts && counts.completed > firstProgressCompleted) {
312
+ const elapsedSinceFirst = (Date.now() - firstProgressTime) / 1000;
313
+ const completedSinceFirst = counts.completed - firstProgressCompleted;
314
+ const rate = completedSinceFirst / elapsedSinceFirst;
315
+ etaSec = Math.round((counts.total - counts.completed) / rate);
316
+ }
317
+ let progressSuffix = "";
318
+ if (counts) {
319
+ const pct = ((counts.completed / counts.total) * 100).toFixed(1);
320
+ const eta = etaSec !== undefined ? `, ETA ~${formatDuration(etaSec)}` : "";
321
+ const failed = counts.failed > 0 ? `, ${counts.failed} failed` : "";
322
+ progressSuffix = ` — ${counts.completed}/${counts.total} (${pct}%)${failed}${eta}`;
323
+ }
324
+ for (let remaining = intervalSec; remaining > 0; remaining--) {
325
+ const now = Math.round((Date.now() - startTime) / 1000);
326
+ this.onBatchProgress?.({
327
+ phase: "batch-polling",
328
+ message: `Batch API: Elapsed=${now}s. Next poll in ${remaining}s${progressSuffix}`,
329
+ ...(counts ? { counts } : {}),
330
+ elapsedSec: now,
331
+ pollRemainingSec: remaining,
332
+ ...(etaSec !== undefined ? { etaSec } : {}),
333
+ });
334
+ await sleep(1000);
335
+ }
336
+ pollIndex++;
337
+ }
338
+ }
339
+ async downloadBatchResults(outputFileId, expectedCount) {
340
+ this.onBatchProgress?.({
341
+ phase: "batch-downloading",
342
+ message: "Downloading results...",
343
+ });
344
+ const response = await fetch(`${this.baseUrl}/files/${outputFileId}/content`, {
345
+ headers: { Authorization: `Bearer ${this.apiKey}` },
346
+ });
347
+ if (!response.ok) {
348
+ const body = await response.text();
349
+ throw new Error(`OpenAI batch results download failed (${response.status}): ${body.slice(0, 500)}`);
350
+ }
351
+ const text = await response.text();
352
+ const vectors = new Array(expectedCount);
353
+ for (const line of text.split("\n")) {
354
+ if (!line.trim())
355
+ continue;
356
+ const row = JSON.parse(line);
357
+ const index = Number.parseInt(row.custom_id.replace("req-", ""), 10);
358
+ vectors[index] = row.response.body.data[0].embedding;
359
+ }
360
+ if (vectors.some((v) => v === undefined)) {
361
+ throw new Error("OpenAI batch results missing one or more vectors");
362
+ }
363
+ return vectors;
364
+ }
365
+ async embedViaBatchApi(texts) {
366
+ const jsonl = this.buildBatchJsonl(texts);
367
+ const contentSha = sha256hex(jsonl);
368
+ const sizeMB = (new TextEncoder().encode(jsonl).byteLength / (1024 * 1024)).toFixed(1);
369
+ // Check if an identical batch already exists on OpenAI (e.g. from a cancelled run)
370
+ const existing = await this.findExistingBatch(contentSha);
371
+ if (existing) {
372
+ if (existing.status === "completed" && existing.output_file_id) {
373
+ this.onBatchProgress?.({
374
+ phase: "batch-downloading",
375
+ message: `Found completed batch ${existing.id} with matching content — downloading results...`,
376
+ });
377
+ return this.downloadBatchResults(existing.output_file_id, texts.length);
378
+ }
379
+ // Still in progress — resume polling
380
+ this.onBatchProgress?.({
381
+ phase: "batch-polling",
382
+ message: `Resuming existing batch ${existing.id} (status: ${existing.status})`,
383
+ });
384
+ const outputFileId = await this.pollBatchUntilComplete(existing.id);
385
+ return this.downloadBatchResults(outputFileId, texts.length);
386
+ }
387
+ this.onBatchProgress?.({
388
+ phase: "batch-uploading",
389
+ message: `Embedding ${texts.length} chunks (>= ${this.batchApiThreshold} threshold): using batch API\nUploading batch file: ${sizeMB}MB...`,
390
+ });
391
+ const fileId = await this.uploadBatchFile(jsonl);
392
+ const batchId = await this.createBatch(fileId, contentSha);
393
+ const outputFileId = await this.pollBatchUntilComplete(batchId);
394
+ return this.downloadBatchResults(outputFileId, texts.length);
395
+ }
144
396
  }
145
397
  export function createEmbeddingProvider(input) {
146
398
  if (input.provider !== "none" &&
@@ -190,6 +442,15 @@ export function createEmbeddingProvider(input) {
190
442
  if (input.retryMaxDelayMs !== undefined) {
191
443
  options.retryMaxDelayMs = input.retryMaxDelayMs;
192
444
  }
445
+ if (input.batchApiThreshold !== undefined) {
446
+ options.batchApiThreshold = input.batchApiThreshold;
447
+ }
448
+ if (input.batchName !== undefined) {
449
+ options.batchName = input.batchName;
450
+ }
451
+ if (input.onBatchProgress !== undefined) {
452
+ options.onBatchProgress = input.onBatchProgress;
453
+ }
193
454
  return new OpenAIEmbeddingProvider(options);
194
455
  }
195
456
  function hashToUnitVector(text, dimensions) {
@@ -235,6 +496,13 @@ function parseRetryAfterMs(value) {
235
496
  }
236
497
  return 0;
237
498
  }
499
+ export function formatDuration(seconds) {
500
+ if (seconds < 60)
501
+ return `${seconds}s`;
502
+ const m = Math.floor(seconds / 60);
503
+ const s = seconds % 60;
504
+ return s > 0 ? `${m}m${s}s` : `${m}m`;
505
+ }
238
506
  function sleep(ms) {
239
507
  return new Promise((resolve) => {
240
508
  setTimeout(resolve, ms);
@@ -1 +1 @@
1
- {"version":3,"file":"embedding.js","sourceRoot":"","sources":["../src/embedding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"embedding.js","sourceRoot":"","sources":["../src/embedding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,CAAC;IACnD,OAAO,YAAY,OAAO,iBAAiB,KAAK,CAAC,YAAY,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAuC;IACvE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACjC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,CAAC;AA6BD,MAAM,OAAO,qBAAqB;IACvB,IAAI,GAAG,MAAM,CAAC;IACd,KAAK,GAAG,MAAM,CAAC;IACf,UAAU,GAAG,CAAC,CAAC;IACf,oBAAoB,GAAG,CAAC,CAAC;IACzB,iBAAiB,CAAS;IAEnC;QACE,IAAI,CAAC,iBAAiB,GAAG,wBAAwB,CAAC;YAChD,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,MAAM;YACb,UAAU,EAAE,CAAC;SACd,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAe;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,qBAAqB;IACvB,IAAI,GAAG,MAAM,CAAC;IACd,KAAK,CAAS;IACd,UAAU,CAAS;IACnB,oBAAoB,GAAG,CAAC,CAAC;IACzB,iBAAiB,CAAS;IAEnC,YAAY,UAAmD,EAAE;QAC/D,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;QACxC,IAAI,CAAC,iBAAiB,GAAG,wBAAwB,CAAC;YAChD,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAe;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACtE,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAEvC,4EAA4E;AAC5E,MAAM,wBAAwB,GAA2B;IACvD,wBAAwB,EAAE,IAAI;IAC9B,wBAAwB,EAAE,IAAI;IAC9B,wBAAwB,EAAE,IAAI;CAC/B,CAAC;AAEF,MAAM,OAAO,uBAAuB;IACzB,IAAI,GAAG,QAAQ,CAAC;IAChB,KAAK,CAAS;IACd,UAAU,CAAS;IACnB,oBAAoB,CAAS;IAC7B,iBAAiB,CAAS;IAC1B,iBAAiB,CAAS;IAElB,MAAM,CAAS;IACvB,SAAS,CAAS;IACV,OAAO,CAAS;IAChB,WAAW,CAAS;IACpB,UAAU,CAAS;IACnB,gBAAgB,CAAS;IACzB,eAAe,CAAS;IACxB,SAAS,CAAS;IAClB,eAAe,CAAoD;IAEpF,YAAY,OAAuC;QACjD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,wBAAwB,CAAC;QACvD,IAAI,CAAC,oBAAoB,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC;QAC1C,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC;QAC3D,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,2BAA2B,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAChF,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACnF,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;QAC/C,IAAI,CAAC,iBAAiB,GAAG,wBAAwB,CAAC;YAChD,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAe;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzE,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,OAAO,GAAgC,IAAI,KAAK,CAAuB,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3F,MAAM,OAAO,GAAgD,EAAE,CAAC;QAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;aAC3C,CAAC,CAAC;QACL,CAAC;QAED,MAAM,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAClE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAClE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChD,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QAED,OAAO,OAAqB,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,KAAe;QAC/C,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACnC,IAAI,IAAI,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;gBAChE,OAAO,CAAC,IAAI,CACV,6CAA6C,IAAI,CAAC,MAAM,OAAO,uBAAuB,wBAAwB,MAAM,KAAK;oBACvH,mFAAmF,CACtF,CAAC;gBACF,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;YAChD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,aAAa,EAAE;gBACzD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;iBACvC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,KAAK,EAAE,SAAS;oBAChB,UAAU,EAAE,IAAI,CAAC,UAAU;iBAC5B,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAErC,CAAC;gBAEF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBACnE,CAAC;gBAED,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;gBACpE,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;oBACpC,MAAM,IAAI,KAAK,CACb,sDAAsD,KAAK,CAAC,MAAM,SAAS,OAAO,CAAC,MAAM,EAAE,CAC5F,CAAC;gBACJ,CAAC;gBAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACtE,MAAM,IAAI,KAAK,CACb,qCAAqC,QAAQ,CAAC,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAC/E,CAAC;YACJ,CAAC;YAED,MAAM,YAAY,GAAG,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;YAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,GAAG,CACN,YAAY,EACZ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAC/E,CACF,CAAC;YAEF,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,KAAe;QACrC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACrB,IAAI,IAAI,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;gBAC1C,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;YAChD,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;gBACxB,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,gBAAgB;gBACrB,IAAI,EAAE;oBACJ,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,KAAK,EAAE,IAAI;oBACX,UAAU,EAAE,IAAI,CAAC,UAAU;iBAC5B;aACF,CAAC,CAAC,CAAC;QACN,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,KAAa;QACzC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAChC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,wBAAwB,CAAC,CAAC;QAExD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,QAAQ,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE;YACnD,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAC;QAC1D,OAAO,OAAO,CAAC,EAAE,CAAC;IACpB,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,UAAkB;QAC1D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,UAAU,EAAE;YACtD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACvC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,aAAa,EAAE,MAAM;gBACrB,QAAQ,EAAE,gBAAgB;gBAC1B,iBAAiB,EAAE,KAAK;gBACxB,QAAQ,EAAE;oBACR,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzD,WAAW,EAAE,UAAU;iBACxB;aACF,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,CAAC,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9F,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAC;QAC1D,OAAO,OAAO,CAAC,EAAE,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,iBAAiB,CAAC,UAAkB;QAKhD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,oBAAoB,EAAE;gBAChE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE;aACpD,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC,CAAC,sDAAsD;YACrE,CAAC;YAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAOrC,CAAC;YAEF,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,EAAE,UAAU,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,KAAK,IAAI,CAAC,SAAS;oBAAE,SAAS;gBAC3G,IAAI,KAAK,CAAC,QAAQ,EAAE,WAAW,KAAK,UAAU;oBAAE,SAAS;gBAEzD,0DAA0D;gBAC1D,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;oBAC5F,SAAS;gBACX,CAAC;gBAED,OAAO;oBACL,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC1E,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;QACjD,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,OAAe;QAClD,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,UAAU;QAChD,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa;QACjF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,iBAAqC,CAAC;QAC1C,IAAI,sBAA0C,CAAC;QAE/C,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAE,CAAC;YAEvE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,YAAY,OAAO,EAAE,EAAE;gBACjE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE;aACpD,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1F,CAAC;YAED,MAAM,KAAK,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAInC,CAAC;YAEF,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;oBAC1B,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;gBAC3E,CAAC;gBACD,OAAO,KAAK,CAAC,cAAc,CAAC;YAC9B,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC5F,MAAM,IAAI,KAAK,CAAC,gBAAgB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAClD,CAAC;YAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,gCAAgC,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC;YACvE,CAAC;YAED,MAAM,WAAW,GAAG,QAAQ,GAAG,IAAI,CAAC;YACpC,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC;YAEpC,kDAAkD;YAClD,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBACtE,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC/B,sBAAsB,GAAG,MAAM,CAAC,SAAS,CAAC;YAC5C,CAAC;YAED,IAAI,MAA0B,CAAC;YAC/B,IAAI,iBAAiB,KAAK,SAAS,IAAI,sBAAsB,KAAK,SAAS,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,sBAAsB,EAAE,CAAC;gBACnI,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAC,GAAG,IAAI,CAAC;gBAClE,MAAM,mBAAmB,GAAG,MAAM,CAAC,SAAS,GAAG,sBAAsB,CAAC;gBACtE,MAAM,IAAI,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;gBACrD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;YAChE,CAAC;YAED,IAAI,cAAc,GAAG,EAAE,CAAC;YACxB,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACjE,MAAM,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,cAAc,GAAG,MAAM,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,GAAG,KAAK,MAAM,GAAG,GAAG,EAAE,CAAC;YACrF,CAAC;YAED,KAAK,IAAI,SAAS,GAAG,WAAW,EAAE,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;gBAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;gBACxD,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrB,KAAK,EAAE,eAAe;oBACtB,OAAO,EAAE,sBAAsB,GAAG,mBAAmB,SAAS,IAAI,cAAc,EAAE;oBAClF,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7B,UAAU,EAAE,GAAG;oBACf,gBAAgB,EAAE,SAAS;oBAC3B,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5C,CAAC,CAAC;gBACH,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;YACD,SAAS,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,YAAoB,EAAE,aAAqB;QAC5E,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,KAAK,EAAE,mBAAmB;YAC1B,OAAO,EAAE,wBAAwB;SAClC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,UAAU,YAAY,UAAU,EAAE;YAC5E,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE;SACpD,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,yCAAyC,QAAQ,CAAC,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACtG,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,KAAK,CAAuB,aAAa,CAAC,CAAC;QAE/D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,SAAS;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAO1B,CAAC;YACF,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACrE,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,SAAS,CAAC;QACxD,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,OAAqB,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,KAAe;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEvF,mFAAmF;QACnF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC/D,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrB,KAAK,EAAE,mBAAmB;oBAC1B,OAAO,EAAE,yBAAyB,QAAQ,CAAC,EAAE,iDAAiD;iBAC/F,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1E,CAAC;YAED,qCAAqC;YACrC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,KAAK,EAAE,eAAe;gBACtB,OAAO,EAAE,2BAA2B,QAAQ,CAAC,EAAE,aAAa,QAAQ,CAAC,MAAM,GAAG;aAC/E,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACpE,OAAO,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE,aAAa,KAAK,CAAC,MAAM,eAAe,IAAI,CAAC,iBAAiB,uDAAuD,MAAM,OAAO;SAC5I,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/D,CAAC;CACF;AAED,MAAM,UAAU,uBAAuB,CAAC,KAcvC;IACC,IACE,KAAK,CAAC,QAAQ,KAAK,MAAM;QACzB,KAAK,CAAC,QAAQ,KAAK,MAAM;QACzB,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAC3B,CAAC;QACD,MAAM,IAAI,KAAK,CACb,mCAAmC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,wCAAwC,CAClG,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,IAAI,qBAAqB,EAAE,CAAC;IACrC,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC9B,MAAM,OAAO,GAA4C,EAAE,CAAC;QAC5D,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACxC,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC9B,CAAC;QACD,OAAO,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,CAAC,QAAQ,oEAAoE,CACtF,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAmC,EAAE,MAAM,EAAE,CAAC;IAC3D,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC9B,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACxC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAClC,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IACtC,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAC1C,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACxC,CAAC;IACD,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACzC,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACpD,CAAC;IACD,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;IAClD,CAAC;IACD,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC;IACtD,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IACtC,CAAC;IACD,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;IAClD,CAAC;IAED,OAAO,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,UAAkB;IACxD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAS,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAErD,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC;QAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC;IACpC,CAAC;IAED,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC;IACxB,CAAC;IACD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEvB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,YAAY,CACnB,KAAyB,EACzB,QAAgB,EAChB,GAAW,EACX,GAAW;IAEX,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAoB;IAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACvC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;AACxC,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,KAAU,EACV,WAAmB,EACnB,MAAkC;IAElC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC3E,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,IAAI,EAAE;QACvC,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,MAAM,CAAC;YACrB,MAAM,IAAI,CAAC,CAAC;YACZ,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC1B,MAAM;YACR,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YACD,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -3,9 +3,11 @@ export * from "./chunking.js";
3
3
  export * from "./parser.js";
4
4
  export * from "./cursor.js";
5
5
  export * from "./manifest.js";
6
+ export * from "./manifest-schema.js";
6
7
  export * from "./metadata.js";
7
8
  export * from "./search.js";
8
9
  export * from "./embedding.js";
9
10
  export * from "./embedding-cache.js";
10
11
  export * from "./lancedb.js";
12
+ export * from "./chunk-cache.js";
11
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -3,9 +3,11 @@ export * from "./chunking.js";
3
3
  export * from "./parser.js";
4
4
  export * from "./cursor.js";
5
5
  export * from "./manifest.js";
6
+ export * from "./manifest-schema.js";
6
7
  export * from "./metadata.js";
7
8
  export * from "./search.js";
8
9
  export * from "./embedding.js";
9
10
  export * from "./embedding-cache.js";
10
11
  export * from "./lancedb.js";
12
+ export * from "./chunk-cache.js";
11
13
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC"}
package/dist/lancedb.d.ts CHANGED
@@ -5,11 +5,15 @@ export interface BuildLanceDbIndexOptions {
5
5
  tableName?: string;
6
6
  metadataKeys?: string[];
7
7
  vectorsByChunkId?: Map<string, number[]>;
8
+ fileFingerprints?: Record<string, string>;
9
+ onProgress?: (step: IndexBuildStep) => void;
8
10
  }
11
+ export type IndexBuildStep = "writing-table" | "indexing-fts" | "indexing-scalar" | "indexing-vector";
9
12
  export interface OpenLanceDbSearchEngineOptions {
10
13
  dbPath: string;
11
14
  tableName?: string;
12
15
  metadataKeys: string[];
16
+ collapseKeys?: string[];
13
17
  proximityWeight?: number;
14
18
  phraseSlop?: number;
15
19
  queryEmbeddingProvider?: EmbeddingProvider;
@@ -24,6 +28,7 @@ export declare function buildLanceDbIndex(options: BuildLanceDbIndexOptions): Pr
24
28
  export declare class LanceDbSearchEngine implements SearchEngine {
25
29
  private readonly table;
26
30
  private readonly metadataKeys;
31
+ private readonly collapseKeys;
27
32
  private readonly proximityWeight;
28
33
  private readonly phraseSlop;
29
34
  private readonly queryEmbeddingProvider;
@@ -39,4 +44,17 @@ export declare class LanceDbSearchEngine implements SearchEngine {
39
44
  private buildHint;
40
45
  private warnVectorFailure;
41
46
  }
47
+ export interface ChunkRow extends Record<string, unknown> {
48
+ chunk_id: string;
49
+ filepath: string;
50
+ heading: string;
51
+ heading_level: number;
52
+ content: string;
53
+ content_text: string;
54
+ breadcrumb: string;
55
+ chunk_index: number;
56
+ metadata_json: string;
57
+ file_fingerprint?: string;
58
+ vector?: number[];
59
+ }
42
60
  //# sourceMappingURL=lancedb.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lancedb.d.ts","sourceRoot":"","sources":["../src/lancedb.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,KAAK,EAEL,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,YAAY,EAGZ,aAAa,EACb,YAAY,EACb,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sBAAsB,CAAC,EAAE,iBAAiB,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,uBAAuB,CAAC,CAsDlC;AAED,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAW;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAgC;IACvE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IACtD,OAAO,CAAC,sBAAsB,CAAS;IAEvC,OAAO;WAkBM,IAAI,CAAC,OAAO,EAAE,8BAA8B,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA2BlF,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA0DrD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;YAmE7C,WAAW;YAcX,cAAc;YAiCd,SAAS;IA6CvB,OAAO,CAAC,iBAAiB;CAS1B"}
1
+ {"version":3,"file":"lancedb.d.ts","sourceRoot":"","sources":["../src/lancedb.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,KAAK,EAEL,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,YAAY,EAGZ,aAAa,EACb,YAAY,EACb,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,MAAM,cAAc,GACtB,eAAe,GACf,cAAc,GACd,iBAAiB,GACjB,iBAAiB,CAAC;AAEtB,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sBAAsB,CAAC,EAAE,iBAAiB,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,uBAAuB,CAAC,CA4DlC;AAED,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAW;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAW;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAgC;IACvE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IACtD,OAAO,CAAC,sBAAsB,CAAS;IAEvC,OAAO;WAoBM,IAAI,CAAC,OAAO,EAAE,8BAA8B,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA+BlF,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAiErD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;YAmE7C,WAAW;YAcX,cAAc;YAiCd,SAAS;IA6CvB,OAAO,CAAC,iBAAiB;CAS1B;AAsRD,MAAM,WAAW,QAAS,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB"}
package/dist/lancedb.js CHANGED
@@ -1,18 +1,21 @@
1
1
  import { connect, Index, MultiMatchQuery, PhraseQuery } from "@lancedb/lancedb";
2
2
  import { decodeSearchCursor, encodeSearchCursor } from "./cursor.js";
3
- import { clampLimit, isChunkIdFormat, makeSnippet } from "./search-common.js";
3
+ import { clampLimit, dedupKey, isChunkIdFormat, makeSnippet } from "./search-common.js";
4
4
  const DEFAULT_TABLE_NAME = "chunks";
5
5
  const RRF_K = 60;
6
6
  export async function buildLanceDbIndex(options) {
7
7
  const tableName = options.tableName ?? DEFAULT_TABLE_NAME;
8
8
  const metadataKeys = options.metadataKeys ?? collectMetadataKeys(options.chunks);
9
- const rows = options.chunks.map((chunk) => serializeChunkRow(chunk, metadataKeys, options.vectorsByChunkId));
9
+ const rows = options.chunks.map((chunk) => serializeChunkRow(chunk, metadataKeys, options.vectorsByChunkId, options.fileFingerprints));
10
10
  if (rows.length === 0) {
11
11
  return { tableName, metadataKeys };
12
12
  }
13
+ const onProgress = options.onProgress;
13
14
  const db = await connect(options.dbPath);
14
15
  try {
16
+ onProgress?.("writing-table");
15
17
  const table = await db.createTable(tableName, rows, { mode: "overwrite" });
18
+ onProgress?.("indexing-fts");
16
19
  await table.createIndex("content_text", {
17
20
  config: Index.fts({ withPosition: true }),
18
21
  replace: true
@@ -21,6 +24,7 @@ export async function buildLanceDbIndex(options) {
21
24
  config: Index.fts({ withPosition: true }),
22
25
  replace: true
23
26
  });
27
+ onProgress?.("indexing-scalar");
24
28
  await Promise.all([
25
29
  safeCreateScalarIndex(table, "chunk_id"),
26
30
  safeCreateScalarIndex(table, "filepath"),
@@ -28,6 +32,7 @@ export async function buildLanceDbIndex(options) {
28
32
  ]);
29
33
  // Create IVF-PQ vector index when there are enough rows with vectors
30
34
  if (options.vectorsByChunkId && options.vectorsByChunkId.size >= 256) {
35
+ onProgress?.("indexing-vector");
31
36
  const numPartitions = Math.max(1, Math.round(Math.sqrt(options.vectorsByChunkId.size)));
32
37
  try {
33
38
  await table.createIndex("vector", {
@@ -52,6 +57,7 @@ export async function buildLanceDbIndex(options) {
52
57
  export class LanceDbSearchEngine {
53
58
  table;
54
59
  metadataKeys;
60
+ collapseKeys;
55
61
  proximityWeight;
56
62
  phraseSlop;
57
63
  queryEmbeddingProvider;
@@ -61,6 +67,7 @@ export class LanceDbSearchEngine {
61
67
  constructor(table, metadataKeys, options = {}) {
62
68
  this.table = table;
63
69
  this.metadataKeys = [...metadataKeys];
70
+ this.collapseKeys = options.collapseKeys ?? [];
64
71
  this.proximityWeight = options.proximityWeight ?? 1.25;
65
72
  this.phraseSlop = normalizePhraseSlop(options.phraseSlop);
66
73
  this.queryEmbeddingProvider = options.queryEmbeddingProvider;
@@ -71,6 +78,9 @@ export class LanceDbSearchEngine {
71
78
  const db = await connect(options.dbPath);
72
79
  const table = await db.openTable(options.tableName ?? DEFAULT_TABLE_NAME);
73
80
  const engineOptions = {};
81
+ if (options.collapseKeys !== undefined) {
82
+ engineOptions.collapseKeys = options.collapseKeys;
83
+ }
74
84
  if (options.proximityWeight !== undefined) {
75
85
  engineOptions.proximityWeight = options.proximityWeight;
76
86
  }
@@ -109,10 +119,15 @@ export class LanceDbSearchEngine {
109
119
  const phraseWeight = request.rrf_weights?.phrase ?? this.proximityWeight;
110
120
  const vecWeight = request.rrf_weights?.vector ?? this.vectorWeight;
111
121
  const blended = blendRows(matchRows, phraseRows, vectorRows, phraseWeight, vecWeight, matchWeight);
112
- const paged = blended.slice(offset, offset + limit);
122
+ // Collapse content-equivalent results across variant axes (e.g. same
123
+ // operation documented in multiple SDK languages). Skipped when active
124
+ // filters already restrict every collapse axis to a single value.
125
+ const activeCollapseKeys = this.collapseKeys.filter((k) => !filters[k]);
126
+ const deduped = deduplicateRows(blended, activeCollapseKeys);
127
+ const paged = deduped.slice(offset, offset + limit);
113
128
  const hits = paged.map((entry) => toSearchHit(entry.row, entry.score, query, this.metadataKeys));
114
129
  const nextOffset = offset + paged.length;
115
- const nextCursor = nextOffset < blended.length
130
+ const nextCursor = nextOffset < deduped.length
116
131
  ? encodeSearchCursor({ offset: nextOffset, limit }, { query, filters })
117
132
  : null;
118
133
  if (hits.length > 0) {
@@ -288,6 +303,20 @@ function blendRows(matchRows, phraseRows, vectorRows, proximityWeight, vectorWei
288
303
  return expectStringField(a.row, "chunk_id").localeCompare(expectStringField(b.row, "chunk_id"));
289
304
  });
290
305
  }
306
+ function deduplicateRows(rows, collapseKeys) {
307
+ if (collapseKeys.length === 0)
308
+ return rows;
309
+ const seen = new Set();
310
+ return rows.filter((entry) => {
311
+ const key = dedupKey(expectStringField(entry.row, "filepath"), expectStringField(entry.row, "heading"), expectStringField(entry.row, "chunk_id"), (k) => expectStringField(entry.row, k), collapseKeys);
312
+ if (key === null)
313
+ return true;
314
+ if (seen.has(key))
315
+ return false;
316
+ seen.add(key);
317
+ return true;
318
+ });
319
+ }
291
320
  function buildWhereClause(filters, taxonomyKeys) {
292
321
  const clauses = [];
293
322
  const language = filters.language;
@@ -355,7 +384,7 @@ function extractMetadata(row, metadataKeys) {
355
384
  }
356
385
  return metadata;
357
386
  }
358
- function serializeChunkRow(chunk, metadataKeys, vectorsByChunkId) {
387
+ function serializeChunkRow(chunk, metadataKeys, vectorsByChunkId, fileFingerprints) {
359
388
  const record = {
360
389
  chunk_id: chunk.chunk_id,
361
390
  filepath: chunk.filepath,
@@ -370,6 +399,9 @@ function serializeChunkRow(chunk, metadataKeys, vectorsByChunkId) {
370
399
  for (const key of metadataKeys) {
371
400
  record[key] = chunk.metadata[key] ?? "";
372
401
  }
402
+ if (fileFingerprints) {
403
+ record.file_fingerprint = fileFingerprints[chunk.filepath] ?? "";
404
+ }
373
405
  const vector = vectorsByChunkId?.get(chunk.chunk_id);
374
406
  if (vector) {
375
407
  record.vector = vector;