@remnic/core 9.3.765 → 9.3.766
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/dist/access-admin-ops-surface.d.ts +1 -1
- package/dist/access-admin-ops-surface.js +9 -9
- package/dist/access-boundary.d.ts +1 -1
- package/dist/access-boundary.js +10 -10
- package/dist/access-cli.js +18 -18
- package/dist/access-http.d.ts +13 -2
- package/dist/access-http.js +14 -14
- package/dist/access-identity-continuity-surface.js +9 -9
- package/dist/access-lcm-surface.d.ts +1 -1
- package/dist/access-lcm-surface.js +9 -9
- package/dist/access-mcp.d.ts +1 -1
- package/dist/access-mcp.js +13 -13
- package/dist/access-observe-write-surface.d.ts +1 -1
- package/dist/access-observe-write-surface.js +9 -9
- package/dist/access-operations-batch.js +11 -11
- package/dist/access-operations.d.ts +5 -5
- package/dist/access-operations.js +12 -12
- package/dist/access-recall-surface.d.ts +1 -1
- package/dist/access-recall-surface.js +9 -9
- package/dist/access-schema.d.ts +68 -68
- package/dist/{access-service-CAoJ4qN8.d.ts → access-service-CdW6B2qQ.d.ts} +3 -5
- package/dist/access-service.d.ts +1 -1
- package/dist/access-service.js +9 -9
- package/dist/access-surface-catalog.d.ts +1 -1
- package/dist/{chunk-NKP6II6G.js → chunk-4HYFKIGH.js} +6 -6
- package/dist/{chunk-CGLRKKMF.js → chunk-4JG55YV3.js} +3 -3
- package/dist/{chunk-BRYPUVJU.js → chunk-CKNAVW34.js} +2 -2
- package/dist/{chunk-WRFKZEO6.js → chunk-DMKMQTBH.js} +10 -2
- package/dist/chunk-DMKMQTBH.js.map +1 -0
- package/dist/{chunk-RJCQPRLB.js → chunk-GLERZDM7.js} +3 -3
- package/dist/{chunk-SKT66QI5.js → chunk-HBOPSFQQ.js} +6 -6
- package/dist/{chunk-TOF25WKK.js → chunk-IGVKWKR2.js} +2 -2
- package/dist/{chunk-422OELQ3.js → chunk-J3UJJZKI.js} +44 -7
- package/dist/chunk-J3UJJZKI.js.map +1 -0
- package/dist/{chunk-5CEJH5ZN.js → chunk-K2I3AWBR.js} +10 -2
- package/dist/chunk-K2I3AWBR.js.map +1 -0
- package/dist/{chunk-5JF4DIKZ.js → chunk-MSGPLITO.js} +2 -2
- package/dist/{chunk-K43PI6DQ.js → chunk-MYNRJGOY.js} +2 -2
- package/dist/{chunk-UQEE4H6Z.js → chunk-OAREUC7N.js} +13 -7
- package/dist/chunk-OAREUC7N.js.map +1 -0
- package/dist/{chunk-TUXRWLIQ.js → chunk-PA5ALD3S.js} +6 -6
- package/dist/{chunk-P6ZZ4GX4.js → chunk-TVLN5EZZ.js} +3 -3
- package/dist/{chunk-KXG7HHIQ.js → chunk-U5GFYMV7.js} +2 -2
- package/dist/{chunk-YNQ6DFSV.js → chunk-WU46YPY6.js} +8 -1
- package/dist/chunk-WU46YPY6.js.map +1 -0
- package/dist/{chunk-LQ6JI4VH.js → chunk-XG4NBBRW.js} +10 -2
- package/dist/chunk-XG4NBBRW.js.map +1 -0
- package/dist/{chunk-SANZHXY2.js → chunk-ZZMRXJFY.js} +29 -3
- package/dist/chunk-ZZMRXJFY.js.map +1 -0
- package/dist/{cli-WRmxvfc_.d.ts → cli-Dfnc66gs.d.ts} +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.js +17 -17
- package/dist/index.d.ts +2 -2
- package/dist/index.js +18 -18
- package/dist/mcp-memory-inspector-app.d.ts +1 -1
- package/dist/namespaces/migrate.js +9 -9
- package/dist/namespaces/search.js +8 -8
- package/dist/operator-toolkit.js +10 -10
- package/dist/orchestrator.js +18 -18
- package/dist/qmd.js +2 -2
- package/dist/schemas.d.ts +84 -84
- package/dist/search/factory.js +7 -7
- package/dist/search/index.js +7 -7
- package/dist/search/lancedb-backend.js +2 -2
- package/dist/search/meilisearch-backend.js +2 -2
- package/dist/search/orama-backend.js +2 -2
- package/dist/search/port.d.ts +4 -3
- package/dist/search/port.js +3 -1
- package/dist/search/remote-backend.js +2 -1
- package/dist/shared-context/manager.d.ts +8 -8
- package/dist/transfer/types.d.ts +66 -66
- package/package.json +2 -2
- package/src/access-http-cancellation.test.ts +240 -0
- package/src/access-http.ts +54 -2
- package/src/access-recall-surface.ts +1 -0
- package/src/access-service.ts +10 -10
- package/src/search/lancedb-backend.ts +8 -0
- package/src/search/meilisearch-backend.ts +8 -0
- package/src/search/orama-backend.ts +8 -0
- package/src/search/port.ts +15 -2
- package/src/search/remote-backend.ts +32 -3
- package/dist/chunk-422OELQ3.js.map +0 -1
- package/dist/chunk-5CEJH5ZN.js.map +0 -1
- package/dist/chunk-LQ6JI4VH.js.map +0 -1
- package/dist/chunk-SANZHXY2.js.map +0 -1
- package/dist/chunk-UQEE4H6Z.js.map +0 -1
- package/dist/chunk-WRFKZEO6.js.map +0 -1
- package/dist/chunk-YNQ6DFSV.js.map +0 -1
- /package/dist/{chunk-NKP6II6G.js.map → chunk-4HYFKIGH.js.map} +0 -0
- /package/dist/{chunk-CGLRKKMF.js.map → chunk-4JG55YV3.js.map} +0 -0
- /package/dist/{chunk-BRYPUVJU.js.map → chunk-CKNAVW34.js.map} +0 -0
- /package/dist/{chunk-RJCQPRLB.js.map → chunk-GLERZDM7.js.map} +0 -0
- /package/dist/{chunk-SKT66QI5.js.map → chunk-HBOPSFQQ.js.map} +0 -0
- /package/dist/{chunk-TOF25WKK.js.map → chunk-IGVKWKR2.js.map} +0 -0
- /package/dist/{chunk-5JF4DIKZ.js.map → chunk-MSGPLITO.js.map} +0 -0
- /package/dist/{chunk-K43PI6DQ.js.map → chunk-MYNRJGOY.js.map} +0 -0
- /package/dist/{chunk-TUXRWLIQ.js.map → chunk-PA5ALD3S.js.map} +0 -0
- /package/dist/{chunk-P6ZZ4GX4.js.map → chunk-TVLN5EZZ.js.map} +0 -0
- /package/dist/{chunk-KXG7HHIQ.js.map → chunk-U5GFYMV7.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/search/lancedb-backend.ts"],"sourcesContent":["import { log } from \"../logger.js\";\nimport {\n reportSearchDegradation,\n resolveEnsureCollectionArgs,\n type SearchBackend,\n type SearchExecutionOptions,\n type SearchQueryOptions,\n type SearchResult,\n} from \"./port.js\";\nimport type { EmbedHelper, EmbedProviderIdentity, EmbedWithProviderResult } from \"./embed-helper.js\";\nimport { scanMemoryDir } from \"./document-scanner.js\";\nimport { isSearchAborted, throwIfSearchAborted } from \"./abort.js\";\n\nexport interface LanceDbBackendOptions {\n dbPath: string;\n collection: string;\n embedHelper: EmbedHelper;\n memoryDir: string;\n embeddingDimension: number;\n}\n\n/**\n * LanceDB search backend — embedded hybrid FTS+vector with RRF reranking.\n *\n * Uses @lancedb/lancedb for native Arrow-backed storage.\n * One table per collection. Supports full-text, vector, and hybrid search.\n */\nexport class LanceDbBackend implements SearchBackend {\n private readonly dbPath: string;\n private readonly collection: string;\n private readonly embedHelper: EmbedHelper;\n private readonly memoryDir: string;\n private readonly embeddingDimension: number;\n private available = false;\n private db: any = null;\n private lanceModule: any = null;\n private readonly vectorProviderCompatibility = new WeakMap<\n object,\n { providerIdentity: EmbedProviderIdentity; compatible: boolean }\n >();\n\n constructor(opts: LanceDbBackendOptions) {\n this.dbPath = opts.dbPath;\n this.collection = opts.collection;\n this.embedHelper = opts.embedHelper;\n this.memoryDir = opts.memoryDir;\n this.embeddingDimension = opts.embeddingDimension;\n }\n\n async probe(): Promise<boolean> {\n try {\n await this.ensureDb();\n this.available = true;\n return true;\n } catch (err) {\n log.debug(`LanceDbBackend probe failed: ${err}`);\n this.available = false;\n return false;\n }\n }\n\n isAvailable(): boolean {\n return this.available;\n }\n\n debugStatus(): string {\n return `backend=lancedb available=${this.available} dbPath=${this.dbPath}`;\n }\n\n async search(\n query: string,\n _collection?: string,\n maxResults?: number,\n _options?: SearchQueryOptions,\n execution?: SearchExecutionOptions,\n ): Promise<SearchResult[]> {\n return this.hybridSearch(query, _collection, maxResults, execution);\n }\n\n async searchGlobal(query: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {\n const limit = maxResults ?? 10;\n if (!this.available) return [];\n\n try {\n throwIfSearchAborted(execution, \"LanceDbBackend global search aborted\");\n const db = await this.ensureDb();\n const tableNames = await db.tableNames();\n const allResults: SearchResult[] = [];\n\n for (const name of tableNames) {\n throwIfSearchAborted(execution, \"LanceDbBackend global search aborted\");\n try {\n const table = await db.openTable(name);\n const results = await this.searchTable(table, query, \"hybrid\", limit, execution);\n allResults.push(...results);\n } catch {\n // Skip tables that fail\n }\n }\n\n allResults.sort((a, b) => b.score - a.score);\n return allResults.slice(0, limit);\n } catch (err) {\n log.debug(`LanceDbBackend searchGlobal failed: ${err}`);\n return [];\n }\n }\n\n async bm25Search(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {\n if (isSearchAborted(execution)) return [];\n const table = await this.ensureTableForCollection(collection ?? this.collection);\n if (isSearchAborted(execution)) return [];\n if (!table) return [];\n return this.searchTable(table, query, \"fts\", maxResults ?? 10, execution);\n }\n\n async vectorSearch(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {\n if (isSearchAborted(execution)) return [];\n const table = await this.ensureTableForCollection(collection ?? this.collection);\n if (isSearchAborted(execution)) return [];\n if (!table) return [];\n return this.searchTable(table, query, \"vector\", maxResults ?? 10, execution);\n }\n\n async hybridSearch(query: string, collection?: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]> {\n if (isSearchAborted(execution)) return [];\n const table = await this.ensureTableForCollection(collection ?? this.collection);\n if (isSearchAborted(execution)) return [];\n if (!table) return [];\n return this.searchTable(table, query, \"hybrid\", maxResults ?? 10, execution);\n }\n\n async update(execution?: SearchExecutionOptions): Promise<void> {\n await this.updateCollection(this.collection, execution);\n }\n\n async updateCollection(collection: string, execution?: SearchExecutionOptions): Promise<void> {\n await this.updateCollectionFromDir(collection, this.memoryDir, execution);\n }\n\n async updateCollectionFromDir(collection: string, memoryDir: string, execution?: SearchExecutionOptions): Promise<void> {\n if (isSearchAborted(execution)) return;\n let table = await this.ensureTableForCollection(collection);\n if (isSearchAborted(execution)) return;\n if (!table) return;\n\n const docs = await scanMemoryDir(memoryDir);\n if (isSearchAborted(execution)) return;\n if (docs.length === 0) {\n // Clear stale data when no docs remain\n try {\n const db = await this.ensureDb();\n await db.dropTable(collection).catch(() => {});\n if (collection === this.collection) this.table = null;\n } catch {\n // Best-effort cleanup\n }\n return;\n }\n\n const embeddingProviderIdentity = this.embedHelper.getProviderIdentity();\n const existingVectors = new Map<string, {\n vector: number[];\n providerIdentity?: string;\n }>();\n const vectorProviderColumnState = await this.tableVectorProviderColumnState(table);\n if (vectorProviderColumnState === \"missing\") {\n table = await this.recreateTableForCollection(collection);\n if (isSearchAborted(execution)) return;\n if (!table) return;\n } else if (vectorProviderColumnState === \"present\") {\n try {\n const existingRows = await table.query().select([\"docid\", \"vector\", \"vectorProvider\"]).toArray();\n for (const row of existingRows ?? []) {\n if (isSearchAborted(execution)) return;\n const docid = row.docid;\n if (typeof docid !== \"string\") continue;\n const vector = row.vector;\n if (!vector || typeof vector !== \"object\") continue;\n existingVectors.set(docid, {\n vector: Array.from(vector as ArrayLike<number>),\n providerIdentity: typeof row.vectorProvider === \"string\" ? row.vectorProvider : undefined,\n });\n }\n } catch {\n log.debug(\"LanceDbBackend skipped refresh after vector preservation failed\");\n return;\n }\n } else {\n log.debug(\"LanceDbBackend skipped vector preservation after vectorProvider probe failed\");\n return;\n }\n\n const rows = docs.map((d) => {\n const existing = existingVectors.get(d.docid);\n const canPreserveVector =\n existing &&\n this.isCompatibleStoredVector(existing.vector) &&\n (!embeddingProviderIdentity ||\n existing.providerIdentity === embeddingProviderIdentity);\n return {\n docid: d.docid,\n path: d.path,\n content: d.content,\n snippet: d.snippet,\n vector: canPreserveVector\n ? existing.vector\n : new Array(this.embeddingDimension).fill(0),\n vectorProvider: canPreserveVector\n ? existing.providerIdentity ?? \"\"\n : \"\",\n };\n });\n\n try {\n if (isSearchAborted(execution)) return;\n await table.add(rows, { mode: \"overwrite\" });\n this.rememberVectorProviderCompatibility(\n table,\n embeddingProviderIdentity,\n rows.length > 0 && rows.every((row) => row.vectorProvider === embeddingProviderIdentity),\n );\n if (isSearchAborted(execution)) return;\n // Create FTS index on content column\n try {\n await table.createIndex(\"content\", { config: this.lanceIndex.fts() });\n } catch {\n // FTS index creation may fail on some platforms — degrade gracefully\n }\n if (collection === this.collection) this.table = table;\n } catch (err) {\n log.debug(`LanceDbBackend update failed: ${err}`);\n }\n }\n\n async embed(): Promise<void> {\n await this.embedCollection(this.collection);\n }\n\n async embedCollection(collection: string): Promise<void> {\n if (!this.embedHelper.isAvailable()) return;\n\n const table = await this.ensureTableForCollection(collection);\n if (!table) return;\n\n try {\n const embeddingProviderIdentity = this.embedHelper.getProviderIdentity();\n const allRows = await table.query().select([\"docid\", \"content\", \"vector\", \"vectorProvider\"]).toArray();\n const needsEmbed = allRows.filter((row: any) => {\n if (embeddingProviderIdentity && row.vectorProvider !== embeddingProviderIdentity) {\n return true;\n }\n return !this.isCompatibleStoredVector(row.vector);\n });\n\n if (needsEmbed.length === 0) {\n this.rememberVectorProviderCompatibility(table, embeddingProviderIdentity, true);\n return;\n }\n\n let rowsToEmbed = needsEmbed;\n let embedResult = await this.embedHelper.embedBatchWithProvider(\n rowsToEmbed.map((row: any) => row.content as string),\n );\n if (!embedResult) return;\n if (\n embeddingProviderIdentity &&\n embedResult.providerIdentity !== embeddingProviderIdentity\n ) {\n const effectiveProviderIdentity = embedResult.providerIdentity;\n const originalDocids = new Set(rowsToEmbed.map((row: any) => row.docid));\n const effectiveNeedsEmbed = allRows.filter((row: any) => (\n row.vectorProvider !== effectiveProviderIdentity ||\n !this.isCompatibleStoredVector(row.vector)\n ));\n const sameRows =\n effectiveNeedsEmbed.length === rowsToEmbed.length &&\n effectiveNeedsEmbed.every((row: any) => originalDocids.has(row.docid));\n if (!sameRows) {\n const effectiveTexts = effectiveNeedsEmbed.map((row: any) => row.content as string);\n const effectiveEmbedResult = await this.embedHelper.embedBatchWithProvider(effectiveTexts);\n if (effectiveEmbedResult) {\n rowsToEmbed = effectiveNeedsEmbed;\n embedResult = effectiveEmbedResult;\n }\n }\n }\n const { vectors, providerIdentity } = embedResult;\n\n let allEmbedded = true;\n for (let i = 0; i < rowsToEmbed.length; i++) {\n const vec = vectors[i];\n if (!this.isExpectedDimensionVector(vec)) {\n allEmbedded = false;\n continue;\n }\n const docid = rowsToEmbed[i].docid;\n await table.update({\n where: `docid = '${docid.replace(/'/g, \"''\")}'`,\n values: { vector: vec, vectorProvider: providerIdentity },\n });\n }\n if (allEmbedded) {\n this.rememberVectorProviderCompatibility(table, providerIdentity, true);\n } else {\n this.rememberVectorProviderCompatibility(table, providerIdentity, false);\n }\n } catch (err) {\n log.debug(`LanceDbBackend embed failed: ${err}`);\n }\n }\n\n async ensureCollection(\n _memoryDir: string,\n collectionOrExecution?: string | SearchExecutionOptions,\n execution?: SearchExecutionOptions,\n ): Promise<\"present\" | \"missing\" | \"unknown\" | \"skipped\"> {\n const { collection, execution: effectiveExecution } = resolveEnsureCollectionArgs(\n collectionOrExecution,\n execution,\n );\n if (isSearchAborted(effectiveExecution)) return \"skipped\";\n try {\n await this.ensureTableForCollection(collection ?? this.collection);\n return \"present\";\n } catch {\n return \"missing\";\n }\n }\n\n private table: any = null;\n\n private get lanceIndex(): any {\n return this.lanceModule.Index ?? this.lanceModule.default?.Index;\n }\n\n private async ensureDb(): Promise<any> {\n if (this.db) return this.db;\n if (!this.lanceModule) {\n this.lanceModule = await import(\"@lancedb/lancedb\");\n }\n const connect = this.lanceModule.connect ?? this.lanceModule.default?.connect;\n this.db = await connect(this.dbPath);\n return this.db;\n }\n\n private async ensureTableForCollection(collection: string): Promise<any> {\n // For the default collection, use the cached instance\n if (collection === this.collection) return this.ensureTable();\n\n const db = await this.ensureDb();\n const tables = await db.tableNames();\n\n if (tables.includes(collection)) {\n return await db.openTable(collection);\n }\n\n // Create empty table with schema\n const emptyRow = {\n docid: \"__placeholder__\",\n path: \"\",\n content: \"\",\n snippet: \"\",\n vector: new Array(this.embeddingDimension).fill(0),\n vectorProvider: \"\",\n };\n const newTable = await db.createTable(collection, [emptyRow]);\n try {\n await newTable.createIndex(\"content\", { config: this.lanceIndex.fts() });\n } catch {\n // FTS index creation may fail — degrade gracefully\n }\n try {\n await newTable.delete(\"docid = '__placeholder__'\");\n } catch {\n // May fail if delete isn't supported on empty-ish tables\n }\n return newTable;\n }\n\n private async recreateTableForCollection(collection: string): Promise<any> {\n const db = await this.ensureDb();\n try {\n await db.dropTable(collection).catch(() => {});\n } catch {\n // Best-effort legacy schema migration; table creation below may still recover.\n }\n if (collection === this.collection) this.table = null;\n return this.ensureTableForCollection(collection);\n }\n\n private async tableVectorProviderColumnState(table: any): Promise<\"present\" | \"missing\" | \"unknown\"> {\n try {\n await table.query().select([\"vectorProvider\"]).toArray();\n return \"present\";\n } catch (err) {\n if (isMissingVectorProviderColumnError(err)) {\n return \"missing\";\n }\n log.debug(`LanceDbBackend vectorProvider column probe failed: ${err}`);\n return \"unknown\";\n }\n }\n\n private async ensureTable(): Promise<any> {\n if (this.table) return this.table;\n\n const db = await this.ensureDb();\n const tables = await db.tableNames();\n\n if (tables.includes(this.collection)) {\n this.table = await db.openTable(this.collection);\n return this.table;\n }\n\n // Create empty table with schema\n const emptyRow = {\n docid: \"__placeholder__\",\n path: \"\",\n content: \"\",\n snippet: \"\",\n vector: new Array(this.embeddingDimension).fill(0),\n vectorProvider: \"\",\n };\n this.table = await db.createTable(this.collection, [emptyRow]);\n // Create FTS index on content column\n try {\n await this.table.createIndex(\"content\", { config: this.lanceIndex.fts() });\n } catch {\n // FTS index creation may fail — degrade gracefully\n }\n // Remove placeholder row\n try {\n await this.table.delete(\"docid = '__placeholder__'\");\n } catch {\n // May fail if delete isn't supported on empty-ish tables\n }\n return this.table;\n }\n\n private async searchTable(\n table: any,\n query: string,\n mode: \"fts\" | \"vector\" | \"hybrid\",\n limit: number,\n execution?: SearchExecutionOptions,\n ): Promise<SearchResult[]> {\n try {\n throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);\n if (mode === \"fts\") {\n const results = await table.search(query, \"fts\").limit(limit).toArray();\n throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);\n return this.mapRows(results);\n }\n\n if (mode === \"vector\") {\n const embedResult = await this.resolveCompatibleQueryEmbedding(table, query, execution);\n throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);\n if (!embedResult) {\n // Fall back to FTS\n const results = await table.search(query, \"fts\").limit(limit).toArray();\n throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);\n return this.mapRows(results);\n }\n const results = await table.search(embedResult.vector).limit(limit).toArray();\n throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);\n return this.mapRows(results);\n }\n\n // hybrid — try FTS+vector with RRF reranking\n const embedResult = await this.resolveCompatibleQueryEmbedding(table, query, execution);\n throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);\n if (!embedResult) {\n const results = await table.search(query, \"fts\").limit(limit).toArray();\n throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);\n return this.mapRows(results);\n }\n\n try {\n const results = await table\n .search(query, \"hybrid\")\n .vector(embedResult.vector)\n .limit(limit)\n .toArray();\n throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);\n return this.mapRows(results);\n } catch {\n // Hybrid may not be supported in all LanceDB versions — fall back to vector\n const results = await table.search(embedResult.vector).limit(limit).toArray();\n throwIfSearchAborted(execution, `LanceDbBackend ${mode} search aborted`);\n return this.mapRows(results);\n }\n } catch (err) {\n log.debug(`LanceDbBackend search (${mode}) failed: ${err}`);\n if (!isSearchAborted(execution)) {\n reportSearchDegradation(execution, {\n backend: \"lancedb\",\n code: \"backend_error\",\n detail: err instanceof Error ? err.name : typeof err,\n });\n }\n return [];\n }\n }\n\n private async resolveCompatibleQueryEmbedding(\n table: any,\n query: string,\n execution?: SearchExecutionOptions,\n ): Promise<EmbedWithProviderResult | null> {\n const embedResult = await this.embedHelper.embedWithProvider(query, { signal: execution?.signal });\n throwIfSearchAborted(execution, \"LanceDbBackend query embedding aborted\");\n if (!embedResult || !this.isExpectedDimensionVector(embedResult.vector)) return null;\n\n const storedProviderIdentity = await this.findCompatibleStoredVectorProvider(table, execution);\n if (!storedProviderIdentity) {\n this.rememberVectorProviderCompatibility(table, embedResult.providerIdentity, false);\n return null;\n }\n if (storedProviderIdentity === embedResult.providerIdentity) return embedResult;\n\n const fallbackEmbed = await this.embedQueryWithStoredFallbackProvider(query, storedProviderIdentity, execution);\n throwIfSearchAborted(execution, \"LanceDbBackend fallback query embedding aborted\");\n if (\n fallbackEmbed &&\n fallbackEmbed.providerIdentity === storedProviderIdentity &&\n this.isExpectedDimensionVector(fallbackEmbed.vector)\n ) {\n return fallbackEmbed;\n }\n\n this.rememberVectorProviderCompatibility(table, embedResult.providerIdentity, false);\n return null;\n }\n\n private async embedQueryWithStoredFallbackProvider(\n query: string,\n providerIdentity: EmbedProviderIdentity,\n execution?: SearchExecutionOptions,\n ): Promise<EmbedWithProviderResult | null> {\n const embedWithIdentity = (this.embedHelper as unknown as {\n embedWithFallbackProviderIdentity?: (\n text: string,\n identity: EmbedProviderIdentity,\n options?: { signal?: AbortSignal },\n ) => Promise<EmbedWithProviderResult | null>;\n }).embedWithFallbackProviderIdentity;\n if (typeof embedWithIdentity !== \"function\") return null;\n return embedWithIdentity.call(this.embedHelper, query, providerIdentity, { signal: execution?.signal });\n }\n\n private async findCompatibleStoredVectorProvider(\n table: any,\n execution?: SearchExecutionOptions,\n ): Promise<EmbedProviderIdentity | null> {\n try {\n const cached = this.vectorProviderCompatibility.get(table);\n if (cached?.compatible) return cached.providerIdentity;\n const rows = await table.query().select([\"vector\", \"vectorProvider\"]).toArray();\n let providerIdentity: EmbedProviderIdentity | null = null;\n let compatible = rows.length > 0;\n for (const row of rows ?? []) {\n throwIfSearchAborted(execution, \"LanceDbBackend vector provider check aborted\");\n if (\n typeof row.vectorProvider !== \"string\" ||\n row.vectorProvider.length === 0 ||\n !this.isCompatibleStoredVector(row.vector)\n ) {\n compatible = false;\n break;\n }\n if (providerIdentity && row.vectorProvider !== providerIdentity) {\n compatible = false;\n break;\n }\n providerIdentity = row.vectorProvider as EmbedProviderIdentity;\n }\n if (compatible && providerIdentity) {\n this.vectorProviderCompatibility.set(table, {\n providerIdentity,\n compatible: true,\n });\n return providerIdentity;\n }\n return null;\n } catch (err) {\n if (isSearchAborted(execution)) throw err;\n log.debug(`LanceDbBackend stored vector provider check failed: ${err}`);\n return null;\n }\n }\n\n private mapRows(rows: any[]): SearchResult[] {\n return (rows ?? [])\n .filter((row) => row.docid && row.docid !== \"__placeholder__\")\n .map((row) => ({\n docid: row.docid ?? \"\",\n path: row.path ?? \"\",\n snippet: row.snippet ?? row.content?.slice(0, 200) ?? \"\",\n score: row._relevance_score ?? (row._distance != null ? 1 / (1 + (row._distance ?? 0)) : 0.5),\n }));\n }\n\n private async tableHasCompatibleVectors(\n table: any,\n providerIdentity: EmbedProviderIdentity,\n execution?: SearchExecutionOptions,\n ): Promise<boolean> {\n try {\n const cached = this.vectorProviderCompatibility.get(table);\n if (cached?.providerIdentity === providerIdentity) return cached.compatible;\n const rows = await table.query().select([\"vector\", \"vectorProvider\"]).toArray();\n let compatible = rows.length > 0;\n for (const row of rows ?? []) {\n throwIfSearchAborted(execution, \"LanceDbBackend vector provider check aborted\");\n if (\n row.vectorProvider !== providerIdentity ||\n !this.isCompatibleStoredVector(row.vector)\n ) {\n compatible = false;\n break;\n }\n }\n this.vectorProviderCompatibility.set(table, { providerIdentity, compatible });\n return compatible;\n } catch (err) {\n if (isSearchAborted(execution)) throw err;\n log.debug(`LanceDbBackend vector provider check failed: ${err}`);\n return false;\n }\n }\n\n private rememberVectorProviderCompatibility(\n table: unknown,\n providerIdentity: EmbedProviderIdentity | null,\n compatible: boolean,\n ): void {\n if (!table || typeof table !== \"object\") return;\n if (!providerIdentity) {\n this.vectorProviderCompatibility.delete(table);\n return;\n }\n this.vectorProviderCompatibility.set(table, { providerIdentity, compatible });\n }\n\n private isExpectedDimensionVector(vector: number[] | null | undefined): vector is number[] {\n return Array.isArray(vector) && vector.length === this.embeddingDimension;\n }\n\n private isCompatibleStoredVector(vector: unknown): boolean {\n if (!vector || typeof vector !== \"object\") return false;\n const arr = Array.from(vector as ArrayLike<number>);\n return (\n arr.length === this.embeddingDimension &&\n arr.every((value) => Number.isFinite(value)) &&\n arr.some((value) => value !== 0)\n );\n }\n}\n\nfunction isMissingVectorProviderColumnError(err: unknown): boolean {\n const message = err instanceof Error ? err.message : String(err);\n return /\\bvectorProvider\\b/i.test(message) &&\n /\\b(column|field|schema|missing|not found|not exist|does not exist|unknown)\\b/i.test(message);\n}\n"],"mappings":"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","names":["embedResult","results"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
EngramAccessInputError
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-OAREUC7N.js";
|
|
4
4
|
import {
|
|
5
5
|
expandTildePath
|
|
6
6
|
} from "./chunk-EYIEWJNI.js";
|
|
@@ -130,4 +130,4 @@ export {
|
|
|
130
130
|
listRegisteredOperations,
|
|
131
131
|
__resetRegistryForTest
|
|
132
132
|
};
|
|
133
|
-
//# sourceMappingURL=chunk-
|
|
133
|
+
//# sourceMappingURL=chunk-MSGPLITO.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveEnsureCollectionArgs
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WU46YPY6.js";
|
|
4
4
|
import {
|
|
5
5
|
launchProcess
|
|
6
6
|
} from "./chunk-O75CRYGF.js";
|
|
@@ -2225,4 +2225,4 @@ export {
|
|
|
2225
2225
|
sharedDaemonSessionCountForTest,
|
|
2226
2226
|
QmdClient
|
|
2227
2227
|
};
|
|
2228
|
-
//# sourceMappingURL=chunk-
|
|
2228
|
+
//# sourceMappingURL=chunk-MYNRJGOY.js.map
|
|
@@ -53,7 +53,7 @@ import {
|
|
|
53
53
|
} from "./chunk-BAVVI5GP.js";
|
|
54
54
|
import {
|
|
55
55
|
namespaceCollectionName
|
|
56
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-CKNAVW34.js";
|
|
57
57
|
import {
|
|
58
58
|
namespaceIdentityFromToken
|
|
59
59
|
} from "./chunk-EGGE52UU.js";
|
|
@@ -200,6 +200,9 @@ import {
|
|
|
200
200
|
import {
|
|
201
201
|
SecureStoreLockedError
|
|
202
202
|
} from "./chunk-J2HSAU72.js";
|
|
203
|
+
import {
|
|
204
|
+
throwIfAborted
|
|
205
|
+
} from "./chunk-PVGDJXVK.js";
|
|
203
206
|
import {
|
|
204
207
|
AccessAuditAdapter
|
|
205
208
|
} from "./chunk-TVVEYCNW.js";
|
|
@@ -6324,7 +6327,8 @@ var AccessRecallSurface = class {
|
|
|
6324
6327
|
mode,
|
|
6325
6328
|
...authenticatedPrincipal ? { principalOverride: authenticatedPrincipal } : {},
|
|
6326
6329
|
...asOf !== void 0 ? { asOf } : {},
|
|
6327
|
-
...request.includeLowConfidence === true ? { includeLowConfidence: true } : {}
|
|
6330
|
+
...request.includeLowConfidence === true ? { includeLowConfidence: true } : {},
|
|
6331
|
+
...request.abortSignal ? { abortSignal: request.abortSignal } : {}
|
|
6328
6332
|
};
|
|
6329
6333
|
const startedAt = Date.now();
|
|
6330
6334
|
const context = await this.deps.orchestrator.recall(query, request.sessionKey, recallOptions);
|
|
@@ -7794,7 +7798,7 @@ var EngramAccessService = class {
|
|
|
7794
7798
|
}
|
|
7795
7799
|
}
|
|
7796
7800
|
}
|
|
7797
|
-
async withBudgetLock(principal, fn) {
|
|
7801
|
+
async withBudgetLock(principal, abortSignal, fn) {
|
|
7798
7802
|
const key = principal || "__anonymous__";
|
|
7799
7803
|
const previous = this.budgetLocks.get(key) ?? Promise.resolve();
|
|
7800
7804
|
let release;
|
|
@@ -7806,6 +7810,7 @@ var EngramAccessService = class {
|
|
|
7806
7810
|
await previous.catch(() => {
|
|
7807
7811
|
});
|
|
7808
7812
|
try {
|
|
7813
|
+
throwIfAborted(abortSignal);
|
|
7809
7814
|
return await fn();
|
|
7810
7815
|
} finally {
|
|
7811
7816
|
release();
|
|
@@ -8042,6 +8047,7 @@ var EngramAccessService = class {
|
|
|
8042
8047
|
throw new EngramAccessInputError("query is required");
|
|
8043
8048
|
}
|
|
8044
8049
|
const normalizedRequest = { ...request, query };
|
|
8050
|
+
const { abortSignal: _abortSignal, ...requestFingerprint } = normalizedRequest;
|
|
8045
8051
|
const authenticatedPrincipal = request.authenticatedPrincipal?.trim();
|
|
8046
8052
|
const principal = this.resolveRequestPrincipal(request.sessionKey, authenticatedPrincipal);
|
|
8047
8053
|
if (resolveNamespaceCapabilities(this.orchestrator.config).namespaces && !principal) {
|
|
@@ -8049,15 +8055,15 @@ var EngramAccessService = class {
|
|
|
8049
8055
|
"authentication required: namespaces are enabled and no principal was supplied"
|
|
8050
8056
|
);
|
|
8051
8057
|
}
|
|
8052
|
-
|
|
8053
|
-
return this.withBudgetLock(budgetLockPrincipal, async () => {
|
|
8058
|
+
return this.withBudgetLock(principal ?? "default", request.abortSignal, async () => {
|
|
8054
8059
|
let budgetRecordPrincipal = null;
|
|
8055
8060
|
const response = await this.handleIdempotentRead({
|
|
8056
8061
|
operation: "recall",
|
|
8057
8062
|
idempotencyKey: request.idempotencyKey,
|
|
8058
|
-
requestFingerprint
|
|
8063
|
+
requestFingerprint,
|
|
8059
8064
|
execute: async () => {
|
|
8060
8065
|
const result = await this.executeRecall(normalizedRequest);
|
|
8066
|
+
throwIfAborted(request.abortSignal);
|
|
8061
8067
|
budgetRecordPrincipal = result.budgetRecordPrincipal;
|
|
8062
8068
|
return result.response;
|
|
8063
8069
|
},
|
|
@@ -10918,4 +10924,4 @@ export {
|
|
|
10918
10924
|
EngramAccessService,
|
|
10919
10925
|
AccessAdminOpsSurface
|
|
10920
10926
|
};
|
|
10921
|
-
//# sourceMappingURL=chunk-
|
|
10927
|
+
//# sourceMappingURL=chunk-OAREUC7N.js.map
|