Class: LlmConductor::ClientFactory

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

Overview

Factory class for creating appropriate LLM client instances based on model and vendor

Class Method Summary collapse

Class Method Details

.build(model:, type:, vendor: nil) ⇒ Object



6
7
8
9
10
# File 'lib/llm_conductor/client_factory.rb', line 6

def self.build(model:, type:, vendor: nil)
  vendor ||= determine_vendor(model)
  client_class = client_class_for_vendor(vendor)
  client_class.new(model:, type:)
end

.client_class_for_vendor(vendor) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/llm_conductor/client_factory.rb', line 12

def self.client_class_for_vendor(vendor)
  client_classes = {
    anthropic: Clients::AnthropicClient,
    claude: Clients::AnthropicClient,
    openai: Clients::GptClient,
    gpt: Clients::GptClient,
    openrouter: Clients::OpenrouterClient,
    ollama: Clients::OllamaClient,
    gemini: Clients::GeminiClient,
    google: Clients::GeminiClient,
    groq: Clients::GroqClient,
    zai: Clients::ZaiClient
  }

  client_classes.fetch(vendor) do
    raise ArgumentError, "Unsupported vendor: #{vendor}. Supported vendors: #{client_classes.keys.uniq.join(', ')}"
  end
end

.determine_vendor(model) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/llm_conductor/client_factory.rb', line 31

def self.determine_vendor(model)
  case model
  when /^claude/i
    :anthropic
  when /^gpt/i
    :openai
  when /^gemini/i
    :gemini
  when /^glm/i
    :zai
  when /^(llama|mixtral|gemma|qwen)/i
    :groq
  else
    :ollama # Default to Ollama for non-specific model names
  end
end