{"version":3,"sources":["../../../src/tools/database/milvus.ts"],"names":["MilvusAction","MilvusDatabaseTool","Tool","name","description","inputSchema","z","object","action","nativeEnum","describe","collectionName","string","optional","vector","array","number","vectors","topK","coerce","int","min","max","default","filter","metadata","record","any","ids","or","searchOutput","emitter","Emitter","root","child","namespace","creator","validateInput","schema","input","ToolInputValidationError","register","client","MilvusClient","options","connection","listCollections","error","ToolError","isRetryable","isFatal","_run","_options","collections","JSONToolOutput","collectionInfo","getCollectionInfo","searchResults","search","insertResults","insert","deleteResults","delete","response","data","Array","isArray","map","collection","describeCollection","collection_name","fields_data","index","limit","output_fields","results","join"],"mappings":"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","file":"milvus.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 {\n  ClientConfig,\n  MilvusClient,\n  SearchRes,\n  ShowCollectionsResponse,\n  DescribeCollectionResponse,\n} from \"@zilliz/milvus2-sdk-node\";\nimport { z } from \"zod\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nexport interface MilvusToolOptions extends BaseToolOptions {\n  connection: ClientConfig;\n}\n\nexport type MilvusSearchToolResult =\n  | ShowCollectionsResponse\n  | DescribeCollectionResponse\n  | SearchRes;\n\nexport enum MilvusAction {\n  ListCollections = \"ListCollections\",\n  GetCollectionInfo = \"GetCollectionInfo\",\n  Search = \"Search\",\n  Insert = \"Insert\",\n  Delete = \"Delete\",\n}\n\nexport class MilvusDatabaseTool extends Tool<\n  JSONToolOutput<MilvusSearchToolResult>,\n  MilvusToolOptions\n> {\n  name = \"MilvusDatabaseTool\";\n\n  description = `Can query data from a Milvus database. IMPORTANT: strictly follow this order of actions:\n   1. ${MilvusAction.ListCollections} - List all the Milvus collections\n   2. ${MilvusAction.GetCollectionInfo} - Get information about into a Milvus collection\n   3. ${MilvusAction.Insert} - Insert data into a Milvus collection\n   3. ${MilvusAction.Search} - Perform search on a Milvus collection\n   4. ${MilvusAction.Delete} - Delete from a Milvus collection`;\n\n  inputSchema() {\n    return z.object({\n      action: z\n        .nativeEnum(MilvusAction)\n        .describe(\n          `The action to perform. ${MilvusAction.ListCollections} lists all collections, ${MilvusAction.GetCollectionInfo} fetches details for a specified collection, ${MilvusAction.Search} executes a vector search, ${MilvusAction.Insert} inserts new vectors, and ${MilvusAction.Delete} removes vectors.`,\n        ),\n      collectionName: z\n        .string()\n        .optional()\n        .describe(\n          `The name of the collection to query, required for ${MilvusAction.GetCollectionInfo}, ${MilvusAction.Search}, ${MilvusAction.Insert}, and ${MilvusAction.Delete}`,\n        ),\n      vector: z\n        .array(z.number())\n        .optional()\n        .describe(`The vector to search for or insert, required for ${MilvusAction.Search}`),\n      vectors: z\n        .array(z.array(z.number()))\n        .optional()\n        .describe(`The vectors to insert, required for ${MilvusAction.Insert}`),\n      topK: z.coerce\n        .number()\n        .int()\n        .min(1)\n        .max(1000)\n        .default(10)\n        .optional()\n        .describe(\n          `The number of nearest neighbors to return for ${MilvusAction.Search}. Maximum is 1000`,\n        ),\n      filter: z\n        .string()\n        .optional()\n        .describe(`Optional filter expression for ${MilvusAction.Search}`),\n      metadata: z\n        .record(z.string(), z.any())\n        .optional()\n        .describe(`Additional metadata to insert with vectors for ${MilvusAction.Insert}`),\n      ids: z\n        .array(z.string().or(z.number()))\n        .optional()\n        .describe(`Array of IDs to delete for ${MilvusAction.Delete}`),\n      searchOutput: z\n        .array(z.string())\n        .optional()\n        .describe(`Fields to return in search results for ${MilvusAction.Search}`),\n    });\n  }\n\n  public readonly emitter: ToolEmitter<ToolInput<this>, JSONToolOutput<MilvusSearchToolResult>> =\n    Emitter.root.child({\n      namespace: [\"tool\", \"database\", \"milvus\"],\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 === MilvusAction.GetCollectionInfo && !input.collectionName) {\n      throw new ToolInputValidationError(\n        `Collection name is required for ${MilvusAction.GetCollectionInfo}, ${MilvusAction.Search}, ${MilvusAction.Insert}, and ${MilvusAction.Delete} actions.`,\n      );\n    }\n    if (input.action === MilvusAction.Search && (!input.collectionName || !input.vector)) {\n      throw new ToolInputValidationError(\n        `Both collection name and vector are required for ${MilvusAction.Search} action.`,\n      );\n    }\n    if (input.action === MilvusAction.Insert && (!input.collectionName || !input.vectors)) {\n      throw new ToolInputValidationError(\n        `Both collection name and vectors are required for ${MilvusAction.Insert} action.`,\n      );\n    }\n  }\n\n  static {\n    this.register();\n  }\n\n  @Cache()\n  protected async client(): Promise<MilvusClient> {\n    try {\n      const client = new MilvusClient(this.options.connection);\n      // operation expected to fail if connection is not established correctly.\n      await client.listCollections();\n      return client;\n    } catch (error) {\n      throw new ToolError(`Unable to connect to Milvus.`, [error], {\n        isRetryable: false,\n        isFatal: true,\n      });\n    }\n  }\n\n  protected async _run(\n    input: ToolInput<this>,\n    _options: Partial<BaseToolRunOptions>,\n  ): Promise<JSONToolOutput<any>> {\n    switch (input.action) {\n      case MilvusAction.ListCollections: {\n        const collections = await this.listCollections();\n        return new JSONToolOutput(collections);\n      }\n\n      case MilvusAction.GetCollectionInfo: {\n        if (!input.collectionName) {\n          throw new ToolError(\"A collection name is required for Milvus GetCollectionInfo action\");\n        }\n        const collectionInfo = await this.getCollectionInfo(input.collectionName);\n        return new JSONToolOutput(collectionInfo);\n      }\n\n      case MilvusAction.Search: {\n        if (!input.collectionName || !input.vector) {\n          throw new ToolError(\"A collection name and vector are required for Milvus Search action\");\n        }\n        const searchResults = await this.search(input);\n        return new JSONToolOutput(searchResults);\n      }\n\n      case MilvusAction.Insert: {\n        if (!input.collectionName || !input.vectors) {\n          throw new ToolError(\n            \"A collection name and vectors are required for Milvus Insert action\",\n          );\n        }\n        const insertResults = await this.insert(input);\n        return new JSONToolOutput(insertResults);\n      }\n\n      case MilvusAction.Delete: {\n        if (!input.collectionName || !input.ids) {\n          throw new ToolError(\"Collection name and ids are required for Milvus 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.listCollections({});\n\n      if (response && response.data && Array.isArray(response.data)) {\n        return response.data.map((collection) => collection.name);\n      } else {\n        return [];\n      }\n    } catch (error) {\n      throw new ToolError(`Failed to list collections from Milvus: ${error}`);\n    }\n  }\n\n  protected async getCollectionInfo(collectionName: string): Promise<any> {\n    const client = await this.client();\n    const response = client.describeCollection({ collection_name: collectionName });\n    return response;\n  }\n\n  protected async insert(input: ToolInput<this>): Promise<any> {\n    const client = await this.client();\n    const response = await client.insert({\n      collection_name: input.collectionName as string,\n      fields_data: input.vectors!.map((vector, index) => ({\n        vector: vector,\n        ...input.metadata?.[index],\n      })),\n    });\n    return response;\n  }\n\n  protected async search(input: ToolInput<this>): Promise<any> {\n    const client = await this.client();\n    const response = await client.search({\n      collection_name: input.collectionName as string,\n      data: input.vector ?? [],\n      limit: input.topK || 10,\n      filter: input.filter,\n      output_fields: input.searchOutput,\n    });\n    return response.results;\n  }\n\n  protected async delete(input: ToolInput<this>): Promise<any> {\n    const client = await this.client();\n    const response = client.delete({\n      collection_name: input.collectionName as string,\n      filter: `id in [${input.ids?.join(\",\")}]`,\n    });\n    return response;\n  }\n}\n"]}