37 lines
858 B
Ruby
37 lines
858 B
Ruby
# frozen_string_literal: true
|
|
|
|
module DiscourseAi
|
|
module Discord::Bot
|
|
class Search < Base
|
|
def initialize(body)
|
|
@search = DiscourseAi::AiBot::Tools::Search
|
|
super(body)
|
|
end
|
|
|
|
def handle_interaction!
|
|
results =
|
|
@search.new(
|
|
{ search_query: @query },
|
|
persona_options: {
|
|
"max_results" => 10,
|
|
},
|
|
bot_user: nil,
|
|
llm: nil,
|
|
).invoke(&Proc.new {})
|
|
|
|
formatted_results = results[:rows].map.with_index { |result, index| <<~RESULT }.join("\n")
|
|
#{index + 1}. [#{result[0]}](<#{Discourse.base_url}#{result[1]}>)
|
|
RESULT
|
|
|
|
reply = <<~REPLY
|
|
Here are the top search results for your query:
|
|
|
|
#{formatted_results}
|
|
REPLY
|
|
|
|
create_reply(reply)
|
|
end
|
|
end
|
|
end
|
|
end
|