lex-llm-openai 0.2.0 → 0.3.0

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: 3adf2416815789eee25cb13dc0ceaadda14549fa6f897ea8c0216a5ebd728793
4
- data.tar.gz: 317ad6bcc34b252a9026e9aaae5a9a6fe8f850ab67c7e50e62f67a5c43d3538f
3
+ metadata.gz: 3cd48c5acd857910771717afe92892f537270d62a6f6d24d0f71e2b5805abb9d
4
+ data.tar.gz: c8f1a0644cb7cf1fe993f6d17b5aba3167e56d8f44f04fe0e0d6afe8d70a7146
5
5
  SHA512:
6
- metadata.gz: 6e5b1684b8a9a328278bb0ab039940f924f43943847fe45d0b485c82702f4cbb426b142e751d407ed736778b9923bfffd8e8b323549bef335c99056f989c4250
7
- data.tar.gz: 0ff1be0c6ccd2fa4e24a3c9bb8dc816e6dc249ff6a88177240be0f5fc4aedade94cb9955d752f28570af099a64e2dea232e3d7bdef0587ab7ef8a308dbe23684
6
+ metadata.gz: 2f5a9d6f495bb5fac304ef891d5f2f93353ff0d6909c54c506a448030e67791f7b79fbffb546e8b7cf94b5d8d8eef1f4b8122bd5df7115e47ff537baa33e8483
7
+ data.tar.gz: 7f40adfce35ab368b2db2d82a603fe48f2de269e13a093cab8adc15a946b80e2d02792fd97cf400895f55a18529f140d630e7dd4264d1f0799aa3328dd71908d
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.0 - 2026-05-01
4
+
5
+ - Add auto-discovery via CredentialSources and AutoRegistration from lex-llm 0.3.0
6
+ - Self-register discovered instances into Call::Registry at require-time
7
+ - Require lex-llm >= 0.3.0
8
+
9
+
3
10
  ## [0.2.0] - 2026-04-30
4
11
  - **BREAKING**: Adopt base contract from lex-llm 0.1.9; require `lex-llm >= 0.1.9`
5
12
  - Replace `provider_settings`-based `default_settings` with flat provider defaults (enabled, default_model, api_key, etc.)
@@ -26,5 +26,5 @@ Gem::Specification.new do |spec|
26
26
  spec.add_dependency 'legion-json', '>= 1.2.1'
27
27
  spec.add_dependency 'legion-logging', '>= 1.3.2'
28
28
  spec.add_dependency 'legion-settings', '>= 1.3.14'
29
- spec.add_dependency 'lex-llm', '>= 0.2.0'
29
+ spec.add_dependency 'lex-llm', '>= 0.3.0'
30
30
  end
@@ -246,6 +246,8 @@ module Legion
246
246
  end
247
247
 
248
248
  # Register configuration options so Legion::Extensions::Llm::Configuration knows about them.
249
- Legion::Extensions::Llm::Configuration.register_provider_options(
250
- Legion::Extensions::Llm::Openai::Provider.configuration_options
251
- )
249
+ if Legion::Extensions::Llm::Configuration.respond_to?(:register_provider_options)
250
+ Legion::Extensions::Llm::Configuration.register_provider_options(
251
+ Legion::Extensions::Llm::Openai::Provider.configuration_options
252
+ )
253
+ end
@@ -4,7 +4,7 @@ module Legion
4
4
  module Extensions
5
5
  module Llm
6
6
  module Openai
7
- VERSION = '0.2.0'
7
+ VERSION = '0.3.0'
8
8
  end
9
9
  end
10
10
  end
@@ -11,6 +11,7 @@ module Legion
11
11
  module Openai
12
12
  extend ::Legion::Extensions::Core if ::Legion::Extensions.const_defined?(:Core, false)
13
13
  extend ::Legion::Logging::Helper
14
+ extend Legion::Extensions::Llm::AutoRegistration
14
15
 
15
16
  PROVIDER_FAMILY = :openai
16
17
 
@@ -32,7 +33,58 @@ module Legion
32
33
  def self.provider_class
33
34
  Provider
34
35
  end
36
+
37
+ def self.discover_instances # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
38
+ candidates = {}
39
+
40
+ # 1. OPENAI_API_KEY environment variable
41
+ env_key = CredentialSources.env('OPENAI_API_KEY')
42
+ candidates[:env] = { openai_api_key: env_key, tier: :frontier } if env_key
43
+
44
+ # 2. CODEX_API_KEY environment variable
45
+ codex_env_key = CredentialSources.env('CODEX_API_KEY')
46
+ candidates[:codex_env] = { openai_api_key: codex_env_key, tier: :frontier } if codex_env_key
47
+
48
+ # 3. Codex bearer token (~/.codex/auth.json chatgpt mode)
49
+ codex_tok = CredentialSources.codex_token
50
+ candidates[:codex] = { openai_api_key: codex_tok, tier: :frontier } if codex_tok
51
+
52
+ # 4. Codex OPENAI_API_KEY from ~/.codex/auth.json
53
+ codex_key = CredentialSources.codex_openai_key
54
+ candidates[:codex_key] = { openai_api_key: codex_key, tier: :frontier } if codex_key
55
+
56
+ # 5. Claude config openaiApiKey
57
+ claude_key = CredentialSources.claude_config_value(:openaiApiKey)
58
+ candidates[:claude] = { openai_api_key: claude_key, tier: :frontier } if claude_key
59
+
60
+ # 6. Extension settings
61
+ settings_config = CredentialSources.setting(:extensions, :llm, :openai)
62
+ if settings_config.is_a?(Hash) && !settings_config.empty?
63
+ settings_key = settings_config[:api_key] || settings_config['api_key']
64
+ if settings_key
65
+ candidates[:settings] = settings_config.merge(
66
+ openai_api_key: settings_key,
67
+ tier: :frontier
68
+ )
69
+ end
70
+ end
71
+
72
+ # 7. Gateway instances from extension settings
73
+ gateways = CredentialSources.setting(:extensions, :llm, :openai, :gateways)
74
+ if gateways.is_a?(Hash)
75
+ gateways.each do |name, config|
76
+ next unless config.is_a?(Hash)
77
+
78
+ candidates[name.to_sym] = config.merge(tier: :openai_compat)
79
+ end
80
+ end
81
+
82
+ # 8. Dedup
83
+ CredentialSources.dedup_credentials(candidates)
84
+ end
35
85
  end
36
86
  end
37
87
  end
38
88
  end
89
+
90
+ Legion::Extensions::Llm::Openai.register_discovered_instances
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.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - LegionIO
@@ -57,14 +57,14 @@ dependencies:
57
57
  requirements:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: 0.2.0
60
+ version: 0.3.0
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - ">="
66
66
  - !ruby/object:Gem::Version
67
- version: 0.2.0
67
+ version: 0.3.0
68
68
  description: OpenAI provider integration for the LegionIO LLM routing framework.
69
69
  email:
70
70
  - matthewdiverson@gmail.com