Module: Legion::Extensions::Llm::Gateway::Runners::ProviderStats

Defined in:
lib/legion/extensions/llm/gateway/runners/provider_stats.rb

Class Method Summary collapse

Class Method Details

.circuit_summaryObject



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/legion/extensions/llm/gateway/runners/provider_stats.rb', line 25

def circuit_summary
  return unavailable_result unless router_available?

  tracker = health_tracker
  providers = known_providers
  {
    total:     providers.size,
    closed:    providers.count { |p| tracker.circuit_state(p) == :closed },
    open:      providers.count { |p| tracker.circuit_state(p) == :open },
    half_open: providers.count { |p| tracker.circuit_state(p) == :half_open }
  }
end

.health_reportObject



11
12
13
14
15
16
17
# File 'lib/legion/extensions/llm/gateway/runners/provider_stats.rb', line 11

def health_report
  return unavailable_result unless router_available?

  tracker = health_tracker
  providers = known_providers
  providers.map { |name| provider_entry(name, tracker) }
end

.health_trackerObject



44
45
46
# File 'lib/legion/extensions/llm/gateway/runners/provider_stats.rb', line 44

def health_tracker
  Legion::LLM::Router.health_tracker
end

.known_providersObject



48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/legion/extensions/llm/gateway/runners/provider_stats.rb', line 48

def known_providers
  return [] unless defined?(Legion::Settings)

  providers = Legion::Settings.dig(:llm, :providers)
  return [] unless providers.is_a?(Hash)

  providers.select { |_, cfg| cfg.is_a?(Hash) && cfg[:enabled] }
           .keys
           .map(&:to_sym)
rescue StandardError => _e
  []
end

.provider_detail(provider:) ⇒ Object



19
20
21
22
23
# File 'lib/legion/extensions/llm/gateway/runners/provider_stats.rb', line 19

def provider_detail(provider:)
  return unavailable_result unless router_available?

  provider_entry(provider, health_tracker)
end

.provider_entry(name, tracker) ⇒ Object



61
62
63
64
65
66
67
68
# File 'lib/legion/extensions/llm/gateway/runners/provider_stats.rb', line 61

def provider_entry(name, tracker)
  {
    provider:   name.to_s,
    circuit:    tracker.circuit_state(name).to_s,
    adjustment: tracker.adjustment(name),
    healthy:    tracker.circuit_state(name) != :open
  }
end

.router_available?Boolean

Returns:

  • (Boolean)


38
39
40
41
42
# File 'lib/legion/extensions/llm/gateway/runners/provider_stats.rb', line 38

def router_available?
  defined?(Legion::LLM::Router) &&
    Legion::LLM::Router.respond_to?(:routing_enabled?) &&
    Legion::LLM::Router.routing_enabled?
end

.unavailable_resultObject



70
71
72
# File 'lib/legion/extensions/llm/gateway/runners/provider_stats.rb', line 70

def unavailable_result
  { success: false, error: 'router_not_available' }
end