Module: Brute::Providers

Defined in:
lib/brute/providers.rb,
lib/brute/providers/shell.rb,
lib/brute/providers/ollama.rb,
lib/brute/providers/models_dev.rb,
lib/brute/providers/shell_response.rb

Defined Under Namespace

Classes: ModelsDev, Ollama, Shell, ShellResponse

Constant Summary collapse

ALL =
{
  'anthropic' => ->(key) { LLM.anthropic(key: key).tap { Patches::AnthropicToolRole.apply! } },
  'openai' => ->(key) { LLM.openai(key: key) },
  'google' => ->(key) { LLM.google(key: key) },
  'deepseek' => ->(key) { LLM.deepseek(key: key) },
  'ollama' => ->(_key) { Providers::Ollama.new },
  'xai' => ->(key) { LLM.xai(key: key) },
  'opencode_zen' => ->(key) { LLM::OpencodeZen.new(key: key) },
  'opencode_go' => ->(key) { LLM::OpencodeGo.new(key: key) },
  'shell' => ->(_key) { Providers::Shell.new },
}.freeze

Class Method Summary collapse

Class Method Details

.guess_from_envObject

Resolve the LLM provider from environment variables.

Checks in order:

1. LLM_API_KEY + LLM_PROVIDER (explicit)
2. OPENCODE_API_KEY (implicit: provider = opencode_zen)
3. ANTHROPIC_API_KEY (implicit: provider = anthropic)
4. OPENAI_API_KEY   (implicit: provider = openai)
5. GOOGLE_API_KEY   (implicit: provider = google)
6. OLLAMA_HOST      (implicit: provider = ollama, local inference)

Returns nil if no key is found. Error is deferred to the caller.



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/brute/providers.rb', line 33

def self.guess_from_env
  if ENV['LLM_API_KEY']
    key = ENV['LLM_API_KEY']
    name = ENV.fetch('LLM_PROVIDER', 'opencode_zen').downcase
  elsif ENV['OPENCODE_API_KEY']
    key = ENV['OPENCODE_API_KEY']
    name = 'opencode_zen'
  elsif ENV['ANTHROPIC_API_KEY']
    key = ENV['ANTHROPIC_API_KEY']
    name = 'anthropic'
  elsif ENV['OPENAI_API_KEY']
    key = ENV['OPENAI_API_KEY']
    name = 'openai'
  elsif ENV['GOOGLE_API_KEY']
    key = ENV['GOOGLE_API_KEY']
    name = 'google'
  elsif ENV['OLLAMA_HOST']
    key = 'none'
    name = 'ollama'
  else
    return nil
  end

  factory = Providers::ALL[name]
  raise "Unknown LLM provider: #{name}. Available: #{Providers::ALL.keys.join(', ')}" unless factory

  factory.call(key)
end