Class: Legion::Extensions::Llm::Openai::Provider
- Inherits:
-
Provider
- Object
- Provider
- Legion::Extensions::Llm::Openai::Provider
- Includes:
- Provider::OpenAICompatible, Logging::Helper
- 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
- .capabilities ⇒ Object
- .configuration_options ⇒ Object
- .configuration_requirements ⇒ Object
- .slug ⇒ Object
Instance Method Summary collapse
- #api_base ⇒ Object
- #chat_url ⇒ Object
- #headers ⇒ Object
- #image_edit_url ⇒ Object
- #image_generation_url ⇒ Object
- #image_variation_url ⇒ Object
- #images_url(with: nil, mask: nil) ⇒ Object
- #list_models ⇒ Object
- #retrieve_model(model) ⇒ Object
- #stream_usage_supported? ⇒ Boolean
Class Attribute Details
.registry_publisher ⇒ Object
32 33 34 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 32 def registry_publisher @registry_publisher ||= RegistryPublisher.new end |
Class Method Details
.capabilities ⇒ Object
30 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 30 def capabilities = Capabilities |
.configuration_options ⇒ Object
20 21 22 23 24 25 26 27 28 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 20 def %i[ openai_api_key openai_api_base openai_organization_id openai_project_id openai_use_system_role ] end |
.configuration_requirements ⇒ Object
18 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 18 def configuration_requirements = %i[openai_api_key] |
.slug ⇒ Object
17 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 17 def slug = 'openai' |
Instance Method Details
#api_base ⇒ Object
79 80 81 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 79 def api_base config.openai_api_base || 'https://api.openai.com' end |
#chat_url ⇒ Object
91 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 91 def chat_url = completion_url |
#headers ⇒ Object
83 84 85 86 87 88 89 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 83 def headers { 'Authorization' => "Bearer #{config.openai_api_key}", 'OpenAI-Organization' => config.openai_organization_id, 'OpenAI-Project' => config.openai_project_id }.compact end |
#image_edit_url ⇒ Object
93 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 93 def image_edit_url = '/v1/images/edits' |
#image_generation_url ⇒ Object
92 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 92 def image_generation_url = '/v1/images/generations' |
#image_variation_url ⇒ Object
94 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 94 def image_variation_url = '/v1/images/variations' |
#images_url(with: nil, mask: nil) ⇒ Object
95 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 95 def images_url(with: nil, mask: nil) = super |
#list_models ⇒ Object
108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 108 def list_models log.info('Listing OpenAI models') if respond_to?(:log) super.tap do |models| log.info("Discovered #{models.size} OpenAI models") if respond_to?(:log) self.class.registry_publisher.publish_models_async(models, readiness: readiness(live: false)) end rescue StandardError => e if respond_to?(:handle_exception) handle_exception(e, level: :error, handled: true, operation: 'list_models') end raise end |
#retrieve_model(model) ⇒ Object
97 98 99 100 101 102 103 104 105 106 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 97 def retrieve_model(model) log.info("Retrieving model: #{model}") if respond_to?(:log) connection.get("#{models_url}/#{model}").body rescue StandardError => e if respond_to?(:handle_exception) handle_exception(e, level: :error, handled: true, operation: 'retrieve_model') end raise end |
#stream_usage_supported? ⇒ Boolean
77 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 77 def stream_usage_supported? = true |