lex-llm-openai 0.3.6 → 0.3.8

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: 8cc102a70c5d99414bb836b6b9204a1c031a9f98072b5430e824b2ae944cd44a
4
- data.tar.gz: 0d6cd458a0812c8767bef92785026a17ae1fa465aecd84801cbca27070570706
3
+ metadata.gz: 3d33116aa45f6463b2944b15a7a8d980224f279f54fe2b594d8ddd012b4829c8
4
+ data.tar.gz: ff186b25cc41b291fd793ebccfa10bbae430157d68e256872a523d62fb3c47f3
5
5
  SHA512:
6
- metadata.gz: db59247eafd9bd082806e464602315660dd7b3d1871c894acc85dae76db7ad9f5a58a94284c3b47b2fd5cc923dee9e76101f9c1df064bb18718d474999fa0d28
7
- data.tar.gz: 35f02198724ba77c8b2a329c11c5aa9fe0d106d2a93a140f0a7d88041246d6c01c09d9a23a354d844638041744526280b671c186770c77ab3f2ccae7dc5d9950
6
+ metadata.gz: 8ac4b7136e99c9724e694e64862be714fe3a1dc58c3e289efa0df20b19f5695dbba4b92d1385e58750ac3460f8c2c9c8e265e1af32a209fdd11e756ac00fa866
7
+ data.tar.gz: ff75e3d1b712dec1addbe902b3dd79dc130cf38b4ea79b47f3791d3dee241ef49b8e7ef62399d240478f7c754b09e40047a3cf24cb3849fb86bb5a169307ae0c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.8 - 2026-05-13
4
+
5
+ - Route OpenAI fleet runner and actor diagnostics through `Legion::Logging::Helper` with debug-level request and enablement context.
6
+ - Report optional actor subscription load failures through `handle_exception` instead of raw warning output.
7
+ - Move routine OpenAI model discovery telemetry to debug-level logging while keeping failure handling structured.
8
+
9
+ ## 0.3.7 - 2026-05-08
10
+
11
+ - Accept keyword arguments in `list_models` to match the base provider contract called by `discover_offerings`.
12
+
3
13
  ## 0.3.6 - 2026-05-06
4
14
 
5
15
  - Load provider-owned fleet actors through the LegionIO subscription base and the canonical OpenAI provider root.
@@ -1,18 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- begin
4
- require 'legion/extensions/actors/subscription'
5
- rescue LoadError => e
6
- warn(e.message) if $VERBOSE
3
+ require 'legion/extensions/llm/openai'
4
+ require 'legion/extensions/llm/fleet/provider_responder'
5
+
6
+ unless defined?(Legion::Extensions::Actors::Subscription)
7
+ begin
8
+ require 'legion/extensions/actors/subscription'
9
+ rescue LoadError => e
10
+ Legion::Extensions::Llm::Openai.handle_exception(
11
+ e,
12
+ level: :warn,
13
+ handled: true,
14
+ operation: 'openai.fleet_worker.load_subscription'
15
+ )
16
+ end
7
17
  end
8
18
 
9
19
  unless defined?(Legion::Extensions::Actors::Subscription)
10
20
  raise LoadError, 'LegionIO actor runtime is required for OpenAI fleet worker'
11
21
  end
12
22
 
13
- require 'legion/extensions/llm/openai'
14
- require 'legion/extensions/llm/fleet/provider_responder'
15
-
16
23
  module Legion
17
24
  module Extensions
18
25
  module Llm
@@ -20,6 +27,8 @@ module Legion
20
27
  module Actor
21
28
  # Subscription actor for OpenAI fleet request consumption.
22
29
  class FleetWorker < Legion::Extensions::Actors::Subscription
30
+ include Legion::Logging::Helper
31
+
23
32
  def runner_class
24
33
  'Legion::Extensions::Llm::Openai::Runners::FleetWorker'
25
34
  end
@@ -33,7 +42,13 @@ module Legion
33
42
  end
34
43
 
35
44
  def enabled?
