Module: Legion::Extensions::Llm::Openai::Provider::Capabilities

Defined in:
lib/legion/extensions/llm/openai/provider.rb

Overview

Provider-level capability checks based on current OpenAI model families.

Constant Summary collapse

CAPABILITY_CHECKS =
{
  'streaming' => :streaming?,
  'function_calling' => :functions?,
  'vision' => :vision?,
  'embeddings' => :embeddings?,
  'moderation' => :moderation?,
  'image' => :images?,
  'audio_transcription' => :audio_transcription?
}.freeze

Class Method Summary collapse

Class Method Details

.audio_transcription?(model) ⇒ Boolean

Returns:

  • (Boolean)


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

def audio_transcription?(model) = model_id(model).match?(/^(gpt-4o.*transcribe|whisper)/)

.chat?(model) ⇒ Boolean

Returns:

  • (Boolean)


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

def chat?(model) = !non_chat_model?(model_id(model))

.critical_capabilities_for(model) ⇒ Object



145
146
147
148
# File 'lib/legion/extensions/llm/openai/provider.rb', line 145

def critical_capabilities_for(model)
  id = model_id(model)
  CAPABILITY_CHECKS.filter_map { |capability, predicate| capability if public_send(predicate, id) }
end

.embeddings?(model) ⇒ Boolean

Returns:

  • (Boolean)


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

def embeddings?(model) = model_id(model).start_with?('text-embedding-')

.functions?(model) ⇒ Boolean

Returns:

  • (Boolean)


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

def functions?(model) = model_id(model).match?(/^(gpt|o\d)/)

.images?(model) ⇒ Boolean

Returns:

  • (Boolean)


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

def images?(model) = model_id(model).match?(/^(gpt-image|dall-e)/)

.model_id(model) ⇒ Object



150
151
152
153
154
# File 'lib/legion/extensions/llm/openai/provider.rb', line 150

def model_id(model)
  return model.fetch('id', '') if model.is_a?(Hash)

  model.respond_to?(:id) ? model.id.to_s : model.to_s
end

.moderation?(model) ⇒ Boolean

Returns:

  • (Boolean)


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

def moderation?(model) = model_id(model).include?('moderation')

.non_chat_model?(id) ⇒ Boolean

Returns:

  • (Boolean)


156
157
158
159
# File 'lib/legion/extensions/llm/openai/provider.rb', line 156

def non_chat_model?(id)
  embeddings?(id) || moderation?(id) || images?(id) || audio_transcription?(id) ||
    id.match?(/^(tts|gpt-realtime|sora)/)
end

.streaming?(model) ⇒ Boolean

Returns:

  • (Boolean)


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

def streaming?(model) = chat?(model)

.vision?(model) ⇒ Boolean

Returns:

  • (Boolean)


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

def vision?(model) = model_id(model).match?(/^(gpt|o\d|omni-moderation)/)