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 +4 -4
- data/CHANGELOG.md +7 -0
- data/lex-llm-bedrock.gemspec +1 -1
- data/lib/legion/extensions/llm/bedrock/version.rb +1 -1
- data/lib/legion/extensions/llm/bedrock.rb +99 -4
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2fdf5749de02e358b9458e391edfc790c954d252a29380e3ca2a6ba4c34e085b
|
|
4
|
+
data.tar.gz: 4662cd33fd1fa36622850662707ef618d936ab96b74ed8dc73680153b5e475c2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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`.
|
data/lex-llm-bedrock.gemspec
CHANGED
|
@@ -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.
|
|
31
|
+
spec.add_dependency 'lex-llm', '>= 0.3.0'
|
|
32
32
|
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:
|
|
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::
|
|
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.
|
|
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.
|
|
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.
|
|
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
|