lex-llm-openai 0.3.7 → 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 +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/legion/extensions/llm/openai/actors/fleet_worker.rb +23 -8
- data/lib/legion/extensions/llm/openai/provider.rb +3 -3
- data/lib/legion/extensions/llm/openai/runners/fleet_worker.rb +16 -0
- data/lib/legion/extensions/llm/openai/version.rb +1 -1
- data/lib/legion/extensions/llm/openai.rb +7 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3d33116aa45f6463b2944b15a7a8d980224f279f54fe2b594d8ddd012b4829c8
|
|
4
|
+
data.tar.gz: ff186b25cc41b291fd793ebccfa10bbae430157d68e256872a523d62fb3c47f3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8ac4b7136e99c9724e694e64862be714fe3a1dc58c3e289efa0df20b19f5695dbba4b92d1385e58750ac3460f8c2c9c8e265e1af32a209fdd11e756ac00fa866
|
|
7
|
+
data.tar.gz: ff75e3d1b712dec1addbe902b3dd79dc130cf38b4ea79b47f3791d3dee241ef49b8e7ef62399d240478f7c754b09e40047a3cf24cb3849fb86bb5a169307ae0c
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
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
|
+
|
|
3
9
|
## 0.3.7 - 2026-05-08
|
|
4
10
|
|
|
5
11
|
- Accept keyword arguments in `list_models` to match the base provider contract called by `discover_offerings`.
|
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
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.
|
|
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,
|
|
@@ -181,10 +181,10 @@ module Legion
|
|
|
181
181
|
end
|
|
182
182
|
|
|
183
183
|
def list_models(**)
|
|
184
|
-
log.
|
|
184
|
+
log.debug('Listing OpenAI models')
|
|
185
185
|
raw = connection.get(models_url)
|
|
186
186
|
models = build_model_infos(raw.body)
|
|
187
|
-
log.
|
|
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
|
|
@@ -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
|
|
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)
|