From 6ed6eaaca2325a4825e4fa1058f26083f3490eb4 Mon Sep 17 00:00:00 2001 From: ryjiang Date: Thu, 18 Apr 2024 09:57:47 +0800 Subject: [PATCH] make transformer optional (#305) * make transform optional Signed-off-by: shanghaikid * update readme Signed-off-by: shanghaikid * fix http test Signed-off-by: shanghaikid * fix format test Signed-off-by: shanghaikid * fix sparse array test Signed-off-by: ryjiang --------- Signed-off-by: shanghaikid Signed-off-by: ryjiang --- README.md | 45 ++++++++++++++++---------- milvus/types/Data.ts | 4 +-- milvus/utils/Bytes.ts | 20 +++++++++--- milvus/utils/Format.ts | 47 +++++++++++++++------------- test/grpc/BFloat16Vector.spec.ts | 16 +++------- test/grpc/Basic.spec.ts | 2 +- test/grpc/BinaryVector.spec.ts | 2 +- test/grpc/Data.spec.ts | 26 +++++++-------- test/grpc/DynamicSchema.spec.ts | 4 +-- test/grpc/Float16Vector.spec.ts | 15 ++++----- test/grpc/Insert.spec.ts | 2 +- test/grpc/MultipleVectors.spec.ts | 4 +-- test/grpc/PartitionKey.spec.ts | 4 +-- test/grpc/SparseVector.array.spec.ts | 6 ++-- test/grpc/SparseVector.coo.spec.ts | 4 +-- test/grpc/SparseVector.csr.spec.ts | 4 +-- test/grpc/SparseVector.dict.spec.ts | 4 +-- test/tools/bench.ts | 2 +- test/utils/Bytes.spec.ts | 4 +-- test/utils/Format.spec.ts | 4 +-- test/utils/Validate.spec.ts | 4 +-- 21 files changed, 119 insertions(+), 104 deletions(-) diff --git a/README.md b/README.md index cea7dad4..811bdc17 100644 --- a/README.md +++ b/README.md @@ -41,9 +41,7 @@ Machine learning and neural networks often use half-precision data types, such a > However, these data types are not natively available in the Node.js environment, To enable users to utilize these formats, the Node SDK provides support for transformers during insert, query, and search operations. > -> There are four built-in transformers available for performing a float32 to bytes transformation. -> `f32ArrayToF16Bytes`, `f16BytesToF32Array`, `f32ArrayToBf16Bytes`, `bf16BytesToF32Array` -> The transform parameter is optional. If not specified, it defaults to inserting/outputting bytes. +> There are four default transformers for performing a float32 to bytes transformation for BF16 and Float16 types: f32ArrayToF16Bytes, f16BytesToF32Array, f32ArrayToBf16Bytes, and bf16BytesToF32Array. If you wish to use your own transformers for Float16 and BFloat16, you can specify them. > > ```javascript > import { @@ -52,32 +50,33 @@ Machine learning and neural networks often use half-precision data types, such a > f32ArrayToBf16Bytes, > bf16BytesToF32Array, > } from '@zilliz/milvus2-sdk-node'; -> // insert +> +> //Insert float32 array for the float16 field. Node SDK will transform it to bytes using `f32ArrayToF16Bytes`. You can use your own transformer. > const insert = await milvusClient.insert({ > collection_name: COLLECTION_NAME, > data: data, -> transformers: { -> [DataType.BFloat16Vector]: f32ArrayToBf16Bytes, -> }, +> // transformers: { +> // [DataType.BFloat16Vector]: f32ArrayToF16Bytes, // use your own transformer +> // }, > }); -> // query +> // query: output float32 array other than bytes, > const query = await milvusClient.query({ > collection_name: COLLECTION_NAME, > filter: 'id > 0', > output_fields: ['vector', 'id'], -> transformers: { -> [DataType.BFloat16Vector]: bf16BytesToF32Array, -> }, +> // transformers: { +> // [DataType.BFloat16Vector]: bf16BytesToF32Array, // use your own transformer +> // }, > }); -> // search +> // search: use bytes to search, output float32 array > const search = await milvusClient.search({ -> vector: data[0].vector, +> vector: data[0].vector, // if you pass bytes, no transform will performed > collection_name: COLLECTION_NAME, > output_fields: ['id', 'vector'], > limit: 5, -> transformers: { -> [DataType.BFloat16Vector]: bf16BytesToF32Array, -> }, +> // transformers: { +> // [DataType.BFloat16Vector]: bf16BytesToF32Array, // use your own transformer +> // }, > }); > ``` @@ -112,6 +111,17 @@ const sparseArray = [undefined, 0.0, 0.5, 0.3, undefined, 0.2]; Starting from Milvus 2.4, it supports [Multi-Vector Search](https://milvus.io/docs/multi-vector-search.md#API-overview), you can continue to utilize the search API with similar parameters to perform multi-vector searches, and the format of the results remains unchanged. ```javascript +// single-vector search on a collection with multiple vector fields +const search = await milvusClient.search({ + collection_name: collection_name, + data: [1, 2, 3, 4, 5, 6, 7, 8], + anns_field: 'vector', // required if you have multiple vector fields in the collection + params: { nprobe: 2 }, + filter: 'id > 100', + limit: 5, +}); + +// multi-vector search on a collection with multiple vector fields const search = await milvusClient.search({ collection_name: collection_name, data: [ @@ -126,6 +136,7 @@ const search = await milvusClient.search({ }, ], limit: 5, + filter: 'id > 100', }); ``` @@ -317,7 +328,7 @@ const res = await client.search({ - [What is Milvus](https://milvus.io/) - [Milvus Node SDK API reference](https://milvus.io/api-reference/node/v2.3.x/About.md) -- [Feder, anns index visuliazation tool](https://github.com/zilliztech/feder) +- [Feder, anns index visualization tool](https://github.com/zilliztech/feder) ## How to contribute diff --git a/milvus/types/Data.ts b/milvus/types/Data.ts index dc1931f6..a59c5c0e 100644 --- a/milvus/types/Data.ts +++ b/milvus/types/Data.ts @@ -15,8 +15,8 @@ import { // all value types supported by milvus export type FloatVector = number[]; -export type Float16Vector = number[]; -export type BFloat16Vector = number[]; +export type Float16Vector = number[] | Uint8Array; +export type BFloat16Vector = number[] | Uint8Array; export type BinaryVector = number[]; export type SparseVectorArray = (number | undefined)[]; export type SparseVectorDic = { [key: string]: number }; diff --git a/milvus/utils/Bytes.ts b/milvus/utils/Bytes.ts index 59ef0641..66f354b6 100644 --- a/milvus/utils/Bytes.ts +++ b/milvus/utils/Bytes.ts @@ -10,6 +10,7 @@ import { SparseVectorCSR, SparseVectorCOO, BFloat16Vector, + SparseVectorArray, } from '..'; /** @@ -164,8 +165,13 @@ export const sparseToBytes = (data: SparseFloatVector): Uint8Array => { switch (type) { case 'array': - indices = Object.keys(data).map(Number); - values = Object.values(data); + for (let i = 0; i < (data as SparseVectorArray).length; i++) { + const element = (data as SparseVectorArray)[i]; + if (element !== undefined && !isNaN(element)) { + indices.push(i); + values.push(element); + } + } break; case 'coo': indices = Object.values( @@ -244,7 +250,7 @@ export const bytesToSparseRow = (bufferData: Buffer): SparseFloatVector => { * This function builds a placeholder group in bytes format for Milvus. * * @param {Root} milvusProto - The root object of the Milvus protocol. - * @param {VectorTypes[]} searchVectors - An array of search vectors. + * @param {VectorTypes[]} vectors - An array of search vectors. * @param {DataType} vectorDataType - The data type of the vectors. * * @returns {Uint8Array} The placeholder group in bytes format. @@ -265,10 +271,14 @@ export const buildPlaceholderGroupBytes = ( bytes = vectors.map(v => f32ArrayToBinaryBytes(v as BinaryVector)); break; case DataType.BFloat16Vector: - bytes = vectors.map(v => f32ArrayToBf16Bytes(v as BFloat16Vector)); + bytes = vectors.map(v => + Array.isArray(v) ? f32ArrayToBf16Bytes(v as BFloat16Vector) : v + ); break; case DataType.Float16Vector: - bytes = vectors.map(v => f32ArrayToF16Bytes(v as Float16Vector)); + bytes = vectors.map(v => + Array.isArray(v) ? f32ArrayToF16Bytes(v as Float16Vector) : v + ); break; case DataType.SparseFloatVector: bytes = vectors.map(v => sparseToBytes(v as SparseFloatVector)); diff --git a/milvus/utils/Format.ts b/milvus/utils/Format.ts index 291b08fc..1c745bf3 100644 --- a/milvus/utils/Format.ts +++ b/milvus/utils/Format.ts @@ -36,6 +36,11 @@ import { getSparseFloatVectorType, InsertTransformers, OutputTransformers, + SparseVectorArray, + f32ArrayToBf16Bytes, + f32ArrayToF16Bytes, + bf16BytesToF32Array, + f16BytesToF32Array, } from '../'; /** @@ -445,22 +450,18 @@ export const buildFieldDataMap = ( for (let i = 0; i < f16Bytes.byteLength; i += f16Dim) { const slice = f16Bytes.slice(i, i + f16Dim); const isFloat16 = dataKey === 'float16_vector'; - const isBFloat16 = dataKey === 'bfloat16_vector'; let dataType: DataType.BFloat16Vector | DataType.Float16Vector; dataType = isFloat16 ? DataType.Float16Vector : DataType.BFloat16Vector; - if ( - (isFloat16 || isBFloat16) && - transformers && - transformers[dataType] - ) { - field_data.push(transformers[dataType]!(slice)); - } else { - field_data.push(slice); - } + const localTransformers = transformers || { + [DataType.BFloat16Vector]: bf16BytesToF32Array, + [DataType.Float16Vector]: f16BytesToF32Array, + }; + + field_data.push(localTransformers[dataType]!(slice)); } break; case 'sparse_float_vector': @@ -545,22 +546,24 @@ export const buildFieldData = ( transformers?: InsertTransformers ): FieldData => { const { type, elementType, name } = field; + const isFloat32 = Array.isArray(rowData[name]); + switch (DataTypeMap[type]) { case DataType.BinaryVector: case DataType.FloatVector: return rowData[name]; case DataType.BFloat16Vector: - if (transformers && transformers[DataType.BFloat16Vector]) { - return transformers[DataType.BFloat16Vector]( - rowData[name] as BFloat16Vector - ); - } + const bf16Transformer = + transformers?.[DataType.BFloat16Vector] || f32ArrayToBf16Bytes; + return isFloat32 + ? bf16Transformer(rowData[name] as BFloat16Vector) + : rowData[name]; case DataType.Float16Vector: - if (transformers && transformers[DataType.Float16Vector]) { - return transformers[DataType.Float16Vector]( - rowData[name] as Float16Vector - ); - } + const f16Transformer = + transformers?.[DataType.Float16Vector] || f32ArrayToF16Bytes; + return isFloat32 + ? f16Transformer(rowData[name] as Float16Vector) + : rowData[name]; case DataType.JSON: return Buffer.from(JSON.stringify(rowData[name] || {})); case DataType.Array: @@ -728,7 +731,7 @@ export const buildSearchRequest = ( searchSimpleReq.vector || searchSimpleReq.data; - // format saerching vector + // format searching vector searchingVector = formatSearchVector(searchingVector, field.dataType!); // create search request @@ -898,7 +901,7 @@ export const formatSearchVector = ( return [searchVector] as VectorTypes[]; } case DataType.SparseFloatVector: - const type = getSparseFloatVectorType(searchVector as VectorTypes); + const type = getSparseFloatVectorType(searchVector as SparseVectorArray); if (type !== 'unknown') { return [searchVector] as VectorTypes[]; } diff --git a/test/grpc/BFloat16Vector.spec.ts b/test/grpc/BFloat16Vector.spec.ts index 0b1dd827..8179f21e 100644 --- a/test/grpc/BFloat16Vector.spec.ts +++ b/test/grpc/BFloat16Vector.spec.ts @@ -65,9 +65,6 @@ describe(`BFloat16 vector API testing`, () => { const insert = await milvusClient.insert({ collection_name: COLLECTION_NAME, data: data, - transformers: { - [DataType.BFloat16Vector]: f32ArrayToBf16Bytes, - }, }); // console.log(' insert', insert); @@ -108,9 +105,6 @@ describe(`BFloat16 vector API testing`, () => { collection_name: COLLECTION_NAME, filter: 'id > 0', output_fields: ['vector', 'id'], - transformers: { - [DataType.BFloat16Vector]: bf16BytesToF32Array, - }, }); // console.dir(query, { depth: null }); @@ -127,13 +121,10 @@ describe(`BFloat16 vector API testing`, () => { it(`search with Bfloat16 vector should be successful`, async () => { const search = await milvusClient.search({ - vector: data[0].vector, + data: f32ArrayToBf16Bytes(data[0].vector), collection_name: COLLECTION_NAME, output_fields: ['id', 'vector'], limit: 5, - transformers: { - [DataType.BFloat16Vector]: bf16BytesToF32Array, - }, }); // console.log('search', search); @@ -144,7 +135,10 @@ describe(`BFloat16 vector API testing`, () => { it(`search with Bfloat16 vector and nq > 0 should be successful`, async () => { const search = await milvusClient.search({ - vector: [data[0].vector, data[1].vector], + data: [ + f32ArrayToBf16Bytes(data[0].vector), + f32ArrayToBf16Bytes(data[1].vector), + ], collection_name: COLLECTION_NAME, output_fields: ['id', 'vector'], limit: 5, diff --git a/test/grpc/Basic.spec.ts b/test/grpc/Basic.spec.ts index 84b5b563..bd092fcf 100644 --- a/test/grpc/Basic.spec.ts +++ b/test/grpc/Basic.spec.ts @@ -75,7 +75,7 @@ describe(`Basic API without database`, () => { it(`search should be successful`, async () => { const search = await milvusClient.search({ collection_name: COLLECTION_NAME, - vector: [1, 2, 3, 4], + data: [1, 2, 3, 4], }); expect(search.status.error_code).toEqual(ErrorCode.SUCCESS); }); diff --git a/test/grpc/BinaryVector.spec.ts b/test/grpc/BinaryVector.spec.ts index 67864d48..cd27bfbd 100644 --- a/test/grpc/BinaryVector.spec.ts +++ b/test/grpc/BinaryVector.spec.ts @@ -102,7 +102,7 @@ describe(`Binary vectors API testing`, () => { it(`search with binary vector should be successful`, async () => { const search = await milvusClient.search({ - vector: data[0].vector, + data: data[0].vector, collection_name: COLLECTION_NAME, output_fields: ['id', 'vector'], limit: 5, diff --git a/test/grpc/Data.spec.ts b/test/grpc/Data.spec.ts index c66840a9..74be5790 100644 --- a/test/grpc/Data.spec.ts +++ b/test/grpc/Data.spec.ts @@ -184,7 +184,7 @@ describe(`Data.API`, () => { // const res = await milvusClient.search({ // collection_name: COLLECTION_NAME, // filter: '', - // vector: [1, 2, 3, 4], + // data: [1, 2, 3, 4], // limit: limit, // metric_type: 'IP', // }); @@ -222,7 +222,7 @@ describe(`Data.API`, () => { collection_name: COLLECTION_NAME, partition_names: [PARTITION_NAME], filter: '', - vector: [1, 2, 3, 4], + data: [1, 2, 3, 4], topk: limit, }); @@ -234,7 +234,7 @@ describe(`Data.API`, () => { const res = await milvusClient.search({ collection_name: COLLECTION_NAME, filter: '', - vector: [1, 2, 3, 4], + data: [1, 2, 3, 4], }); expect(res.status.error_code).toEqual(ErrorCode.SUCCESS); @@ -247,7 +247,7 @@ describe(`Data.API`, () => { const res = await milvusClient.search({ collection_name: COLLECTION_NAME, filter: '', - vector: [1, 2, 3, 4], + data: [1, 2, 3, 4], limit: limit, params: { nprobe: 1024 }, }); @@ -259,7 +259,7 @@ describe(`Data.API`, () => { const res2 = await milvusClient.search({ collection_name: COLLECTION_NAME, filter: '', - vectors: [[1, 2, 3, 4]], + data: [[1, 2, 3, 4]], limit: limit, offset: 2, params: { nprobe: 1024 }, @@ -274,7 +274,7 @@ describe(`Data.API`, () => { const res = await milvusClient.search({ collection_name: COLLECTION_NAME, filter: 'int64 < 10000', - vector: [1, 2, 3, 4], + data: [1, 2, 3, 4], limit: limit, params: { nprobe: 1024 }, }); @@ -287,7 +287,7 @@ describe(`Data.API`, () => { const res2 = await milvusClient.search({ collection_name: COLLECTION_NAME, expr: 'int64 < 10000', - vector: [1, 2, 3, 4], + data: [1, 2, 3, 4], limit: limit, params: { nprobe: 1024 }, }); @@ -302,7 +302,7 @@ describe(`Data.API`, () => { const res = await milvusClient.search({ collection_name: COLLECTION_NAME, filter: 'int64 < 10000', - vector: [1, 2, 3, 4], + data: [1, 2, 3, 4], limit: limit, params: { nprobe: 1024, radius: 20, range_filter: 15 }, }); @@ -318,7 +318,7 @@ describe(`Data.API`, () => { collection_name: COLLECTION_NAME, // partition_names: [], filter: '', - vector: [1, 2, 3, 4], + data: [1, 2, 3, 4], limit: 4, output_fields: ['id', 'json', VECTOR_FIELD_NAME], }; @@ -340,7 +340,7 @@ describe(`Data.API`, () => { collection_name: COLLECTION_NAME, // partition_names: [], filter: 'json["number"] >= 0', - vector: [1, 2, 3, 4], + data: [1, 2, 3, 4], limit: 4, output_fields: ['id', 'json'], }; @@ -361,7 +361,7 @@ describe(`Data.API`, () => { collection_name: COLLECTION_NAME, // partition_names: [], expr: '', - vectors: [[1, 2, 3, 4]], + data: [[1, 2, 3, 4]], search_params: { anns_field: VECTOR_FIELD_NAME, topk: '4', @@ -381,7 +381,7 @@ describe(`Data.API`, () => { collection_name: COLLECTION_NAME, // partition_names: [], expr: '', - vectors: [[1, 2, 3, 4]], + data: [[1, 2, 3, 4]], search_params: { anns_field: VECTOR_FIELD_NAME, topk: '4', @@ -402,7 +402,7 @@ describe(`Data.API`, () => { collection_name: COLLECTION_NAME, // partition_names: [], expr: '', - vectors: [[1, 2, 3]], + data: [[1, 2, 3]], search_params: { anns_field: VECTOR_FIELD_NAME, topk: '4', diff --git a/test/grpc/DynamicSchema.spec.ts b/test/grpc/DynamicSchema.spec.ts index 01585f33..64bebe98 100644 --- a/test/grpc/DynamicSchema.spec.ts +++ b/test/grpc/DynamicSchema.spec.ts @@ -115,7 +115,7 @@ describe(`Dynamic schema API`, () => { const search = await milvusClient.search({ collection_name: COLLECTION, limit: 10, - vectors: [ + data: [ [1, 2, 3, 4], [1, 2, 3, 4], ], @@ -132,7 +132,7 @@ describe(`Dynamic schema API`, () => { const search2 = await milvusClient.search({ collection_name: COLLECTION, limit: 10, - vector: [1, 2, 3, 4], + data: [1, 2, 3, 4], expr: 'id > 0', output_fields: ['json', 'id', 'dynamic_int64', 'dynamic_varChar'], }); diff --git a/test/grpc/Float16Vector.spec.ts b/test/grpc/Float16Vector.spec.ts index 907808fe..58aaaa54 100644 --- a/test/grpc/Float16Vector.spec.ts +++ b/test/grpc/Float16Vector.spec.ts @@ -58,13 +58,10 @@ describe(`Float16 vector API testing`, () => { // console.dir(describe.schema, { depth: null }); }); - it(`insert flaot16 vector data should be successful`, async () => { + it(`insert float16 vector data should be successful`, async () => { const insert = await milvusClient.insert({ collection_name: COLLECTION_NAME, data, - transformers: { - [DataType.Float16Vector]: f32ArrayToF16Bytes, - }, }); // console.log(' insert', insert); @@ -105,9 +102,6 @@ describe(`Float16 vector API testing`, () => { collection_name: COLLECTION_NAME, filter: 'id > 0', output_fields: ['vector', 'id'], - transformers: { - [DataType.Float16Vector]: f16BytesToF32Array, - }, }); // verify the query result @@ -122,7 +116,7 @@ describe(`Float16 vector API testing`, () => { it(`search with float16 vector should be successful`, async () => { const search = await milvusClient.search({ - vector: data[0].vector, + data: data[0].vector, collection_name: COLLECTION_NAME, output_fields: ['id', 'vector'], limit: 5, @@ -136,7 +130,10 @@ describe(`Float16 vector API testing`, () => { it(`search with float16 vector and nq > 0 should be successful`, async () => { const search = await milvusClient.search({ - vector: [data[0].vector, data[1].vector], + data: [ + f32ArrayToF16Bytes(data[0].vector), + f32ArrayToF16Bytes(data[1].vector), + ], collection_name: COLLECTION_NAME, output_fields: ['id', 'vector'], limit: 5, diff --git a/test/grpc/Insert.spec.ts b/test/grpc/Insert.spec.ts index 6024e26a..433c73b1 100644 --- a/test/grpc/Insert.spec.ts +++ b/test/grpc/Insert.spec.ts @@ -335,7 +335,7 @@ describe(`Insert API`, () => { const search = await milvusClient.search({ collection_name: COLLECTION_NAME, - vector: genFloatVector({ dim: 4 }) as number[], + data: genFloatVector({ dim: 4 }) as number[], output_fields: ['json', 'id', 'varChar_array'], }); // console.log('search', search.results); diff --git a/test/grpc/MultipleVectors.spec.ts b/test/grpc/MultipleVectors.spec.ts index be31be43..f8f24378 100644 --- a/test/grpc/MultipleVectors.spec.ts +++ b/test/grpc/MultipleVectors.spec.ts @@ -204,7 +204,7 @@ describe(`Multiple vectors API testing`, () => { anns_field: 'vector1', }, { - data: [1, 2, 3, 4], + data: f32ArrayToF16Bytes([1, 2, 3, 4]), anns_field: 'vector2', }, { @@ -254,7 +254,7 @@ describe(`Multiple vectors API testing`, () => { params: { nprobe: 2 }, }, { - data: [1, 2, 3, 4], + data: f32ArrayToF16Bytes([1, 2, 3, 4]), anns_field: 'vector2', }, ], diff --git a/test/grpc/PartitionKey.spec.ts b/test/grpc/PartitionKey.spec.ts index f21ff779..f08fe5cd 100644 --- a/test/grpc/PartitionKey.spec.ts +++ b/test/grpc/PartitionKey.spec.ts @@ -202,7 +202,7 @@ describe(`Partition key API`, () => { it(`Search Collection should be successful`, async () => { const res = await milvusClient.search({ collection_name: COLLECTION_DATA_NAME, - vector: [1, 2, 3, 4], + data: [1, 2, 3, 4], expr: 'varChar in ["apple"]', output_fields: ['varChar'], }); @@ -214,7 +214,7 @@ describe(`Partition key API`, () => { const search = await milvusClient.search({ collection_name: COLLECTION_DATA_NAME, partition_names: ['p'], - vector: [1, 2, 3, 4], + data: [1, 2, 3, 4], expr: 'varChar in ["apple"]', output_fields: ['varChar'], }); diff --git a/test/grpc/SparseVector.array.spec.ts b/test/grpc/SparseVector.array.spec.ts index 2f1364b5..6349269d 100644 --- a/test/grpc/SparseVector.array.spec.ts +++ b/test/grpc/SparseVector.array.spec.ts @@ -62,7 +62,7 @@ describe(`Sparse vectors type:object API testing`, () => { data, }); - // console.log('data to insert', data); + // console.log('insert', insert); expect(insert.status.error_code).toEqual(ErrorCode.SUCCESS); expect(insert.succ_index.length).toEqual(data.length); @@ -119,7 +119,7 @@ describe(`Sparse vectors type:object API testing`, () => { it(`search with sparse vector should be successful`, async () => { const search = await milvusClient.search({ - vector: data[0].vector, + data: data[0].vector, collection_name: COLLECTION_NAME, output_fields: ['id', 'vector'], limit: 5, @@ -131,7 +131,7 @@ describe(`Sparse vectors type:object API testing`, () => { it(`search with sparse vector with nq > 1 should be successful`, async () => { const search = await milvusClient.search({ - vectors: [data[0].vector, data[1].vector], + data: [data[0].vector, data[1].vector], collection_name: COLLECTION_NAME, output_fields: ['id', 'vector'], limit: 5, diff --git a/test/grpc/SparseVector.coo.spec.ts b/test/grpc/SparseVector.coo.spec.ts index abb5a25e..bfe2a9de 100644 --- a/test/grpc/SparseVector.coo.spec.ts +++ b/test/grpc/SparseVector.coo.spec.ts @@ -119,7 +119,7 @@ describe(`Sparse vectors type:coo API testing`, () => { it(`search with sparse vector should be successful`, async () => { const search = await milvusClient.search({ - vector: data[0].vector, + data: data[0].vector, collection_name: COLLECTION_NAME, output_fields: ['id', 'vector'], limit: 5, @@ -131,7 +131,7 @@ describe(`Sparse vectors type:coo API testing`, () => { it(`search with sparse vector with nq > 1 should be successful`, async () => { const search = await milvusClient.search({ - vectors: [data[0].vector, data[1].vector], + data: [data[0].vector, data[1].vector], collection_name: COLLECTION_NAME, output_fields: ['id', 'vector'], limit: 5, diff --git a/test/grpc/SparseVector.csr.spec.ts b/test/grpc/SparseVector.csr.spec.ts index c87e501f..c3e63ff3 100644 --- a/test/grpc/SparseVector.csr.spec.ts +++ b/test/grpc/SparseVector.csr.spec.ts @@ -117,7 +117,7 @@ describe(`Sparse vectors type:CSR API testing`, () => { it(`search with sparse vector should be successful`, async () => { const search = await milvusClient.search({ - vector: data[0].vector, + data: data[0].vector, collection_name: COLLECTION_NAME, output_fields: ['id', 'vector'], limit: 5, @@ -129,7 +129,7 @@ describe(`Sparse vectors type:CSR API testing`, () => { it(`search with sparse vector with nq > 1 should be successful`, async () => { const search = await milvusClient.search({ - vectors: [data[0].vector, data[1].vector], + data: [data[0].vector, data[1].vector], collection_name: COLLECTION_NAME, output_fields: ['id', 'vector'], limit: 5, diff --git a/test/grpc/SparseVector.dict.spec.ts b/test/grpc/SparseVector.dict.spec.ts index bdcaa569..62062844 100644 --- a/test/grpc/SparseVector.dict.spec.ts +++ b/test/grpc/SparseVector.dict.spec.ts @@ -111,7 +111,7 @@ describe(`Sparse vectors type:dict API testing`, () => { it(`search with sparse vector should be successful`, async () => { const search = await milvusClient.search({ - vector: data[0].vector, + data: data[0].vector, collection_name: COLLECTION_NAME, output_fields: ['id', 'vector'], limit: 5, @@ -123,7 +123,7 @@ describe(`Sparse vectors type:dict API testing`, () => { it(`search with sparse vector with nq > 1 should be successful`, async () => { const search = await milvusClient.search({ - vectors: [data[0].vector, data[1].vector], + data: [data[0].vector, data[1].vector], collection_name: COLLECTION_NAME, output_fields: ['id', 'vector'], limit: 5, diff --git a/test/tools/bench.ts b/test/tools/bench.ts index 3329d64f..65856e14 100644 --- a/test/tools/bench.ts +++ b/test/tools/bench.ts @@ -70,7 +70,7 @@ const COLLECTION_NAME = 'bench_milvus'; console.time('Search time'); const search = await milvusClient.search({ collection_name: COLLECTION_NAME, - vector: vectorsData[i]['vector'], + data: vectorsData[i]['vector'], output_fields: ['id', 'int64', 'varChar'], limit: 5, }); diff --git a/test/utils/Bytes.spec.ts b/test/utils/Bytes.spec.ts index d354c911..b3dec666 100644 --- a/test/utils/Bytes.spec.ts +++ b/test/utils/Bytes.spec.ts @@ -84,7 +84,7 @@ describe('Data <-> Bytes Test', () => { expect(getSparseFloatVectorType(data2)).toEqual('unknown'); }); - it('should convet f16b -> f32 and f32 -> f16b successfully', () => { + it('should transform f16b -> f32 and f32 -> f16b successfully', () => { const data = [0.123456789, -0.987654321, 3.14159265]; const f16Bytes = f32ArrayToF16Bytes(data); const f32Array = f16BytesToF32Array(f16Bytes); @@ -95,7 +95,7 @@ describe('Data <-> Bytes Test', () => { } }); - it('should convert bf16b -> f32 and f32 -> bf16b successfully', () => { + it('should transform bf16b -> f32 and f32 -> bf16b successfully', () => { const data = [0.123456789, -0.987654321, 3.14159265]; const bf16Bytes = f32ArrayToBf16Bytes(data); const f32Array = bf16BytesToF32Array(bf16Bytes); diff --git a/test/utils/Format.spec.ts b/test/utils/Format.spec.ts index a8108cf9..c4a9eb7a 100644 --- a/test/utils/Format.spec.ts +++ b/test/utils/Format.spec.ts @@ -147,12 +147,12 @@ describe('utils/format', () => { it('does not throw an error if vectors or vector is defined', () => { const data1 = { collection_name: 'my_collection', - vectors: [[]], + data: [[]], }; const data2 = { collection_name: 'my_collection', - vector: [], + data: [], }; expect(() => checkSearchParams(data1)).not.toThrow(); diff --git a/test/utils/Validate.spec.ts b/test/utils/Validate.spec.ts index 8169a2c0..71697cc1 100644 --- a/test/utils/Validate.spec.ts +++ b/test/utils/Validate.spec.ts @@ -26,12 +26,12 @@ describe('utils/validate', () => { it('does not throw an error if vectors or vector is defined', () => { const data1 = { collection_name: 'my_collection', - vectors: [[]], + data: [[]], }; const data2 = { collection_name: 'my_collection', - vector: [], + data: [], }; expect(() => checkSearchParams(data1)).not.toThrow();