function cosineSimilarity(a: number[], b: number[]): number {
const dot = a.reduce((sum, ai, i) => sum + ai * b[i], 0);
const normA = Math.sqrt(a.reduce((sum, ai) => sum + ai * ai, 0));
const normB = Math.sqrt(b.reduce((sum, bi) => sum + bi * bi, 0));
return dot / (normA * normB);
}
const queryEmbedding = queryResponse.results[0].embedding as number[];
const similarities = docsResponse.results.map((d, i) => ({
score: cosineSimilarity(queryEmbedding, d.embedding as number[]),
text: documents[i],
}));
similarities.sort((a, b) => b.score - a.score);
similarities.forEach(s => console.log(`${s.score.toFixed(4)} ${s.text.slice(0, 80)}`));