{"version":3,"file":"weaviate.cjs","names":["#client","#weaviate","#cls","#dims","#uuidFromId","#extractVector","#parseMetadata","#project"],"sources":["../../../src/batteries/vector/weaviate/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/weaviate\n *\n * @remarks\n * Weaviate-backed vector store adapter using the Weaviate v3 client with lazy driver\n * loading, deterministic object UUIDs, explicit vectors, and in-JS metadata filtering.\n */\n\nimport { sha256 } from 'js-sha256'\nimport { normalizeScore } from '../helpers'\nimport { BaseVectorStore } from '../contract'\nimport { validateRecords } from '../validation'\nimport { isInstanceOf } from '@nhtio/adk/guards'\nimport { evaluateFilter, isRawFilter, isFilterCondition, 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_OPERATION,\n  E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR,\n} from '../exceptions'\nimport type { VectorFilter } from '../filters'\nimport type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from '../plan'\nimport type {\n  VectorMatch,\n  VectorMetadata,\n  VectorStoreCapabilities,\n  BaseVectorStoreOptions,\n} from '../types'\n\n/**\n * Connection options for {@link WeaviateVectorStore}.\n */\nexport interface WeaviateVectorStoreOptions extends BaseVectorStoreOptions {\n  /** Connection and authentication parameters for the backend. */\n  connection?: {\n    url?: string\n    host?: string\n    port?: number\n    grpcHost?: string\n    grpcPort?: number\n    apiKey?: string\n    secure?: boolean\n    grpcSecure?: boolean\n  }\n}\n\n/**\n * Compiles a neutral {@link VectorFilter} into a Weaviate v3 filter built from a collection's\n * `col.filter` builder (and `weaviate.Filters.and/or` for groups). Pure and dependency-injected\n * (takes the `col` handle and the `weaviate` module), so it is unit-testable with stubs.\n *\n * @throws {@link @nhtio/adk/batteries/vector/exceptions!E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR}\n *   for operators Weaviate cannot express (`nin`, group `not`) or a non-`weaviate` raw dialect.\n */\nexport const translateWeaviateFilter = (col: any, weaviate: any, filter?: VectorFilter): any => {\n  if (!filter) return undefined\n  if (isRawFilter(filter)) {\n    if (filter.$dialect === 'weaviate') return filter.$raw\n    throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', String(filter.$dialect)])\n  }\n  if (isFilterCondition(filter)) {\n    const { field, op, value } = filter\n    if (value === undefined && op !== 'exists') {\n      throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n    }\n    const f = col.filter.byProperty(field)\n    if (op === 'eq') return f.equal(value)\n    if (op === 'ne') return f.notEqual(value)\n    if (op === 'gt') return f.greaterThan(value)\n    if (op === 'gte') return f.greaterOrEqual(value)\n    if (op === 'lt') return f.lessThan(value)\n    if (op === 'lte') return f.lessOrEqual(value)\n    if (op === 'in') return f.containsAny(value)\n    if (op === 'nin') throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'nin'])\n    if (op === 'exists') return f.isNull(value === false)\n    if (op === 'contains') return f.containsAny(Array.isArray(value) ? value : [value])\n    throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n  }\n  if (isFilterGroup(filter)) {\n    const { and, or, not } = filter\n    if (and) {\n      const children = and\n        .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n        .filter((x: any) => x !== undefined)\n      if (children.length === 0) return undefined\n      if (children.length === 1) return children[0]\n      return weaviate.Filters.and(...children)\n    }\n    if (or) {\n      const children = or\n        .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n        .filter((x: any) => x !== undefined)\n      if (children.length === 0) return undefined\n      if (children.length === 1) return children[0]\n      return weaviate.Filters.or(...children)\n    }\n    if (not) throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'not'])\n    return undefined\n  }\n  return undefined\n}\n\n/**\n * Weaviate-backed {@link @nhtio/adk/batteries/vector/contract!VectorStore}. Node-only.\n *\n * @remarks\n * Stores ids/documents/metadata as explicit object properties and all metadata filtering is\n * evaluated in JavaScript for portable behavior across Weaviate schema/index settings.\n */\nexport class WeaviateVectorStore extends BaseVectorStore {\n  readonly capabilities: VectorStoreCapabilities = {\n    transactions: false,\n    namedVectors: true,\n    rename: false,\n    rawSql: false,\n    builtInEncoding: false,\n    // Single-node Weaviate is strongly consistent on resolve; the option is a no-op here.\n    // (A future multi-node adapter variant would set configurable:true.)\n    consistency: { configurable: false, default: 'strong', modes: ['strong'] },\n  }\n\n  #client: any = null\n  #weaviate: any = null\n  #dims = new Map<string, number>()\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\n  isAvailable(): boolean {\n    return typeof process !== 'undefined'\n  }\n\n  async connect(): Promise<void> {\n    if (this.#client) return\n    let weaviate: any\n    try {\n      const weaviateMod = await import('weaviate-client')\n      weaviate = weaviateMod.default\n    } catch {\n      throw new E_VECTOR_STORE_DRIVER_UNAVAILABLE(['weaviate-client'])\n    }\n    const c = (this.options as WeaviateVectorStoreOptions).connection ?? {}\n    let httpHost = c.host ?? 'localhost'\n    let httpPort = c.port ?? 8080\n    let secure = c.secure\n    if (c.url) {\n      const u = new URL(c.url)\n      httpHost = u.hostname\n      httpPort = u.port ? Number(u.port) : u.protocol === 'https:' ? 443 : 80\n      secure = u.protocol === 'https:'\n    }\n    try {\n      this.#client = await weaviate.connectToCustom({\n        httpHost,\n        httpPort,\n        httpSecure: !!secure,\n        grpcHost: c.grpcHost ?? httpHost,\n        grpcPort: c.grpcPort ?? 50051,\n        grpcSecure: !!c.grpcSecure,\n        headers: c.apiKey ? { Authorization: 'Bearer ' + c.apiKey } : undefined,\n      })\n      this.#weaviate = weaviate\n    } catch (e: any) {\n      throw new E_VECTOR_STORE_CONNECTION_FAILED([e?.message ?? String(e)])\n    }\n  }\n\n  async close(): Promise<void> {\n    await this.#client?.close?.()\n    this.#client = null\n    this.#weaviate = null\n  }\n\n  async createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void> {\n    await this.connect()\n    const c = this.#cls(spec.collection)\n    try {\n      if (await this.#client.collections.exists(c)) {\n        if (ifNotExists) return\n        throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', 'collection exists'])\n      }\n      await this.#client.collections.create({\n        name: c,\n        vectorizers: this.#weaviate.configure.vectorizer.none(),\n        properties: [\n          { name: '__id', dataType: 'text' },\n          { name: '__document', dataType: 'text' },\n          { name: '__metadata', dataType: 'text' },\n        ],\n      })\n      this.#dims.set(spec.collection, spec.vector.dimensions)\n    } catch (e: any) {\n      if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n        throw e\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.connect()\n    const c = this.#cls(collection)\n    try {\n      const exists = await this.#client.collections.exists(c)\n      if (!exists) {\n        if (!ifExists)\n          throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', 'collection does not exist'])\n        return\n      }\n      await this.#client.collections.delete(c)\n      this.#dims.delete(collection)\n    } catch (e: any) {\n      if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n        throw e\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.connect()\n    return await this.#client.collections.exists(this.#cls(collection))\n  }\n\n  async renameCollection(_from: string, _to: string): Promise<void> {\n    throw new E_VECTOR_STORE_UNSUPPORTED_OPERATION(['renameCollection', 'weaviate'])\n  }\n\n  async executeUpsert(plan: UpsertPlan): Promise<void> {\n    await this.connect()\n    validateRecords(plan.records)\n    const dims = this.#dims.get(plan.collection) ?? this.options.dimensions\n    const col = this.#client.collections.get(this.#cls(plan.collection))\n    try {\n      const objects = []\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        if (!vector) throw new E_VECTOR_STORE_UPSERT_FAILED(['Record missing vector and document'])\n        if (dims !== undefined && vector.length !== dims) {\n          throw new E_VECTOR_STORE_DIMENSION_MISMATCH([dims, vector.length])\n        }\n        objects.push({\n          id: this.#uuidFromId(r.id),\n          properties: {\n            __id: r.id,\n            __document: r.document ?? '',\n            __metadata: JSON.stringify(r.metadata ?? {}),\n          },\n          vectors: vector,\n        })\n      }\n      if (objects.length > 0) await col.data.insertMany(objects)\n    } catch (e: any) {\n      if (isInstanceOf(e, 'E_VECTOR_STORE_DIMENSION_MISMATCH', E_VECTOR_STORE_DIMENSION_MISMATCH))\n        throw e\n      if (isInstanceOf(e, 'E_VECTOR_STORE_UPSERT_FAILED', E_VECTOR_STORE_UPSERT_FAILED)) throw e\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.connect()\n    const col = this.#client.collections.get(this.#cls(plan.collection))\n    const metric = this.options.metric ?? 'cosine'\n    try {\n      let qvec: number[] | undefined\n      if (plan.near) {\n        if ('vector' in plan.near) 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 ref = await col.query.fetchObjectById(this.#uuidFromId(plan.near.id), {\n            includeVector: true,\n          })\n          qvec = this.#extractVector(ref?.vectors)\n        }\n      }\n      let res: any\n      if (qvec) {\n        res = await col.query.nearVector(qvec, {\n          limit: (plan.topK + (plan.offset ?? 0)) * 4,\n          returnMetadata: ['distance'],\n          includeVector: !!plan.projection.vector,\n          returnProperties: ['__id', '__document', '__metadata'],\n        })\n      } else {\n        res = await col.query.fetchObjects({\n          limit: 10000,\n          includeVector: !!plan.projection.vector,\n          returnProperties: ['__id', '__document', '__metadata'],\n        })\n      }\n      const filtered = (res.objects ?? []).filter((obj: any) => {\n        const metadata = this.#parseMetadata(obj)\n        return !plan.filter || evaluateFilter(plan.filter, metadata)\n      })\n      const start = plan.offset ?? 0\n      return filtered\n        .slice(start, start + plan.topK)\n        .map((obj: any) => this.#project(obj, plan, !!qvec, metric))\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.connect()\n    const col = this.#client.collections.get(this.#cls(plan.collection))\n    try {\n      if (plan.ids && plan.ids.length > 0) {\n        for (const id of plan.ids) await col.data.deleteById(this.#uuidFromId(id))\n        return\n      }\n      const res = await col.query.fetchObjects({\n        limit: 10000,\n        returnProperties: ['__id', '__document', '__metadata'],\n      })\n      for (const obj of res.objects ?? []) {\n        const id = obj.properties?.__id\n        if (!id) continue\n        if (!plan.filter || evaluateFilter(plan.filter, this.#parseMetadata(obj))) {\n          await col.data.deleteById(this.#uuidFromId(id))\n        }\n      }\n    } catch (e: any) {\n      throw new E_VECTOR_STORE_DELETE_FAILED([e?.message ?? String(e)])\n    }\n  }\n\n  #cls(name: string): string {\n    return name.charAt(0).toUpperCase() + name.slice(1)\n  }\n\n  #uuidFromId(id: string): string {\n    const h = sha256(id)\n    return (\n      h.slice(0, 8) +\n      '-' +\n      h.slice(8, 12) +\n      '-4' +\n      h.slice(13, 16) +\n      '-8' +\n      h.slice(17, 20) +\n      '-' +\n      h.slice(20, 32)\n    )\n  }\n\n  #parseMetadata(obj: any): VectorMetadata {\n    try {\n      return JSON.parse(obj.properties?.__metadata || '{}') as VectorMetadata\n    } catch {\n      return {}\n    }\n  }\n\n  #extractVector(vectors: any): number[] | undefined {\n    if (Array.isArray(vectors)) return vectors as number[]\n    if (vectors?.default) return vectors.default as number[]\n    if (vectors && typeof vectors === 'object')\n      return Object.values(vectors)[0] as number[] | undefined\n    return undefined\n  }\n\n  #project(obj: any, plan: SearchPlan, scored: boolean, metric: string): VectorMatch {\n    const out: VectorMatch = {}\n    const props = obj.properties ?? {}\n    if (plan.projection.id) out.id = props.__id\n    if (plan.projection.document) out.document = props.__document\n    if (plan.projection.metadata) out.metadata = this.#parseMetadata(obj)\n    if (plan.projection.vector) out.vector = this.#extractVector(obj.vectors)\n    if (scored)\n      out.score = normalizeScore(Number(obj.metadata?.distance ?? 0), metric as any, 'distance')\n    return out\n  }\n}\n"],"mappings":"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"}