Class: SkillBench::Clients::ProviderRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/skill_bench/clients/provider_registry.rb

Overview

ProviderRegistry manages registration and lookup of LLM provider classes. Follows the Registry pattern for extensible provider discovery.

Class Method Summary collapse

Class Method Details

.for(name) ⇒ Class

Looks up a provider class by name. Returns NullClient if the provider is not registered (with a warning).

Parameters:

  • name (Symbol)

    the provider identifier

Returns:

  • (Class)

    the provider class or NullClient



26
27
28
29
30
31
32
33
34
# File 'lib/skill_bench/clients/provider_registry.rb', line 26

def for(name)
  providers.fetch(name) do
    SkillBench::ErrorLogger.log_error(
      StandardError.new("Unknown provider '#{name}', falling back to NullClient"),
      'ProviderRegistry Warning'
    )
    Providers::NullClient
  end
end

.for!(name) ⇒ Class

Looks up a provider class by name, raising if not found.

Parameters:

  • name (Symbol)

    the provider identifier

Returns:

  • (Class)

    the provider class

Raises:

  • (ArgumentError)

    if the provider is not registered



41
42
43
44
45
# File 'lib/skill_bench/clients/provider_registry.rb', line 41

def for!(name)
  providers.fetch(name) do
    raise ArgumentError, "Unknown provider '#{name}'. Registered: #{providers.keys.join(', ')}"
  end
end

.providersHash

Returns all registered providers.

Returns:

  • (Hash)

    mapping of provider names to classes



50
51
52
# File 'lib/skill_bench/clients/provider_registry.rb', line 50

def providers
  @providers ||= {}
end

.register(name, klass) ⇒ void

This method returns an undefined value.

Registers a provider class with a given name.

Parameters:

  • name (Symbol)

    the provider identifier (e.g., :openai, :gemini)

  • klass (Class)

    the provider class implementing the client interface



17
18
19
# File 'lib/skill_bench/clients/provider_registry.rb', line 17

def register(name, klass)
  providers[name] = klass
end