lex-llm-gateway 0.2.9 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bce7fb746d14ff63db46cb4fc87613a5a0834c61e5e067dc4e5bf6122dbd251a
4
- data.tar.gz: 2d7c0d14bef999fece93d633dd74c700d2594e76d1aae216a2afd3b51f13a534
3
+ metadata.gz: ec3993ccaff02e74801eabda29562ec7fc052f00bced5691c39979a66ba042c3
4
+ data.tar.gz: ca9beca2c4aed4be7330d3ff0d1bb7e518baa5cf9eef6143523f9901cf3cfdb2
5
5
  SHA512:
6
- metadata.gz: 488014e8667b9782d18a56dee95250ce8869aff2f9d9e0a5254d77f3d6a5ffd9a1cea802c66766fa50da1e2fa0b5801fb6b1b17b460dfb39305ddd3eaa2aeb81
7
- data.tar.gz: a65be2e6996f18b98cbdafb3f1e6145671a6eb4f37f63e7b6e500e272d8d16ba26e5414f32489cd5569c16c6881c17dab601833f1eae5edf2516c177077e54f3
6
+ metadata.gz: 749ba30872386e9742164031dcc1406dba20f83b5ce75ff5651a123ad78f40dec00122ec9743b6c40abe8aeaaf6f9c354f279acd2a5b61159025eea185f0a52e
7
+ data.tar.gz: d441d032fef3841e958c8ded65b6c1f825c042c0b804629fae561ffd268cec2951a1f3babb5ce67d4df0b9776cf35f2dcbb65e7a65d76cfae834f0447bbde542
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.10] - 2026-03-23
4
+
5
+ ### Added
6
+ - ProviderStats runner: health_report, provider_detail, circuit_summary for LLM provider observability
7
+ - Reports circuit breaker state, routing adjustment, and health status per provider
8
+ - 5 specs covering report generation, detail, circuit summary, and fallback behavior
9
+
3
10
  ## [0.2.9] - 2026-03-23
4
11
 
5
12
  ### Added
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module LLM
6
+ module Gateway
7
+ module Runners
8
+ module ProviderStats
9
+ module_function
10
+
11
+ def health_report
12
+ return unavailable_result unless router_available?
13
+
14
+ tracker = health_tracker
15
+ providers = known_providers
16
+ providers.map { |name| provider_entry(name, tracker) }
17
+ end
18
+
19
+ def provider_detail(provider:)
20
+ return unavailable_result unless router_available?
21
+
22
+ provider_entry(provider, health_tracker)
23
+ end
24
+
25
+ def circuit_summary
26
+ return unavailable_result unless router_available?
27
+
28
+ tracker = health_tracker
29
+ providers = known_providers
30
+ {
31
+ total: providers.size,
32
+ closed: providers.count { |p| tracker.circuit_state(p) == :closed },
33
+ open: providers.count { |p| tracker.circuit_state(p) == :open },
34
+ half_open: providers.count { |p| tracker.circuit_state(p) == :half_open }
35
+ }
36
+ end
37
+
38
+ def router_available?
39
+ defined?(Legion::LLM::Router) &&
40
+ Legion::LLM::Router.respond_to?(:routing_enabled?) &&
41
+ Legion::LLM::Router.routing_enabled?
42
+ end
43
+
44
+ def health_tracker
45
+ Legion::LLM::Router.health_tracker
46
+ end
47
+
48
+ def known_providers
49
+ return [] unless defined?(Legion::Settings)
50
+
51
+ providers = Legion::Settings.dig(:llm, :providers)
52
+ return [] unless providers.is_a?(Hash)
53
+
54
+ providers.select { |_, cfg| cfg.is_a?(Hash) && cfg[:enabled] }
55
+ .keys
56
+ .map(&:to_sym)
57
+ rescue StandardError
58
+ []
59
+ end
60
+
61
+ def provider_entry(name, tracker)
62
+ {
63
+ provider: name.to_s,
64
+ circuit: tracker.circuit_state(name).to_s,
65
+ adjustment: tracker.adjustment(name),
66
+ healthy: tracker.circuit_state(name) != :open
67
+ }
68
+ end
69
+
70
+ def unavailable_result
71
+ { success: false, error: 'router_not_available' }
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -4,7 +4,7 @@ module Legion
4
4
  module Extensions
5
5
  module LLM
6
6
  module Gateway
7
- VERSION = '0.2.9'
7
+ VERSION = '0.2.10'
8
8
  end
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-llm-gateway
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9
4
+ version: 0.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
@@ -191,6 +191,7 @@ files:
191
191
  - lib/legion/extensions/llm/gateway/runners/inference.rb
192
192
  - lib/legion/extensions/llm/gateway/runners/metering.rb
193
193
  - lib/legion/extensions/llm/gateway/runners/metering_writer.rb
194
+ - lib/legion/extensions/llm/gateway/runners/provider_stats.rb
194
195
  - lib/legion/extensions/llm/gateway/runners/usage_reporter.rb
195
196
  - lib/legion/extensions/llm/gateway/transport/exchanges/inference.rb
196
197
  - lib/legion/extensions/llm/gateway/transport/exchanges/metering.rb