Class: Prescient::Tool::Group

Inherits:
Base
  • Object
show all
Defined in:
lib/prescient/tool.rb

Overview

Ordered implementations for one logical tool capability.

Constant Summary

Constants inherited from Base

Base::DEFAULT_MAX_RESPONSE_BYTES, Base::DEFAULT_MAX_RESULTS, Base::DEFAULT_TIMEOUT, Base::MAX_QUERY_LENGTH

Instance Attribute Summary collapse

Attributes inherited from Base

#options

Instance Method Summary collapse

Methods inherited from Base

#max_response_bytes, #request_timeout, #result_limit, #validate_configuration!, #validate_query

Constructor Details

#initialize(adapters:) ⇒ Group

Returns a new instance of Group.

Parameters:

  • adapters (Array<Base>)

    Ordered capability implementations

Raises:



101
102
103
104
105
# File 'lib/prescient/tool.rb', line 101

def initialize(adapters:)
  super
  @adapters = adapters
  raise Prescient::ToolConfigurationError, 'tool group requires an adapter' if @adapters.empty?
end

Instance Attribute Details

#adaptersArray<Base> (readonly)

Returns Ordered capability implementations.

Returns:

  • (Array<Base>)

    Ordered capability implementations



98
99
100
# File 'lib/prescient/tool.rb', line 98

def adapters
  @adapters
end

Instance Method Details

#search(query, **options) ⇒ Hash

Execute the first successful adapter, falling back only for transient connection and rate-limit failures.

Parameters:

  • query (String)

    Search query

  • options (Hash)

    Per-request options

Returns:

  • (Hash)

    Normalized tool result



112
113
114
115
116
117
118
119
120
121
# File 'lib/prescient/tool.rb', line 112

def search(query, **options)
  failures = []
  @adapters.each do |adapter|
    return adapter.search(query, **options)
  rescue Prescient::ToolConnectionError, Prescient::RateLimitError => e
    failures << e
  end

  raise failures.last
end