class Captain::Tools::FaqLookupTool < Captain::Tools::BasePublicTool description 'Search FAQ responses using semantic similarity to find relevant answers' param :query, type: 'string', desc: 'The question or topic to search for in the FAQ database' def perform(_tool_context, query:) log_tool_usage('searching', { query: query }) # Use existing vector search on approved responses responses = @assistant.responses.approved.search(query).to_a if responses.empty? log_tool_usage('no_results', { query: query }) "No relevant FAQs found for: #{query}" else log_tool_usage('found_results', { query: query, count: responses.size }) format_responses(responses) end end private def format_responses(responses) responses.map { |response| format_response(response) }.join end def format_response(response) formatted_response = " Question: #{response.question} Answer: #{response.answer} " if response.documentable.present? && response.documentable.try(:external_link) formatted_response += " Source: #{response.documentable.external_link} " end formatted_response end end