UNPKG

vecstore-js

Version:

A pluggable, browser-native vector database using IndexedDB with support for HNSW and local embeddings.

22 lines (21 loc) 795 B
export const cosineSimilarity = (a, b) => { if (a.length === 0 || b.length === 0 || a.length !== b.length) return 0; const dot = a.reduce((sum, val, i) => sum + val * b[i], 0); const magnitudeA = Math.sqrt(a.reduce((sum, val) => sum + val * val, 0)); const magnitudeB = Math.sqrt(b.reduce((sum, val) => sum + val * val, 0)); if (magnitudeA === 0 || magnitudeB === 0) return 0; return dot / (magnitudeA * magnitudeB); }; export class CosineSearchAlgorithm { async search(queryVector, documents, topK) { const scored = documents.map((doc) => ({ ...doc, score: cosineSimilarity(queryVector, doc.vector) })); return scored .sort((a, b) => b.score - a.score) .slice(0, topK); } }