Class: Legion::Extensions::Llm::Openai::Provider

Inherits:
Provider
  • Object
show all
Includes:
Provider::OpenAICompatible
Defined in:
lib/legion/extensions/llm/openai/provider.rb

Overview

OpenAI provider implementation for the Legion::Extensions::Llm base provider contract.

Defined Under Namespace

Modules: Capabilities

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.registry_publisherObject



31
32
33
# File 'lib/legion/extensions/llm/openai/provider.rb', line 31

def registry_publisher
  @registry_publisher ||= RegistryPublisher.new
end

Class Method Details

.capabilitiesObject



29
# File 'lib/legion/extensions/llm/openai/provider.rb', line 29

def capabilities = Capabilities

.configuration_optionsObject



19
20
21
22
23
24
25
26
27
# File 'lib/legion/extensions/llm/openai/provider.rb', line 19

def configuration_options
  %i[
    openai_api_key
    openai_api_base
    openai_organization_id
    openai_project_id
    openai_use_system_role
  ]
end

.configuration_requirementsObject



17
# File 'lib/legion/extensions/llm/openai/provider.rb', line 17

def configuration_requirements = %i[openai_api_key]

.slugObject



16
# File 'lib/legion/extensions/llm/openai/provider.rb', line 16

def slug = 'openai'

Instance Method Details

#api_baseObject



76
77
78
# File 'lib/legion/extensions/llm/openai/provider.rb', line 76

def api_base
  config.openai_api_base || 'https://api.openai.com'
end

#chat_urlObject



88
# File 'lib/legion/extensions/llm/openai/provider.rb', line 88

def chat_url = completion_url

#headersObject



80
81
82
83
84
85
86
# File 'lib/legion/extensions/llm/openai/provider.rb', line 80

def headers
  {
    'Authorization' => "Bearer #{config.openai_api_key}",
    'OpenAI-Organization' => config.openai_organization_id,
    'OpenAI-Project' => config.openai_project_id
  }.compact
end

#image_edit_urlObject



90
# File 'lib/legion/extensions/llm/openai/provider.rb', line 90

def image_edit_url = '/v1/images/edits'

#image_generation_urlObject



89
# File 'lib/legion/extensions/llm/openai/provider.rb', line 89

def image_generation_url = '/v1/images/generations'

#image_variation_urlObject



91
# File 'lib/legion/extensions/llm/openai/provider.rb', line 91

def image_variation_url = '/v1/images/variations'

#images_url(with: nil, mask: nil) ⇒ Object



92
# File 'lib/legion/extensions/llm/openai/provider.rb', line 92

def images_url(with: nil, mask: nil) = super

#list_modelsObject



98
99
100
101
102
# File 'lib/legion/extensions/llm/openai/provider.rb', line 98

def list_models
  super.tap do |models|
    self.class.registry_publisher.publish_models_async(models, readiness: readiness(live: false))
  end
end

#retrieve_model(model) ⇒ Object



94
95
96
# File 'lib/legion/extensions/llm/openai/provider.rb', line 94

def retrieve_model(model)
  connection.get("#{models_url}/#{model}").body
end