Class: Botiasloop::Tools::WebSearch

Inherits:
Botiasloop::Tool show all
Defined in:
lib/botiasloop/tools/web_search.rb

Defined Under Namespace

Classes: Result

Instance Method Summary collapse

Methods inherited from Botiasloop::Tool

#name, tool_name

Constructor Details

#initialize(searxng_url) ⇒ WebSearch

Initialize with SearXNG URL

Parameters:

  • searxng_url (String)

    SearXNG instance URL



17
18
19
# File 'lib/botiasloop/tools/web_search.rb', line 17

def initialize(searxng_url)
  @searxng_url = searxng_url
end

Instance Method Details

#execute(query:) ⇒ Hash

Execute web search

Parameters:

  • query (String)

    Search query

Returns:

  • (Hash)

    Search results

Raises:

  • (Error)

    On HTTP or connection errors



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/botiasloop/tools/web_search.rb', line 26

def execute(query:)
  uri = URI("#{@searxng_url}/search")
  uri.query = URI.encode_www_form("q" => query, "format" => "json")

  response = Net::HTTP.get_response(uri)

  unless response.is_a?(Net::HTTPSuccess)
    raise Error, "Search failed: HTTP #{response.code}"
  end

  data = JSON.parse(response.body)
  Result.new(data["results"] || []).to_h
rescue Errno::ECONNREFUSED => e
  raise Error, "Search failed: #{e.message}"
rescue JSON::ParserError => e
  raise Error, "Search failed: Invalid JSON response - #{e.message}"
end