similarityTo method
Calculates cosine similarity between this document's embedding and a query.
Implementation
double similarityTo(List<double> queryEmbedding) {
if (embedding == null || embedding!.isEmpty) return 0.0;
if (queryEmbedding.isEmpty || embedding!.length != queryEmbedding.length)
return 0.0;
double dotProduct = 0.0;
double normA = 0.0;
double normB = 0.0;
for (int i = 0; i < embedding!.length; i++) {
dotProduct += embedding![i] * queryEmbedding[i];
normA += embedding![i] * embedding![i];
normB += queryEmbedding[i] * queryEmbedding[i];
}
if (normA == 0.0 || normB == 0.0) return 0.0;
// We can avoid sqrt if vectors are already normalized, but assume they aren't.
// Actually, OpenAI embeddings are normalized to length 1.
return dotProduct;
}