similarityTo method

double similarityTo(
  1. List<double> queryEmbedding
)

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;
}