{"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 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\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      vector: 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"]}