Class: CompletionKit::ApiConfig
- Inherits:
-
Object
- Object
- CompletionKit::ApiConfig
- Defined in:
- app/services/completion_kit/api_config.rb
Class Method Summary collapse
- .available_models(provider: nil, scope: :generation) ⇒ Object
- .errors_for_model(model_name) ⇒ Object
- .for_model(model_name) ⇒ Object
- .for_provider(provider_name) ⇒ Object
- .provider_for_model(model_name) ⇒ Object
- .valid_for_model?(model_name) ⇒ Boolean
Class Method Details
.available_models(provider: nil, scope: :generation) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'app/services/completion_kit/api_config.rb', line 56 def self.available_models(provider: nil, scope: :generation) query = case scope when :judging then Model.for_judging when :generation then Model.for_generation else Model.active end query = query.where(provider: provider) if provider.present? models = query.order(:provider, :display_name).map do |m| { id: m.model_id, name: m.display_name || m.model_id, provider: m.provider } end return models if models.any? configured = ProviderCredential.pluck(:provider) providers = provider.present? ? [provider.to_s] : configured providers.flat_map do |provider_name| next [] unless configured.include?(provider_name) client = LlmClient.for_provider(provider_name, for_provider(provider_name)) client.available_models.map { |model| model.symbolize_keys.merge(provider: provider_name) } rescue StandardError [] end.uniq { |model| model[:id] } end |
.errors_for_model(model_name) ⇒ Object
51 52 53 54 |
# File 'app/services/completion_kit/api_config.rb', line 51 def self.errors_for_model(model_name) client = LlmClient.for_model(model_name, for_model(model_name)) client.configuration_errors end |
.for_model(model_name) ⇒ Object
3 4 5 6 |
# File 'app/services/completion_kit/api_config.rb', line 3 def self.for_model(model_name) provider = provider_for_model(model_name) provider ? for_provider(provider) : {} end |
.for_provider(provider_name) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'app/services/completion_kit/api_config.rb', line 8 def self.for_provider(provider_name) provider = provider_name.to_s stored = ProviderCredential.find_by(provider: provider)&.config_hash || {} defaults = case provider when "openai" { provider: "openai", api_key: CompletionKit.config.openai_api_key || ENV["OPENAI_API_KEY"] } when "anthropic" { provider: "anthropic", api_key: CompletionKit.config.anthropic_api_key || ENV["ANTHROPIC_API_KEY"] } when "ollama" { provider: "ollama", api_key: CompletionKit.config.ollama_api_key || ENV["OLLAMA_API_KEY"], api_endpoint: CompletionKit.config.ollama_api_endpoint || ENV["OLLAMA_API_ENDPOINT"] } when "openrouter" { provider: "openrouter", api_key: ENV["OPENROUTER_API_KEY"] } else {} end defaults.merge(stored.compact) end |
.provider_for_model(model_name) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'app/services/completion_kit/api_config.rb', line 32 def self.provider_for_model(model_name) available_match = available_models.find { |model| model[:id] == model_name.to_s } return available_match[:provider] if available_match case model_name.to_s when /\Agpt-/ "openai" when /\Aclaude-/ "anthropic" else nil end end |