Class: LlmConductor::ClientFactory
- Inherits:
-
Object
- Object
- LlmConductor::ClientFactory
- 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
- .build(model:, type:, vendor: nil) ⇒ Object
- .client_class_for_vendor(vendor) ⇒ Object
- .determine_vendor(model) ⇒ Object
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 |