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
Constant Summary collapse
- CAPABILITY_MAP =
── Static capability map for known OpenAI model families ────── Maps model-id prefixes to a set of capabilities, modality vectors, and the family context window. Feeds the discovery runner's capability_entry_for (evidence publication) and the provider's fetch_model_detail (cached model context).
{ 'gpt-4o' => { capabilities: %i[completion streaming function_calling tools vision structured_output], modalities_input: %w[text image audio], modalities_output: %w[text], context_window: 128_000 }, 'gpt-4.1' => { capabilities: %i[completion streaming function_calling tools vision structured_output], modalities_input: %w[text image], modalities_output: %w[text], context_window: 1_047_576 }, 'gpt-4' => { capabilities: %i[completion streaming function_calling tools vision], modalities_input: %w[text image], modalities_output: %w[text], context_window: 128_000 }, 'gpt-5' => { capabilities: %i[completion streaming function_calling tools vision structured_output reasoning], modalities_input: %w[text image], modalities_output: %w[text], context_window: 1_047_576 }, 'o4' => { capabilities: %i[completion streaming function_calling tools vision reasoning], modalities_input: %w[text image], modalities_output: %w[text], context_window: 200_000 }, 'o3' => { capabilities: %i[completion streaming function_calling tools vision reasoning], modalities_input: %w[text image], modalities_output: %w[text], context_window: 200_000 }, 'o1' => { capabilities: %i[completion streaming function_calling tools vision reasoning], modalities_input: %w[text image], modalities_output: %w[text], context_window: 200_000 }, 'text-embedding-' => { capabilities: %i[embedding], modalities_input: %w[text], modalities_output: %w[embeddings], context_window: 8_191 }, 'omni-moderation' => { capabilities: %i[moderation], modalities_input: %w[text image], modalities_output: %w[moderation] }, 'text-moderation' => { capabilities: %i[moderation], modalities_input: %w[text], modalities_output: %w[moderation] }, 'gpt-image' => { capabilities: %i[image_generation], modalities_input: %w[text image], modalities_output: %w[image] }, 'dall-e' => { capabilities: %i[image_generation], modalities_input: %w[text], modalities_output: %w[image] }, 'whisper' => { capabilities: %i[audio_transcription], modalities_input: %w[audio], modalities_output: %w[text] }, 'tts' => { capabilities: %i[audio_generation], modalities_input: %w[text], modalities_output: %w[audio] } }.freeze
- DEFAULT_ENDPOINT =
Canonical OpenAI API base URL. Used as fallback when no custom openai_api_base is configured on the provider instance.
'https://api.openai.com'
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
- #retrieve_model(model) ⇒ Object
- #settings ⇒ Object
- #stream_usage_supported? ⇒ Boolean
-
#translator ⇒ Object
Canonical translator instance - the provider boundary contract.
Class Method Details
.capabilities ⇒ Object
118 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 118 def capabilities = Capabilities |
.configuration_options ⇒ Object
108 109 110 111 112 113 114 115 116 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 108 def %i[ openai_api_key openai_api_base openai_organization_id openai_project_id openai_use_system_role ] end |
.configuration_requirements ⇒ Object
106 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 106 def configuration_requirements = %i[openai_api_key] |
.slug ⇒ Object
105 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 105 def slug = 'openai' |
Instance Method Details
#api_base ⇒ Object
167 168 169 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 167 def api_base config.openai_api_base || DEFAULT_ENDPOINT end |
#chat_url ⇒ Object
185 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 185 def chat_url = completion_url |
#headers ⇒ Object
177 178 179 180 181 182 183 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 177 def headers identity_headers.merge({ 'Authorization' => "Bearer #{config.openai_api_key}", 'OpenAI-Organization' => config.openai_organization_id, 'OpenAI-Project' => config.openai_project_id }.compact) end |
#image_edit_url ⇒ Object
187 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 187 def image_edit_url = '/v1/images/edits' |
#image_generation_url ⇒ Object
186 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 186 def image_generation_url = '/v1/images/generations' |
#image_variation_url ⇒ Object
188 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 188 def image_variation_url = '/v1/images/variations' |
#images_url(with: nil, mask: nil) ⇒ Object
189 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 189 def images_url(with: nil, mask: nil) = super |
#retrieve_model(model) ⇒ Object
191 192 193 194 195 196 197 198 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 191 def retrieve_model(model) log.debug { "Retrieving OpenAI model: #{model}" } connection.get("#{models_url}/#{model}").body rescue StandardError => e handle_exception(e, level: :error, handled: true, operation: 'retrieve_model') raise end |
#settings ⇒ Object
163 164 165 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 163 def settings Openai.default_settings end |
#stream_usage_supported? ⇒ Boolean
161 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 161 def stream_usage_supported? = true |
#translator ⇒ Object
Canonical translator instance - the provider boundary contract. Created lazily; delegate translation to the Translator class.
173 174 175 |
# File 'lib/legion/extensions/llm/openai/provider.rb', line 173 def translator @translator ||= Translator.new(api_base: api_base, headers: headers) end |