lex-llm-bedrock 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: eafb04fa29d1bf032323c4040c7cdbe0ea2d3cf1c72328864ec54b5e2f7ce117
4
- data.tar.gz: 6da27c531876ff32af29b783548b86bed7a4146f45f0b94da679320dd594310b
3
+ metadata.gz: 2fdf5749de02e358b9458e391edfc790c954d252a29380e3ca2a6ba4c34e085b
4
+ data.tar.gz: 4662cd33fd1fa36622850662707ef618d936ab96b74ed8dc73680153b5e475c2
5
5
  SHA512:
6
- metadata.gz: 7b7a1bc938f269380f0310cfd0e4a2f3561e986ed09db904dbe6a31663451658bac03e56b54c57f3c32efd85c7d83eb64e8d50fdbeac20efe2314f6a9e5d0a38
7
- data.tar.gz: db293ebc885b48aa2902ecccfd5cf8e47bf58fd775ec211d31cb9a491dcecb60c5146989175affd2e1c59bd3f2429492eea94f36d202f41955708d72a3ec5780
6
+ metadata.gz: 5117d3c2035ee76b7d3caa18079724b8246aa617765960b32c4b31ab7118171b55a599e87ffb6b712e77ab4bdf00e4fac29f70d0932bd1ea7436b18ea9c4e318
7
+ data.tar.gz: a0457d98e4da2489fce6c0ee0458b9567606a7cbe71cbe2e64d7b8d75030245cd5f11cbf601ed326eca903f5b5c0579a208f8ab7b5ac783f18421363768a5ad9
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
 
5
12
  - Adopt lex-llm 0.1.9 base contract: flat `default_settings`, base `RegistryPublisher`, base `RegistryEventBuilder`.
@@ -28,5 +28,5 @@ Gem::Specification.new do |spec|
28
28
  spec.add_dependency 'legion-json', '>= 1.2.1'
29
29
  spec.add_dependency 'legion-logging', '>= 1.3.2'
30
30
  spec.add_dependency 'legion-settings', '>= 1.3.14'
31
- spec.add_dependency 'lex-llm', '>= 0.2.0'
31
+ spec.add_dependency 'lex-llm', '>= 0.3.0'
32
32
  end
@@ -4,7 +4,7 @@ module Legion
4
4
  module Extensions
5
5
  module Llm
6
6
  module Bedrock
7
- VERSION = '0.2.0'
7
+ VERSION = '0.3.0'
8
8
  end
9
9
  end
10
10
  end
@@ -10,14 +10,18 @@ module Legion
10
10
  # Amazon Bedrock provider extension namespace.
11
11
  module Bedrock
12
12
  extend ::Legion::Extensions::Core if ::Legion::Extensions.const_defined?(:Core, false)
13
+ extend Legion::Logging::Helper
14
+ extend Legion::Extensions::Llm::AutoRegistration
13
15
 
14
16
  PROVIDER_FAMILY = :bedrock
15
17
 
18
+ DEFAULT_REGION = 'us-east-2'
19
+
16
20
  def self.default_settings
