Class: Legion::Extensions::Llm::Gemini::Provider

Inherits:
Provider
  • Object
show all
Includes:
MessageFormatter, MessageKinds, OperationParsers, ResponseParser, Logging::Helper
Defined in:
lib/legion/extensions/llm/gemini/provider.rb

Overview

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

Defined Under Namespace

Modules: Capabilities

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.capabilitiesObject



337
# File 'lib/legion/extensions/llm/gemini/provider.rb', line 337

def capabilities = Capabilities

.configuration_optionsObject



335
# File 'lib/legion/extensions/llm/gemini/provider.rb', line 335

def configuration_options = %i[gemini_api_key gemini_api_base]

.configuration_requirementsObject



336
# File 'lib/legion/extensions/llm/gemini/provider.rb', line 336

def configuration_requirements = %i[gemini_api_key]

.slugObject



334
# File 'lib/legion/extensions/llm/gemini/provider.rb', line 334

def slug = 'gemini'

Instance Method Details

#api_baseObject



393
394
395
# File 'lib/legion/extensions/llm/gemini/provider.rb', line 393

def api_base
  config.gemini_api_base || settings[:instances][:default][:endpoint]
end

#completion_urlObject



401
# File 'lib/legion/extensions/llm/gemini/provider.rb', line 401

def completion_url = generate_content_url(model: @model)

#embed_content_url(model:) ⇒ Object



414
415
416
# File 'lib/legion/extensions/llm/gemini/provider.rb', line 414

def embed_content_url(model:)
  "#{model_path(model)}:embedContent"
end

#embedding_url(model:) ⇒ Object



404
# File 'lib/legion/extensions/llm/gemini/provider.rb', line 404

def embedding_url(model:) = embed_content_url(model:)

#generate_content_url(model:) ⇒ Object



406
407
408
# File 'lib/legion/extensions/llm/gemini/provider.rb', line 406

def generate_content_url(model:)
  "#{model_path(model)}:generateContent"
end

#headersObject



397
398
399
# File 'lib/legion/extensions/llm/gemini/provider.rb', line 397

def headers
  identity_headers.merge('x-goog-api-key' => config.gemini_api_key)
end

#models_urlObject



403
# File 'lib/legion/extensions/llm/gemini/provider.rb', line 403

def models_url = 'models'

#settingsObject



389
390
391
# File 'lib/legion/extensions/llm/gemini/provider.rb', line 389

def settings
  Gemini.default_settings
end

#stop_reason_map_additionsObject

StopReasonMapping mixin override: the shared vocabulary covers the common spellings; these are the Gemini wire finishReason additions (R4: dialect at the parser edge).



421
422
423
424
425
426
427
428
429
430
431
# File 'lib/legion/extensions/llm/gemini/provider.rb', line 421

def stop_reason_map_additions
  {
    'STOP' => :end_turn,
    'MAX_TOKENS' => :max_tokens,
    'SAFETY' => :content_filter,
    'RECITATION' => :content_filter,
    'PROHIBITED_CONTENT' => :content_filter,
    'SPII' => :content_filter,
    'IMAGE_SAFETY' => :content_filter
  }
end

#stream_generate_content_url(model:) ⇒ Object



410
411
412
# File 'lib/legion/extensions/llm/gemini/provider.rb', line 410

def stream_generate_content_url(model:)
  "#{model_path(model)}:streamGenerateContent?alt=sse"
end

#stream_urlObject



402
# File 'lib/legion/extensions/llm/gemini/provider.rb', line 402

def stream_url = stream_generate_content_url(model: @model)