Module: Legion::Extensions::Llm::Gateway::Runners::ProviderStats
- Defined in:
- lib/legion/extensions/llm/gateway/runners/provider_stats.rb
Class Method Summary collapse
- .circuit_summary ⇒ Object
- .health_report ⇒ Object
- .health_tracker ⇒ Object
- .known_providers ⇒ Object
- .provider_detail(provider:) ⇒ Object
- .provider_entry(name, tracker) ⇒ Object
- .router_available? ⇒ Boolean
- .unavailable_result ⇒ Object
Class Method Details
.circuit_summary ⇒ Object
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_report ⇒ Object
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_tracker ⇒ Object
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_providers ⇒ Object
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
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_result ⇒ Object
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 |