{"version":3,"sources":["../../../src/tools/database/qdrant.ts"],"names":["QdrantAction","QdrantDatabaseTool","Tool","name","description","inputSchema","z","object","action","nativeEnum","describe","collectionName","string","optional","vector","array","number","vectors","topK","coerce","int","default","filter","record","any","payload","ids","or","emitter","Emitter","root","child","namespace","creator","validateInput","schema","input","ToolInputValidationError","register","client","QdrantClient","options","connection","_run","_options","collections","listCollections","JSONToolOutput","ToolError","collectionInfo","getCollectionInfo","searchResults","search","insertResults","insert","deleteResults","delete","response","getCollections","map","collection","error","getCollection","points","index","id","uuidv4","upsert","searchParams","query","limit","with_payload"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA6BO,IAAKA,YAAAA,6BAAAA,aAAAA,EAAAA;;;;;;AAAAA,EAAAA,OAAAA,aAAAA;;AAQL,MAAMC,2BAA2BC,aAAAA,CAAAA;AAAAA,EAAAA;;;EAItCC,IAAAA,GAAO,oBAAA;EAEPC,WAAAA,GAAc,CAAA;UACR,iBAAA,CAAA;UACA,mBAAA,CAAA;UACA,QAAA,CAAA;UACA,QAAA,CAAA;UACA,QAAA,CAAA,kCAAA,CAAA;EAENC,WAAAA,GAAc;AACZ,IAAA,OAAOC,MAAEC,MAAAA,CAAO;AACdC,MAAAA,MAAAA,EAAQF,KAAAA,CACLG,UAAAA,CAAWT,YAAAA,CAAAA,CACXU,SACC,CAAA,uBAAA,EAAwB,iBAAA,CAAA,wBAAA,EAAuD,mBAAA,gDAA8E,QAAA,CAAA,2BAAA,EAAiD,QAAA,CAAA,0BAAA,EAAgD,QAAA,CAAA,iBAAA,CAAwC,CAAA;AAE1SC,MAAAA,cAAAA,EAAgBL,KAAAA,CACbM,MAAAA,EAAM,CACNC,QAAAA,GACAH,QAAAA,CACC,CAAA,kDAAA,EAAmD,mBAAA,CAAA,EAAA,EAAmC,QAAA,CAAA,EAAA,EAAwB,QAAA,CAAA,MAAA,EAA4B,QAAA,CAAA,CAAuB,CAAA;MAErKI,MAAAA,EAAQR,KAAAA,CACLS,KAAAA,CAAMT,KAAAA,CAAEU,MAAAA,EAAM,CAAA,CACdH,QAAAA,EAAQ,CACRH,QAAAA,CAAS,CAAA,uCAAA,EAAwC,QAAA,CAAA,CAAA,CAAwB,CAAA;AAC5EO,MAAAA,OAAAA,EAASX,KAAAA,CACNS,KAAAA,CAAMT,KAAAA,CAAES,KAAAA,CAAMT,MAAEU,MAAAA,EAAM,CAAA,CAAA,CACtBH,QAAAA,EAAQ,CACRH,QAAAA,CAAS,CAAA,oCAAA,EAAqC,QAAA,CAAA,CAAA,CAAwB,CAAA;AACzEQ,MAAAA,IAAAA,EAAMZ,KAAAA,CAAEa,MAAAA,CACLH,MAAAA,EAAM,CACNI,GAAAA,EAAG,CACHC,OAAAA,CAAQ,EAAA,CAAA,CACRR,QAAAA,EAAQ,CACRH,QAAAA,CAAS,CAAA,0CAAA,CAA4C,CAAA;AACxDY,MAAAA,MAAAA,EAAQhB,KAAAA,CACLiB,MAAAA,CAAOjB,KAAAA,CAAEM,MAAAA,IAAUN,KAAAA,CAAEkB,GAAAA,EAAG,CAAA,CACxBX,QAAAA,EAAQ,CACRH,QAAAA,CAAS,CAAA,oBAAA,EAAqB,QAAA,CAAA,CAAA,CAAwB,CAAA;AACzDe,MAAAA,OAAAA,EAASnB,KAAAA,CACNS,KAAAA,CAAMT,KAAAA,CAAEiB,MAAAA,CAAOjB,MAAEM,MAAAA,EAAM,EAAIN,KAAAA,CAAEkB,GAAAA,EAAG,CAAA,CAAA,CAChCX,QAAAA,EAAQ,CACRH,SAAS,CAAA,0CAAA,CAA4C,CAAA;AACxDgB,MAAAA,GAAAA,EAAKpB,KAAAA,CACFS,KAAAA,CAAMT,KAAAA,CAAEM,MAAAA,GAASe,EAAAA,CAAGrB,KAAAA,CAAEU,MAAAA,EAAM,CAAA,CAAA,CAC5BH,QAAAA,EAAQ,CACRH,SAAS,CAAA,iCAAA,CAAmC;KACjD,CAAA;AACF,EAAA;EAEgBkB,OAAAA,GACdC,mBAAAA,CAAQC,KAAKC,KAAAA,CAAM;IACjBC,SAAAA,EAAW;AAAC,MAAA,MAAA;AAAQ,MAAA,UAAA;AAAY,MAAA;;IAChCC,OAAAA,EAAS;GACX,CAAA;AAEQC,EAAAA,aAAAA,CACRC,QACAC,KAAAA,EACkC;AAClC,IAAA,KAAA,CAAMF,aAAAA,CAAcC,QAAQC,KAAAA,CAAAA;AAC5B,IAAA,IAAIA,KAAAA,CAAM5B,MAAAA,IAAM,iBAAA,IAAoC,CAAC4B,MAAMzB,cAAAA,EAAgB;AACzE,MAAA,MAAM,IAAI0B,iCAAAA,CACR,CAAA,gCAAA,EAAiC,mBAAA,CAAA,EAAA,EAAmC,QAAA,CAAA,EAAA,EAAwB,QAAA,CAAA,MAAA,EAA4B,QAAA,CAAA,SAAA,CAAgC,CAAA;AAE5J,IAAA;AACA,IAAA,IAAID,KAAAA,CAAM5B,WAAM,QAAA,KAA6B,CAAC4B,MAAMzB,cAAAA,IAAkB,CAACyB,MAAMtB,MAAAA,CAAAA,EAAS;AACpF,MAAA,MAAM,IAAIuB,iCAAAA,CAAyB,CAAA,uBAAA,EAAwB,QAAA,CAAA,QAAA,CAA+B,CAAA;AAC5F,IAAA;AACA,IAAA,IAAID,KAAAA,CAAM5B,WAAM,QAAA,KAA6B,CAAC4B,MAAMzB,cAAAA,IAAkB,CAACyB,MAAMnB,OAAAA,CAAAA,EAAU;AACrF,MAAA,MAAM,IAAIoB,iCAAAA,CAAyB,CAAA,yBAAA,EAA0B,QAAA,CAAA,QAAA,CAA+B,CAAA;AAC9F,IAAA;AACF,EAAA;EAEA;AACE,IAAA,IAAA,CAAKC,QAAAA,EAAQ;AACf;AAEA,EAAA,MACgBC,MAAAA,GAAgC;AAC9C,IAAA,OAAO,IAAIC,yBAAAA,CAAa,IAAA,CAAKC,OAAAA,CAAQC,UAAU,CAAA;AACjD,EAAA;EAEA,MAAgBC,IAAAA,CACdP,OACAQ,QAAAA,EAC8B;AAC9B,IAAA,QAAQR,MAAM5B,MAAAA;AACZ,MAAA,KAAA,iBAAA,EAAmC;AACjC,QAAA,MAAMqC,WAAAA,GAAc,MAAM,IAAA,CAAKC,eAAAA,EAAe;AAC9C,QAAA,OAAO,IAAIC,wBAAeF,WAAAA,CAAAA;AAC5B,MAAA;AAEA,MAAA,KAAA,mBAAA,EAAqC;AACnC,QAAA,IAAI,CAACT,MAAMzB,cAAAA,EAAgB;AACzB,UAAA,MAAM,IAAIqC,mBAAU,mEAAA,CAAA;AACtB,QAAA;AACA,QAAA,MAAMC,cAAAA,GAAiB,MAAM,IAAA,CAAKC,iBAAAA,CAAkBd,MAAMzB,cAAc,CAAA;AACxE,QAAA,OAAO,IAAIoC,wBAAeE,cAAAA,CAAAA;AAC5B,MAAA;AAEA,MAAA,KAAA,QAAA,EAA0B;AACxB,QAAA,IAAI,CAACb,KAAAA,CAAMzB,cAAAA,IAAkB,CAACyB,MAAMtB,MAAAA,EAAQ;AAC1C,UAAA,MAAM,IAAIkC,mBAAU,oEAAA,CAAA;AACtB,QAAA;AACA,QAAA,MAAMG,aAAAA,GAAgB,MAAM,IAAA,CAAKC,MAAAA,CAAOhB,KAAAA,CAAAA;AACxC,QAAA,OAAO,IAAIW,wBAAeI,aAAAA,CAAAA;AAC5B,MAAA;AAEA,MAAA,KAAA,QAAA,EAA0B;AACxB,QAAA,IAAI,CAACf,KAAAA,CAAMzB,cAAAA,IAAkB,CAACyB,MAAMnB,OAAAA,EAAS;AAC3C,UAAA,MAAM,IAAI+B,mBACR,qEAAA,CAAA;AAEJ,QAAA;AACA,QAAA,MAAMK,aAAAA,GAAgB,MAAM,IAAA,CAAKC,MAAAA,CAAOlB,KAAAA,CAAAA;AACxC,QAAA,OAAO,IAAIW,wBAAeM,aAAAA,CAAAA;AAC5B,MAAA;AAEA,MAAA,KAAA,QAAA,EAA0B;AACxB,QAAA,IAAI,CAACjB,KAAAA,CAAMzB,cAAAA,IAAkB,CAACyB,MAAMV,GAAAA,EAAK;AACvC,UAAA,MAAM,IAAIsB,mBAAU,+DAAA,CAAA;AACtB,QAAA;AACA,QAAA,MAAMO,aAAAA,GAAgB,MAAM,IAAA,CAAKC,MAAAA,CAAOpB,KAAAA,CAAAA;AACxC,QAAA,OAAO,IAAIW,wBAAeQ,aAAAA,CAAAA;AAC5B,MAAA;MAEA,SAAS;AACP,QAAA,MAAM,IAAIP,kBAAAA,CAAU,CAAA,0BAAA,EAA6BZ,KAAAA,CAAM5B,MAAM,CAAA,CAAE,CAAA;AACjE,MAAA;AACF;AACF,EAAA;AAEA,EAAA,MAAgBsC,eAAAA,GAAqC;AACnD,IAAA,IAAI;AACF,MAAA,MAAMP,MAAAA,GAAS,MAAM,IAAA,CAAKA,MAAAA,EAAM;AAChC,MAAA,MAAMkB,QAAAA,GAAW,MAAMlB,MAAAA,CAAOmB,cAAAA,EAAc;AAE5C,MAAA,OAAOD,SAASZ,WAAAA,CAAYc,GAAAA,CAAI,CAACC,UAAAA,KAAeA,WAAWzD,IAAI,CAAA;AACjE,IAAA,CAAA,CAAA,OAAS0D,KAAAA,EAAO;AACd,MAAA,MAAM,IAAIb,kBAAAA,CAAU,CAAA,wCAAA,EAA2Ca,KAAAA,CAAAA,CAAO,CAAA;AACxE,IAAA;AACF,EAAA;AAEA,EAAA,MAAgBX,kBAAkBvC,cAAAA,EAAsC;AACtE,IAAA,MAAM4B,MAAAA,GAAS,MAAM,IAAA,CAAKA,MAAAA,EAAM;AAChC,IAAA,MAAMkB,QAAAA,GAAW,MAAMlB,MAAAA,CAAOuB,aAAAA,CAAcnD,cAAAA,CAAAA;AAC5C,IAAA,OAAO8C,QAAAA;AACT,EAAA;AAEA,EAAA,MAAgBH,OAAOlB,KAAAA,EAAsC;AAC3D,IAAA,MAAMG,MAAAA,GAAS,MAAM,IAAA,CAAKA,MAAAA,EAAM;AAEhC,IAAA,MAAMwB,SAAS3B,KAAAA,CAAMnB,OAAAA,CAAS0C,GAAAA,CAAI,CAAC7C,QAAQkD,KAAAA,MAAW;AACpDC,MAAAA,EAAAA,EAAI7B,KAAAA,EAAOV,GAAAA,GAAMsC,KAAAA,CAAAA,IAAUE,OAAAA,EAAAA;AAC3BpD,MAAAA,MAAAA;AACAW,MAAAA,OAAAA,EAASW,KAAAA,EAAOX,OAAAA,GAAUuC,KAAAA,CAAAA,IAAU;KACtC,CAAA,CAAA;AAEA,IAAA,MAAMP,QAAAA,GAAW,MAAMlB,MAAAA,CAAO4B,MAAAA,CAAO/B,MAAMzB,cAAAA,EAA0B;AACnEoD,MAAAA;KACF,CAAA;AAEA,IAAA,OAAON,QAAAA;AACT,EAAA;AAEA,EAAA,MAAgBL,OAAOhB,KAAAA,EAAsC;AAC3D,IAAA,MAAMG,MAAAA,GAAS,MAAM,IAAA,CAAKA,MAAAA,EAAM;AAEhC,IAAA,MAAM6B,YAAAA,GAAoB;AACxBC,MAAAA,KAAAA,EAAOjC,KAAAA,CAAMtB,MAAAA;AACbwD,MAAAA,KAAAA,EAAOlC,MAAMlB,IAAAA,IAAQ,EAAA;MACrBqD,YAAAA,EAAc,IAAA;AACdjD,MAAAA,MAAAA,EAAQc,KAAAA,CAAMd;AAChB,KAAA;AAEA,IAAA,MAAMmC,WAAW,MAAMlB,MAAAA,CAAO8B,KAAAA,CAAMjC,KAAAA,CAAMzB,gBAA0ByD,YAAAA,CAAAA;AACpE,IAAA,OAAOX,QAAAA;AACT,EAAA;AAEA,EAAA,MAAgBD,OAAOpB,KAAAA,EAAsC;AAC3D,IAAA,MAAMG,MAAAA,GAAS,MAAM,IAAA,CAAKA,MAAAA,EAAM;AAEhC,IAAA,MAAMkB,QAAAA,GAAW,MAAMlB,MAAAA,CAAOiB,MAAAA,CAAOpB,MAAMzB,cAAAA,EAA0B;AACnEoD,MAAAA,MAAAA,EAAQ3B,KAAAA,CAAMV;KAChB,CAAA;AAEA,IAAA,OAAO+B,QAAAA;AACT,EAAA;AACF","file":"qdrant.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n  Tool,\n  ToolInput,\n  ToolError,\n  BaseToolOptions,\n  BaseToolRunOptions,\n  JSONToolOutput,\n  ToolInputValidationError,\n  ToolEmitter,\n} from \"@/tools/base.js\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { AnyToolSchemaLike } from \"@/internals/helpers/schema.js\";\nimport { QdrantClient, QdrantClientParams } from \"@qdrant/js-client-rest\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { z } from \"zod\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nexport interface QdrantToolOptions extends BaseToolOptions, QdrantClientParams {\n  connection: QdrantClientParams;\n}\n\nexport type QdrantSearchToolResult = any;\n\nexport enum QdrantAction {\n  ListCollections = \"ListCollections\",\n  GetCollectionInfo = \"GetCollectionInfo\",\n  Search = \"Search\",\n  Insert = \"Insert\",\n  Delete = \"Delete\",\n}\n\nexport class QdrantDatabaseTool extends Tool<\n  JSONToolOutput<QdrantSearchToolResult>,\n  QdrantToolOptions\n> {\n  name = \"QdrantDatabaseTool\";\n\n  description = `Can query data from a Qdrant vector database. IMPORTANT: strictly follow this order of actions:\n     1. ${QdrantAction.ListCollections} - List all the Qdrant collections\n     2. ${QdrantAction.GetCollectionInfo} - Get information about a Qdrant collection\n     3. ${QdrantAction.Insert} - Insert data into a Qdrant collection\n     3. ${QdrantAction.Search} - Perform search on a Qdrant collection\n     4. ${QdrantAction.Delete} - Delete from a Qdrant collection`;\n\n  inputSchema() {\n    return z.object({\n      action: z\n        .nativeEnum(QdrantAction)\n        .describe(\n          `The action to perform. ${QdrantAction.ListCollections} lists all collections, ${QdrantAction.GetCollectionInfo} fetches details for a specified collection, ${QdrantAction.Search} executes a vector search, ${QdrantAction.Insert} inserts new vectors, and ${QdrantAction.Delete} removes vectors.`,\n        ),\n      collectionName: z\n        .string()\n        .optional()\n        .describe(\n          `The name of the collection to query, required for ${QdrantAction.GetCollectionInfo}, ${QdrantAction.Search}, ${QdrantAction.Insert}, and ${QdrantAction.Delete}`,\n        ),\n      vector: z\n        .array(z.number())\n        .optional()\n        .describe(`The vector to search for, required for ${QdrantAction.Search}.`),\n      vectors: z\n        .array(z.array(z.number()))\n        .optional()\n        .describe(`The vectors to insert, required for ${QdrantAction.Insert}.`),\n      topK: z.coerce\n        .number()\n        .int()\n        .default(10)\n        .optional()\n        .describe(`The number of nearest neighbors to return.`),\n      filter: z\n        .record(z.string(), z.any())\n        .optional()\n        .describe(`Optional filter for ${QdrantAction.Search}.`),\n      payload: z\n        .array(z.record(z.string(), z.any()))\n        .optional()\n        .describe(`Additional payload to insert with vectors.`),\n      ids: z\n        .array(z.string().or(z.number()))\n        .optional()\n        .describe(`Array of IDs to delete or insert.`),\n    });\n  }\n\n  public readonly emitter: ToolEmitter<ToolInput<this>, JSONToolOutput<QdrantSearchToolResult>> =\n    Emitter.root.child({\n      namespace: [\"tool\", \"database\", \"qdrant\"],\n      creator: this,\n    });\n\n  protected validateInput(\n    schema: AnyToolSchemaLike,\n    input: unknown,\n  ): asserts input is ToolInput<this> {\n    super.validateInput(schema, input);\n    if (input.action != QdrantAction.ListCollections && !input.collectionName) {\n      throw new ToolInputValidationError(\n        `Collection name is required for ${QdrantAction.GetCollectionInfo}, ${QdrantAction.Search}, ${QdrantAction.Insert}, and ${QdrantAction.Delete} actions.`,\n      );\n    }\n    if (input.action === QdrantAction.Search && (!input.collectionName || !input.vector)) {\n      throw new ToolInputValidationError(`Vector is required for ${QdrantAction.Search} action.`);\n    }\n    if (input.action === QdrantAction.Insert && (!input.collectionName || !input.vectors)) {\n      throw new ToolInputValidationError(`Vectors are required for ${QdrantAction.Insert} action.`);\n    }\n  }\n\n  static {\n    this.register();\n  }\n\n  @Cache()\n  protected async client(): Promise<QdrantClient> {\n    return new QdrantClient(this.options.connection);\n  }\n\n  protected async _run(\n    input: ToolInput<this>,\n    _options: Partial<BaseToolRunOptions>,\n  ): Promise<JSONToolOutput<any>> {\n    switch (input.action) {\n      case QdrantAction.ListCollections: {\n        const collections = await this.listCollections();\n        return new JSONToolOutput(collections);\n      }\n\n      case QdrantAction.GetCollectionInfo: {\n        if (!input.collectionName) {\n          throw new ToolError(\"A collection name is required for Qdrant GetCollectionInfo action\");\n        }\n        const collectionInfo = await this.getCollectionInfo(input.collectionName);\n        return new JSONToolOutput(collectionInfo);\n      }\n\n      case QdrantAction.Search: {\n        if (!input.collectionName || !input.vector) {\n          throw new ToolError(\"A collection name and vector are required for Qdrant Search action\");\n        }\n        const searchResults = await this.search(input);\n        return new JSONToolOutput(searchResults);\n      }\n\n      case QdrantAction.Insert: {\n        if (!input.collectionName || !input.vectors) {\n          throw new ToolError(\n            \"A collection name and vectors are required for Qdrant Insert action\",\n          );\n        }\n        const insertResults = await this.insert(input);\n        return new JSONToolOutput(insertResults);\n      }\n\n      case QdrantAction.Delete: {\n        if (!input.collectionName || !input.ids) {\n          throw new ToolError(\"Collection name and ids are required for Qdrant Delete action\");\n        }\n        const deleteResults = await this.delete(input);\n        return new JSONToolOutput(deleteResults);\n      }\n\n      default: {\n        throw new ToolError(`Invalid action specified: ${input.action}`);\n      }\n    }\n  }\n\n  protected async listCollections(): Promise<string[]> {\n    try {\n      const client = await this.client();\n      const response = await client.getCollections();\n\n      return response.collections.map((collection) => collection.name);\n    } catch (error) {\n      throw new ToolError(`Failed to list collections from Qdrant: ${error}`);\n    }\n  }\n\n  protected async getCollectionInfo(collectionName: string): Promise<any> {\n    const client = await this.client();\n    const response = await client.getCollection(collectionName);\n    return response;\n  }\n\n  protected async insert(input: ToolInput<this>): Promise<any> {\n    const client = await this.client();\n\n    const points = input.vectors!.map((vector, index) => ({\n      id: input?.ids?.[index] ?? uuidv4(),\n      vector: vector,\n      payload: input?.payload?.[index] || {},\n    }));\n\n    const response = await client.upsert(input.collectionName as string, {\n      points: points,\n    });\n\n    return response;\n  }\n\n  protected async search(input: ToolInput<this>): Promise<any> {\n    const client = await this.client();\n\n    const searchParams: any = {\n      query: input.vector,\n      limit: input.topK || 10,\n      with_payload: true,\n      filter: input.filter,\n    };\n\n    const response = await client.query(input.collectionName as string, searchParams);\n    return response;\n  }\n\n  protected async delete(input: ToolInput<this>): Promise<any> {\n    const client = await this.client();\n\n    const response = await client.delete(input.collectionName as string, {\n      points: input.ids!,\n    });\n\n    return response;\n  }\n}\n"]}