Class: SkillBench::Models::Provider

Inherits:
Object
  • Object
show all
Defined in:
lib/skill_bench/models/provider.rb

Overview

Represents an agent runtime + LLM provider

Constant Summary collapse

ALLOWED_PROVIDERS =
(Clients::ProviderSchemas.names.map(&:to_s) + %w[mock]).freeze
ENV_OVERRIDABLE_SETTINGS =

Settings that can be overridden via environment variables.

%i[api_key model base_url endpoint location project_id api_version].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name:, runtime:, llm:, config: {}) ⇒ Provider

Initialize a new Provider

Parameters:

  • name (String)

    Provider name (e.g., “openai”)

  • runtime (String)

    Agent runtime (e.g., “opencode”)

  • llm (String)

    LLM provider (e.g., “openai”)

  • config (Hash) (defaults to: {})

    Provider-specific configuration



21
22
23
24
25
26
# File 'lib/skill_bench/models/provider.rb', line 21

def initialize(name:, runtime:, llm:, config: {})
  @name = name
  @runtime = runtime
  @llm = llm
  @config = config.is_a?(Hash) ? config.transform_keys(&:to_sym) : {}
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



9
10
11
# File 'lib/skill_bench/models/provider.rb', line 9

def config
  @config
end

#llmObject (readonly)

Returns the value of attribute llm.



9
10
11
# File 'lib/skill_bench/models/provider.rb', line 9

def llm
  @llm
end

#nameObject (readonly)

Returns the value of attribute name.



9
10
11
# File 'lib/skill_bench/models/provider.rb', line 9

def name
  @name
end

#runtimeObject (readonly)

Returns the value of attribute runtime.



9
10
11
# File 'lib/skill_bench/models/provider.rb', line 9

def runtime
  @runtime
end

Instance Method Details

#merged_configHash

Returns merged config with environment variable fallbacks. Checks both ‘SKILL_BENCH_<PROVIDER>_<SETTING>` (documented standard) and `<PROVIDER>_<SETTING>` (legacy) naming conventions.

Returns:

  • (Hash)

    Merged configuration

Raises:

  • (ArgumentError)

    if provider name is invalid or API key is missing



34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/skill_bench/models/provider.rb', line 34

def merged_config
  raise ArgumentError, "Invalid provider name: #{name}" unless ALLOWED_PROVIDERS.include?(name)

  merged = config.dup
  ENV_OVERRIDABLE_SETTINGS.each do |setting|
    merged[setting] = resolve_env_setting(setting)
  end

  api_key = merged[:api_key]
  raise ArgumentError, "API key not found for provider '#{name}'. Set SKILL_BENCH_#{name.upcase}_API_KEY environment variable or provide in config." if api_key.nil? || api_key.to_s.empty?

  merged
end