interface HNSWConfig$1<T> {
    M: number;
    efConstruction: number;
    distanceFunction: (a: T, b: T) => number;
    distanceToQuery?: (query: T, target: T) => number;
}
interface Neighbor$1 {
    idx: number;
    distance: number;
}
interface HNSWIndex$1<T> {
    insertNode: (vector: T) => void;
    search: (queryVector: T, k: number, efSearch?: number) => Neighbor$1[];
    deleteNode: (nodeIdx: number) => boolean;
    getStats: () => {
        nodeCount: number;
        activeNodeCount: number;
        deletedNodeCount: number;
        entryPoint: {
            idx: number;
            level: number;
        };
    };
}
declare function createHNSWIndex$1<T>(config: HNSWConfig$1<T>): HNSWIndex$1<T>;

interface HNSWConfig {
    M: number;
    efConstruction: number;
    metricType: 'cosine' | 'l2';
}
interface Neighbor {
    idx: number;
    distance: number;
}
interface HNSWIndex {
    insertNode: (vector: number[]) => void;
    search: (queryVector: number[], k: number, efSearch?: number) => Neighbor[];
    deleteNode: (nodeIdx: number) => boolean;
    getStats: () => {
        nodeCount: number;
        activeNodeCount: number;
        deletedNodeCount: number;
        entryPoint: {
            idx: number;
            level: number;
        };
    };
}
declare function createHNSWIndex(config: HNSWConfig): HNSWIndex;

declare const hnsw: {
    createIndex: typeof createHNSWIndex;
    createIndexGeneric: typeof createHNSWIndex$1;
};

export { hnsw };
