@undefineds.co/xpod 0.3.68 → 0.3.70

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.
@@ -1,6 +1,7 @@
1
1
  import type { RdfSearchCardinalityEstimate, RdfVectorChunkInput, RdfVectorDistanceMetric, RdfVectorIndexLike, RdfVectorIndexStats, RdfVectorModelDistribution, RdfVectorSearchOptions, RdfVectorSearchResult, RdfVectorSourceInput, RdfVectorSummaryLifecycleEntry, RdfVectorSummaryLifecycleOptions } from './types';
2
2
  export interface PostgresRdfVectorIndexOptions {
3
3
  driver?: 'pglite' | 'pg';
4
+ backend?: 'pgvector' | 'component';
4
5
  dataDir?: string;
5
6
  connectionString?: string;
6
7
  host?: string;
@@ -628,7 +628,7 @@ class PostgresRdfVectorIndex {
628
628
  return this.executor;
629
629
  }
630
630
  usesPgVectorBackend() {
631
- return this.options.driver === 'pg';
631
+ return this.options.driver === 'pg' && this.options.backend !== 'component';
632
632
  }
633
633
  }
634
634
  exports.PostgresRdfVectorIndex = PostgresRdfVectorIndex;
@@ -1 +1 @@
1
- {"version":3,"file":"PostgresRdfVectorIndex.js","sourceRoot":"","sources":["../../../src/storage/rdf/PostgresRdfVectorIndex.ts"],"names":[],"mappings":"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","sourcesContent":["import { PGlite } from '@electric-sql/pglite';\nimport { getSharedPool, releaseSharedPool } from '../database/PostgresPoolManager';\nimport type {\n RdfSearchCardinalityEstimate,\n RdfVectorChunkInput,\n RdfVectorChunkRow,\n RdfVectorDistanceMetric,\n RdfVectorIndexLike,\n RdfVectorIndexStats,\n RdfVectorModelDistribution,\n RdfVectorSearchOptions,\n RdfVectorSearchResult,\n RdfVectorSourceInput,\n RdfVectorSummaryLifecycleEntry,\n RdfVectorSummaryLifecycleOptions,\n} from './types';\nimport { appendPgRdfSearchSourceFilters } from './RdfSearchSourceFilter';\nimport {\n PgPoolRdfSqlExecutor,\n PgliteRdfSqlExecutor,\n type PostgresRdfSqlExecutor,\n} from './PostgresRdfSqlExecutor';\nimport {\n type RdfVectorScoredChunkRow,\n applyResultWindow,\n buildVectorOrderClause,\n normalizeEmbedding,\n parseEmbedding,\n parsePath,\n parseSummaryMetadata,\n scoredVectorDistance,\n vectorDistanceSql,\n vectorMagnitude,\n vectorScore,\n vectorScoreComponents,\n vectorScoreSql,\n vectorSquaredDistanceSql,\n vectorThresholdSql,\n} from './RdfVectorIndex';\n\nexport interface PostgresRdfVectorIndexOptions {\n driver?: 'pglite' | 'pg';\n dataDir?: string;\n connectionString?: string;\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n password?: string;\n pool?: any;\n autoOpen?: boolean;\n defaultMetric?: RdfVectorDistanceMetric;\n}\n\ninterface RdfVectorSourceRow {\n id: number | string;\n source_key: string | null;\n source: string;\n workspace: string;\n local_path: string | null;\n content_type: string | null;\n source_version: string | null;\n source_hash: string | null;\n updated_at: string;\n}\n\nexport class PostgresRdfVectorIndex implements RdfVectorIndexLike {\n private readonly options: PostgresRdfVectorIndexOptions;\n private executor: PostgresRdfSqlExecutor | null = null;\n private pglite: PGlite | null = null;\n private pgPool: any = null;\n private sharedPoolConfig: Omit<PostgresRdfVectorIndexOptions, 'driver' | 'pool' | 'autoOpen' | 'dataDir' | 'defaultMetric'> | null = null;\n private initializing: Promise<void> | null = null;\n private readonly ensuredPgVectorIndexes = new Set<string>();\n\n public constructor(options: PostgresRdfVectorIndexOptions = {}) {\n this.options = {\n ...options,\n driver: options.driver ?? (options.connectionString || options.pool ? 'pg' : 'pglite'),\n };\n if (options.autoOpen) {\n void this.open();\n }\n }\n\n public async open(): Promise<void> {\n if (this.executor) {\n return;\n }\n this.initializing ??= this.openInternal();\n await this.initializing;\n }\n\n public async close(): Promise<void> {\n const executor = this.executor;\n this.executor = null;\n this.initializing = null;\n if (this.sharedPoolConfig) {\n releaseSharedPool(this.sharedPoolConfig);\n this.sharedPoolConfig = null;\n this.pgPool = null;\n return;\n }\n if (executor) {\n await executor.close();\n }\n this.pglite = null;\n this.pgPool = null;\n }\n\n public async clear(): Promise<void> {\n await this.requireExecutor().exec('DELETE FROM rdf_vector_components; DELETE FROM rdf_vector_chunks; DELETE FROM rdf_vector_sources;');\n }\n\n public async indexVector(source: RdfVectorSourceInput, chunks: RdfVectorChunkInput[]): Promise<void> {\n const executor = this.requireExecutor();\n await executor.transaction(async (tx) => {\n const sourceId = await this.upsertSource(tx, source);\n if (chunks.length === 0) {\n await tx.exec(`\n DELETE FROM rdf_vector_components\n WHERE chunk_id IN (\n SELECT id FROM rdf_vector_chunks WHERE source_id = $1\n )\n `, [sourceId]);\n await tx.exec('DELETE FROM rdf_vector_chunks WHERE source_id = $1', [sourceId]);\n return;\n }\n\n const deletedIdentities = new Set<string>();\n for (const chunk of chunks) {\n const identity = normalizeVectorIdentity(chunk);\n const identityKey = vectorIdentityKey(identity);\n if (!deletedIdentities.has(identityKey)) {\n await tx.exec(`\n DELETE FROM rdf_vector_components\n WHERE chunk_id IN (\n SELECT id FROM rdf_vector_chunks\n WHERE source_id = $1\n AND provider = $2\n AND model = $3\n AND model_version = $4\n AND input_kind = $5\n AND projection_policy_version = $6\n )\n `, [\n sourceId,\n identity.provider,\n identity.model,\n identity.modelVersion,\n identity.inputKind,\n identity.projectionPolicyVersion,\n ]);\n await tx.exec(`\n DELETE FROM rdf_vector_chunks\n WHERE source_id = $1\n AND provider = $2\n AND model = $3\n AND model_version = $4\n AND input_kind = $5\n AND projection_policy_version = $6\n `, [\n sourceId,\n identity.provider,\n identity.model,\n identity.modelVersion,\n identity.inputKind,\n identity.projectionPolicyVersion,\n ]);\n deletedIdentities.add(identityKey);\n }\n const embedding = normalizeEmbedding(chunk.embedding);\n const usePgVector = this.usesPgVectorBackend();\n const embeddingJson = JSON.stringify(embedding);\n const pgVectorColumnSql = usePgVector ? 'embedding_vector,' : '';\n const pgVectorValueSql = usePgVector ? ', $20::vector' : '';\n const insertParams: unknown[] = [\n sourceId,\n chunk.chunkKey,\n chunk.ordinal,\n chunk.level,\n chunk.heading || null,\n JSON.stringify(chunk.path ?? []),\n chunk.content,\n chunk.startOffset,\n chunk.endOffset,\n embeddingJson,\n chunk.summaryMetadata ? JSON.stringify(chunk.summaryMetadata) : null,\n embedding.length,\n vectorMagnitude(embedding),\n identity.provider,\n identity.model,\n identity.modelVersion,\n identity.inputKind,\n chunk.inputHash ?? '',\n identity.projectionPolicyVersion,\n ];\n if (usePgVector) {\n insertParams.push(formatPgVectorLiteral(embedding));\n }\n const rows = await tx.query<{ id: number | string }>(`\n INSERT INTO rdf_vector_chunks (\n source_id,\n chunk_key,\n ordinal,\n level,\n heading,\n path,\n content,\n start_offset,\n end_offset,\n embedding_json,\n summary_metadata,\n dimensions,\n magnitude,\n provider,\n model,\n model_version,\n input_kind,\n input_hash,\n projection_policy_version,\n ${pgVectorColumnSql}\n updated_at\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19${pgVectorValueSql}, now())\n RETURNING id\n `, insertParams);\n const chunkId = Number(rows[0]?.id);\n if (!Number.isFinite(chunkId)) {\n throw new Error(`Failed to insert RDF vector chunk for source: ${source.source}`);\n }\n if (!this.usesPgVectorBackend()) {\n await insertVectorComponents(tx, chunkId, embedding);\n }\n }\n });\n }\n\n public async deleteSource(source: string): Promise<number> {\n const executor = this.requireExecutor();\n const rows = await executor.query<{ id: number | string }>('SELECT id FROM rdf_vector_sources WHERE source = $1', [source]);\n const id = Number(rows[0]?.id);\n if (!Number.isFinite(id)) {\n return 0;\n }\n\n return await executor.transaction(async (tx) => {\n await tx.exec(`\n DELETE FROM rdf_vector_components\n WHERE chunk_id IN (\n SELECT id FROM rdf_vector_chunks WHERE source_id = $1\n )\n `, [id]);\n const deletedRows = await tx.query<{ count: number | string }>('SELECT COUNT(*) AS count FROM rdf_vector_chunks WHERE source_id = $1', [id]);\n await tx.exec('DELETE FROM rdf_vector_chunks WHERE source_id = $1', [id]);\n await tx.exec('DELETE FROM rdf_vector_sources WHERE id = $1', [id]);\n return Number(deletedRows[0]?.count ?? 0);\n });\n }\n\n public async search(options: RdfVectorSearchOptions): Promise<RdfVectorSearchResult[]> {\n const embedding = normalizeEmbedding(options.embedding);\n if (embedding.length === 0) {\n return [];\n }\n\n const metric = options.metric ?? this.options.defaultMetric ?? 'cosine';\n if (metric === 'cosine' && vectorMagnitude(embedding) === 0) {\n return [];\n }\n\n await this.ensurePgVectorSearchIndex(embedding.length, metric);\n const scoredQuery = this.usesPgVectorBackend()\n ? buildPgVectorNativeScoredRowsQuery(embedding, metric, options)\n : buildPgVectorScoredRowsQuery(embedding, metric, options);\n const rows = await this.requireExecutor().query<RdfVectorScoredChunkRow>(scoredQuery.sql, scoredQuery.params);\n const backend = this.usesPgVectorBackend() ? 'pg-vector' : 'component';\n return rows.map((rawRow) => {\n const row = normalizeVectorScoredChunkRow(rawRow);\n const rowEmbedding = parseEmbedding(row.embedding_json);\n const distance = scoredVectorDistance(row, metric);\n return toSearchResult(row, rowEmbedding, metric, vectorMagnitude(embedding), vectorScore(distance, metric), distance, backend);\n });\n }\n\n public async summaryLifecycle(options: RdfVectorSummaryLifecycleOptions = {}): Promise<RdfVectorSummaryLifecycleEntry[]> {\n const params: unknown[] = [];\n const conditions = ['chunk.summary_metadata IS NOT NULL'];\n if (options.workspace) {\n conditions.push(`source.workspace = ${addParam(params, options.workspace)}`);\n }\n appendPgRdfSearchSourceFilters(options, conditions, params);\n appendPgVectorIdentityFilters(options, conditions, params);\n\n const limitSql = options.limit === undefined ? '' : `LIMIT ${addParam(params, Math.max(0, options.limit), 'integer')}`;\n const rows = await this.requireExecutor().query<RdfVectorChunkRow>(`\n SELECT\n chunk.id,\n chunk.source_id,\n source.source_key,\n source.source,\n source.workspace,\n source.local_path,\n source.content_type,\n source.source_version,\n source.source_hash,\n chunk.chunk_key,\n chunk.ordinal,\n chunk.level,\n chunk.heading,\n chunk.path,\n chunk.content,\n chunk.start_offset,\n chunk.end_offset,\n chunk.embedding_json,\n chunk.summary_metadata,\n chunk.dimensions,\n chunk.magnitude,\n chunk.provider,\n chunk.model,\n chunk.model_version,\n chunk.input_kind,\n chunk.input_hash,\n chunk.projection_policy_version,\n chunk.updated_at\n FROM rdf_vector_chunks chunk\n JOIN rdf_vector_sources source ON source.id = chunk.source_id\n WHERE ${conditions.join(' AND ')}\n ORDER BY source.source ASC, chunk.ordinal ASC, chunk.chunk_key ASC\n ${limitSql}\n `, params);\n\n return rows.flatMap((rawRow) => {\n const entry = toSummaryLifecycleEntry(normalizeVectorChunkRow(rawRow));\n return entry ? [entry] : [];\n });\n }\n\n public async estimateSearchCardinality(options: RdfVectorSearchOptions): Promise<RdfSearchCardinalityEstimate> {\n const embedding = normalizeEmbedding(options.embedding);\n if (embedding.length === 0) {\n return {\n rows: 0,\n source: 'vector-candidate-count',\n indexChoice: 'vector-candidate-count',\n };\n }\n\n const metric = options.metric ?? this.options.defaultMetric ?? 'cosine';\n if (metric === 'cosine' && vectorMagnitude(embedding) === 0) {\n return {\n rows: 0,\n source: 'vector-candidate-count',\n indexChoice: 'vector-candidate-count',\n };\n }\n\n if (options.threshold !== undefined) {\n const usesPgVector = this.usesPgVectorBackend();\n const countQuery = usesPgVector\n ? buildPgVectorNativeScoredCountQuery(embedding, metric, options)\n : buildPgVectorScoredCountQuery(embedding, metric, options);\n const rows = await this.requireExecutor().query<{ count: number | string }>(countQuery.sql, countQuery.params);\n return {\n rows: applyResultWindow(Number(rows[0]?.count ?? 0), options.offset, options.limit),\n source: usesPgVector ? 'pg-vector-score' : 'vector-component-score',\n indexChoice: usesPgVector ? 'pg-vector-score' : 'vector-component-score',\n };\n }\n\n const params: unknown[] = [];\n const conditions = [`chunk.dimensions = ${addParam(params, embedding.length)}`];\n if (options.workspace) {\n conditions.push(`source.workspace = ${addParam(params, options.workspace)}`);\n }\n appendPgRdfSearchSourceFilters(options, conditions, params);\n appendPgVectorIdentityFilters(options, conditions, params);\n\n const rows = await this.requireExecutor().query<{ count: number | string }>(`\n SELECT COUNT(*) AS count\n FROM rdf_vector_chunks chunk\n JOIN rdf_vector_sources source ON source.id = chunk.source_id\n WHERE ${conditions.join(' AND ')}\n `, params);\n\n return {\n rows: applyResultWindow(Number(rows[0]?.count ?? 0), options.offset, options.limit),\n source: 'vector-candidate-count',\n indexChoice: 'vector-candidate-count',\n };\n }\n\n public async stats(): Promise<RdfVectorIndexStats> {\n const [sourceRows, chunkRows, componentRows] = await Promise.all([\n this.requireExecutor().query<{ count: number | string }>('SELECT COUNT(*) AS count FROM rdf_vector_sources'),\n this.requireExecutor().query<{ count: number | string }>('SELECT COUNT(*) AS count FROM rdf_vector_chunks'),\n this.requireExecutor().query<{ count: number | string }>('SELECT COUNT(*) AS count FROM rdf_vector_components'),\n ]);\n return {\n sourceCount: Number(sourceRows[0]?.count ?? 0),\n chunkCount: Number(chunkRows[0]?.count ?? 0),\n componentCount: Number(componentRows[0]?.count ?? 0),\n databaseBytes: await this.estimateDatabaseBytes(),\n modelDistribution: await this.modelDistribution(),\n };\n }\n\n public async modelDistribution(): Promise<RdfVectorModelDistribution[]> {\n const rows = await this.requireExecutor().query<{\n provider: string;\n model: string;\n model_version: string;\n input_kind: string;\n projection_policy_version: string;\n dimensions: number | string;\n source_count: number | string;\n chunk_count: number | string;\n min_magnitude: number | string | null;\n max_magnitude: number | string | null;\n average_magnitude: number | string | null;\n }>(`\n SELECT\n chunk.provider,\n chunk.model,\n chunk.model_version,\n chunk.input_kind,\n chunk.projection_policy_version,\n chunk.dimensions,\n COUNT(DISTINCT chunk.source_id) AS source_count,\n COUNT(*) AS chunk_count,\n MIN(chunk.magnitude) AS min_magnitude,\n MAX(chunk.magnitude) AS max_magnitude,\n AVG(chunk.magnitude) AS average_magnitude\n FROM rdf_vector_chunks chunk\n GROUP BY chunk.provider, chunk.model, chunk.model_version, chunk.input_kind, chunk.projection_policy_version, chunk.dimensions\n ORDER BY chunk_count DESC, source_count DESC, chunk.provider ASC, chunk.model ASC, chunk.model_version ASC, chunk.input_kind ASC, chunk.projection_policy_version ASC, chunk.dimensions ASC\n `);\n\n return rows.map((row) => ({\n provider: row.provider || undefined,\n model: row.model,\n modelVersion: row.model_version || undefined,\n inputKind: row.input_kind || undefined,\n projectionPolicyVersion: row.projection_policy_version || undefined,\n dimensions: Number(row.dimensions),\n sourceCount: Number(row.source_count),\n chunkCount: Number(row.chunk_count),\n minMagnitude: Number(row.min_magnitude ?? 0),\n maxMagnitude: Number(row.max_magnitude ?? 0),\n averageMagnitude: Number(row.average_magnitude ?? 0),\n }));\n }\n\n private async openInternal(): Promise<void> {\n if (this.options.driver === 'pglite') {\n this.pglite = new PGlite(this.options.dataDir);\n this.executor = new PgliteRdfSqlExecutor(this.pglite);\n } else if (this.options.pool) {\n this.pgPool = this.options.pool;\n this.executor = new PgPoolRdfSqlExecutor(this.pgPool);\n } else {\n this.sharedPoolConfig = {\n connectionString: this.options.connectionString,\n host: this.options.host,\n port: this.options.port,\n database: this.options.database,\n user: this.options.user,\n password: this.options.password,\n };\n this.pgPool = getSharedPool(this.sharedPoolConfig);\n this.executor = new PgPoolRdfSqlExecutor(this.pgPool);\n }\n await this.initializeSchema();\n }\n\n private async initializeSchema(): Promise<void> {\n if (this.usesPgVectorBackend()) {\n await this.requireExecutor().exec('CREATE EXTENSION IF NOT EXISTS vector');\n }\n await this.requireExecutor().exec(`\n CREATE TABLE IF NOT EXISTS rdf_vector_sources (\n id BIGSERIAL PRIMARY KEY,\n source_key TEXT,\n source TEXT NOT NULL UNIQUE,\n workspace TEXT NOT NULL,\n local_path TEXT,\n content_type TEXT,\n source_version TEXT,\n source_hash TEXT,\n updated_at TIMESTAMPTZ NOT NULL DEFAULT now()\n );\n\n CREATE TABLE IF NOT EXISTS rdf_vector_chunks (\n id BIGSERIAL PRIMARY KEY,\n source_id BIGINT NOT NULL REFERENCES rdf_vector_sources(id) ON DELETE CASCADE,\n chunk_key TEXT NOT NULL,\n ordinal INTEGER NOT NULL,\n level INTEGER NOT NULL,\n heading TEXT,\n path TEXT,\n content TEXT NOT NULL,\n start_offset INTEGER NOT NULL,\n end_offset INTEGER NOT NULL,\n embedding_json TEXT NOT NULL,\n summary_metadata TEXT,\n dimensions INTEGER NOT NULL,\n magnitude DOUBLE PRECISION NOT NULL,\n provider TEXT NOT NULL DEFAULT '',\n model TEXT NOT NULL,\n model_version TEXT NOT NULL DEFAULT '',\n input_kind TEXT NOT NULL DEFAULT '',\n input_hash TEXT NOT NULL DEFAULT '',\n projection_policy_version TEXT NOT NULL DEFAULT '',\n updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n UNIQUE (\n source_id,\n chunk_key,\n provider,\n model,\n model_version,\n input_kind,\n projection_policy_version,\n input_hash\n )\n );\n\n CREATE TABLE IF NOT EXISTS rdf_vector_components (\n chunk_id BIGINT NOT NULL REFERENCES rdf_vector_chunks(id) ON DELETE CASCADE,\n dimension INTEGER NOT NULL,\n value DOUBLE PRECISION NOT NULL,\n updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n PRIMARY KEY (chunk_id, dimension)\n );\n\n CREATE INDEX IF NOT EXISTS rdf_vector_sources_workspace ON rdf_vector_sources(workspace);\n CREATE INDEX IF NOT EXISTS rdf_vector_sources_source ON rdf_vector_sources(source);\n CREATE INDEX IF NOT EXISTS rdf_vector_chunks_source ON rdf_vector_chunks(source_id, ordinal);\n CREATE INDEX IF NOT EXISTS rdf_vector_components_dimension ON rdf_vector_components(dimension, chunk_id);\n `);\n await this.ensureSourceKeyColumn();\n await this.ensureVectorIdentityColumns();\n if (this.usesPgVectorBackend()) {\n await this.ensurePgVectorColumn();\n } else {\n await this.backfillVectorComponents();\n }\n }\n\n private async ensurePgVectorColumn(): Promise<void> {\n await this.requireExecutor().exec('ALTER TABLE rdf_vector_chunks ADD COLUMN IF NOT EXISTS embedding_vector vector');\n await this.requireExecutor().exec(`\n UPDATE rdf_vector_chunks\n SET embedding_vector = embedding_json::vector\n WHERE embedding_vector IS NULL\n AND embedding_json IS NOT NULL\n `);\n }\n\n private async ensurePgVectorSearchIndex(dimensions: number, metric: RdfVectorDistanceMetric): Promise<void> {\n if (!this.usesPgVectorBackend()) {\n return;\n }\n const safeDimensions = pgVectorDimensions(dimensions);\n const key = `${metric}:${safeDimensions}`;\n if (this.ensuredPgVectorIndexes.has(key)) {\n return;\n }\n const indexName = quotePgIdentifier(`rdf_vector_chunks_embedding_${metric}_${safeDimensions}_hnsw`);\n await this.requireExecutor().exec(`\n CREATE INDEX IF NOT EXISTS ${indexName}\n ON rdf_vector_chunks\n USING hnsw ((embedding_vector::vector(${safeDimensions})) ${pgVectorOperatorClass(metric)})\n WHERE dimensions = ${safeDimensions}\n AND embedding_vector IS NOT NULL\n `);\n this.ensuredPgVectorIndexes.add(key);\n }\n\n private async ensureSourceKeyColumn(): Promise<void> {\n await this.requireExecutor().exec('ALTER TABLE rdf_vector_sources ADD COLUMN IF NOT EXISTS source_key TEXT');\n await this.requireExecutor().exec('UPDATE rdf_vector_sources SET source_key = source WHERE source_key IS NULL OR source_key = \\'\\'');\n }\n\n private async ensureVectorIdentityColumns(): Promise<void> {\n await this.requireExecutor().exec(`\n ALTER TABLE rdf_vector_chunks ADD COLUMN IF NOT EXISTS provider TEXT NOT NULL DEFAULT '';\n ALTER TABLE rdf_vector_chunks ADD COLUMN IF NOT EXISTS model_version TEXT NOT NULL DEFAULT '';\n ALTER TABLE rdf_vector_chunks ADD COLUMN IF NOT EXISTS input_kind TEXT NOT NULL DEFAULT '';\n ALTER TABLE rdf_vector_chunks ADD COLUMN IF NOT EXISTS input_hash TEXT NOT NULL DEFAULT '';\n ALTER TABLE rdf_vector_chunks ADD COLUMN IF NOT EXISTS projection_policy_version TEXT NOT NULL DEFAULT '';\n ALTER TABLE rdf_vector_chunks ADD COLUMN IF NOT EXISTS summary_metadata TEXT;\n UPDATE rdf_vector_chunks\n SET\n provider = COALESCE(provider, ''),\n model_version = COALESCE(model_version, ''),\n input_kind = COALESCE(input_kind, ''),\n input_hash = COALESCE(input_hash, ''),\n projection_policy_version = COALESCE(projection_policy_version, '');\n `);\n await this.ensureVectorChunkIdentityUniqueConstraint();\n await this.requireExecutor().exec(`\n CREATE INDEX IF NOT EXISTS rdf_vector_chunks_model_dimensions\n ON rdf_vector_chunks(provider, model, model_version, input_kind, projection_policy_version, dimensions);\n `);\n }\n\n private async ensureVectorChunkIdentityUniqueConstraint(): Promise<void> {\n const rows = await this.requireExecutor().query<{ conname: string; columns: string }>(`\n SELECT\n constraint_info.conname,\n string_agg(attribute.attname, ',' ORDER BY constraint_key.ordinality) AS columns\n FROM pg_constraint constraint_info\n JOIN unnest(constraint_info.conkey) WITH ORDINALITY AS constraint_key(attnum, ordinality) ON TRUE\n JOIN pg_attribute attribute\n ON attribute.attrelid = constraint_info.conrelid\n AND attribute.attnum = constraint_key.attnum\n WHERE constraint_info.conrelid = 'rdf_vector_chunks'::regclass\n AND constraint_info.contype = 'u'\n GROUP BY constraint_info.conname\n `);\n let hasIdentityUnique = false;\n for (const row of rows) {\n if (row.columns === 'source_id,chunk_key') {\n await this.requireExecutor().exec(`ALTER TABLE rdf_vector_chunks DROP CONSTRAINT ${quotePgIdentifier(row.conname)}`);\n } else if (row.columns === 'source_id,chunk_key,provider,model,model_version,input_kind,projection_policy_version,input_hash') {\n hasIdentityUnique = true;\n }\n }\n if (hasIdentityUnique) {\n return;\n }\n await this.requireExecutor().exec(`\n CREATE UNIQUE INDEX IF NOT EXISTS rdf_vector_chunks_identity_unique\n ON rdf_vector_chunks (\n source_id,\n chunk_key,\n provider,\n model,\n model_version,\n input_kind,\n projection_policy_version,\n input_hash\n )\n `);\n }\n\n private async backfillVectorComponents(): Promise<void> {\n const rows = await this.requireExecutor().query<{\n id: number | string;\n dimensions: number | string;\n embedding_json: string;\n component_count: number | string;\n }>(`\n SELECT\n chunk.id,\n chunk.dimensions,\n chunk.embedding_json,\n COUNT(component.dimension) AS component_count\n FROM rdf_vector_chunks chunk\n LEFT JOIN rdf_vector_components component ON component.chunk_id = chunk.id\n WHERE chunk.dimensions > 0\n GROUP BY chunk.id\n HAVING COUNT(component.dimension) <> chunk.dimensions\n `);\n if (rows.length === 0) {\n return;\n }\n\n await this.requireExecutor().transaction(async (tx) => {\n for (const row of rows) {\n const chunkId = Number(row.id);\n await tx.exec('DELETE FROM rdf_vector_components WHERE chunk_id = $1', [chunkId]);\n await insertVectorComponents(tx, chunkId, parseEmbedding(row.embedding_json));\n }\n });\n }\n\n private async upsertSource(tx: PostgresRdfSqlExecutor, source: RdfVectorSourceInput): Promise<number> {\n const rows = await tx.query<RdfVectorSourceRow>(`\n INSERT INTO rdf_vector_sources (\n source_key,\n source,\n workspace,\n local_path,\n content_type,\n source_version,\n source_hash,\n updated_at\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7, now())\n ON CONFLICT (source)\n DO UPDATE SET\n source_key = COALESCE(EXCLUDED.source_key, rdf_vector_sources.source_key, EXCLUDED.source),\n workspace = EXCLUDED.workspace,\n local_path = EXCLUDED.local_path,\n content_type = EXCLUDED.content_type,\n source_version = EXCLUDED.source_version,\n source_hash = EXCLUDED.source_hash,\n updated_at = EXCLUDED.updated_at\n RETURNING id\n `, [\n source.sourceKey ?? source.source,\n source.source,\n source.workspace,\n source.localPath ?? null,\n source.contentType ?? null,\n source.sourceVersion ?? null,\n source.sourceHash ?? null,\n ]);\n const id = Number(rows[0]?.id);\n if (!Number.isFinite(id)) {\n throw new Error(`Failed to upsert RDF vector source: ${source.source}`);\n }\n return id;\n }\n\n private async estimateDatabaseBytes(): Promise<number> {\n try {\n const rows = await this.requireExecutor().query<{ bytes: number | string }>(`\n SELECT COALESCE(SUM(pg_total_relation_size(('\"' || schemaname || '\".\"' || tablename || '\"')::regclass)), 0)::bigint AS bytes\n FROM pg_tables\n WHERE tablename IN ('rdf_vector_sources', 'rdf_vector_chunks', 'rdf_vector_components')\n `);\n return Number(rows[0]?.bytes ?? 0);\n } catch {\n return 0;\n }\n }\n\n private requireExecutor(): PostgresRdfSqlExecutor {\n if (!this.executor) {\n throw new Error('PostgresRdfVectorIndex is not open');\n }\n return this.executor;\n }\n\n private usesPgVectorBackend(): boolean {\n return this.options.driver === 'pg';\n }\n}\n\ninterface NormalizedVectorIdentity {\n provider: string;\n model: string;\n modelVersion: string;\n inputKind: string;\n projectionPolicyVersion: string;\n}\n\nfunction normalizeVectorIdentity(chunk: RdfVectorChunkInput): NormalizedVectorIdentity {\n return {\n provider: chunk.provider ?? '',\n model: chunk.model ?? '',\n modelVersion: chunk.modelVersion ?? '',\n inputKind: chunk.inputKind ?? '',\n projectionPolicyVersion: chunk.projectionPolicyVersion ?? '',\n };\n}\n\nfunction vectorIdentityKey(identity: NormalizedVectorIdentity): string {\n return [\n identity.provider,\n identity.model,\n identity.modelVersion,\n identity.inputKind,\n identity.projectionPolicyVersion,\n ].join('\\u0000');\n}\n\nfunction appendPgVectorIdentityFilters(\n options: RdfVectorSearchOptions | RdfVectorSummaryLifecycleOptions,\n conditions: string[],\n params: unknown[],\n): void {\n if (options.provider !== undefined) {\n conditions.push(`chunk.provider = ${addParam(params, options.provider)}`);\n }\n if (options.model !== undefined) {\n conditions.push(`chunk.model = ${addParam(params, options.model)}`);\n }\n if (options.modelVersion !== undefined) {\n conditions.push(`chunk.model_version = ${addParam(params, options.modelVersion)}`);\n }\n if (options.inputKind !== undefined) {\n conditions.push(`chunk.input_kind = ${addParam(params, options.inputKind)}`);\n }\n if (options.inputHash !== undefined) {\n conditions.push(`chunk.input_hash = ${addParam(params, options.inputHash)}`);\n }\n if (options.projectionPolicyVersion !== undefined) {\n conditions.push(`chunk.projection_policy_version = ${addParam(params, options.projectionPolicyVersion)}`);\n }\n}\n\nfunction buildPgVectorNativeScoredRowsQuery(\n embedding: number[],\n metric: RdfVectorDistanceMetric,\n options: RdfVectorSearchOptions,\n): { sql: string; params: unknown[] } {\n if (canUsePgVectorAnnTopK(options)) {\n return buildPgVectorNativeAnnScoredRowsQuery(embedding, metric, options);\n }\n const base = buildPgVectorNativeBaseQuery(embedding, metric, options);\n const orderBy = buildPgVectorNativeOrderClause(options.orderBy, base.distanceExpression);\n const window = buildPgVectorWindowClause(base.params, options.limit, options.offset);\n return {\n sql: `\n SELECT\n ${base.selectSql}\n ${base.fromSql}\n ORDER BY ${orderBy}\n ${window}\n `,\n params: base.params,\n };\n}\n\nfunction buildPgVectorNativeAnnScoredRowsQuery(\n embedding: number[],\n metric: RdfVectorDistanceMetric,\n options: RdfVectorSearchOptions,\n): { sql: string; params: unknown[] } {\n const base = buildPgVectorNativeBaseQuery(embedding, metric, options);\n const limit = options.limit ?? 0;\n const innerLimit = addParam(base.params, Math.max(0, limit), 'integer');\n const orderBy = buildPgVectorNativeOrderClause(options.orderBy, 'candidate_chunks.native_distance');\n return {\n sql: `\n WITH candidate_chunks AS (\n SELECT\n chunk.id,\n ${base.distanceExpression} AS native_distance\n ${base.fromSql}\n ORDER BY ${base.distanceExpression} ASC, source.id ASC, chunk.ordinal ASC\n LIMIT ${innerLimit}\n )\n SELECT\n ${base.selectSql}\n ${base.outerFromSql}\n ORDER BY ${orderBy}\n `,\n params: base.params,\n };\n}\n\nfunction buildPgVectorNativeScoredCountQuery(\n embedding: number[],\n metric: RdfVectorDistanceMetric,\n options: RdfVectorSearchOptions,\n): { sql: string; params: unknown[] } {\n const base = buildPgVectorNativeBaseQuery(embedding, metric, options);\n return {\n sql: `\n SELECT COUNT(*) AS count\n ${base.fromSql}\n `,\n params: base.params,\n };\n}\n\nfunction buildPgVectorNativeBaseQuery(\n embedding: number[],\n metric: RdfVectorDistanceMetric,\n options: RdfVectorSearchOptions,\n): {\n selectSql: string;\n fromSql: string;\n outerFromSql: string;\n params: unknown[];\n distanceExpression: string;\n} {\n const params: unknown[] = [];\n const dimensions = pgVectorDimensions(embedding.length);\n const vectorExpression = `(chunk.embedding_vector::vector(${dimensions}))`;\n const queryVector = addParam(params, formatPgVectorLiteral(embedding), `vector(${dimensions})`);\n const distanceExpression = pgVectorNativeDistanceExpression(metric, vectorExpression, queryVector);\n const dotProductExpression = `-(${vectorExpression} <#> ${queryVector})`;\n const nativeDistanceExpression = canUsePgVectorAnnTopK(options)\n ? 'candidate_chunks.native_distance'\n : distanceExpression;\n const vectorScoreExpression = pgVectorNativeScoreExpression(metric, nativeDistanceExpression);\n const vectorDistanceExpression = metric === 'euclidean' ? 'NULL' : nativeDistanceExpression;\n const vectorDistanceSquaredExpression = metric === 'euclidean'\n ? `(${nativeDistanceExpression} * ${nativeDistanceExpression})`\n : `(chunk.magnitude * chunk.magnitude + ${vectorMagnitude(embedding) * vectorMagnitude(embedding)} - 2 * ${dotProductExpression})`;\n const conditions = [\n `chunk.dimensions = ${addParam(params, embedding.length, 'integer')}`,\n 'chunk.embedding_vector IS NOT NULL',\n ];\n\n if (metric === 'cosine') {\n conditions.push('chunk.magnitude > 0');\n }\n if (options.workspace) {\n conditions.push(`source.workspace = ${addParam(params, options.workspace)}`);\n }\n appendPgRdfSearchSourceFilters(options, conditions, params);\n appendPgVectorIdentityFilters(options, conditions, params);\n if (options.threshold !== undefined) {\n conditions.push(pgVectorNativeThresholdExpression(metric, distanceExpression, options.threshold));\n }\n\n return {\n selectSql: `\n chunk.id,\n chunk.source_id,\n source.source_key,\n source.source,\n source.workspace,\n source.local_path,\n source.content_type,\n source.source_version,\n source.source_hash,\n chunk.chunk_key,\n chunk.ordinal,\n chunk.level,\n chunk.heading,\n chunk.path,\n chunk.content,\n chunk.start_offset,\n chunk.end_offset,\n chunk.embedding_json,\n chunk.summary_metadata,\n chunk.dimensions,\n chunk.magnitude,\n chunk.provider,\n chunk.model,\n chunk.model_version,\n chunk.input_kind,\n chunk.input_hash,\n chunk.projection_policy_version,\n chunk.updated_at,\n ${dotProductExpression} AS dot_product,\n ${vectorScoreExpression} AS vector_score,\n ${vectorDistanceExpression} AS vector_distance,\n ${vectorDistanceSquaredExpression} AS vector_distance_squared,\n ${nativeDistanceExpression} AS native_distance\n `,\n fromSql: `\n FROM rdf_vector_chunks chunk\n JOIN rdf_vector_sources source ON source.id = chunk.source_id\n WHERE ${conditions.join(' AND ')}\n `,\n outerFromSql: `\n FROM candidate_chunks\n JOIN rdf_vector_chunks chunk ON chunk.id = candidate_chunks.id\n JOIN rdf_vector_sources source ON source.id = chunk.source_id\n `,\n params,\n distanceExpression,\n };\n}\n\nfunction canUsePgVectorAnnTopK(options: RdfVectorSearchOptions): boolean {\n if (options.limit === undefined || options.offset !== undefined) {\n return false;\n }\n const order = options.orderBy?.length ? options.orderBy : [{ field: 'score' as const, direction: 'desc' as const }];\n const first = order[0];\n if (!first) {\n return false;\n }\n if (first.field === 'score') {\n return first.direction === 'desc';\n }\n if (first.field === 'distance') {\n return first.direction !== 'desc';\n }\n return false;\n}\n\nfunction buildPgVectorScoredRowsQuery(\n embedding: number[],\n metric: RdfVectorDistanceMetric,\n options: RdfVectorSearchOptions,\n): { sql: string; params: unknown[] } {\n const scored = buildPgVectorScoredBaseQuery(embedding, metric, options);\n const orderBy = buildVectorOrderClause(metric, options.orderBy);\n const window = buildPgVectorWindowClause(scored.params, options.limit, options.offset);\n return {\n sql: `\n ${scored.withSql}\n SELECT\n scored.*,\n scored.dot_product AS dot_product,\n ${vectorScoreSql(metric, scored.queryMagnitude)} AS vector_score,\n ${vectorDistanceSql(metric, scored.queryMagnitude)} AS vector_distance,\n ${vectorSquaredDistanceSql(scored.queryMagnitude)} AS vector_distance_squared\n FROM scored\n ${scored.thresholdWhere}\n ORDER BY ${orderBy}\n ${window}\n `,\n params: scored.params,\n };\n}\n\nfunction buildPgVectorScoredCountQuery(\n embedding: number[],\n metric: RdfVectorDistanceMetric,\n options: RdfVectorSearchOptions,\n): { sql: string; params: unknown[] } {\n const scored = buildPgVectorScoredBaseQuery(embedding, metric, options);\n return {\n sql: `\n ${scored.withSql}\n SELECT COUNT(*) AS count\n FROM scored\n ${scored.thresholdWhere}\n `,\n params: scored.params,\n };\n}\n\nfunction buildPgVectorScoredBaseQuery(\n embedding: number[],\n metric: RdfVectorDistanceMetric,\n options: RdfVectorSearchOptions,\n): {\n withSql: string;\n params: unknown[];\n thresholdWhere: string;\n queryMagnitude: number;\n} {\n const queryMagnitude = vectorMagnitude(embedding);\n const params: unknown[] = [];\n const vectorValues = embedding\n .map((value, dimension) => `(${addParam(params, dimension, 'integer')}, ${addParam(params, value, 'double precision')})`)\n .join(', ');\n const conditions = [`chunk.dimensions = ${addParam(params, embedding.length, 'integer')}`];\n\n if (metric === 'cosine') {\n conditions.push('chunk.magnitude > 0');\n }\n if (options.workspace) {\n conditions.push(`source.workspace = ${addParam(params, options.workspace)}`);\n }\n appendPgRdfSearchSourceFilters(options, conditions, params);\n appendPgVectorIdentityFilters(options, conditions, params);\n\n const thresholdWhere = options.threshold === undefined\n ? ''\n : `WHERE ${vectorThresholdSql(metric, queryMagnitude, options.threshold)}`;\n\n return {\n withSql: `\n WITH query_vector(dimension, value) AS (\n VALUES ${vectorValues}\n ),\n scored AS (\n SELECT\n chunk.id,\n chunk.source_id,\n source.source_key,\n source.source,\n source.workspace,\n source.local_path,\n source.content_type,\n source.source_version,\n source.source_hash,\n chunk.chunk_key,\n chunk.ordinal,\n chunk.level,\n chunk.heading,\n chunk.path,\n chunk.content,\n chunk.start_offset,\n chunk.end_offset,\n chunk.embedding_json,\n chunk.summary_metadata,\n chunk.dimensions,\n chunk.magnitude,\n chunk.provider,\n chunk.model,\n chunk.model_version,\n chunk.input_kind,\n chunk.input_hash,\n chunk.projection_policy_version,\n chunk.updated_at,\n SUM(component.value * query_vector.value) AS dot_product\n FROM rdf_vector_chunks chunk\n JOIN rdf_vector_sources source ON source.id = chunk.source_id\n JOIN rdf_vector_components component ON component.chunk_id = chunk.id\n JOIN query_vector ON query_vector.dimension = component.dimension\n WHERE ${conditions.join(' AND ')}\n GROUP BY\n chunk.id,\n source.source_key,\n source.source,\n source.workspace,\n source.local_path,\n source.content_type,\n source.source_version,\n source.source_hash\n HAVING COUNT(component.dimension) = ${embedding.length}\n )\n `,\n params,\n thresholdWhere,\n queryMagnitude,\n };\n}\n\nfunction buildPgVectorWindowClause(params: unknown[], limit: number | undefined, offset: number | undefined): string {\n const hasLimit = limit !== undefined;\n const hasOffset = offset !== undefined;\n if (!hasLimit && !hasOffset) {\n return '';\n }\n if (hasLimit) {\n const limitParam = addParam(params, Math.max(0, limit), 'integer');\n if (hasOffset) {\n return `LIMIT ${limitParam} OFFSET ${addParam(params, Math.max(0, offset), 'integer')}`;\n }\n return `LIMIT ${limitParam}`;\n }\n return `OFFSET ${addParam(params, Math.max(0, offset ?? 0), 'integer')}`;\n}\n\nfunction pgVectorNativeDistanceExpression(metric: RdfVectorDistanceMetric, vectorExpression: string, queryVector: string): string {\n switch (metric) {\n case 'cosine':\n return `${vectorExpression} <=> ${queryVector}`;\n case 'euclidean':\n return `${vectorExpression} <-> ${queryVector}`;\n case 'dot':\n return `${vectorExpression} <#> ${queryVector}`;\n default: {\n const exhaustive: never = metric;\n throw new Error(`Unsupported RDF vector distance metric: ${exhaustive}`);\n }\n }\n}\n\nfunction pgVectorNativeScoreExpression(metric: RdfVectorDistanceMetric, distanceExpression: string): string {\n switch (metric) {\n case 'cosine':\n return `1 - (${distanceExpression})`;\n case 'euclidean':\n return `-(${distanceExpression} * ${distanceExpression})`;\n case 'dot':\n return `-(${distanceExpression})`;\n default: {\n const exhaustive: never = metric;\n throw new Error(`Unsupported RDF vector distance metric: ${exhaustive}`);\n }\n }\n}\n\nfunction pgVectorNativeThresholdExpression(\n metric: RdfVectorDistanceMetric,\n distanceExpression: string,\n threshold: number,\n): string {\n if (!Number.isFinite(threshold)) {\n return threshold === Number.NEGATIVE_INFINITY ? '1 = 1' : '1 = 0';\n }\n switch (metric) {\n case 'cosine':\n return `${distanceExpression} <= ${1 - threshold}`;\n case 'dot':\n return `${distanceExpression} <= ${-threshold}`;\n case 'euclidean':\n return threshold <= 0 ? `${distanceExpression} <= ${Math.abs(threshold)}` : '1 = 0';\n default: {\n const exhaustive: never = metric;\n throw new Error(`Unsupported RDF vector distance metric: ${exhaustive}`);\n }\n }\n}\n\nfunction buildPgVectorNativeOrderClause(orderBy: RdfVectorSearchOptions['orderBy'], distanceExpression: string): string {\n const order = orderBy?.length ? orderBy : [{ field: 'score' as const, direction: 'desc' as const }];\n const entries = order.map((entry) => {\n if (entry.field === 'score') {\n const direction = entry.direction === 'desc' ? 'ASC' : 'DESC';\n return `${distanceExpression} ${direction}`;\n }\n if (entry.field === 'distance') {\n return `${distanceExpression} ${entry.direction === 'desc' ? 'DESC' : 'ASC'}`;\n }\n return `${pgVectorNativeOrderExpression(entry.field)} ${entry.direction === 'desc' ? 'DESC' : 'ASC'}`;\n });\n return [...entries, 'source.id ASC', 'chunk.ordinal ASC'].join(', ');\n}\n\nfunction pgVectorNativeOrderExpression(\n field: NonNullable<RdfVectorSearchOptions['orderBy']>[number]['field'],\n): string {\n switch (field) {\n case 'score':\n return 'vector_score';\n case 'distance':\n return 'native_distance';\n case 'source':\n return 'source.source';\n case 'localPath':\n return \"COALESCE(source.local_path, '')\";\n case 'ordinal':\n return 'chunk.ordinal';\n case 'startOffset':\n return 'chunk.start_offset';\n case 'endOffset':\n return 'chunk.end_offset';\n default: {\n const exhaustive: never = field;\n throw new Error(`Unsupported RDF vector search order field: ${exhaustive}`);\n }\n }\n}\n\nasync function insertVectorComponents(\n executor: PostgresRdfSqlExecutor,\n chunkId: number,\n embedding: number[],\n): Promise<void> {\n for (let dimension = 0; dimension < embedding.length; dimension++) {\n await executor.exec(`\n INSERT INTO rdf_vector_components (\n chunk_id,\n dimension,\n value,\n updated_at\n )\n VALUES ($1, $2, $3, now())\n `, [chunkId, dimension, embedding[dimension]]);\n }\n}\n\nfunction addParam(params: unknown[], value: unknown, cast?: string): string {\n params.push(value);\n return `$${params.length}${cast ? `::${cast}` : ''}`;\n}\n\nfunction formatPgVectorLiteral(embedding: number[]): string {\n return `[${embedding.map((value) => {\n if (!Number.isFinite(value)) {\n throw new Error(`Invalid RDF vector value: ${value}`);\n }\n return String(value);\n }).join(',')}]`;\n}\n\nfunction pgVectorDimensions(dimensions: number): number {\n if (!Number.isSafeInteger(dimensions) || dimensions <= 0) {\n throw new Error(`Invalid RDF vector dimensions: ${dimensions}`);\n }\n return dimensions;\n}\n\nfunction pgVectorOperatorClass(metric: RdfVectorDistanceMetric): string {\n switch (metric) {\n case 'cosine':\n return 'vector_cosine_ops';\n case 'euclidean':\n return 'vector_l2_ops';\n case 'dot':\n return 'vector_ip_ops';\n default: {\n const exhaustive: never = metric;\n throw new Error(`Unsupported RDF vector distance metric: ${exhaustive}`);\n }\n }\n}\n\nfunction quotePgIdentifier(value: string): string {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n}\n\nfunction toSearchResult(\n row: RdfVectorScoredChunkRow,\n embedding: number[],\n metric: RdfVectorDistanceMetric,\n queryMagnitude: number,\n score: number,\n distance: number,\n backend?: 'component' | 'pg-vector',\n): RdfVectorSearchResult {\n return {\n source: row.source,\n workspace: row.workspace,\n localPath: row.local_path ?? undefined,\n contentType: row.content_type ?? undefined,\n sourceVersion: row.source_version ?? undefined,\n sourceHash: row.source_hash ?? undefined,\n sourceKey: row.source_key || row.source,\n chunkKey: row.chunk_key,\n retrievalPointKey: row.chunk_key,\n ordinal: row.ordinal,\n level: row.level,\n heading: row.heading ?? undefined,\n path: parsePath(row.path),\n content: row.content,\n startOffset: row.start_offset,\n endOffset: row.end_offset,\n embedding,\n provider: row.provider || undefined,\n model: row.model || undefined,\n modelVersion: row.model_version || undefined,\n inputKind: row.input_kind || undefined,\n inputHash: row.input_hash || undefined,\n projectionPolicyVersion: row.projection_policy_version || undefined,\n summaryMetadata: parseSummaryMetadata(row.summary_metadata),\n scoreComponents: vectorScoreComponents(row, metric, queryMagnitude, score, distance, backend),\n score,\n distance,\n };\n}\n\nfunction toSummaryLifecycleEntry(row: RdfVectorChunkRow): RdfVectorSummaryLifecycleEntry | undefined {\n const summaryMetadata = parseSummaryMetadata(row.summary_metadata);\n if (!summaryMetadata) {\n return undefined;\n }\n\n return {\n source: row.source,\n workspace: row.workspace,\n localPath: row.local_path ?? undefined,\n contentType: row.content_type ?? undefined,\n sourceVersion: row.source_version ?? undefined,\n sourceHash: row.source_hash ?? undefined,\n sourceKey: row.source_key || row.source,\n chunkKey: row.chunk_key,\n retrievalPointKey: row.chunk_key,\n ordinal: row.ordinal,\n level: row.level,\n heading: row.heading ?? undefined,\n path: parsePath(row.path),\n content: row.content,\n startOffset: row.start_offset,\n endOffset: row.end_offset,\n provider: row.provider || undefined,\n model: row.model || undefined,\n modelVersion: row.model_version || undefined,\n inputKind: row.input_kind || undefined,\n inputHash: row.input_hash || undefined,\n projectionPolicyVersion: row.projection_policy_version || undefined,\n summaryMetadata,\n updatedAt: formatPgTimestamp(row.updated_at),\n };\n}\n\nfunction normalizeVectorChunkRow(row: RdfVectorChunkRow): RdfVectorChunkRow {\n return {\n ...row,\n id: Number(row.id),\n source_id: Number(row.source_id),\n ordinal: Number(row.ordinal),\n level: Number(row.level),\n start_offset: Number(row.start_offset),\n end_offset: Number(row.end_offset),\n dimensions: Number(row.dimensions),\n magnitude: Number(row.magnitude),\n };\n}\n\nfunction normalizeVectorScoredChunkRow(row: RdfVectorScoredChunkRow): RdfVectorScoredChunkRow {\n return {\n ...normalizeVectorChunkRow(row),\n dot_product: Number(row.dot_product),\n vector_score: Number(row.vector_score),\n vector_distance: row.vector_distance === null ? null : Number(row.vector_distance),\n vector_distance_squared: row.vector_distance_squared === null ? null : Number(row.vector_distance_squared),\n };\n}\n\nfunction formatPgTimestamp(value: unknown): string {\n if (value instanceof Date) {\n return value.toISOString();\n }\n return String(value);\n}\n"]}
1
+ {"version":3,"file":"PostgresRdfVectorIndex.js","sourceRoot":"","sources":["../../../src/storage/rdf/PostgresRdfVectorIndex.ts"],"names":[],"mappings":"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","sourcesContent":["import { PGlite } from '@electric-sql/pglite';\nimport { getSharedPool, releaseSharedPool } from '../database/PostgresPoolManager';\nimport type {\n RdfSearchCardinalityEstimate,\n RdfVectorChunkInput,\n RdfVectorChunkRow,\n RdfVectorDistanceMetric,\n RdfVectorIndexLike,\n RdfVectorIndexStats,\n RdfVectorModelDistribution,\n RdfVectorSearchOptions,\n RdfVectorSearchResult,\n RdfVectorSourceInput,\n RdfVectorSummaryLifecycleEntry,\n RdfVectorSummaryLifecycleOptions,\n} from './types';\nimport { appendPgRdfSearchSourceFilters } from './RdfSearchSourceFilter';\nimport {\n PgPoolRdfSqlExecutor,\n PgliteRdfSqlExecutor,\n type PostgresRdfSqlExecutor,\n} from './PostgresRdfSqlExecutor';\nimport {\n type RdfVectorScoredChunkRow,\n applyResultWindow,\n buildVectorOrderClause,\n normalizeEmbedding,\n parseEmbedding,\n parsePath,\n parseSummaryMetadata,\n scoredVectorDistance,\n vectorDistanceSql,\n vectorMagnitude,\n vectorScore,\n vectorScoreComponents,\n vectorScoreSql,\n vectorSquaredDistanceSql,\n vectorThresholdSql,\n} from './RdfVectorIndex';\n\nexport interface PostgresRdfVectorIndexOptions {\n driver?: 'pglite' | 'pg';\n backend?: 'pgvector' | 'component';\n dataDir?: string;\n connectionString?: string;\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n password?: string;\n pool?: any;\n autoOpen?: boolean;\n defaultMetric?: RdfVectorDistanceMetric;\n}\n\ninterface RdfVectorSourceRow {\n id: number | string;\n source_key: string | null;\n source: string;\n workspace: string;\n local_path: string | null;\n content_type: string | null;\n source_version: string | null;\n source_hash: string | null;\n updated_at: string;\n}\n\nexport class PostgresRdfVectorIndex implements RdfVectorIndexLike {\n private readonly options: PostgresRdfVectorIndexOptions;\n private executor: PostgresRdfSqlExecutor | null = null;\n private pglite: PGlite | null = null;\n private pgPool: any = null;\n private sharedPoolConfig: Omit<PostgresRdfVectorIndexOptions, 'driver' | 'pool' | 'autoOpen' | 'dataDir' | 'defaultMetric'> | null = null;\n private initializing: Promise<void> | null = null;\n private readonly ensuredPgVectorIndexes = new Set<string>();\n\n public constructor(options: PostgresRdfVectorIndexOptions = {}) {\n this.options = {\n ...options,\n driver: options.driver ?? (options.connectionString || options.pool ? 'pg' : 'pglite'),\n };\n if (options.autoOpen) {\n void this.open();\n }\n }\n\n public async open(): Promise<void> {\n if (this.executor) {\n return;\n }\n this.initializing ??= this.openInternal();\n await this.initializing;\n }\n\n public async close(): Promise<void> {\n const executor = this.executor;\n this.executor = null;\n this.initializing = null;\n if (this.sharedPoolConfig) {\n releaseSharedPool(this.sharedPoolConfig);\n this.sharedPoolConfig = null;\n this.pgPool = null;\n return;\n }\n if (executor) {\n await executor.close();\n }\n this.pglite = null;\n this.pgPool = null;\n }\n\n public async clear(): Promise<void> {\n await this.requireExecutor().exec('DELETE FROM rdf_vector_components; DELETE FROM rdf_vector_chunks; DELETE FROM rdf_vector_sources;');\n }\n\n public async indexVector(source: RdfVectorSourceInput, chunks: RdfVectorChunkInput[]): Promise<void> {\n const executor = this.requireExecutor();\n await executor.transaction(async (tx) => {\n const sourceId = await this.upsertSource(tx, source);\n if (chunks.length === 0) {\n await tx.exec(`\n DELETE FROM rdf_vector_components\n WHERE chunk_id IN (\n SELECT id FROM rdf_vector_chunks WHERE source_id = $1\n )\n `, [sourceId]);\n await tx.exec('DELETE FROM rdf_vector_chunks WHERE source_id = $1', [sourceId]);\n return;\n }\n\n const deletedIdentities = new Set<string>();\n for (const chunk of chunks) {\n const identity = normalizeVectorIdentity(chunk);\n const identityKey = vectorIdentityKey(identity);\n if (!deletedIdentities.has(identityKey)) {\n await tx.exec(`\n DELETE FROM rdf_vector_components\n WHERE chunk_id IN (\n SELECT id FROM rdf_vector_chunks\n WHERE source_id = $1\n AND provider = $2\n AND model = $3\n AND model_version = $4\n AND input_kind = $5\n AND projection_policy_version = $6\n )\n `, [\n sourceId,\n identity.provider,\n identity.model,\n identity.modelVersion,\n identity.inputKind,\n identity.projectionPolicyVersion,\n ]);\n await tx.exec(`\n DELETE FROM rdf_vector_chunks\n WHERE source_id = $1\n AND provider = $2\n AND model = $3\n AND model_version = $4\n AND input_kind = $5\n AND projection_policy_version = $6\n `, [\n sourceId,\n identity.provider,\n identity.model,\n identity.modelVersion,\n identity.inputKind,\n identity.projectionPolicyVersion,\n ]);\n deletedIdentities.add(identityKey);\n }\n const embedding = normalizeEmbedding(chunk.embedding);\n const usePgVector = this.usesPgVectorBackend();\n const embeddingJson = JSON.stringify(embedding);\n const pgVectorColumnSql = usePgVector ? 'embedding_vector,' : '';\n const pgVectorValueSql = usePgVector ? ', $20::vector' : '';\n const insertParams: unknown[] = [\n sourceId,\n chunk.chunkKey,\n chunk.ordinal,\n chunk.level,\n chunk.heading || null,\n JSON.stringify(chunk.path ?? []),\n chunk.content,\n chunk.startOffset,\n chunk.endOffset,\n embeddingJson,\n chunk.summaryMetadata ? JSON.stringify(chunk.summaryMetadata) : null,\n embedding.length,\n vectorMagnitude(embedding),\n identity.provider,\n identity.model,\n identity.modelVersion,\n identity.inputKind,\n chunk.inputHash ?? '',\n identity.projectionPolicyVersion,\n ];\n if (usePgVector) {\n insertParams.push(formatPgVectorLiteral(embedding));\n }\n const rows = await tx.query<{ id: number | string }>(`\n INSERT INTO rdf_vector_chunks (\n source_id,\n chunk_key,\n ordinal,\n level,\n heading,\n path,\n content,\n start_offset,\n end_offset,\n embedding_json,\n summary_metadata,\n dimensions,\n magnitude,\n provider,\n model,\n model_version,\n input_kind,\n input_hash,\n projection_policy_version,\n ${pgVectorColumnSql}\n updated_at\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19${pgVectorValueSql}, now())\n RETURNING id\n `, insertParams);\n const chunkId = Number(rows[0]?.id);\n if (!Number.isFinite(chunkId)) {\n throw new Error(`Failed to insert RDF vector chunk for source: ${source.source}`);\n }\n if (!this.usesPgVectorBackend()) {\n await insertVectorComponents(tx, chunkId, embedding);\n }\n }\n });\n }\n\n public async deleteSource(source: string): Promise<number> {\n const executor = this.requireExecutor();\n const rows = await executor.query<{ id: number | string }>('SELECT id FROM rdf_vector_sources WHERE source = $1', [source]);\n const id = Number(rows[0]?.id);\n if (!Number.isFinite(id)) {\n return 0;\n }\n\n return await executor.transaction(async (tx) => {\n await tx.exec(`\n DELETE FROM rdf_vector_components\n WHERE chunk_id IN (\n SELECT id FROM rdf_vector_chunks WHERE source_id = $1\n )\n `, [id]);\n const deletedRows = await tx.query<{ count: number | string }>('SELECT COUNT(*) AS count FROM rdf_vector_chunks WHERE source_id = $1', [id]);\n await tx.exec('DELETE FROM rdf_vector_chunks WHERE source_id = $1', [id]);\n await tx.exec('DELETE FROM rdf_vector_sources WHERE id = $1', [id]);\n return Number(deletedRows[0]?.count ?? 0);\n });\n }\n\n public async search(options: RdfVectorSearchOptions): Promise<RdfVectorSearchResult[]> {\n const embedding = normalizeEmbedding(options.embedding);\n if (embedding.length === 0) {\n return [];\n }\n\n const metric = options.metric ?? this.options.defaultMetric ?? 'cosine';\n if (metric === 'cosine' && vectorMagnitude(embedding) === 0) {\n return [];\n }\n\n await this.ensurePgVectorSearchIndex(embedding.length, metric);\n const scoredQuery = this.usesPgVectorBackend()\n ? buildPgVectorNativeScoredRowsQuery(embedding, metric, options)\n : buildPgVectorScoredRowsQuery(embedding, metric, options);\n const rows = await this.requireExecutor().query<RdfVectorScoredChunkRow>(scoredQuery.sql, scoredQuery.params);\n const backend = this.usesPgVectorBackend() ? 'pg-vector' : 'component';\n return rows.map((rawRow) => {\n const row = normalizeVectorScoredChunkRow(rawRow);\n const rowEmbedding = parseEmbedding(row.embedding_json);\n const distance = scoredVectorDistance(row, metric);\n return toSearchResult(row, rowEmbedding, metric, vectorMagnitude(embedding), vectorScore(distance, metric), distance, backend);\n });\n }\n\n public async summaryLifecycle(options: RdfVectorSummaryLifecycleOptions = {}): Promise<RdfVectorSummaryLifecycleEntry[]> {\n const params: unknown[] = [];\n const conditions = ['chunk.summary_metadata IS NOT NULL'];\n if (options.workspace) {\n conditions.push(`source.workspace = ${addParam(params, options.workspace)}`);\n }\n appendPgRdfSearchSourceFilters(options, conditions, params);\n appendPgVectorIdentityFilters(options, conditions, params);\n\n const limitSql = options.limit === undefined ? '' : `LIMIT ${addParam(params, Math.max(0, options.limit), 'integer')}`;\n const rows = await this.requireExecutor().query<RdfVectorChunkRow>(`\n SELECT\n chunk.id,\n chunk.source_id,\n source.source_key,\n source.source,\n source.workspace,\n source.local_path,\n source.content_type,\n source.source_version,\n source.source_hash,\n chunk.chunk_key,\n chunk.ordinal,\n chunk.level,\n chunk.heading,\n chunk.path,\n chunk.content,\n chunk.start_offset,\n chunk.end_offset,\n chunk.embedding_json,\n chunk.summary_metadata,\n chunk.dimensions,\n chunk.magnitude,\n chunk.provider,\n chunk.model,\n chunk.model_version,\n chunk.input_kind,\n chunk.input_hash,\n chunk.projection_policy_version,\n chunk.updated_at\n FROM rdf_vector_chunks chunk\n JOIN rdf_vector_sources source ON source.id = chunk.source_id\n WHERE ${conditions.join(' AND ')}\n ORDER BY source.source ASC, chunk.ordinal ASC, chunk.chunk_key ASC\n ${limitSql}\n `, params);\n\n return rows.flatMap((rawRow) => {\n const entry = toSummaryLifecycleEntry(normalizeVectorChunkRow(rawRow));\n return entry ? [entry] : [];\n });\n }\n\n public async estimateSearchCardinality(options: RdfVectorSearchOptions): Promise<RdfSearchCardinalityEstimate> {\n const embedding = normalizeEmbedding(options.embedding);\n if (embedding.length === 0) {\n return {\n rows: 0,\n source: 'vector-candidate-count',\n indexChoice: 'vector-candidate-count',\n };\n }\n\n const metric = options.metric ?? this.options.defaultMetric ?? 'cosine';\n if (metric === 'cosine' && vectorMagnitude(embedding) === 0) {\n return {\n rows: 0,\n source: 'vector-candidate-count',\n indexChoice: 'vector-candidate-count',\n };\n }\n\n if (options.threshold !== undefined) {\n const usesPgVector = this.usesPgVectorBackend();\n const countQuery = usesPgVector\n ? buildPgVectorNativeScoredCountQuery(embedding, metric, options)\n : buildPgVectorScoredCountQuery(embedding, metric, options);\n const rows = await this.requireExecutor().query<{ count: number | string }>(countQuery.sql, countQuery.params);\n return {\n rows: applyResultWindow(Number(rows[0]?.count ?? 0), options.offset, options.limit),\n source: usesPgVector ? 'pg-vector-score' : 'vector-component-score',\n indexChoice: usesPgVector ? 'pg-vector-score' : 'vector-component-score',\n };\n }\n\n const params: unknown[] = [];\n const conditions = [`chunk.dimensions = ${addParam(params, embedding.length)}`];\n if (options.workspace) {\n conditions.push(`source.workspace = ${addParam(params, options.workspace)}`);\n }\n appendPgRdfSearchSourceFilters(options, conditions, params);\n appendPgVectorIdentityFilters(options, conditions, params);\n\n const rows = await this.requireExecutor().query<{ count: number | string }>(`\n SELECT COUNT(*) AS count\n FROM rdf_vector_chunks chunk\n JOIN rdf_vector_sources source ON source.id = chunk.source_id\n WHERE ${conditions.join(' AND ')}\n `, params);\n\n return {\n rows: applyResultWindow(Number(rows[0]?.count ?? 0), options.offset, options.limit),\n source: 'vector-candidate-count',\n indexChoice: 'vector-candidate-count',\n };\n }\n\n public async stats(): Promise<RdfVectorIndexStats> {\n const [sourceRows, chunkRows, componentRows] = await Promise.all([\n this.requireExecutor().query<{ count: number | string }>('SELECT COUNT(*) AS count FROM rdf_vector_sources'),\n this.requireExecutor().query<{ count: number | string }>('SELECT COUNT(*) AS count FROM rdf_vector_chunks'),\n this.requireExecutor().query<{ count: number | string }>('SELECT COUNT(*) AS count FROM rdf_vector_components'),\n ]);\n return {\n sourceCount: Number(sourceRows[0]?.count ?? 0),\n chunkCount: Number(chunkRows[0]?.count ?? 0),\n componentCount: Number(componentRows[0]?.count ?? 0),\n databaseBytes: await this.estimateDatabaseBytes(),\n modelDistribution: await this.modelDistribution(),\n };\n }\n\n public async modelDistribution(): Promise<RdfVectorModelDistribution[]> {\n const rows = await this.requireExecutor().query<{\n provider: string;\n model: string;\n model_version: string;\n input_kind: string;\n projection_policy_version: string;\n dimensions: number | string;\n source_count: number | string;\n chunk_count: number | string;\n min_magnitude: number | string | null;\n max_magnitude: number | string | null;\n average_magnitude: number | string | null;\n }>(`\n SELECT\n chunk.provider,\n chunk.model,\n chunk.model_version,\n chunk.input_kind,\n chunk.projection_policy_version,\n chunk.dimensions,\n COUNT(DISTINCT chunk.source_id) AS source_count,\n COUNT(*) AS chunk_count,\n MIN(chunk.magnitude) AS min_magnitude,\n MAX(chunk.magnitude) AS max_magnitude,\n AVG(chunk.magnitude) AS average_magnitude\n FROM rdf_vector_chunks chunk\n GROUP BY chunk.provider, chunk.model, chunk.model_version, chunk.input_kind, chunk.projection_policy_version, chunk.dimensions\n ORDER BY chunk_count DESC, source_count DESC, chunk.provider ASC, chunk.model ASC, chunk.model_version ASC, chunk.input_kind ASC, chunk.projection_policy_version ASC, chunk.dimensions ASC\n `);\n\n return rows.map((row) => ({\n provider: row.provider || undefined,\n model: row.model,\n modelVersion: row.model_version || undefined,\n inputKind: row.input_kind || undefined,\n projectionPolicyVersion: row.projection_policy_version || undefined,\n dimensions: Number(row.dimensions),\n sourceCount: Number(row.source_count),\n chunkCount: Number(row.chunk_count),\n minMagnitude: Number(row.min_magnitude ?? 0),\n maxMagnitude: Number(row.max_magnitude ?? 0),\n averageMagnitude: Number(row.average_magnitude ?? 0),\n }));\n }\n\n private async openInternal(): Promise<void> {\n if (this.options.driver === 'pglite') {\n this.pglite = new PGlite(this.options.dataDir);\n this.executor = new PgliteRdfSqlExecutor(this.pglite);\n } else if (this.options.pool) {\n this.pgPool = this.options.pool;\n this.executor = new PgPoolRdfSqlExecutor(this.pgPool);\n } else {\n this.sharedPoolConfig = {\n connectionString: this.options.connectionString,\n host: this.options.host,\n port: this.options.port,\n database: this.options.database,\n user: this.options.user,\n password: this.options.password,\n };\n this.pgPool = getSharedPool(this.sharedPoolConfig);\n this.executor = new PgPoolRdfSqlExecutor(this.pgPool);\n }\n await this.initializeSchema();\n }\n\n private async initializeSchema(): Promise<void> {\n if (this.usesPgVectorBackend()) {\n await this.requireExecutor().exec('CREATE EXTENSION IF NOT EXISTS vector');\n }\n await this.requireExecutor().exec(`\n CREATE TABLE IF NOT EXISTS rdf_vector_sources (\n id BIGSERIAL PRIMARY KEY,\n source_key TEXT,\n source TEXT NOT NULL UNIQUE,\n workspace TEXT NOT NULL,\n local_path TEXT,\n content_type TEXT,\n source_version TEXT,\n source_hash TEXT,\n updated_at TIMESTAMPTZ NOT NULL DEFAULT now()\n );\n\n CREATE TABLE IF NOT EXISTS rdf_vector_chunks (\n id BIGSERIAL PRIMARY KEY,\n source_id BIGINT NOT NULL REFERENCES rdf_vector_sources(id) ON DELETE CASCADE,\n chunk_key TEXT NOT NULL,\n ordinal INTEGER NOT NULL,\n level INTEGER NOT NULL,\n heading TEXT,\n path TEXT,\n content TEXT NOT NULL,\n start_offset INTEGER NOT NULL,\n end_offset INTEGER NOT NULL,\n embedding_json TEXT NOT NULL,\n summary_metadata TEXT,\n dimensions INTEGER NOT NULL,\n magnitude DOUBLE PRECISION NOT NULL,\n provider TEXT NOT NULL DEFAULT '',\n model TEXT NOT NULL,\n model_version TEXT NOT NULL DEFAULT '',\n input_kind TEXT NOT NULL DEFAULT '',\n input_hash TEXT NOT NULL DEFAULT '',\n projection_policy_version TEXT NOT NULL DEFAULT '',\n updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n UNIQUE (\n source_id,\n chunk_key,\n provider,\n model,\n model_version,\n input_kind,\n projection_policy_version,\n input_hash\n )\n );\n\n CREATE TABLE IF NOT EXISTS rdf_vector_components (\n chunk_id BIGINT NOT NULL REFERENCES rdf_vector_chunks(id) ON DELETE CASCADE,\n dimension INTEGER NOT NULL,\n value DOUBLE PRECISION NOT NULL,\n updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n PRIMARY KEY (chunk_id, dimension)\n );\n\n CREATE INDEX IF NOT EXISTS rdf_vector_sources_workspace ON rdf_vector_sources(workspace);\n CREATE INDEX IF NOT EXISTS rdf_vector_sources_source ON rdf_vector_sources(source);\n CREATE INDEX IF NOT EXISTS rdf_vector_chunks_source ON rdf_vector_chunks(source_id, ordinal);\n CREATE INDEX IF NOT EXISTS rdf_vector_components_dimension ON rdf_vector_components(dimension, chunk_id);\n `);\n await this.ensureSourceKeyColumn();\n await this.ensureVectorIdentityColumns();\n if (this.usesPgVectorBackend()) {\n await this.ensurePgVectorColumn();\n } else {\n await this.backfillVectorComponents();\n }\n }\n\n private async ensurePgVectorColumn(): Promise<void> {\n await this.requireExecutor().exec('ALTER TABLE rdf_vector_chunks ADD COLUMN IF NOT EXISTS embedding_vector vector');\n await this.requireExecutor().exec(`\n UPDATE rdf_vector_chunks\n SET embedding_vector = embedding_json::vector\n WHERE embedding_vector IS NULL\n AND embedding_json IS NOT NULL\n `);\n }\n\n private async ensurePgVectorSearchIndex(dimensions: number, metric: RdfVectorDistanceMetric): Promise<void> {\n if (!this.usesPgVectorBackend()) {\n return;\n }\n const safeDimensions = pgVectorDimensions(dimensions);\n const key = `${metric}:${safeDimensions}`;\n if (this.ensuredPgVectorIndexes.has(key)) {\n return;\n }\n const indexName = quotePgIdentifier(`rdf_vector_chunks_embedding_${metric}_${safeDimensions}_hnsw`);\n await this.requireExecutor().exec(`\n CREATE INDEX IF NOT EXISTS ${indexName}\n ON rdf_vector_chunks\n USING hnsw ((embedding_vector::vector(${safeDimensions})) ${pgVectorOperatorClass(metric)})\n WHERE dimensions = ${safeDimensions}\n AND embedding_vector IS NOT NULL\n `);\n this.ensuredPgVectorIndexes.add(key);\n }\n\n private async ensureSourceKeyColumn(): Promise<void> {\n await this.requireExecutor().exec('ALTER TABLE rdf_vector_sources ADD COLUMN IF NOT EXISTS source_key TEXT');\n await this.requireExecutor().exec('UPDATE rdf_vector_sources SET source_key = source WHERE source_key IS NULL OR source_key = \\'\\'');\n }\n\n private async ensureVectorIdentityColumns(): Promise<void> {\n await this.requireExecutor().exec(`\n ALTER TABLE rdf_vector_chunks ADD COLUMN IF NOT EXISTS provider TEXT NOT NULL DEFAULT '';\n ALTER TABLE rdf_vector_chunks ADD COLUMN IF NOT EXISTS model_version TEXT NOT NULL DEFAULT '';\n ALTER TABLE rdf_vector_chunks ADD COLUMN IF NOT EXISTS input_kind TEXT NOT NULL DEFAULT '';\n ALTER TABLE rdf_vector_chunks ADD COLUMN IF NOT EXISTS input_hash TEXT NOT NULL DEFAULT '';\n ALTER TABLE rdf_vector_chunks ADD COLUMN IF NOT EXISTS projection_policy_version TEXT NOT NULL DEFAULT '';\n ALTER TABLE rdf_vector_chunks ADD COLUMN IF NOT EXISTS summary_metadata TEXT;\n UPDATE rdf_vector_chunks\n SET\n provider = COALESCE(provider, ''),\n model_version = COALESCE(model_version, ''),\n input_kind = COALESCE(input_kind, ''),\n input_hash = COALESCE(input_hash, ''),\n projection_policy_version = COALESCE(projection_policy_version, '');\n `);\n await this.ensureVectorChunkIdentityUniqueConstraint();\n await this.requireExecutor().exec(`\n CREATE INDEX IF NOT EXISTS rdf_vector_chunks_model_dimensions\n ON rdf_vector_chunks(provider, model, model_version, input_kind, projection_policy_version, dimensions);\n `);\n }\n\n private async ensureVectorChunkIdentityUniqueConstraint(): Promise<void> {\n const rows = await this.requireExecutor().query<{ conname: string; columns: string }>(`\n SELECT\n constraint_info.conname,\n string_agg(attribute.attname, ',' ORDER BY constraint_key.ordinality) AS columns\n FROM pg_constraint constraint_info\n JOIN unnest(constraint_info.conkey) WITH ORDINALITY AS constraint_key(attnum, ordinality) ON TRUE\n JOIN pg_attribute attribute\n ON attribute.attrelid = constraint_info.conrelid\n AND attribute.attnum = constraint_key.attnum\n WHERE constraint_info.conrelid = 'rdf_vector_chunks'::regclass\n AND constraint_info.contype = 'u'\n GROUP BY constraint_info.conname\n `);\n let hasIdentityUnique = false;\n for (const row of rows) {\n if (row.columns === 'source_id,chunk_key') {\n await this.requireExecutor().exec(`ALTER TABLE rdf_vector_chunks DROP CONSTRAINT ${quotePgIdentifier(row.conname)}`);\n } else if (row.columns === 'source_id,chunk_key,provider,model,model_version,input_kind,projection_policy_version,input_hash') {\n hasIdentityUnique = true;\n }\n }\n if (hasIdentityUnique) {\n return;\n }\n await this.requireExecutor().exec(`\n CREATE UNIQUE INDEX IF NOT EXISTS rdf_vector_chunks_identity_unique\n ON rdf_vector_chunks (\n source_id,\n chunk_key,\n provider,\n model,\n model_version,\n input_kind,\n projection_policy_version,\n input_hash\n )\n `);\n }\n\n private async backfillVectorComponents(): Promise<void> {\n const rows = await this.requireExecutor().query<{\n id: number | string;\n dimensions: number | string;\n embedding_json: string;\n component_count: number | string;\n }>(`\n SELECT\n chunk.id,\n chunk.dimensions,\n chunk.embedding_json,\n COUNT(component.dimension) AS component_count\n FROM rdf_vector_chunks chunk\n LEFT JOIN rdf_vector_components component ON component.chunk_id = chunk.id\n WHERE chunk.dimensions > 0\n GROUP BY chunk.id\n HAVING COUNT(component.dimension) <> chunk.dimensions\n `);\n if (rows.length === 0) {\n return;\n }\n\n await this.requireExecutor().transaction(async (tx) => {\n for (const row of rows) {\n const chunkId = Number(row.id);\n await tx.exec('DELETE FROM rdf_vector_components WHERE chunk_id = $1', [chunkId]);\n await insertVectorComponents(tx, chunkId, parseEmbedding(row.embedding_json));\n }\n });\n }\n\n private async upsertSource(tx: PostgresRdfSqlExecutor, source: RdfVectorSourceInput): Promise<number> {\n const rows = await tx.query<RdfVectorSourceRow>(`\n INSERT INTO rdf_vector_sources (\n source_key,\n source,\n workspace,\n local_path,\n content_type,\n source_version,\n source_hash,\n updated_at\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7, now())\n ON CONFLICT (source)\n DO UPDATE SET\n source_key = COALESCE(EXCLUDED.source_key, rdf_vector_sources.source_key, EXCLUDED.source),\n workspace = EXCLUDED.workspace,\n local_path = EXCLUDED.local_path,\n content_type = EXCLUDED.content_type,\n source_version = EXCLUDED.source_version,\n source_hash = EXCLUDED.source_hash,\n updated_at = EXCLUDED.updated_at\n RETURNING id\n `, [\n source.sourceKey ?? source.source,\n source.source,\n source.workspace,\n source.localPath ?? null,\n source.contentType ?? null,\n source.sourceVersion ?? null,\n source.sourceHash ?? null,\n ]);\n const id = Number(rows[0]?.id);\n if (!Number.isFinite(id)) {\n throw new Error(`Failed to upsert RDF vector source: ${source.source}`);\n }\n return id;\n }\n\n private async estimateDatabaseBytes(): Promise<number> {\n try {\n const rows = await this.requireExecutor().query<{ bytes: number | string }>(`\n SELECT COALESCE(SUM(pg_total_relation_size(('\"' || schemaname || '\".\"' || tablename || '\"')::regclass)), 0)::bigint AS bytes\n FROM pg_tables\n WHERE tablename IN ('rdf_vector_sources', 'rdf_vector_chunks', 'rdf_vector_components')\n `);\n return Number(rows[0]?.bytes ?? 0);\n } catch {\n return 0;\n }\n }\n\n private requireExecutor(): PostgresRdfSqlExecutor {\n if (!this.executor) {\n throw new Error('PostgresRdfVectorIndex is not open');\n }\n return this.executor;\n }\n\n private usesPgVectorBackend(): boolean {\n return this.options.driver === 'pg' && this.options.backend !== 'component';\n }\n}\n\ninterface NormalizedVectorIdentity {\n provider: string;\n model: string;\n modelVersion: string;\n inputKind: string;\n projectionPolicyVersion: string;\n}\n\nfunction normalizeVectorIdentity(chunk: RdfVectorChunkInput): NormalizedVectorIdentity {\n return {\n provider: chunk.provider ?? '',\n model: chunk.model ?? '',\n modelVersion: chunk.modelVersion ?? '',\n inputKind: chunk.inputKind ?? '',\n projectionPolicyVersion: chunk.projectionPolicyVersion ?? '',\n };\n}\n\nfunction vectorIdentityKey(identity: NormalizedVectorIdentity): string {\n return [\n identity.provider,\n identity.model,\n identity.modelVersion,\n identity.inputKind,\n identity.projectionPolicyVersion,\n ].join('\\u0000');\n}\n\nfunction appendPgVectorIdentityFilters(\n options: RdfVectorSearchOptions | RdfVectorSummaryLifecycleOptions,\n conditions: string[],\n params: unknown[],\n): void {\n if (options.provider !== undefined) {\n conditions.push(`chunk.provider = ${addParam(params, options.provider)}`);\n }\n if (options.model !== undefined) {\n conditions.push(`chunk.model = ${addParam(params, options.model)}`);\n }\n if (options.modelVersion !== undefined) {\n conditions.push(`chunk.model_version = ${addParam(params, options.modelVersion)}`);\n }\n if (options.inputKind !== undefined) {\n conditions.push(`chunk.input_kind = ${addParam(params, options.inputKind)}`);\n }\n if (options.inputHash !== undefined) {\n conditions.push(`chunk.input_hash = ${addParam(params, options.inputHash)}`);\n }\n if (options.projectionPolicyVersion !== undefined) {\n conditions.push(`chunk.projection_policy_version = ${addParam(params, options.projectionPolicyVersion)}`);\n }\n}\n\nfunction buildPgVectorNativeScoredRowsQuery(\n embedding: number[],\n metric: RdfVectorDistanceMetric,\n options: RdfVectorSearchOptions,\n): { sql: string; params: unknown[] } {\n if (canUsePgVectorAnnTopK(options)) {\n return buildPgVectorNativeAnnScoredRowsQuery(embedding, metric, options);\n }\n const base = buildPgVectorNativeBaseQuery(embedding, metric, options);\n const orderBy = buildPgVectorNativeOrderClause(options.orderBy, base.distanceExpression);\n const window = buildPgVectorWindowClause(base.params, options.limit, options.offset);\n return {\n sql: `\n SELECT\n ${base.selectSql}\n ${base.fromSql}\n ORDER BY ${orderBy}\n ${window}\n `,\n params: base.params,\n };\n}\n\nfunction buildPgVectorNativeAnnScoredRowsQuery(\n embedding: number[],\n metric: RdfVectorDistanceMetric,\n options: RdfVectorSearchOptions,\n): { sql: string; params: unknown[] } {\n const base = buildPgVectorNativeBaseQuery(embedding, metric, options);\n const limit = options.limit ?? 0;\n const innerLimit = addParam(base.params, Math.max(0, limit), 'integer');\n const orderBy = buildPgVectorNativeOrderClause(options.orderBy, 'candidate_chunks.native_distance');\n return {\n sql: `\n WITH candidate_chunks AS (\n SELECT\n chunk.id,\n ${base.distanceExpression} AS native_distance\n ${base.fromSql}\n ORDER BY ${base.distanceExpression} ASC, source.id ASC, chunk.ordinal ASC\n LIMIT ${innerLimit}\n )\n SELECT\n ${base.selectSql}\n ${base.outerFromSql}\n ORDER BY ${orderBy}\n `,\n params: base.params,\n };\n}\n\nfunction buildPgVectorNativeScoredCountQuery(\n embedding: number[],\n metric: RdfVectorDistanceMetric,\n options: RdfVectorSearchOptions,\n): { sql: string; params: unknown[] } {\n const base = buildPgVectorNativeBaseQuery(embedding, metric, options);\n return {\n sql: `\n SELECT COUNT(*) AS count\n ${base.fromSql}\n `,\n params: base.params,\n };\n}\n\nfunction buildPgVectorNativeBaseQuery(\n embedding: number[],\n metric: RdfVectorDistanceMetric,\n options: RdfVectorSearchOptions,\n): {\n selectSql: string;\n fromSql: string;\n outerFromSql: string;\n params: unknown[];\n distanceExpression: string;\n} {\n const params: unknown[] = [];\n const dimensions = pgVectorDimensions(embedding.length);\n const vectorExpression = `(chunk.embedding_vector::vector(${dimensions}))`;\n const queryVector = addParam(params, formatPgVectorLiteral(embedding), `vector(${dimensions})`);\n const distanceExpression = pgVectorNativeDistanceExpression(metric, vectorExpression, queryVector);\n const dotProductExpression = `-(${vectorExpression} <#> ${queryVector})`;\n const nativeDistanceExpression = canUsePgVectorAnnTopK(options)\n ? 'candidate_chunks.native_distance'\n : distanceExpression;\n const vectorScoreExpression = pgVectorNativeScoreExpression(metric, nativeDistanceExpression);\n const vectorDistanceExpression = metric === 'euclidean' ? 'NULL' : nativeDistanceExpression;\n const vectorDistanceSquaredExpression = metric === 'euclidean'\n ? `(${nativeDistanceExpression} * ${nativeDistanceExpression})`\n : `(chunk.magnitude * chunk.magnitude + ${vectorMagnitude(embedding) * vectorMagnitude(embedding)} - 2 * ${dotProductExpression})`;\n const conditions = [\n `chunk.dimensions = ${addParam(params, embedding.length, 'integer')}`,\n 'chunk.embedding_vector IS NOT NULL',\n ];\n\n if (metric === 'cosine') {\n conditions.push('chunk.magnitude > 0');\n }\n if (options.workspace) {\n conditions.push(`source.workspace = ${addParam(params, options.workspace)}`);\n }\n appendPgRdfSearchSourceFilters(options, conditions, params);\n appendPgVectorIdentityFilters(options, conditions, params);\n if (options.threshold !== undefined) {\n conditions.push(pgVectorNativeThresholdExpression(metric, distanceExpression, options.threshold));\n }\n\n return {\n selectSql: `\n chunk.id,\n chunk.source_id,\n source.source_key,\n source.source,\n source.workspace,\n source.local_path,\n source.content_type,\n source.source_version,\n source.source_hash,\n chunk.chunk_key,\n chunk.ordinal,\n chunk.level,\n chunk.heading,\n chunk.path,\n chunk.content,\n chunk.start_offset,\n chunk.end_offset,\n chunk.embedding_json,\n chunk.summary_metadata,\n chunk.dimensions,\n chunk.magnitude,\n chunk.provider,\n chunk.model,\n chunk.model_version,\n chunk.input_kind,\n chunk.input_hash,\n chunk.projection_policy_version,\n chunk.updated_at,\n ${dotProductExpression} AS dot_product,\n ${vectorScoreExpression} AS vector_score,\n ${vectorDistanceExpression} AS vector_distance,\n ${vectorDistanceSquaredExpression} AS vector_distance_squared,\n ${nativeDistanceExpression} AS native_distance\n `,\n fromSql: `\n FROM rdf_vector_chunks chunk\n JOIN rdf_vector_sources source ON source.id = chunk.source_id\n WHERE ${conditions.join(' AND ')}\n `,\n outerFromSql: `\n FROM candidate_chunks\n JOIN rdf_vector_chunks chunk ON chunk.id = candidate_chunks.id\n JOIN rdf_vector_sources source ON source.id = chunk.source_id\n `,\n params,\n distanceExpression,\n };\n}\n\nfunction canUsePgVectorAnnTopK(options: RdfVectorSearchOptions): boolean {\n if (options.limit === undefined || options.offset !== undefined) {\n return false;\n }\n const order = options.orderBy?.length ? options.orderBy : [{ field: 'score' as const, direction: 'desc' as const }];\n const first = order[0];\n if (!first) {\n return false;\n }\n if (first.field === 'score') {\n return first.direction === 'desc';\n }\n if (first.field === 'distance') {\n return first.direction !== 'desc';\n }\n return false;\n}\n\nfunction buildPgVectorScoredRowsQuery(\n embedding: number[],\n metric: RdfVectorDistanceMetric,\n options: RdfVectorSearchOptions,\n): { sql: string; params: unknown[] } {\n const scored = buildPgVectorScoredBaseQuery(embedding, metric, options);\n const orderBy = buildVectorOrderClause(metric, options.orderBy);\n const window = buildPgVectorWindowClause(scored.params, options.limit, options.offset);\n return {\n sql: `\n ${scored.withSql}\n SELECT\n scored.*,\n scored.dot_product AS dot_product,\n ${vectorScoreSql(metric, scored.queryMagnitude)} AS vector_score,\n ${vectorDistanceSql(metric, scored.queryMagnitude)} AS vector_distance,\n ${vectorSquaredDistanceSql(scored.queryMagnitude)} AS vector_distance_squared\n FROM scored\n ${scored.thresholdWhere}\n ORDER BY ${orderBy}\n ${window}\n `,\n params: scored.params,\n };\n}\n\nfunction buildPgVectorScoredCountQuery(\n embedding: number[],\n metric: RdfVectorDistanceMetric,\n options: RdfVectorSearchOptions,\n): { sql: string; params: unknown[] } {\n const scored = buildPgVectorScoredBaseQuery(embedding, metric, options);\n return {\n sql: `\n ${scored.withSql}\n SELECT COUNT(*) AS count\n FROM scored\n ${scored.thresholdWhere}\n `,\n params: scored.params,\n };\n}\n\nfunction buildPgVectorScoredBaseQuery(\n embedding: number[],\n metric: RdfVectorDistanceMetric,\n options: RdfVectorSearchOptions,\n): {\n withSql: string;\n params: unknown[];\n thresholdWhere: string;\n queryMagnitude: number;\n} {\n const queryMagnitude = vectorMagnitude(embedding);\n const params: unknown[] = [];\n const vectorValues = embedding\n .map((value, dimension) => `(${addParam(params, dimension, 'integer')}, ${addParam(params, value, 'double precision')})`)\n .join(', ');\n const conditions = [`chunk.dimensions = ${addParam(params, embedding.length, 'integer')}`];\n\n if (metric === 'cosine') {\n conditions.push('chunk.magnitude > 0');\n }\n if (options.workspace) {\n conditions.push(`source.workspace = ${addParam(params, options.workspace)}`);\n }\n appendPgRdfSearchSourceFilters(options, conditions, params);\n appendPgVectorIdentityFilters(options, conditions, params);\n\n const thresholdWhere = options.threshold === undefined\n ? ''\n : `WHERE ${vectorThresholdSql(metric, queryMagnitude, options.threshold)}`;\n\n return {\n withSql: `\n WITH query_vector(dimension, value) AS (\n VALUES ${vectorValues}\n ),\n scored AS (\n SELECT\n chunk.id,\n chunk.source_id,\n source.source_key,\n source.source,\n source.workspace,\n source.local_path,\n source.content_type,\n source.source_version,\n source.source_hash,\n chunk.chunk_key,\n chunk.ordinal,\n chunk.level,\n chunk.heading,\n chunk.path,\n chunk.content,\n chunk.start_offset,\n chunk.end_offset,\n chunk.embedding_json,\n chunk.summary_metadata,\n chunk.dimensions,\n chunk.magnitude,\n chunk.provider,\n chunk.model,\n chunk.model_version,\n chunk.input_kind,\n chunk.input_hash,\n chunk.projection_policy_version,\n chunk.updated_at,\n SUM(component.value * query_vector.value) AS dot_product\n FROM rdf_vector_chunks chunk\n JOIN rdf_vector_sources source ON source.id = chunk.source_id\n JOIN rdf_vector_components component ON component.chunk_id = chunk.id\n JOIN query_vector ON query_vector.dimension = component.dimension\n WHERE ${conditions.join(' AND ')}\n GROUP BY\n chunk.id,\n source.source_key,\n source.source,\n source.workspace,\n source.local_path,\n source.content_type,\n source.source_version,\n source.source_hash\n HAVING COUNT(component.dimension) = ${embedding.length}\n )\n `,\n params,\n thresholdWhere,\n queryMagnitude,\n };\n}\n\nfunction buildPgVectorWindowClause(params: unknown[], limit: number | undefined, offset: number | undefined): string {\n const hasLimit = limit !== undefined;\n const hasOffset = offset !== undefined;\n if (!hasLimit && !hasOffset) {\n return '';\n }\n if (hasLimit) {\n const limitParam = addParam(params, Math.max(0, limit), 'integer');\n if (hasOffset) {\n return `LIMIT ${limitParam} OFFSET ${addParam(params, Math.max(0, offset), 'integer')}`;\n }\n return `LIMIT ${limitParam}`;\n }\n return `OFFSET ${addParam(params, Math.max(0, offset ?? 0), 'integer')}`;\n}\n\nfunction pgVectorNativeDistanceExpression(metric: RdfVectorDistanceMetric, vectorExpression: string, queryVector: string): string {\n switch (metric) {\n case 'cosine':\n return `${vectorExpression} <=> ${queryVector}`;\n case 'euclidean':\n return `${vectorExpression} <-> ${queryVector}`;\n case 'dot':\n return `${vectorExpression} <#> ${queryVector}`;\n default: {\n const exhaustive: never = metric;\n throw new Error(`Unsupported RDF vector distance metric: ${exhaustive}`);\n }\n }\n}\n\nfunction pgVectorNativeScoreExpression(metric: RdfVectorDistanceMetric, distanceExpression: string): string {\n switch (metric) {\n case 'cosine':\n return `1 - (${distanceExpression})`;\n case 'euclidean':\n return `-(${distanceExpression} * ${distanceExpression})`;\n case 'dot':\n return `-(${distanceExpression})`;\n default: {\n const exhaustive: never = metric;\n throw new Error(`Unsupported RDF vector distance metric: ${exhaustive}`);\n }\n }\n}\n\nfunction pgVectorNativeThresholdExpression(\n metric: RdfVectorDistanceMetric,\n distanceExpression: string,\n threshold: number,\n): string {\n if (!Number.isFinite(threshold)) {\n return threshold === Number.NEGATIVE_INFINITY ? '1 = 1' : '1 = 0';\n }\n switch (metric) {\n case 'cosine':\n return `${distanceExpression} <= ${1 - threshold}`;\n case 'dot':\n return `${distanceExpression} <= ${-threshold}`;\n case 'euclidean':\n return threshold <= 0 ? `${distanceExpression} <= ${Math.abs(threshold)}` : '1 = 0';\n default: {\n const exhaustive: never = metric;\n throw new Error(`Unsupported RDF vector distance metric: ${exhaustive}`);\n }\n }\n}\n\nfunction buildPgVectorNativeOrderClause(orderBy: RdfVectorSearchOptions['orderBy'], distanceExpression: string): string {\n const order = orderBy?.length ? orderBy : [{ field: 'score' as const, direction: 'desc' as const }];\n const entries = order.map((entry) => {\n if (entry.field === 'score') {\n const direction = entry.direction === 'desc' ? 'ASC' : 'DESC';\n return `${distanceExpression} ${direction}`;\n }\n if (entry.field === 'distance') {\n return `${distanceExpression} ${entry.direction === 'desc' ? 'DESC' : 'ASC'}`;\n }\n return `${pgVectorNativeOrderExpression(entry.field)} ${entry.direction === 'desc' ? 'DESC' : 'ASC'}`;\n });\n return [...entries, 'source.id ASC', 'chunk.ordinal ASC'].join(', ');\n}\n\nfunction pgVectorNativeOrderExpression(\n field: NonNullable<RdfVectorSearchOptions['orderBy']>[number]['field'],\n): string {\n switch (field) {\n case 'score':\n return 'vector_score';\n case 'distance':\n return 'native_distance';\n case 'source':\n return 'source.source';\n case 'localPath':\n return \"COALESCE(source.local_path, '')\";\n case 'ordinal':\n return 'chunk.ordinal';\n case 'startOffset':\n return 'chunk.start_offset';\n case 'endOffset':\n return 'chunk.end_offset';\n default: {\n const exhaustive: never = field;\n throw new Error(`Unsupported RDF vector search order field: ${exhaustive}`);\n }\n }\n}\n\nasync function insertVectorComponents(\n executor: PostgresRdfSqlExecutor,\n chunkId: number,\n embedding: number[],\n): Promise<void> {\n for (let dimension = 0; dimension < embedding.length; dimension++) {\n await executor.exec(`\n INSERT INTO rdf_vector_components (\n chunk_id,\n dimension,\n value,\n updated_at\n )\n VALUES ($1, $2, $3, now())\n `, [chunkId, dimension, embedding[dimension]]);\n }\n}\n\nfunction addParam(params: unknown[], value: unknown, cast?: string): string {\n params.push(value);\n return `$${params.length}${cast ? `::${cast}` : ''}`;\n}\n\nfunction formatPgVectorLiteral(embedding: number[]): string {\n return `[${embedding.map((value) => {\n if (!Number.isFinite(value)) {\n throw new Error(`Invalid RDF vector value: ${value}`);\n }\n return String(value);\n }).join(',')}]`;\n}\n\nfunction pgVectorDimensions(dimensions: number): number {\n if (!Number.isSafeInteger(dimensions) || dimensions <= 0) {\n throw new Error(`Invalid RDF vector dimensions: ${dimensions}`);\n }\n return dimensions;\n}\n\nfunction pgVectorOperatorClass(metric: RdfVectorDistanceMetric): string {\n switch (metric) {\n case 'cosine':\n return 'vector_cosine_ops';\n case 'euclidean':\n return 'vector_l2_ops';\n case 'dot':\n return 'vector_ip_ops';\n default: {\n const exhaustive: never = metric;\n throw new Error(`Unsupported RDF vector distance metric: ${exhaustive}`);\n }\n }\n}\n\nfunction quotePgIdentifier(value: string): string {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n}\n\nfunction toSearchResult(\n row: RdfVectorScoredChunkRow,\n embedding: number[],\n metric: RdfVectorDistanceMetric,\n queryMagnitude: number,\n score: number,\n distance: number,\n backend?: 'component' | 'pg-vector',\n): RdfVectorSearchResult {\n return {\n source: row.source,\n workspace: row.workspace,\n localPath: row.local_path ?? undefined,\n contentType: row.content_type ?? undefined,\n sourceVersion: row.source_version ?? undefined,\n sourceHash: row.source_hash ?? undefined,\n sourceKey: row.source_key || row.source,\n chunkKey: row.chunk_key,\n retrievalPointKey: row.chunk_key,\n ordinal: row.ordinal,\n level: row.level,\n heading: row.heading ?? undefined,\n path: parsePath(row.path),\n content: row.content,\n startOffset: row.start_offset,\n endOffset: row.end_offset,\n embedding,\n provider: row.provider || undefined,\n model: row.model || undefined,\n modelVersion: row.model_version || undefined,\n inputKind: row.input_kind || undefined,\n inputHash: row.input_hash || undefined,\n projectionPolicyVersion: row.projection_policy_version || undefined,\n summaryMetadata: parseSummaryMetadata(row.summary_metadata),\n scoreComponents: vectorScoreComponents(row, metric, queryMagnitude, score, distance, backend),\n score,\n distance,\n };\n}\n\nfunction toSummaryLifecycleEntry(row: RdfVectorChunkRow): RdfVectorSummaryLifecycleEntry | undefined {\n const summaryMetadata = parseSummaryMetadata(row.summary_metadata);\n if (!summaryMetadata) {\n return undefined;\n }\n\n return {\n source: row.source,\n workspace: row.workspace,\n localPath: row.local_path ?? undefined,\n contentType: row.content_type ?? undefined,\n sourceVersion: row.source_version ?? undefined,\n sourceHash: row.source_hash ?? undefined,\n sourceKey: row.source_key || row.source,\n chunkKey: row.chunk_key,\n retrievalPointKey: row.chunk_key,\n ordinal: row.ordinal,\n level: row.level,\n heading: row.heading ?? undefined,\n path: parsePath(row.path),\n content: row.content,\n startOffset: row.start_offset,\n endOffset: row.end_offset,\n provider: row.provider || undefined,\n model: row.model || undefined,\n modelVersion: row.model_version || undefined,\n inputKind: row.input_kind || undefined,\n inputHash: row.input_hash || undefined,\n projectionPolicyVersion: row.projection_policy_version || undefined,\n summaryMetadata,\n updatedAt: formatPgTimestamp(row.updated_at),\n };\n}\n\nfunction normalizeVectorChunkRow(row: RdfVectorChunkRow): RdfVectorChunkRow {\n return {\n ...row,\n id: Number(row.id),\n source_id: Number(row.source_id),\n ordinal: Number(row.ordinal),\n level: Number(row.level),\n start_offset: Number(row.start_offset),\n end_offset: Number(row.end_offset),\n dimensions: Number(row.dimensions),\n magnitude: Number(row.magnitude),\n };\n}\n\nfunction normalizeVectorScoredChunkRow(row: RdfVectorScoredChunkRow): RdfVectorScoredChunkRow {\n return {\n ...normalizeVectorChunkRow(row),\n dot_product: Number(row.dot_product),\n vector_score: Number(row.vector_score),\n vector_distance: row.vector_distance === null ? null : Number(row.vector_distance),\n vector_distance_squared: row.vector_distance_squared === null ? null : Number(row.vector_distance_squared),\n };\n}\n\nfunction formatPgTimestamp(value: unknown): string {\n if (value instanceof Date) {\n return value.toISOString();\n }\n return String(value);\n}\n"]}
@@ -14,6 +14,10 @@
14
14
  "@id": "undefineds:dist/storage/rdf/PostgresRdfVectorIndex.jsonld#PostgresRdfVectorIndexOptions__member_driver",
