Class: Prescient::Configuration

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

Overview

Configuration class for managing Prescient settings and providers

Handles global settings like timeouts and retry behavior, as well as provider registration and instantiation.

Constant Summary collapse

DEFAULT_SENSITIVE_KEYS =

Returns Built-in provider option keys removed from output.

Returns:

  • (Array<Symbol>)

    Built-in provider option keys removed from output

[:api_key, :password, :token, :secret].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Initialize configuration with default values



123
124
125
126
127
128
129
130
131
132
# File 'lib/prescient.rb', line 123

def initialize
  @default_provider = :ollama
  @timeout = 30
  @retry_attempts = 3
  @retry_delay = 1.0
  @fallback_providers = []
  @sensitive_keys = []
  @providers = {}
  @provider_instances = {} # : Hash[Symbol, untyped]
end

Instance Attribute Details

#default_providerSymbol

Returns The default provider to use when none specified.

Returns:

  • (Symbol)

    The default provider to use when none specified



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

def default_provider
  @default_provider
end

#fallback_providersArray<Symbol>

Returns List of fallback providers to try when primary fails.

Returns:

  • (Array<Symbol>)

    List of fallback providers to try when primary fails



114
115
116
# File 'lib/prescient.rb', line 114

def fallback_providers
  @fallback_providers
end

#providersHash (readonly)

Returns Registered providers configuration.

Returns:

  • (Hash)

    Registered providers configuration



120
121
122
# File 'lib/prescient.rb', line 120

def providers
  @providers
end

#retry_attemptsInteger

Returns Number of retry attempts for failed requests.

Returns:

  • (Integer)

    Number of retry attempts for failed requests



108
109
110
# File 'lib/prescient.rb', line 108

def retry_attempts
  @retry_attempts
end

#retry_delayFloat

Returns Delay between retry attempts in seconds.

Returns:

  • (Float)

    Delay between retry attempts in seconds



111
112
113
# File 'lib/prescient.rb', line 111

def retry_delay
  @retry_delay
end

#sensitive_keysArray<Symbol>

Returns Additional keys removed from provider information.

Returns:

  • (Array<Symbol>)

    Additional keys removed from provider information



117
118
119
# File 'lib/prescient.rb', line 117

def sensitive_keys
  @sensitive_keys
end

#timeoutInteger

Returns Default timeout in seconds for API requests.

Returns:

  • (Integer)

    Default timeout in seconds for API requests



105
106
107
# File 'lib/prescient.rb', line 105

def timeout
  @timeout
end

Instance Method Details

#add_provider(name, provider_class, **options) ⇒ void

This method returns an undefined value.

Register a new AI provider

Examples:

Add OpenAI provider

config.add_provider(:openai, Prescient::Provider::OpenAI,
                    api_key: 'sk-...',
                    chat_model: 'gpt-4.1-mini')

Parameters:

  • name (Symbol)

    Unique identifier for the provider

  • provider_class (Class)

    Provider class that inherits from Base

  • options (Hash)

    Configuration options for the provider

Options Hash (**options):

  • :api_key (String)

    API key for authenticated providers

  • :url (String)

    Base URL for self-hosted providers

  • :model, (String)

    :chat_model Model name for text generation

  • :embedding_model (String)

    Model name for embeddings



158
159
160
161
162
163
164
165
# File 'lib/prescient.rb', line 158

def add_provider(name, provider_class, **options)
  provider_name = name.to_sym
  @providers[provider_name] = {
    class:   provider_class,
    options: options,
  }
  @provider_instances.delete(provider_name)
end

#available_providersArray<Symbol>

Get list of providers that currently pass Base#available?.

Providers are included when their health check reports reachable: true, or, for legacy adapters, status == "healthy".

Returns:

  • (Array<Symbol>)

    List of reachable provider names



186
187
188
189
190
191
192
# File 'lib/prescient.rb', line 186

def available_providers
  @providers.keys.select do |name|
    provider(name)&.available?
  rescue StandardError
    false
  end
end

#provider(name) ⇒ Base?

Instantiate a provider by name

Parameters:

  • name (Symbol)

    The provider name

Returns:

  • (Base, nil)

    Provider instance or nil if not found



171
172
173
174
175
176
177
178
# File 'lib/prescient.rb', line 171

def provider(name)
  provider_name = name.to_sym
  provider_config = @providers[provider_name]
  return nil unless provider_config

  provider_options = provider_config[:options] # : Hash[Symbol, untyped]
  @provider_instances[provider_name] ||= provider_config[:class].new(**provider_options)
end