17
21
  {
18
22
  enabled: false,
19
23
  default_model: 'us.anthropic.claude-sonnet-4-6',
20
- region: 'us-east-2',
24
+ region: DEFAULT_REGION,
21
25
  bearer_token: nil,
22
26
  api_key: nil,
23
27
  secret_key: nil,
@@ -37,11 +41,102 @@ module Legion
37
41
  def self.registry_publisher
38
42
  @registry_publisher ||= Legion::Extensions::Llm::RegistryPublisher.new(provider_family: PROVIDER_FAMILY)
39
43
  end
44
+
45
+ def self.discover_instances
46
+ candidates = {}
47
+ discover_env_bearer(candidates)
48
+ discover_claude_bearer(candidates)
49
+ discover_env_sigv4(candidates)
50
+ discover_settings(candidates)
51
+ discover_broker(candidates)
52
+ CredentialSources.dedup_credentials(candidates)
53
+ end
54
+
55
+ def self.discover_env_bearer(candidates)
56
+ bearer = CredentialSources.env('AWS_BEARER_TOKEN_BEDROCK')
57
+ return unless bearer
58
+
59
+ candidates[:env_bearer] = {
60
+ bearer_token: bearer,
61
+ bedrock_region: CredentialSources.env('AWS_DEFAULT_REGION') || DEFAULT_REGION,
62
+ tier: :cloud
63
+ }
64
+ end
65
+
66
+ def self.discover_claude_bearer(candidates)
67
+ claude_bearer = CredentialSources.claude_env_value('AWS_BEARER_TOKEN_BEDROCK')
68
+ claude_bearer ||= claude_env_pattern_match
69
+ return unless claude_bearer
70
+
71
+ candidates[:claude] = {
72
+ bearer_token: claude_bearer,
73
+ bedrock_region: CredentialSources.claude_env_value('AWS_DEFAULT_REGION') || DEFAULT_REGION,
74
+ tier: :cloud
75
+ }
76
+ end
77
+
78
+ def self.discover_env_sigv4(candidates)
79
+ akid = CredentialSources.env('AWS_ACCESS_KEY_ID')
80
+ skey = CredentialSources.env('AWS_SECRET_ACCESS_KEY')
81
+ return unless akid && skey
82
+
83
+ candidates[:env_sigv4] = {
84
+ api_key: akid, bedrock_access_key_id: akid, bedrock_secret_access_key: skey,
85
+ bedrock_session_token: CredentialSources.env('AWS_SESSION_TOKEN'),
86
+ bedrock_region: CredentialSources.env('AWS_DEFAULT_REGION') || DEFAULT_REGION, tier: :cloud
87
+ }.compact
88
+ end
89
+
90
+ def self.discover_settings(candidates)
91
+ settings = CredentialSources.setting(:extensions, :llm, :bedrock)
92
+ candidates[:settings] = settings.merge(tier: :cloud) if settings.is_a?(Hash) && !settings.empty?
93
+ end
94
+
95
+ def self.discover_broker(candidates)
96
+ return unless defined?(Legion::Identity::Broker)
97
+
98
+ broker_creds = broker_aws_credentials
99
+ candidates[:broker] = broker_creds.merge(tier: :cloud) if broker_creds
100
+ end
101
+
102
+ # Scan Claude config env hash for any key containing all of
103
+ # AWS, BEARER, TOKEN, and BEDROCK fragments (case-insensitive).
104
+ def self.claude_env_pattern_match
105
+ env_hash = CredentialSources.claude_config_value(:env)
106
+ return nil unless env_hash.is_a?(Hash)
107
+
108
+ fragments = %w[AWS BEARER TOKEN BEDROCK]
109
+ _key, value = env_hash.find do |k, _v|
110
+ upper = k.to_s.upcase
111
+ fragments.all? { |frag| upper.include?(frag) }
112
+ end
113
+ value
114
+ end
115
+
116
+ # Fetch AWS credentials from the Legion Identity Broker.
117
+ def self.broker_aws_credentials
118
+ return nil unless defined?(Legion::Identity::Broker)
119
+
120
+ creds = Legion::Identity::Broker.credentials_for(:aws)
121
+ return nil unless creds.is_a?(Hash)
122
+
123
+ akid = creds[:access_key_id] || creds['access_key_id']
124
+ return nil unless akid
125
+
126
+ { api_key: akid, bedrock_access_key_id: akid,
127
+ bedrock_secret_access_key: creds[:secret_access_key] || creds['secret_access_key'],
128
+ bedrock_session_token: creds[:session_token] || creds['session_token'],
129
+ bedrock_region: creds[:region] || creds['region'] || DEFAULT_REGION }.compact
130
+ end
40
131
  end
41
132
  end
42
133
  end
43
134
  end
44
135
 
45
- Legion::Extensions::Llm::Configuration.register_provider_options(
46
- Legion::Extensions::Llm::Bedrock::Provider.configuration_options
47
- )
136
+ if Legion::Extensions::Llm::Configuration.respond_to?(:register_provider_options)
137
+ Legion::Extensions::Llm::Configuration.register_provider_options(
138
+ Legion::Extensions::Llm::Bedrock::Provider.configuration_options
139
+ )
140
+ end
141
+
142
+ Legion::Extensions::Llm::Bedrock.register_discovered_instances
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-llm-bedrock
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
@@ -85,14 +85,14 @@ dependencies:
85
85
  requirements:
86
86
  - - ">="
87
87
  - !ruby/object:Gem::Version
88
- version: 0.2.0
88
+ version: 0.3.0
89
89
  type: :runtime
90
90
  prerelease: false
91
91
  version_requirements: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - ">="
94
94
  - !ruby/object:Gem::Version
95
- version: 0.2.0
95
+ version: 0.3.0
96
96
  description: Amazon Bedrock provider integration for the LegionIO LLM routing framework.
97
97
  email:
98
98
  - matthewdiverson@gmail.com