15
15
  "memberFieldName": "driver"
16
16
  },
17
+ {
18
+ "@id": "undefineds:dist/storage/rdf/PostgresRdfVectorIndex.jsonld#PostgresRdfVectorIndexOptions__member_backend",
19
+ "memberFieldName": "backend"
20
+ },
17
21
  {
18
22
  "@id": "undefineds:dist/storage/rdf/PostgresRdfVectorIndex.jsonld#PostgresRdfVectorIndexOptions__member_dataDir",
19
23
  "memberFieldName": "dataDir"
@@ -84,6 +88,25 @@
84
88
  ]
85
89
  }
86
90
  },
91
+ {
92
+ "@id": "undefineds:dist/storage/rdf/PostgresRdfVectorIndex.jsonld#PostgresRdfVectorIndex_options_backend",
93
+ "range": {
94
+ "@type": "ParameterRangeUnion",
95
+ "parameterRangeElements": [
96
+ {
97
+ "@type": "ParameterRangeLiteral",
98
+ "parameterRangeValueLiteral": "pgvector"
99
+ },
100
+ {
101
+ "@type": "ParameterRangeLiteral",
102
+ "parameterRangeValueLiteral": "component"
103
+ },
104
+ {
105
+ "@type": "ParameterRangeUndefined"
106
+ }
107
+ ]
108
+ }
109
+ },
87
110
  {
88
111
  "@id": "undefineds:dist/storage/rdf/PostgresRdfVectorIndex.jsonld#PostgresRdfVectorIndex_options_dataDir",
89
112
  "range": {
@@ -355,6 +378,12 @@
355
378
  "@id": "undefineds:dist/storage/rdf/PostgresRdfVectorIndex.jsonld#PostgresRdfVectorIndex_options_driver"
356
379
  }
357
380
  },
381
+ {
382
+ "keyRaw": "backend",
383
+ "value": {
384
+ "@id": "undefineds:dist/storage/rdf/PostgresRdfVectorIndex.jsonld#PostgresRdfVectorIndex_options_backend"
385
+ }
386
+ },
358
387
  {
359
388
  "keyRaw": "dataDir",
360
389
  "value": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@undefineds.co/xpod",
3
- "version": "0.3.68",
3
+ "version": "0.3.70",
4
4
  "description": "Xpod is an extended Community Solid Server, offering rich-feature, production-level Solid Pod and identity management.",
5
5
  "repository": "https://github.com/undefinedsco/xpod",
6
6
  "author": "developer@undefineds.co",