import { Id, Value } from "../values/value.js";
import { DocumentByInfo, FieldTypeFromFieldPath, GenericDataModel, GenericDocument, GenericTableInfo, GenericVectorIndexConfig, NamedTableInfo, NamedVectorIndex, TableNamesInDataModel, VectorIndexNames } from "./data_model.js";
/**
 * An object with parameters for performing a vector search against a vector index.
 * @public
 */
export interface VectorSearchQuery<TableInfo extends GenericTableInfo, IndexName extends VectorIndexNames<TableInfo>> {
    /**
     * The query vector.
     *
     * This must have the same length as the `dimensions` of the index.
     * This vector search will return the IDs of the documents most similar to
     * this vector.
     */
    vector: number[];
    /**
     * The number of results to return. If specified, must be between 1 and 256
     * inclusive.
     *
     * @default 10
     */
    limit?: number;
    /**
     * Optional filter expression made up of `q.or` and `q.eq` operating
     * over the filter fields of the index.
     *
     * e.g. `filter: q => q.or(q.eq("genre", "comedy"), q.eq("genre", "drama"))`
     *
     * @param q
     * @returns
     */
    filter?: (q: VectorFilterBuilder<DocumentByInfo<TableInfo>, NamedVectorIndex<TableInfo, IndexName>>) => FilterExpression<boolean>;
}
export type VectorSearch<DataModel extends GenericDataModel, TableName extends TableNamesInDataModel<DataModel>, IndexName extends VectorIndexNames<NamedTableInfo<DataModel, TableName>>> = (tableName: TableName, indexName: IndexName, query: VectorSearchQuery<NamedTableInfo<DataModel, TableName>, IndexName>) => Promise<Array<{
    _id: Id<TableName>;
    _score: number;
}>>;
/**
 * Expressions are evaluated to produce a {@link values.Value} in the course of executing a query.
 *
 * To construct an expression, use the {@link VectorFilterBuilder} provided within
 * {@link VectorSearchQuery}.
 *
 * @typeParam T - The type that this expression evaluates to.
 * @public
 */
export declare abstract class FilterExpression<T extends Value | undefined> {
    private _isExpression;
    private _value;
}
/**
 * An interface for defining filters for vector searches.
 *
 * This has a similar interface to {@link FilterBuilder}, which is used in
 * database queries, but supports only the methods that can be efficiently
 * done in a vector search.
 *
 * @public
 */
export interface VectorFilterBuilder<Document extends GenericDocument, VectorIndexConfig extends GenericVectorIndexConfig> {
    /**
     * Is the field at `fieldName` equal to `value`
     *
     * @public
     * */
    eq<FieldName extends VectorIndexConfig["filterFields"]>(fieldName: FieldName, value: FieldTypeFromFieldPath<Document, FieldName>): FilterExpression<boolean>;
    /**
     * `exprs[0] || exprs[1] || ... || exprs[n]`
     *
     * @public
     */
    or(...exprs: Array<FilterExpression<boolean>>): FilterExpression<boolean>;
}
//# sourceMappingURL=vector_search.d.ts.map