36
- Legion::Extensions::Llm::Fleet::ProviderResponder.enabled_for?(Openai.discover_instances)
45
+ instances = Openai.discover_instances
46
+ enabled = Legion::Extensions::Llm::Fleet::ProviderResponder.enabled_for?(instances)
47
+ log.debug { "OpenAI fleet worker enablement: enabled=#{enabled}, instance_count=#{instances.size}" }
48
+ enabled
49
+ rescue StandardError => e
50
+ handle_exception(e, level: :warn, handled: true, operation: 'openai.fleet_worker.enabled')
51
+ false
37
52
  end
38
53
  end
39
54
  end
@@ -172,7 +172,7 @@ module Legion
172
172
  def images_url(with: nil, mask: nil) = super
173
173
 
174
174
  def retrieve_model(model)
175
- log.info("Retrieving model: #{model}")
175
+ log.debug { "Retrieving OpenAI model: #{model}" }
176
176
  connection.get("#{models_url}/#{model}").body
177
177
  rescue StandardError => e
178
178
  handle_exception(e, level: :error, handled: true,
@@ -180,11 +180,11 @@ module Legion
180
180
  raise
181
181
  end
182
182
 
183
- def list_models
184
- log.info('Listing OpenAI models')
183
+ def list_models(**)
184
+ log.debug('Listing OpenAI models')
185
185
  raw = connection.get(models_url)
186
186
  models = build_model_infos(raw.body)
187
- log.info("Discovered #{models.size} OpenAI models")
187
+ log.debug { "Discovered #{models.size} OpenAI models; publishing registry availability" }
188
188
  self.class.registry_publisher.publish_models_async(models, readiness: readiness(live: false))
189
189
  models
190
190
  rescue StandardError => e
@@ -10,9 +10,16 @@ module Legion
10
10
  module Runners
11
11
  # Runner entrypoint for OpenAI fleet request execution.
12
12
  module FleetWorker
13
+ extend Legion::Logging::Helper
14
+
13
15
  module_function
14
16
 
15
17
  def handle_fleet_request(payload, delivery: nil, properties: nil)
18
+ log.debug do
19
+ "Handling OpenAI fleet request: request_id=#{payload_value(payload, :request_id) || 'unknown'}, " \
20
+ "provider_instance=#{payload_value(payload, :provider_instance) || 'default'}"
21
+ end
22
+
16
23
  Legion::Extensions::Llm::Fleet::ProviderResponder.call(
17
24
  payload: payload,
18
25
  provider_family: Openai::PROVIDER_FAMILY,
@@ -21,6 +28,15 @@ module Legion
21
28
  delivery: delivery,
22
29
  properties: properties
23
30
  )
31
+ rescue StandardError => e
32
+ handle_exception(e, level: :error, handled: true, operation: 'openai.fleet_worker.handle_request')
33
+ raise
34
+ end
35
+
36
+ def payload_value(payload, key)
37
+ return unless payload.respond_to?(:[])
38
+
39
+ payload[key] || payload[key.to_s]
24
40
  end
25
41
  end
26
42
  end
@@ -4,7 +4,7 @@ module Legion
4
4
  module Extensions
5
5
  module Llm
6
6
  module Openai
7
- VERSION = '0.3.6'
7
+ VERSION = '0.3.8'
8
8
  end
9
9
  end
10
10
  end
@@ -53,6 +53,7 @@ module Legion
53
53
  end
54
54
 
55
55
  def self.discover_instances # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
56
+ log.debug('Discovering OpenAI provider instances')
56
57
  candidates = {}
57
58
 
58
59
  # 1. OPENAI_API_KEY environment variable
@@ -101,7 +102,12 @@ module Legion
101
102
  end
102
103
 
103
104
  # 8. Dedup
104
- CredentialSources.dedup_credentials(candidates).transform_values { |config| sanitize_instance_config(config) }
105
+ discovered = CredentialSources.dedup_credentials(candidates).transform_values do |config|
106
+ sanitize_instance_config(config)
107
+ end
108
+ instance_names = discovered.keys.sort_by(&:to_s).join(', ')
109
+ log.debug { "Discovered #{discovered.size} OpenAI provider instance candidate(s): #{instance_names}" }
110
+ discovered
105
111
  end
106
112
 
107
113
  def self.settings_instances(config)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-llm-openai
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.3.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - LegionIO