# frozen_string_literal: true

class TranscriptSearch < RubyLLM::Tool
  description "Searches transcripts for relevant information and returns their name and ID"
  param :query, desc: "Search query"

  def initialize(respondent_category:)
    @respondent_category = respondent_category
  end

  def execute(query:)
    # Generate embedding for query
    model_map = FeatureModelMap.for_feature!("TRANSCRIPT_EMBEDDINGS")
    embedding = RubyLLM.embed(query, model: model_map.llm_model_name, provider: model_map.provider).vectors

    # Find similar documents using neighbor
    documents = @respondent_category.respondents.nearest_neighbors(
      :embedding,
      embedding,
      distance: "euclidean"
    ).limit(@respondent_category.respondents.count)

    # Return formatted context
    documents.map do |doc|
      "Name: #{doc.name}: ID: #{doc.id}"
    end.join("\n\n---\n\n")
  end
end
