@@ -22,8 +22,9 @@ use super::formats::bedrock::{
2222pub const BEDROCK_DOC_LINK : & str =
2323 "https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html" ;
2424
25- pub const BEDROCK_DEFAULT_MODEL : & str = "us.anthropic.claude-sonnet-4-20250514 -v1:0" ;
25+ pub const BEDROCK_DEFAULT_MODEL : & str = "us.anthropic.claude-sonnet-4-5-20250929 -v1:0" ;
2626pub const BEDROCK_KNOWN_MODELS : & [ & str ] = & [
27+ "us.anthropic.claude-sonnet-4-5-20250929-v1:0" ,
2728 "us.anthropic.claude-sonnet-4-20250514-v1:0" ,
2829 "us.anthropic.claude-3-7-sonnet-20250219-v1:0" ,
2930 "us.anthropic.claude-opus-4-20250514-v1:0" ,
@@ -37,6 +38,8 @@ pub const BEDROCK_DEFAULT_MAX_RETRY_INTERVAL_MS: u64 = 120_000;
3738
3839#[ derive( Debug , serde:: Serialize ) ]
3940pub struct BedrockProvider {
41+ #[ serde( skip) ]
42+ client : Client ,
4043 model : ModelConfig ,
4144 #[ serde( skip) ]
4245 retry_config : RetryConfig ,
@@ -49,7 +52,7 @@ impl BedrockProvider {
4952 let config = crate :: config:: Config :: global ( ) ;
5053
5154 // Attempt to load config and secrets to get AWS_ prefixed keys
52- // to re-export them into the environment for aws_config::load_from_env()
55+ // to re-export them into the environment for aws_config to use as fallback
5356 let set_aws_env_vars = |res : Result < HashMap < String , Value > , _ > | {
5457 if let Ok ( map) = res {
5558 map. into_iter ( )
@@ -62,16 +65,38 @@ impl BedrockProvider {
6265 set_aws_env_vars ( config. all_values ( ) ) ;
6366 set_aws_env_vars ( config. all_secrets ( ) ) ;
6467
65- let sdk_config = aws_config:: load_from_env ( ) . await ;
68+ // Use load_defaults() which supports AWS SSO, profiles, and environment variables
69+ let mut loader = aws_config:: defaults ( aws_config:: BehaviorVersion :: latest ( ) ) ;
70+
71+ if let Ok ( profile_name) = config. get_param :: < String > ( "AWS_PROFILE" ) {
72+ if !profile_name. is_empty ( ) {
73+ loader = loader. profile_name ( & profile_name) ;
74+ }
75+ }
76+
77+ // Check for AWS_REGION configuration
78+ if let Ok ( region) = config. get_param :: < String > ( "AWS_REGION" ) {
79+ if !region. is_empty ( ) {
80+ loader = loader. region ( aws_config:: Region :: new ( region) ) ;
81+ }
82+ }
83+
84+ let sdk_config = loader. load ( ) . await ;
85+
86+ // Validate credentials or return error back up
6687 sdk_config
6788 . credentials_provider ( )
68- . unwrap ( )
89+ . ok_or_else ( || anyhow :: anyhow! ( "No AWS credentials provider configured" ) ) ?
6990 . provide_credentials ( )
70- . await ?;
91+ . await
92+ . map_err ( |e| anyhow:: anyhow!( "Failed to load AWS credentials: {}. Make sure to run 'aws sso login --profile <your-profile>' if using SSO" , e) ) ?;
93+
94+ let client = Client :: new ( & sdk_config) ;
7195
7296 let retry_config = Self :: load_retry_config ( config) ;
7397
7498 Ok ( Self {
99+ client,
75100 model,
76101 retry_config,
77102 name : Self :: metadata ( ) . name ,
@@ -111,10 +136,8 @@ impl BedrockProvider {
111136 ) -> Result < ( bedrock:: Message , Option < bedrock:: TokenUsage > ) , ProviderError > {
112137 let model_name = & self . model . model_name ;
113138
114- let sdk_config = aws_config:: load_from_env ( ) . await ;
115- let client = Client :: new ( & sdk_config) ;
116-
117- let mut request = client
139+ let mut request = self
140+ . client
118141 . converse ( )
119142 . system ( bedrock:: SystemContentBlock :: Text ( system. to_string ( ) ) )
120143 . model_id ( model_name. to_string ( ) )
@@ -175,11 +198,14 @@ impl Provider for BedrockProvider {
175198 ProviderMetadata :: new (
176199 "aws_bedrock" ,
177200 "Amazon Bedrock" ,
178- "Run models through Amazon Bedrock. You may have to set 'AWS_' environment variables to configure authentication ." ,
201+ "Run models through Amazon Bedrock. Supports AWS SSO profiles - run 'aws sso login --profile <profile-name>' before using. Configure with AWS_PROFILE and AWS_REGION, or use environment variables/credentials ." ,
179202 BEDROCK_DEFAULT_MODEL ,
180203 BEDROCK_KNOWN_MODELS . to_vec ( ) ,
181204 BEDROCK_DOC_LINK ,
182- vec ! [ ConfigKey :: new( "AWS_PROFILE" , true , false , Some ( "default" ) ) ] ,
205+ vec ! [
206+ ConfigKey :: new( "AWS_PROFILE" , true , false , Some ( "default" ) ) ,
207+ ConfigKey :: new( "AWS_REGION" , true , false , None ) ,
208+ ] ,
183209 )
184210 }
185211
0 commit comments