Class: Rixie::LLM::Client::Resolver

Inherits:
Object
  • Object
show all
Defined in:
lib/rixie/llm/client/resolver.rb

Constant Summary collapse

BUILTIN_PROVIDERS =
{
  "openai" => {
    adapter: :openai,
    base_url: "https://api.openai.com/v1",
    api_key: -> { ENV["OPENAI_API_KEY"] }
  },
  "ollama" => {
    adapter: :openai,
    base_url: "http://localhost:11434/v1",
    api_key: -> { "ollama" }
  }
}.freeze

Class Method Summary collapse

Class Method Details

.resolve(model: nil, provider: nil, request_timeout: nil, max_tokens: nil, temperature: nil, parallel_tool_calls: nil) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/rixie/llm/client/resolver.rb', line 20

def self.resolve(model: nil, provider: nil, request_timeout: nil, max_tokens: nil, temperature: nil, parallel_tool_calls: nil)
  raise Rixie::NoProviderError, "No provider configured. Pass `provider:` or set Rixie.config.default_provider." if provider.nil?

  all_providers = BUILTIN_PROVIDERS.merge(Rixie.config.custom_providers)
  config = all_providers[provider.to_s]
  raise Rixie::UnknownProviderError, "Unknown provider: #{provider.inspect}" if config.nil?

  api_key = config[:api_key]
  api_key = api_key.call if api_key.respond_to?(:call)

  adapter_class = adapter_class_for(config[:adapter])
  params = {
    model: model,
    base_url: config[:base_url],
    api_key: api_key,
    request_timeout: request_timeout,
    max_tokens: max_tokens,
    temperature: temperature
  }
  params[:parallel_tool_calls] = parallel_tool_calls unless parallel_tool_calls.nil? || !(adapter_class <= Adapter::OpenAI)
  adapter_class.new(**params)
end