module Sequel::Plugins::Pgvector::DatasetMethods

def nearest_neighbors(column, value, distance:)

def nearest_neighbors(column, value, distance:)
  value = ::Pgvector.encode(value) unless value.is_a?(String)
  quoted_column = quote_identifier(column)
  distance = distance.to_s
  operator =
    case distance
    when "inner_product"
      "<#>"
    when "cosine"
      "<=>"
    when "euclidean"
      "<->"
    when "taxicab"
      "<+>"
    when "hamming"
      "<~>"
    when "jaccard"
      "<%>"
    end
  raise ArgumentError, "Invalid distance: #{distance}" unless operator
  order = "#{quoted_column} #{operator} ?"
  neighbor_distance =
    if distance == "inner_product"
      "(#{order}) * -1"
    else
      order
    end
  select_append(Sequel.lit("#{neighbor_distance} AS neighbor_distance", value))
    .exclude(column => nil)
    .order(Sequel.lit(order, value))
end