///
import { keyValueObj, DataType, ConsistencyLevelEnum, collectionNameReq, resStatusResponse, RANKER_TYPE, FunctionObject, VectorTypes, BFloat16Vector, Float16Vector, SparseVectorDic, SparseFloatVector, Int8Vector } from '../';
export interface SearchParam {
anns_field: string;
topk: string | number;
metric_type: string;
params: string;
offset?: number;
round_decimal?: number;
ignore_growing?: boolean;
group_by_field?: string;
group_size?: number;
strict_group_size?: boolean;
hints?: string;
[key: string]: any;
}
export type SearchText = string;
export type SearchEmbList = VectorTypes[];
export type SearchVector = VectorTypes;
export type SearchData = SearchVector | SearchText | SearchEmbList;
export interface SearchReq extends collectionNameReq {
anns_field?: string;
partition_names?: string[];
expr?: string;
exprValues?: keyValueObj;
search_params: SearchParam;
vectors: SearchData | SearchData[];
output_fields?: string[];
travel_timestamp?: string;
vector_type: DataType.BinaryVector | DataType.FloatVector;
nq?: number;
consistency_level?: ConsistencyLevelEnum;
transformers?: OutputTransformers;
}
export interface FunctionScore {
functions: FunctionObject[];
params: keyValueObj;
}
export interface SearchSimpleReq extends collectionNameReq {
partition_names?: string[];
anns_field?: string;
data: SearchData | SearchData[];
vector?: SearchData | SearchData[];
output_fields?: string[];
limit?: number;
topk?: number;
offset?: number;
filter?: string;
expr?: string;
exprValues?: keyValueObj;
params?: keyValueObj;
metric_type?: string;
consistency_level?: ConsistencyLevelEnum;
ignore_growing?: boolean;
group_by_field?: string;
group_size?: number;
strict_group_size?: boolean;
hints?: string;
round_decimal?: number;
transformers?: OutputTransformers;
rerank?: RerankerObj | FunctionObject | FunctionScore;
nq?: number;
}
export type HybridSearchSingleReq = Pick & {
data: SearchData;
expr?: string;
exprValues?: keyValueObj;
params?: keyValueObj;
transformers?: OutputTransformers;
};
export interface SearchIteratorReq extends Omit {
limit?: number;
batchSize: number;
external_filter_fn?: (row: SearchResultData) => boolean;
}
export type RerankerObj = {
strategy: RANKER_TYPE | string;
params: keyValueObj;
};
export type HybridSearchReq = Omit & {
data: HybridSearchSingleReq[];
rerank?: RerankerObj | FunctionObject | FunctionScore;
};
export interface SearchRes extends resStatusResponse {
results: {
top_k: number;
fields_data: {
type: string;
field_name: string;
field_id: number;
field: 'vectors' | 'scalars';
vectors?: {
dim: string;
data: 'float_vector' | 'binary_vector';
float_vector?: {
data: number[];
};
binary_vector?: Buffer;
};
scalars: {
[x: string]: any;
data: string;
};
}[];
scores: number[];
ids: {
int_id?: {
data: number[];
};
str_id?: {
data: string[];
};
id_field: 'int_id' | 'str_id';
};
num_queries: number;
topks: number[];
output_fields: string[];
group_by_field_value: string;
recalls: number[];
search_iterator_v2_results?: Record;
_search_iterator_v2_results?: string;
all_search_count?: number;
};
collection_name: string;
session_ts: number;
}
export type OutputTransformers = {
[DataType.BFloat16Vector]?: (bf16bytes: Uint8Array) => BFloat16Vector;
[DataType.Float16Vector]?: (f16: Uint8Array) => Float16Vector;
[DataType.SparseFloatVector]?: (sparse: SparseVectorDic) => SparseFloatVector;
[DataType.Int8Vector]?: (int8Vector: Int8Array) => Int8Vector;
};
export type DetermineResultsType> = T['vectors'] extends [SearchData] ? SearchResultData[] : T['vectors'] extends SearchData[] ? SearchResultData[][] : T['vector'] extends SearchData ? SearchResultData[] : T['data'] extends SearchData ? SearchResultData[] : T['data'] extends SearchData[] ? SearchResultData[][] : SearchResultData[];
export interface SearchResultData {
[x: string]: any;
score: number;
id: string;
}
export interface SearchResults extends resStatusResponse {
results: DetermineResultsType;
recalls: number[];
session_ts: number;
collection_name: string;
all_search_count?: number;
search_iterator_v2_results?: Record;
_search_iterator_v2_results?: string;
}