Class: Askcii::ProviderConfig

Inherits:
Object
  • Object
show all
Defined in:
lib/askcii/provider_config.rb

Overview

Manages provider-specific configuration metadata

Constant Summary collapse

PROVIDERS =

Provider metadata including default endpoints and requirements

{
  'openai' => {
    name: 'OpenAI',
    endpoint: 'https://api.openai.com/v1',
    requires_key: true,
    example_models: ['gpt-4', 'gpt-4-turbo', 'gpt-3.5-turbo']
  },
  'anthropic' => {
    name: 'Anthropic',
    endpoint: 'https://api.anthropic.com',
    requires_key: true,
    example_models: ['claude-3-5-sonnet-20241022', 'claude-3-opus-20240229']
  },
  'gemini' => {
    name: 'Google Gemini',
    endpoint: 'https://generativelanguage.googleapis.com/v1',
    requires_key: true,
    example_models: ['gemini-pro', 'gemini-pro-vision']
  },
  'deepseek' => {
    name: 'DeepSeek',
    endpoint: 'https://api.deepseek.com/v1',
    requires_key: true,
    example_models: ['deepseek-chat', 'deepseek-coder']
  },
  'openrouter' => {
    name: 'OpenRouter',
    endpoint: 'https://openrouter.ai/api/v1',
    requires_key: true,
    example_models: ['openai/gpt-4', 'anthropic/claude-3-opus']
  },
  'ollama' => {
    name: 'Ollama',
    endpoint: 'http://localhost:11434/v1',
    requires_key: false,
    example_models: ['llama2', 'mistral', 'codellama']
  }
}.freeze

Class Method Summary collapse

Class Method Details

.default_endpoint(provider) ⇒ String

Gets default endpoint for a provider



71
72
73
# File 'lib/askcii/provider_config.rb', line 71

def default_endpoint(provider)
  get(provider)[:endpoint]
end

.display_name(provider) ⇒ String

Gets display name for a provider



78
79
80
# File 'lib/askcii/provider_config.rb', line 78

def display_name(provider)
  get(provider)[:name]
end

.example_models(provider) ⇒ Array<String>

Gets example model IDs for a provider



92
93
94
# File 'lib/askcii/provider_config.rb', line 92

def example_models(provider)
  get(provider)[:example_models]
end

.get(provider) ⇒ Hash

Gets provider metadata

Raises:



63
64
65
66
# File 'lib/askcii/provider_config.rb', line 63

def get(provider)
  PROVIDERS[provider.to_s.downcase] or
    raise ConfigurationError, "Unknown provider: #{provider}"
end

.info(provider) ⇒ String

Gets provider metadata as a formatted string



106
107
108
109
110
111
112
113
# File 'lib/askcii/provider_config.rb', line 106

def info(provider)
   = get(provider)
  info = "#{[:name]}\n"
  info += "Endpoint: #{[:endpoint]}\n"
  info += "API Key: #{[:requires_key] ? 'Required' : 'Not required'}\n"
  info += "Example models: #{[:example_models].join(', ')}"
  info
end

.listArray<String>

Lists all available provider identifiers



49
50
51
# File 'lib/askcii/provider_config.rb', line 49

def list
  PROVIDERS.keys
end

.namesArray<String>

Lists all provider names for display



55
56
57
# File 'lib/askcii/provider_config.rb', line 55

def names
  PROVIDERS.values.map { |p| p[:name] }
end

.requires_key?(provider) ⇒ Boolean

Checks if provider requires an API key



85
86
87
# File 'lib/askcii/provider_config.rb', line 85

def requires_key?(provider)
  get(provider)[:requires_key]
end

.valid?(provider) ⇒ Boolean

Checks if a provider identifier is valid



99
100
101
# File 'lib/askcii/provider_config.rb', line 99

def valid?(provider)
  PROVIDERS.key?(provider.to_s.downcase)
end