{"version":3,"file":"pgvector.cjs","names":["#opts","#_pool","#_externalPool","#_txClient"],"sources":["../../../src/batteries/vector/pgvector/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/pgvector\n */\n\nimport { normalizeScore } from '../helpers'\nimport { validateRecords } from '../validation'\nimport { BaseVectorStore, CallableVectorStore } from '../contract'\nimport { isFilterCondition, isRawFilter, isFilterGroup } from '../filters'\nimport {\n  E_VECTOR_STORE_DRIVER_UNAVAILABLE,\n  E_VECTOR_STORE_CONNECTION_FAILED,\n  E_VECTOR_STORE_COLLECTION_FAILED,\n  E_VECTOR_STORE_UPSERT_FAILED,\n  E_VECTOR_STORE_SEARCH_FAILED,\n  E_VECTOR_STORE_DELETE_FAILED,\n  E_VECTOR_STORE_DIMENSION_MISMATCH,\n  E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR,\n  E_VECTOR_STORE_UNSUPPORTED_OPERATION,\n} from '../exceptions'\nimport type { VectorFilter } from '../filters'\nimport type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from '../plan'\nimport type { VectorMatch, VectorStoreCapabilities, BaseVectorStoreOptions } from '../types'\n\n/** Construction options for {@link PgVectorStore}. */\nexport interface PgVectorStoreOptions extends BaseVectorStoreOptions {\n  /** Connection details: a connection string, or a discrete host/port/credentials object. */\n  connection?:\n    | string\n    | {\n        connectionString?: string\n        host?: string\n        port?: number\n        user?: string\n        password?: string\n        database?: string\n      }\n  /** An existing `pg` Pool/Client to reuse instead of constructing one from `connection`. */\n  pool?: any\n}\n\ninterface PGClient {\n  query: (sql: string, params?: unknown[]) => Promise<{ rows: any[] }>\n  release?: () => void\n}\n\ntype PoolOrClient = any\n\nconst METRIC_TO_OPERATOR: Record<string, { op: string; opclass: string }> = {\n  cosine: { op: '<=>', opclass: 'vector_cosine_ops' },\n  dot: { op: '<#>', opclass: 'vector_ip_ops' },\n  euclidean: { op: '<->', opclass: 'vector_l2_ops' },\n}\n\n/** Translate a neutral {@link VectorFilter} into a parameterized SQL `WHERE` fragment plus its bind params. */\nexport const translatePgFilter = (filter: VectorFilter): { sql: string; params: unknown[] } => {\n  const params: unknown[] = []\n\n  const walk = (f: VectorFilter): string => {\n    if (isFilterCondition(f)) {\n      const { field, op, value } = f\n\n      if (op === 'exists') {\n        const val = value === undefined || value === true\n        return val ? `metadata ? '${field}'` : `NOT (metadata ? '${field}')`\n      }\n\n      if (op === 'contains') {\n        params.push(JSON.stringify(value))\n        return `metadata->>'${field}' @> $${params.length}::jsonb`\n      }\n\n      if (op === 'in' || op === 'nin') {\n        params.push(Array.isArray(value) ? value : [value])\n        const not = op === 'nin' ? 'NOT ' : ''\n        return `${not}(metadata->>'${field}' = ANY($${params.length}))`\n      }\n\n      if (op === 'eq') {\n        params.push(value)\n        return `metadata->>'${field}' = $${params.length}`\n      }\n\n      if (op === 'ne') {\n        params.push(value)\n        return `metadata->>'${field}' IS DISTINCT FROM $${params.length}`\n      }\n\n      if (['gt', 'gte', 'lt', 'lte'].includes(op)) {\n        params.push(Number(value))\n        const opMap: Record<string, string> = { gt: '>', gte: '>=', lt: '<', lte: '<=' }\n        return `(metadata->>'${field}')::numeric ${opMap[op]} $${params.length}`\n      }\n\n      throw new Error(`Unsupported filter operator: ${op}`)\n    }\n\n    if (isRawFilter(f)) {\n      const { $dialect, $raw, $bindings } = f\n\n      if (typeof $raw === 'string') {\n        if ($dialect !== 'sql' && $dialect !== 'pgvector') {\n          throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['pgvector', String($dialect)])\n        }\n      } else if ($raw !== undefined) {\n        throw new E_VECTOR_STORE_UNSUPPORTED_OPERATION(['raw-sql', 'pgvector'])\n      }\n\n      const rawStr = typeof $raw === 'string' ? $raw : String($raw)\n      const bindingCount = (rawStr.match(/\\?/g) || []).length\n\n      if ($bindings && $bindings.length !== bindingCount) {\n        throw new Error(\n          `Raw fragment placeholder count (${bindingCount}) does not match bindings length (${$bindings?.length || 0})`\n        )\n      }\n\n      if ($bindings && $bindings.length > 0) {\n        for (const $binding of $bindings) {\n          params.push($binding)\n        }\n        return rawStr.replace(/\\?/g, () => `$${params.length}`)\n      }\n\n      return rawStr\n    }\n\n    if (isFilterGroup(f)) {\n      const { and, or, not } = f\n\n      if (and !== undefined) {\n        const parts: string[] = []\n        for (const child of and) {\n          parts.push(walk(child))\n        }\n        return parts.length ? `(${parts.join(' AND ')})` : ''\n      }\n\n      if (or !== undefined) {\n        const parts: string[] = []\n        for (const child of or) {\n          parts.push(walk(child))\n        }\n        return parts.length ? `(${parts.join(' OR ')})` : ''\n      }\n\n      if (not !== undefined) {\n        return `NOT (${walk(not)})`\n      }\n\n      return ''\n    }\n\n    return ''\n  }\n\n  return { sql: walk(filter), params }\n}\n\nexport class PgVectorStore extends BaseVectorStore {\n  readonly capabilities: VectorStoreCapabilities = {\n    transactions: true,\n    namedVectors: false,\n    rename: true,\n    rawSql: true,\n    builtInEncoding: false,\n    // Strongly consistent: a write is visible on resolve, so the option is a no-op.\n    consistency: { configurable: false, default: 'strong', modes: ['strong'] },\n  }\n\n  #_pool: PoolOrClient | null = null\n  #_txClient: PGClient | null = null\n  #_externalPool = false\n\n  constructor(options: PgVectorStoreOptions) {\n    super(options)\n  }\n\n  get #opts(): PgVectorStoreOptions {\n    return this.options as PgVectorStoreOptions\n  }\n\n  /** Static availability probe: whether this adapter's runtime driver can load in the current environment. */\n  static isAvailable(): boolean {\n    return typeof process !== 'undefined'\n  }\n  isAvailable(): boolean {\n    return typeof process !== 'undefined'\n  }\n\n  async connect(): Promise<void> {\n    if (this.#_pool) {\n      return\n    }\n\n    let pg: any\n\n    try {\n      pg = await import('pg')\n    } catch (e) {\n      throw new E_VECTOR_STORE_DRIVER_UNAVAILABLE(['pg'])\n    }\n\n    let pool: any\n\n    if (this.#opts.pool) {\n      pool = this.#opts.pool\n      this.#_externalPool = true\n    } else {\n      const connectionConfig = this.#opts.connection\n      if (typeof connectionConfig === 'string') {\n        pool = new pg.Pool({ connectionString: connectionConfig })\n      } else if (connectionConfig) {\n        pool = new pg.Pool(connectionConfig)\n      } else {\n        pool = new pg.Pool()\n      }\n    }\n\n    try {\n      await pool.query('SELECT 1')\n    } catch (e: any) {\n      throw new E_VECTOR_STORE_CONNECTION_FAILED([e?.message ?? String(e)])\n    }\n\n    try {\n      await pool.query('CREATE EXTENSION IF NOT EXISTS vector')\n    } catch (e: any) {\n      throw new E_VECTOR_STORE_CONNECTION_FAILED([e?.message ?? String(e)])\n    }\n\n    this.#_pool = pool\n  }\n\n  async close(): Promise<void> {\n    if (this.#_txClient) {\n      this.#_txClient.release?.()\n      this.#_txClient = null\n    }\n\n    if (this.#_pool && !this.#_externalPool) {\n      await this.#_pool.end()\n    }\n\n    this.#_pool = null\n    this.#_txClient = null\n  }\n\n  /** The active transaction client when inside a transaction, otherwise the connection pool. */\n  get clientOrPool(): PoolOrClient {\n    if (this.#_txClient) {\n      return this.#_txClient\n    }\n    if (!this.#_pool) {\n      throw new Error('Not connected')\n    }\n    return this.#_pool\n  }\n\n  /** Ensure the pool is connected (idempotent); a no-op once connected. */\n  async ensureConnected(): Promise<void> {\n    await this.connect()\n  }\n\n  async createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void> {\n    await this.ensureConnected()\n    const { collection, vector } = spec\n    const { dimensions, metric } = vector\n    const tbl = `\"${collection}\"`\n    const { opclass } = METRIC_TO_OPERATOR[metric]\n\n    const has = await this.hasCollection(collection)\n    if (!ifNotExists && has) {\n      throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', 'collection exists'])\n    }\n\n    const createTable = `\n      CREATE TABLE IF NOT EXISTS ${tbl} (\n        id TEXT PRIMARY KEY,\n        embedding vector(${dimensions}),\n        document TEXT,\n        metadata JSONB\n      )\n    `\n    const createIndex = `\n      CREATE INDEX IF NOT EXISTS \"${collection}_embedding_idx\" ON ${tbl} USING hnsw (embedding ${opclass})\n    `\n\n    try {\n      await this.#_pool!.query(createTable)\n      await this.#_pool!.query(createIndex)\n    } catch (e: any) {\n      throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', e?.message ?? String(e)])\n    }\n  }\n\n  async dropCollection(collection: string, ifExists: boolean): Promise<void> {\n    await this.ensureConnected()\n    const tbl = `\"${collection}\"`\n\n    const has = await this.hasCollection(collection)\n    if (!has) {\n      if (!ifExists) {\n        throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', 'collection does not exist'])\n      }\n      return\n    }\n\n    const dropTbl = `DROP TABLE IF EXISTS ${tbl}`\n    try {\n      await this.#_pool!.query(dropTbl)\n    } catch (e: any) {\n      throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', e?.message ?? String(e)])\n    }\n  }\n\n  async hasCollection(collection: string): Promise<boolean> {\n    await this.ensureConnected()\n    const check = `SELECT to_regclass($1) IS NOT NULL AS exists`\n    try {\n      const res = await this.#_pool!.query(check, [collection])\n      return res.rows[0]?.exists === true\n    } catch {\n      return false\n    }\n  }\n\n  async renameCollection(from: string, to: string): Promise<void> {\n    await this.ensureConnected()\n    const hasFrom = await this.hasCollection(from)\n    if (!hasFrom) {\n      throw new E_VECTOR_STORE_COLLECTION_FAILED(['rename', 'source collection does not exist'])\n    }\n\n    const hasTo = await this.hasCollection(to)\n    if (hasTo) {\n      throw new E_VECTOR_STORE_COLLECTION_FAILED(['rename', 'target collection already exists'])\n    }\n\n    const rename = `ALTER TABLE \"${from}\" RENAME TO \"${to}\"`\n    try {\n      await this.#_pool!.query(rename)\n    } catch (e: any) {\n      throw new E_VECTOR_STORE_COLLECTION_FAILED(['rename', e?.message ?? String(e)])\n    }\n  }\n\n  async executeUpsert(plan: UpsertPlan): Promise<void> {\n    await this.ensureConnected()\n    validateRecords(plan.records)\n\n    const collection = plan.collection\n    const tbl = `\"${collection}\"`\n    const dims = this.#opts.dimensions\n\n    const resolvedRows: {\n      id: string\n      vector: number[]\n      document?: string\n      metadata?: Record<string, unknown>\n    }[] = []\n\n    for (const r of plan.records) {\n      let vector = r.vector\n      if (!vector && r.document) {\n        const [v] = await this.encode([r.document], 'document')\n        vector = v\n      }\n\n      if (vector && dims !== undefined && vector.length !== dims) {\n        throw new E_VECTOR_STORE_DIMENSION_MISMATCH([dims, vector.length])\n      }\n\n      resolvedRows.push({\n        id: r.id,\n        vector: vector ?? [],\n        document: r.document,\n        metadata: r.metadata as Record<string, unknown> | undefined,\n      })\n    }\n\n    const sql = `\n      INSERT INTO ${tbl} (id, embedding, document, metadata)\n      VALUES ($1, $2::vector, $3, $4)\n      ON CONFLICT (id) DO UPDATE SET\n        embedding = $2::vector,\n        document = $3,\n        metadata = $4\n    `\n\n    const client = this.clientOrPool\n    try {\n      for (const r of resolvedRows) {\n        const vecStr = '[' + r.vector.join(',') + ']'\n        await client.query(sql, [\n          r.id,\n          vecStr,\n          r.document ?? null,\n          JSON.stringify(r.metadata ?? {}),\n        ])\n      }\n    } catch (e: any) {\n      throw new E_VECTOR_STORE_UPSERT_FAILED([e?.message ?? String(e)])\n    }\n  }\n\n  async executeSearch(plan: SearchPlan): Promise<VectorMatch[]> {\n    await this.ensureConnected()\n    const collection = plan.collection\n    const tbl = `\"${collection}\"`\n    const metric = this.options.metric ?? 'euclidean'\n    const { op } = METRIC_TO_OPERATOR[metric]\n\n    const filterSql = plan.filter\n      ? (() => {\n          const { sql, params } = translatePgFilter(plan.filter)\n          if (sql) {\n            return { sql: ` AND ${sql}`, params }\n          }\n          return { sql: '', params: [] }\n        })()\n      : { sql: '', params: [] }\n\n    try {\n      if (plan.near) {\n        let qvec: number[] | undefined\n\n        if ('vector' in plan.near) {\n          qvec = plan.near.vector\n        } else if ('serverText' in plan.near) {\n          const [v] = await this.encode([plan.near.serverText], 'query')\n          qvec = v\n        } else if ('id' in plan.near) {\n          const id = plan.near.id\n          const vecRes = await this.#_pool!.query(`SELECT embedding FROM ${tbl} WHERE id = $1`, [\n            id,\n          ])\n          if (vecRes.rows[0]?.embedding) {\n            const raw = vecRes.rows[0].embedding\n            if (typeof raw === 'string') {\n              const stripped = raw.replace(/^\\[|\\]$/g, '')\n              qvec = stripped.split(',').map((n) => Number.parseFloat(n.trim()))\n            }\n          }\n        }\n\n        if (!qvec) {\n          throw new E_VECTOR_STORE_SEARCH_FAILED(['no query vector provided'])\n        }\n\n        const vecStr = '[' + qvec.join(',') + ']'\n        const sql = `\n          SELECT id, document, metadata, embedding, embedding ${op} $1 AS distance\n          FROM ${tbl}\n          WHERE 1=1 ${filterSql.sql}\n          ORDER BY distance\n          LIMIT ${plan.topK} OFFSET ${plan.offset ?? 0}\n        `\n        const { rows } = await this.#_pool!.query(sql, [vecStr, ...filterSql.params])\n\n        const results: VectorMatch[] = []\n\n        for (const row of rows) {\n          let distance = Number(row.distance)\n\n          let score: number | undefined\n          if (metric === 'dot') {\n            const inner = -distance\n            score = normalizeScore(inner, 'dot', 'similarity')\n            distance = inner\n          } else {\n            score = normalizeScore(distance, metric, 'distance')\n          }\n\n          const parsedMeta =\n            typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata\n\n          const proj: VectorMatch = {}\n          if (plan.projection.id) proj.id = row.id\n          if (plan.projection.vector) {\n            const rawVec = row.embedding\n            if (typeof rawVec === 'string') {\n              const stripped = rawVec.replace(/^\\[|\\]$/g, '')\n              proj.vector = stripped.split(',').map((n) => Number.parseFloat(n.trim()))\n            }\n          }\n          if (plan.projection.document && row.document !== undefined) proj.document = row.document\n          if (plan.projection.metadata && parsedMeta !== undefined) proj.metadata = parsedMeta\n          if (score !== undefined) proj.score = score\n\n          results.push(proj)\n        }\n\n        return results\n      } else {\n        const sql = `\n          SELECT id, document, metadata, embedding\n          FROM ${tbl}\n          WHERE 1=1 ${filterSql.sql}\n          LIMIT ${plan.topK} OFFSET ${plan.offset ?? 0}\n        `\n        const { rows } = await this.#_pool!.query(sql, [...filterSql.params])\n\n        const results: VectorMatch[] = []\n\n        for (const row of rows) {\n          const parsedMeta =\n            typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata\n\n          const proj: VectorMatch = {}\n          if (plan.projection.id) proj.id = row.id\n          if (plan.projection.vector) {\n            const vecRes = await this.#_pool!.query(`SELECT embedding FROM ${tbl} WHERE id = $1`, [\n              row.id,\n            ])\n            if (vecRes.rows[0]?.embedding) {\n              const rawVec = vecRes.rows[0].embedding\n              if (typeof rawVec === 'string') {\n                const stripped = rawVec.replace(/^\\[|\\]$/g, '')\n                proj.vector = stripped.split(',').map((n) => Number.parseFloat(n.trim()))\n              }\n            }\n          }\n          if (plan.projection.document && row.document !== undefined) proj.document = row.document\n          if (plan.projection.metadata && parsedMeta !== undefined) proj.metadata = parsedMeta\n\n          results.push(proj)\n        }\n\n        return results\n      }\n    } catch (e: any) {\n      throw new E_VECTOR_STORE_SEARCH_FAILED([e?.message ?? String(e)])\n    }\n  }\n\n  async executeDelete(plan: DeletePlan): Promise<void> {\n    await this.ensureConnected()\n    const collection = plan.collection\n    const tbl = `\"${collection}\"`\n\n    try {\n      if (plan.ids && plan.ids.length > 0) {\n        const sql = `DELETE FROM ${tbl} WHERE id = ANY($1)`\n        await this.#_pool!.query(sql, [plan.ids])\n      } else if (plan.filter) {\n        const { sql, params } = translatePgFilter(plan.filter)\n        const whereClause = sql ? ` WHERE ${sql}` : ''\n        const delSql = `DELETE FROM ${tbl}${whereClause}`\n        await this.#_pool!.query(delSql, params)\n      } else {\n        await this.#_pool!.query(`TRUNCATE TABLE ${tbl} RESTART IDENTITY`)\n      }\n    } catch (e: any) {\n      throw new E_VECTOR_STORE_DELETE_FAILED([e?.message ?? String(e)])\n    }\n  }\n\n  async transaction(fn: (tx: CallableVectorStore) => Promise<void>): Promise<void> {\n    await this.ensureConnected()\n\n    const pool = this.#_pool!\n    const client = await pool.connect()\n\n    try {\n      await client.query('BEGIN')\n      this.#_txClient = client\n      await fn(this.asCallable())\n      await client.query('COMMIT')\n    } catch (e) {\n      await client.query('ROLLBACK')\n      throw e\n    } finally {\n      this.#_txClient = null\n      client.release()\n    }\n  }\n}\n"],"mappings":"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"}