@anvia/milvus 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Indra Zulfi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,55 @@
1
+ import { VectorFilter, VectorSearchIndex, VectorSearchRequest, VectorSearchResult, VectorSearchToolOptions } from '@anvia/core/vector-store';
2
+ import { VectorMetadata, EmbeddingModel, EmbeddedDocument } from '@anvia/core/embeddings';
3
+ import { Tool } from '@anvia/core/tool';
4
+
5
+ declare function filterToMilvusExpr(filter: VectorFilter | undefined): string | undefined;
6
+
7
+ type MilvusMetric = "COSINE" | "L2" | "IP";
8
+ type MilvusClientLike = {
9
+ hasCollection(options: {
10
+ collection_name: string;
11
+ }): Promise<{
12
+ value: boolean;
13
+ }>;
14
+ createCollection(options: Record<string, unknown>): Promise<unknown>;
15
+ createIndex(options: Record<string, unknown>): Promise<unknown>;
16
+ loadCollection(options: {
17
+ collection_name: string;
18
+ }): Promise<unknown>;
19
+ insert(options: Record<string, unknown>): Promise<unknown>;
20
+ search(options: Record<string, unknown>): Promise<unknown>;
21
+ };
22
+ type MilvusVectorStoreConnectOptions = {
23
+ client?: MilvusClientLike | undefined;
24
+ collectionName: string;
25
+ vectorSize: number;
26
+ createIfMissing?: boolean | undefined;
27
+ metric?: MilvusMetric | undefined;
28
+ };
29
+
30
+ declare class MilvusVectorIndex<T, Metadata extends VectorMetadata = VectorMetadata> implements VectorSearchIndex<T, Metadata> {
31
+ private readonly model;
32
+ private readonly client;
33
+ private readonly collectionName;
34
+ constructor(model: EmbeddingModel, client: MilvusClientLike, collectionName: string);
35
+ search(request: VectorSearchRequest): Promise<Array<VectorSearchResult<T, Metadata>>>;
36
+ searchIds(request: VectorSearchRequest): Promise<Array<{
37
+ score: number;
38
+ id: string;
39
+ }>>;
40
+ asTool(options: VectorSearchToolOptions): Tool<{
41
+ query: string;
42
+ topK?: number;
43
+ }, unknown>;
44
+ }
45
+
46
+ declare class MilvusVectorStore<T, Metadata extends VectorMetadata = VectorMetadata> {
47
+ private readonly client;
48
+ private readonly collectionName;
49
+ private constructor();
50
+ static connect<T, Metadata extends VectorMetadata = VectorMetadata>(options: MilvusVectorStoreConnectOptions): Promise<MilvusVectorStore<T, Metadata>>;
51
+ upsertDocuments(documents: Array<EmbeddedDocument<T, Metadata>>): Promise<void>;
52
+ index(model: EmbeddingModel): MilvusVectorIndex<T, Metadata>;
53
+ }
54
+
55
+ export { type MilvusClientLike, type MilvusMetric, MilvusVectorIndex, MilvusVectorStore, type MilvusVectorStoreConnectOptions, filterToMilvusExpr };
package/dist/index.js ADDED
@@ -0,0 +1,223 @@
1
+ // src/filters.ts
2
+ function filterToMilvusExpr(filter) {
3
+ if (filter === void 0) {
4
+ return void 0;
5
+ }
6
+ switch (filter.type) {
7
+ case "eq": {
8
+ const val = milvusLiteral(filter.value);
9
+ return `${filter.key} == ${val}`;
10
+ }
11
+ case "gt": {
12
+ const val = milvusLiteral(filter.value);
13
+ return `${filter.key} > ${val}`;
14
+ }
15
+ case "lt": {
16
+ const val = milvusLiteral(filter.value);
17
+ return `${filter.key} < ${val}`;
18
+ }
19
+ case "and": {
20
+ const parts = filter.filters.map(filterToMilvusExpr).filter((part) => part !== void 0);
21
+ return parts.length > 0 ? parts.map((p) => `(${p})`).join(" && ") : void 0;
22
+ }
23
+ case "or": {
24
+ const parts = filter.filters.map(filterToMilvusExpr).filter((part) => part !== void 0);
25
+ return parts.length > 0 ? parts.map((p) => `(${p})`).join(" || ") : void 0;
26
+ }
27
+ }
28
+ }
29
+ function milvusLiteral(value) {
30
+ if (value === null) {
31
+ return "null";
32
+ }
33
+ if (typeof value === "string") {
34
+ return `"${value.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
35
+ }
36
+ return String(value);
37
+ }
38
+
39
+ // src/search-index.ts
40
+ import { embedText } from "@anvia/core/embeddings";
41
+ import {
42
+ createVectorSearchTool
43
+ } from "@anvia/core/vector-store";
44
+
45
+ // src/helpers.ts
46
+ import { createHash } from "crypto";
47
+
48
+ // src/types.ts
49
+ var documentIdFieldName = "__anvia_document_id";
50
+ var documentFieldName = "__anvia_document";
51
+ var reservedFieldPrefix = "__anvia_";
52
+
53
+ // src/helpers.ts
54
+ function pointId(id) {
55
+ return createHash("sha256").update(id).digest("hex").slice(0, 32);
56
+ }
57
+ function serializeDocument(document) {
58
+ return typeof document === "string" ? document : JSON.stringify(document);
59
+ }
60
+ function parseDocument(document) {
61
+ if (document === null || document === void 0) {
62
+ return "";
63
+ }
64
+ if (typeof document !== "string") {
65
+ return document;
66
+ }
67
+ try {
68
+ return JSON.parse(document);
69
+ } catch {
70
+ return document;
71
+ }
72
+ }
73
+ function assertNoReservedFields(metadata) {
74
+ for (const key of Object.keys(metadata ?? {})) {
75
+ if (key.startsWith(reservedFieldPrefix)) {
76
+ throw new Error(`Metadata key ${key} is reserved for Anvia Milvus fields`);
77
+ }
78
+ }
79
+ }
80
+ function milvusRows(document) {
81
+ if (document.embeddings.length === 0) {
82
+ throw new Error(`Document ${document.id} has no embeddings`);
83
+ }
84
+ assertNoReservedFields(document.metadata);
85
+ return document.embeddings.map((embedding, index) => {
86
+ const logicalId = document.embeddings.length === 1 ? document.id : `${document.id}#embedding:${index}`;
87
+ return {
88
+ id: pointId(logicalId),
89
+ [documentIdFieldName]: document.id,
90
+ [documentFieldName]: serializeDocument(document.document),
91
+ vector: embedding.vector,
92
+ ...document.metadata ?? {}
93
+ };
94
+ });
95
+ }
96
+ function parseQueryResults(response, threshold) {
97
+ const raw = response;
98
+ const matches = raw.results?.[0] ?? [];
99
+ const byId = /* @__PURE__ */ new Map();
100
+ for (const match of matches) {
101
+ const score = match.score ?? 0;
102
+ if (threshold !== void 0 && score < threshold) {
103
+ continue;
104
+ }
105
+ const id = String(match[documentIdFieldName] ?? match.id);
106
+ const result = {
107
+ id,
108
+ score,
109
+ document: parseDocument(match[documentFieldName]),
110
+ ...metadataFromRow(match)
111
+ };
112
+ const current = byId.get(id);
113
+ if (current === void 0 || result.score > current.score) {
114
+ byId.set(id, result);
115
+ }
116
+ }
117
+ return [...byId.values()];
118
+ }
119
+ async function defaultMilvusClient() {
120
+ const { MilvusClient } = await import("@zilliz/milvus2-sdk-node");
121
+ return new MilvusClient({ address: "localhost:19530" });
122
+ }
123
+ async function ensureCollection(client, collectionName, vectorSize, metric) {
124
+ const { value: exists } = await client.hasCollection({ collection_name: collectionName });
125
+ if (exists) {
126
+ return;
127
+ }
128
+ await client.createCollection({
129
+ collection_name: collectionName,
130
+ fields: [
131
+ { name: "id", data_type: "VarChar", max_length: 64, is_primary_key: true },
132
+ { name: documentIdFieldName, data_type: "VarChar", max_length: 4096 },
133
+ { name: documentFieldName, data_type: "VarChar", max_length: 65535 },
134
+ { name: "vector", data_type: "FloatVector", dim: vectorSize }
135
+ ],
136
+ metric_type: metric
137
+ });
138
+ await client.createIndex({
139
+ collection_name: collectionName,
140
+ field_name: "vector",
141
+ index_type: "HNSW",
142
+ metric_type: metric,
143
+ params: { M: 16, efConstruction: 256 }
144
+ });
145
+ }
146
+ function metadataFromRow(row) {
147
+ const skipKeys = /* @__PURE__ */ new Set(["id", "score", documentIdFieldName, documentFieldName, "vector"]);
148
+ const metadata = Object.fromEntries(
149
+ Object.entries(row).filter(
150
+ ([key]) => !skipKeys.has(key) && !key.startsWith(reservedFieldPrefix)
151
+ )
152
+ );
153
+ return Object.keys(metadata).length === 0 ? {} : { metadata };
154
+ }
155
+
156
+ // src/search-index.ts
157
+ var MilvusVectorIndex = class {
158
+ constructor(model, client, collectionName) {
159
+ this.model = model;
160
+ this.client = client;
161
+ this.collectionName = collectionName;
162
+ }
163
+ model;
164
+ client;
165
+ collectionName;
166
+ async search(request) {
167
+ const queryEmbedding = await embedText(this.model, request.query);
168
+ const filterExpr = filterToMilvusExpr(request.filter);
169
+ const response = await this.client.search({
170
+ collection_name: this.collectionName,
171
+ vector: [queryEmbedding.vector],
172
+ limit: request.topK,
173
+ ...filterExpr !== void 0 ? { filter: filterExpr } : {},
174
+ output_fields: [documentIdFieldName, documentFieldName, "*"]
175
+ });
176
+ return parseQueryResults(response, request.threshold);
177
+ }
178
+ async searchIds(request) {
179
+ return (await this.search(request)).map(({ score, id }) => ({ score, id }));
180
+ }
181
+ asTool(options) {
182
+ return createVectorSearchTool(this, options);
183
+ }
184
+ };
185
+
186
+ // src/store.ts
187
+ var MilvusVectorStore = class _MilvusVectorStore {
188
+ constructor(client, collectionName) {
189
+ this.client = client;
190
+ this.collectionName = collectionName;
191
+ }
192
+ client;
193
+ collectionName;
194
+ static async connect(options) {
195
+ const client = options.client ?? await defaultMilvusClient();
196
+ if (options.createIfMissing !== false) {
197
+ await ensureCollection(
198
+ client,
199
+ options.collectionName,
200
+ options.vectorSize,
201
+ options.metric ?? "COSINE"
202
+ );
203
+ }
204
+ await client.loadCollection({ collection_name: options.collectionName });
205
+ return new _MilvusVectorStore(client, options.collectionName);
206
+ }
207
+ async upsertDocuments(documents) {
208
+ const rows = documents.flatMap((document) => milvusRows(document));
209
+ await this.client.insert({
210
+ collection_name: this.collectionName,
211
+ data: rows
212
+ });
213
+ }
214
+ index(model) {
215
+ return new MilvusVectorIndex(model, this.client, this.collectionName);
216
+ }
217
+ };
218
+ export {
219
+ MilvusVectorIndex,
220
+ MilvusVectorStore,
221
+ filterToMilvusExpr
222
+ };
223
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/filters.ts","../src/search-index.ts","../src/helpers.ts","../src/types.ts","../src/store.ts"],"sourcesContent":["import type { VectorFilter } from \"@anvia/core/vector-store\";\n\nexport function filterToMilvusExpr(filter: VectorFilter | undefined): string | undefined {\n if (filter === undefined) {\n return undefined;\n }\n\n switch (filter.type) {\n case \"eq\": {\n const val = milvusLiteral(filter.value);\n return `${filter.key} == ${val}`;\n }\n case \"gt\": {\n const val = milvusLiteral(filter.value);\n return `${filter.key} > ${val}`;\n }\n case \"lt\": {\n const val = milvusLiteral(filter.value);\n return `${filter.key} < ${val}`;\n }\n case \"and\": {\n const parts = filter.filters\n .map(filterToMilvusExpr)\n .filter((part): part is string => part !== undefined);\n return parts.length > 0 ? parts.map((p) => `(${p})`).join(\" && \") : undefined;\n }\n case \"or\": {\n const parts = filter.filters\n .map(filterToMilvusExpr)\n .filter((part): part is string => part !== undefined);\n return parts.length > 0 ? parts.map((p) => `(${p})`).join(\" || \") : undefined;\n }\n }\n}\n\nfunction milvusLiteral(value: string | number | boolean | null): string {\n if (value === null) {\n return \"null\";\n }\n if (typeof value === \"string\") {\n return `\"${value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`;\n }\n return String(value);\n}\n","import { type EmbeddingModel, embedText, type VectorMetadata } from \"@anvia/core/embeddings\";\nimport type { Tool } from \"@anvia/core/tool\";\nimport {\n createVectorSearchTool,\n type VectorSearchIndex,\n type VectorSearchRequest,\n type VectorSearchResult,\n type VectorSearchToolOptions,\n} from \"@anvia/core/vector-store\";\nimport { filterToMilvusExpr } from \"./filters.js\";\nimport { parseQueryResults } from \"./helpers.js\";\nimport { documentFieldName, documentIdFieldName, type MilvusClientLike } from \"./types.js\";\n\nexport class MilvusVectorIndex<T, Metadata extends VectorMetadata = VectorMetadata>\n implements VectorSearchIndex<T, Metadata>\n{\n constructor(\n private readonly model: EmbeddingModel,\n private readonly client: MilvusClientLike,\n private readonly collectionName: string,\n ) {}\n\n async search(request: VectorSearchRequest): Promise<Array<VectorSearchResult<T, Metadata>>> {\n const queryEmbedding = await embedText(this.model, request.query);\n const filterExpr = filterToMilvusExpr(request.filter);\n const response = await this.client.search({\n collection_name: this.collectionName,\n vector: [queryEmbedding.vector],\n limit: request.topK,\n ...(filterExpr !== undefined ? { filter: filterExpr } : {}),\n output_fields: [documentIdFieldName, documentFieldName, \"*\"],\n });\n return parseQueryResults<T, Metadata>(response, request.threshold);\n }\n\n async searchIds(request: VectorSearchRequest): Promise<Array<{ score: number; id: string }>> {\n return (await this.search(request)).map(({ score, id }) => ({ score, id }));\n }\n\n asTool(options: VectorSearchToolOptions): Tool<{ query: string; topK?: number }, unknown> {\n return createVectorSearchTool(this, options);\n }\n}\n","import { createHash } from \"node:crypto\";\nimport type { EmbeddedDocument, VectorMetadata } from \"@anvia/core/embeddings\";\nimport type { VectorSearchResult } from \"@anvia/core/vector-store\";\nimport {\n documentFieldName,\n documentIdFieldName,\n type MilvusClientLike,\n type MilvusMetric,\n reservedFieldPrefix,\n} from \"./types.js\";\n\nexport function pointId(id: string): string {\n return createHash(\"sha256\").update(id).digest(\"hex\").slice(0, 32);\n}\n\nexport function serializeDocument(document: unknown): string {\n return typeof document === \"string\" ? document : JSON.stringify(document);\n}\n\nexport function parseDocument<T>(document: unknown): T {\n if (document === null || document === undefined) {\n return \"\" as T;\n }\n if (typeof document !== \"string\") {\n return document as T;\n }\n try {\n return JSON.parse(document) as T;\n } catch {\n return document as T;\n }\n}\n\nexport function assertNoReservedFields(metadata: VectorMetadata | undefined): void {\n for (const key of Object.keys(metadata ?? {})) {\n if (key.startsWith(reservedFieldPrefix)) {\n throw new Error(`Metadata key ${key} is reserved for Anvia Milvus fields`);\n }\n }\n}\n\nexport function milvusRows<T, Metadata extends VectorMetadata>(\n document: EmbeddedDocument<T, Metadata>,\n): Array<Record<string, unknown>> {\n if (document.embeddings.length === 0) {\n throw new Error(`Document ${document.id} has no embeddings`);\n }\n\n assertNoReservedFields(document.metadata);\n\n return document.embeddings.map((embedding, index) => {\n const logicalId =\n document.embeddings.length === 1 ? document.id : `${document.id}#embedding:${index}`;\n return {\n id: pointId(logicalId),\n [documentIdFieldName]: document.id,\n [documentFieldName]: serializeDocument(document.document),\n vector: embedding.vector,\n ...(document.metadata ?? {}),\n };\n });\n}\n\nexport function parseQueryResults<T, Metadata extends VectorMetadata>(\n response: unknown,\n threshold: number | undefined,\n): Array<VectorSearchResult<T, Metadata>> {\n const raw = response as {\n results?: Array<\n Array<{\n id: string;\n score?: number;\n [documentIdFieldName]?: string;\n [documentFieldName]?: string;\n [key: string]: unknown;\n }>\n >;\n };\n const matches = raw.results?.[0] ?? [];\n\n const byId = new Map<string, VectorSearchResult<T, Metadata>>();\n\n for (const match of matches) {\n const score = match.score ?? 0;\n if (threshold !== undefined && score < threshold) {\n continue;\n }\n\n const id = String(match[documentIdFieldName] ?? match.id);\n const result = {\n id,\n score,\n document: parseDocument(match[documentFieldName]),\n ...metadataFromRow<Metadata>(match),\n } as VectorSearchResult<T, Metadata>;\n\n const current = byId.get(id);\n if (current === undefined || result.score > current.score) {\n byId.set(id, result);\n }\n }\n\n return [...byId.values()];\n}\n\nexport async function defaultMilvusClient(): Promise<MilvusClientLike> {\n const { MilvusClient } = await import(\"@zilliz/milvus2-sdk-node\");\n return new MilvusClient({ address: \"localhost:19530\" }) as unknown as MilvusClientLike;\n}\n\nexport async function ensureCollection(\n client: MilvusClientLike,\n collectionName: string,\n vectorSize: number,\n metric: MilvusMetric,\n): Promise<void> {\n const { value: exists } = await client.hasCollection({ collection_name: collectionName });\n if (exists) {\n return;\n }\n\n await client.createCollection({\n collection_name: collectionName,\n fields: [\n { name: \"id\", data_type: \"VarChar\", max_length: 64, is_primary_key: true },\n { name: documentIdFieldName, data_type: \"VarChar\", max_length: 4096 },\n { name: documentFieldName, data_type: \"VarChar\", max_length: 65535 },\n { name: \"vector\", data_type: \"FloatVector\", dim: vectorSize },\n ],\n metric_type: metric,\n });\n\n await client.createIndex({\n collection_name: collectionName,\n field_name: \"vector\",\n index_type: \"HNSW\",\n metric_type: metric,\n params: { M: 16, efConstruction: 256 },\n });\n}\n\nfunction metadataFromRow<Metadata extends VectorMetadata>(\n row: Record<string, unknown>,\n): { metadata?: Metadata | undefined } {\n const skipKeys = new Set([\"id\", \"score\", documentIdFieldName, documentFieldName, \"vector\"]);\n const metadata = Object.fromEntries(\n Object.entries(row).filter(\n ([key]) => !skipKeys.has(key) && !key.startsWith(reservedFieldPrefix),\n ),\n ) as Metadata;\n return Object.keys(metadata).length === 0 ? {} : { metadata };\n}\n","export const documentIdFieldName = \"__anvia_document_id\";\nexport const documentFieldName = \"__anvia_document\";\nexport const reservedFieldPrefix = \"__anvia_\";\n\nexport type MilvusMetric = \"COSINE\" | \"L2\" | \"IP\";\n\nexport type MilvusClientLike = {\n hasCollection(options: { collection_name: string }): Promise<{ value: boolean }>;\n createCollection(options: Record<string, unknown>): Promise<unknown>;\n createIndex(options: Record<string, unknown>): Promise<unknown>;\n loadCollection(options: { collection_name: string }): Promise<unknown>;\n insert(options: Record<string, unknown>): Promise<unknown>;\n search(options: Record<string, unknown>): Promise<unknown>;\n};\n\nexport type MilvusVectorStoreConnectOptions = {\n client?: MilvusClientLike | undefined;\n collectionName: string;\n vectorSize: number;\n createIfMissing?: boolean | undefined;\n metric?: MilvusMetric | undefined;\n};\n","import type { EmbeddedDocument, EmbeddingModel, VectorMetadata } from \"@anvia/core/embeddings\";\nimport { defaultMilvusClient, ensureCollection, milvusRows } from \"./helpers.js\";\nimport { MilvusVectorIndex } from \"./search-index.js\";\nimport type { MilvusClientLike, MilvusVectorStoreConnectOptions } from \"./types.js\";\n\nexport class MilvusVectorStore<T, Metadata extends VectorMetadata = VectorMetadata> {\n private constructor(\n private readonly client: MilvusClientLike,\n private readonly collectionName: string,\n ) {}\n\n static async connect<T, Metadata extends VectorMetadata = VectorMetadata>(\n options: MilvusVectorStoreConnectOptions,\n ): Promise<MilvusVectorStore<T, Metadata>> {\n const client = options.client ?? (await defaultMilvusClient());\n\n if (options.createIfMissing !== false) {\n await ensureCollection(\n client,\n options.collectionName,\n options.vectorSize,\n options.metric ?? \"COSINE\",\n );\n }\n\n await client.loadCollection({ collection_name: options.collectionName });\n return new MilvusVectorStore<T, Metadata>(client, options.collectionName);\n }\n\n async upsertDocuments(documents: Array<EmbeddedDocument<T, Metadata>>): Promise<void> {\n const rows = documents.flatMap((document) => milvusRows(document));\n await this.client.insert({\n collection_name: this.collectionName,\n data: rows,\n });\n }\n\n index(model: EmbeddingModel): MilvusVectorIndex<T, Metadata> {\n return new MilvusVectorIndex(model, this.client, this.collectionName);\n }\n}\n"],"mappings":"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","names":[]}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@anvia/milvus",
3
+ "version": "0.3.0",
4
+ "description": "Milvus vector store adapter for Anvia.",
5
+ "author": "anvia",
6
+ "maintainer": "Indra Zulfi",
7
+ "license": "MIT",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/anvia-hq/anvia",
11
+ "directory": "packages/vector-stores/milvus"
12
+ },
13
+ "files": [
14
+ "dist"
15
+ ],
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "type": "module",
20
+ "main": "./dist/index.js",
21
+ "types": "./dist/index.d.ts",
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/index.d.ts",
25
+ "import": "./dist/index.js"
26
+ }
27
+ },
28
+ "dependencies": {
29
+ "@zilliz/milvus2-sdk-node": "^2.5.0",
30
+ "@anvia/core": "0.6.1"
31
+ },
32
+ "devDependencies": {
33
+ "@types/node": "^24.9.1",
34
+ "tsup": "^8.5.0",
35
+ "typescript": "^5.9.3",
36
+ "vitest": "^4.0.8"
37
+ },
38
+ "scripts": {
39
+ "build": "tsup src/index.ts --format esm --dts --sourcemap --clean",
40
+ "test": "vitest run",
41
+ "typecheck": "tsc --noEmit"
42
+ }
43
+ }