@@ -123,14 +123,14 @@ class LLM(BaseModel, RetryMixin, NonNativeToolCallingMixin):
123123 # Config fields
124124 # =========================================================================
125125 model : str = Field (default = "claude-sonnet-4-20250514" , description = "Model name." )
126- api_key : SecretStr | None = Field (default = None , description = "API key." )
126+ api_key : str | SecretStr | None = Field (default = None , description = "API key." )
127127 base_url : str | None = Field (default = None , description = "Custom base URL." )
128128 api_version : str | None = Field (
129129 default = None , description = "API version (e.g., Azure)."
130130 )
131131
132- aws_access_key_id : SecretStr | None = Field (default = None )
133- aws_secret_access_key : SecretStr | None = Field (default = None )
132+ aws_access_key_id : str | SecretStr | None = Field (default = None )
133+ aws_secret_access_key : str | SecretStr | None = Field (default = None )
134134 aws_region_name : str | None = Field (default = None )
135135
136136 openrouter_site_url : str = Field (default = "https://docs.all-hands.dev/" )
@@ -296,7 +296,7 @@ class LLM(BaseModel, RetryMixin, NonNativeToolCallingMixin):
296296 # =========================================================================
297297 @field_validator ("api_key" , "aws_access_key_id" , "aws_secret_access_key" )
298298 @classmethod
299- def _validate_secrets (cls , v : SecretStr | None , info ):
299+ def _validate_secrets (cls , v : str | SecretStr | None , info ) -> SecretStr | None :
300300 return validate_secret (v , info )
301301
302302 @model_validator (mode = "before" )
@@ -342,8 +342,10 @@ def _set_env_side_effects(self):
342342 if self .openrouter_app_name :
343343 os .environ ["OR_APP_NAME" ] = self .openrouter_app_name
344344 if self .aws_access_key_id :
345+ assert isinstance (self .aws_access_key_id , SecretStr )
345346 os .environ ["AWS_ACCESS_KEY_ID" ] = self .aws_access_key_id .get_secret_value ()
346347 if self .aws_secret_access_key :
348+ assert isinstance (self .aws_secret_access_key , SecretStr )
347349 os .environ ["AWS_SECRET_ACCESS_KEY" ] = (
348350 self .aws_secret_access_key .get_secret_value ()
349351 )
@@ -633,14 +635,18 @@ def _one_attempt(**retry_kwargs) -> ResponsesAPIResponse:
633635 typed_input : ResponseInputParam | str = (
634636 cast (ResponseInputParam , input_items ) if input_items else ""
635637 )
638+ # Extract api_key value with type assertion for type checker
639+ api_key_value : str | None = None
640+ if self .api_key :
641+ assert isinstance (self .api_key , SecretStr )
642+ api_key_value = self .api_key .get_secret_value ()
643+
636644 ret = litellm_responses (
637645 model = self .model ,
638646 input = typed_input ,
639647 instructions = instructions ,
640648 tools = resp_tools ,
641- api_key = self .api_key .get_secret_value ()
642- if self .api_key
643- else None ,
649+ api_key = api_key_value ,
644650 api_base = self .base_url ,
645651 api_version = self .api_version ,
646652 timeout = self .timeout ,
@@ -708,10 +714,16 @@ def _transport_call(
708714 "ignore" ,
709715 category = UserWarning ,
710716 )
717+ # Extract api_key value with type assertion for type checker
718+ api_key_value : str | None = None
719+ if self .api_key :
720+ assert isinstance (self .api_key , SecretStr )
721+ api_key_value = self .api_key .get_secret_value ()
722+
711723 # Some providers need renames handled in _normalize_call_kwargs.
712724 ret = litellm_completion (
713725 model = self .model ,
714- api_key = self . api_key . get_secret_value () if self . api_key else None ,
726+ api_key = api_key_value ,
715727 api_base = self .base_url ,
716728 api_version = self .api_version ,
717729 timeout = self .timeout ,
@@ -755,7 +767,11 @@ def _init_model_info_and_caps(self) -> None:
755767 base_url = "http://" + base_url
756768 try :
757769 headers = {}
758- api_key = self .api_key .get_secret_value () if self .api_key else ""
770+ # Extract api_key value with type assertion for type checker
771+ api_key = ""
772+ if self .api_key :
773+ assert isinstance (self .api_key , SecretStr )
774+ api_key = self .api_key .get_secret_value ()
759775 if api_key :
760776 headers ["Authorization" ] = f"Bearer { api_key } "
761777
0 commit comments