Module: Legion::Extensions::Llm::ProviderSettings

Defined in:
lib/legion/extensions/llm/provider_settings.rb

Overview

Builds shared provider defaults for lex-llm-* extension gems.

Class Method Summary collapse

Class Method Details

.build(family:, instance: {}, enabled: true, discovery: {}, instances: {}, fleet: nil, gateways: nil, **legacy_settings) ⇒ Object

rubocop:disable Metrics/ParameterLists



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/legion/extensions/llm/provider_settings.rb', line 10

def build(family:, instance: {}, enabled: true, discovery: {}, instances: {}, fleet: nil, gateways: nil, # rubocop:disable Metrics/ParameterLists
          **legacy_settings)
  validate_provider_defaults!(fleet:, gateways:, legacy_settings:)

  deep_merge(
    Legion::Extensions::Llm.default_settings,
    {
      enabled: enabled,
      provider_family: family,
      discovery: deep_merge({ enabled: true, interval_seconds: 300 }, discovery || {}),
      instances: deep_merge(
        {
          default: deep_merge(
            { enabled: true, credentials: nil, fleet: { enabled: false, consumer_priority: 0, prefetch: 1 } },
            instance || {}
          )
        },
        instances || {}
      )
    }
  )
end

.deep_dup(value) ⇒ Object



47
48
49
50
51
52
53
54
55
56
# File 'lib/legion/extensions/llm/provider_settings.rb', line 47

def deep_dup(value)
  case value
  when Hash
    value.to_h { |key, inner_value| [key, deep_dup(inner_value)] }
  when Array
    value.map { |inner_value| deep_dup(inner_value) }
  else
    value
  end
end

.deep_merge(left, right) ⇒ Object



58
59
60
61
62
# File 'lib/legion/extensions/llm/provider_settings.rb', line 58

def deep_merge(left, right)
  deep_dup(left || {}).merge(deep_dup(right || {})) do |_key, left_value, right_value|
    left_value.is_a?(Hash) && right_value.is_a?(Hash) ? deep_merge(left_value, right_value) : right_value
  end
end

.validate_provider_defaults!(fleet:, gateways:, legacy_settings:) ⇒ Object

Raises:

  • (ArgumentError)


33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/legion/extensions/llm/provider_settings.rb', line 33

def validate_provider_defaults!(fleet:, gateways:, legacy_settings:)
  if fleet
    raise ArgumentError,
          'Provider fleet defaults must be nested under an instance, for example instances.default.fleet'
  end

  raise ArgumentError, 'Provider gateways settings are no longer supported; use instances instead' if gateways

  return if legacy_settings.empty?

  invalid_keys = legacy_settings.keys.map(&:to_sym)
  raise ArgumentError, "Unsupported top-level provider settings: #{invalid_keys.join(', ')}"
end