Ë
    uPêjS  ã                   ó’   — d dl Z d dlmZmZ d dlmZmZ d dlZd dlm	Z	 d dl
mZmZmZ d dlmZ d dlmZmZ dd	lmZ  G d
„ de«      Zy)é    N)Ú	CoroutineÚMapping)ÚAnyÚFinal)ÚLlmProviders)ÚBEDROCK_MANAGED_S3_PREFIXESÚ"should_allow_legacy_cloud_file_idsÚvalidate_managed_cloud_file_id)Úget_async_httpx_client)ÚFileContentRequestÚHttpxBinaryResponseContenté   )Ú
BaseAWSLLMc                   ó
  ‡ — e Zd ZdZˆ fd„Zdedefd„Z	 ddedededeeef   fd	„Z	d
e
eef   defd„Zdededeej"                  z  dedz  def
d„Zdedededz  dedeej"                  z  dedz  deeeeef   z  fd„Zˆ xZS )ÚBedrockFilesHandlerz¯
    Handles downloading files from S3 for Bedrock batch processing.

    This implementation downloads files from S3 buckets where Bedrock
    stores batch output files.
    c                 ó`   •— t         ‰| �  «        t        t        j                  ¬«      | _        y )N)Úllm_provider)ÚsuperÚ__init__r   r   ÚBEDROCKÚasync_httpx_client)ÚselfÚ	__class__s    €úg/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/bedrock/files/handler.pyr   zBedrockFilesHandler.__init__   s$   ø€ Ü‰ÑÔÜ"8Ü%×-Ñ-ô#
ˆÕó    Úfile_idÚreturnc                 ó   — ddl m}  ||«      S )Né   )Úextract_s3_uri_from_file_id)Útransformationr    )r   r   r    s      r   Ú_extract_s3_uri_from_file_idz0BedrockFilesHandler._extract_s3_uri_from_file_id$   s   € Ý?á*¨7Ó3Ð3r   Ús3_uriÚconfigured_bucket_nameÚallow_legacy_cloud_file_idsc                 ó*   — t        |d|t        |¬«      S )zØ
        Parse S3 URI to extract bucket name and object key.

        Args:
            s3_uri: S3 URI (e.g., "s3://bucket-name/path/to/file")

        Returns:
            Tuple of (bucket_name, object_key)
        zs3://)r   Úschemer$   Úallowed_object_prefixesr%   )r
   r   )r   r#   r$   r%   s       r   Ú_parse_s3_uriz!BedrockFilesHandler._parse_s3_uri)   s    € ô .ØØØ#9Ü$?Ø(Cô
ð 	
r   Úlitellm_paramsc                 ó   — ddl m}  ||«      S )Nr   )Úget_configured_s3_bucket_name)r!   r,   )r   r*   r,   s      r   Ú_get_configured_s3_bucket_namez2BedrockFilesHandler._get_configured_s3_bucket_name@   s   € ÝAá,¨^Ó<Ð<r   Úfile_content_requestÚoptional_paramsÚtimeoutÚmax_retriesNc              ƒ   ó¸  K  — ddl }ddlm} |j                  d«      }|st	        d«      ‚| j                  |«      }| j                  |«      }	| j                  ||	t        |«      ¬«      \  }
}| j                  |d¬«      }| j                  |j                  d	«      |j                  d
«      |j                  d«      ||j                  d«      |j                  d«      |j                  d«      |j                  d«      |j                  d«      ¬«	      }|j                  d|j                  |j                  |j                  || j                  «       ¬«      }	 |j!                  |
|¬«      }|d   j#                  «       }t'        j(                  d|ddit'        j*                  d|¬«      ¬«      }t-        |¬«      S # t$        $ r}t	        d|› d|› �«      ‚d}~ww xY w­w)a«  
        Download file content from S3 bucket for Bedrock files.

        Args:
            file_content_request: Contains file_id (encoded or S3 URI)
            optional_params: Optional parameters containing AWS credentials
            timeout: Request timeout
            max_retries: Max retry attempts

        Returns:
            HttpxBinaryResponseContent: Binary content wrapped in compatible response format
        r   N)ÚCredentialsr   z+file_id is required in file_content_request)r#   r$   r%   Ú )r/   ÚmodelÚaws_access_key_idÚaws_secret_access_keyÚaws_session_tokenÚaws_session_nameÚaws_profile_nameÚaws_role_nameÚaws_web_identity_tokenÚaws_sts_endpoint)	r6   r7   r8   Úaws_region_namer9   r:   r;   r<   r=   Ús3)r6   r7   r8   Úregion_nameÚverify)ÚBucketÚKeyÚBodyz!Failed to download file from S3: z	. Error: éÈ   zcontent-typezapplication/octet-streamÚGET)ÚmethodÚurl)Ústatus_codeÚcontentÚheadersÚrequest)Úresponse)Úboto3Úbotocore.credentialsr3   ÚgetÚ
ValueErrorr"   r-   r)   r	   Ú_get_aws_region_nameÚget_credentialsÚclientÚ
access_keyÚ
secret_keyÚtokenÚ_get_ssl_verifyÚ
get_objectÚreadÚ	ExceptionÚhttpxÚResponseÚRequestr   )r   r.   r/   r0   r1   rN   r3   r   r#   r$   Úbucket_nameÚ
object_keyr>   ÚcredentialsÚ	s3_clientrM   Úfile_contentÚeÚmock_responses                      r   Úafile_contentz!BedrockFilesHandler.afile_contentE   s÷  è ø€ ó& 	Ý4à-×1Ñ1°)Ó<ˆÙÜÐJÓKÐKð ×9Ñ9¸'ÓBˆØ(,×(KÑ(KÈOÓ(\ÐØ"&×"4Ñ"4ØØ#9Ü(JÈ?Ó([ð #5ó #
Ñˆ�Zð "&×!:Ñ!:È?ÐbdÐ!:Ó!eˆØ*.×*>Ñ*>Ø-×1Ñ1Ð2EÓFØ"1×"5Ñ"5Ð6MÓ"NØ-×1Ñ1Ð2EÓFØ+Ø,×0Ñ0Ð1CÓDØ,×0Ñ0Ð1CÓDØ)×-Ñ-¨oÓ>Ø#2×#6Ñ#6Ð7OÓ#PØ,×0Ñ0Ð1CÓDð +?ó 
+
ˆð !Ÿ<™<ØØ)×4Ñ4Ø"-×"8Ñ"8Ø)×/Ñ/Ø'Ø×'Ñ'Ó)ð (ó 
ˆ	ð	WØ'×2Ñ2¸+È:Ð2ÓVˆHØ"*¨6Ñ"2×"7Ñ"7Ó"9ˆLô
  %Ÿ~™~ØØ Ø#Ð%?Ð@Ü—M‘M¨°FÔ;ô	 
ˆô *°=ÔAÐAøô ò 	WÜÐ@ÀÀÈ	ÐRSÐQTÐUÓVÐVûð	Wüs*   ‚EGÅ&F8 Å<<GÆ8	GÇGÇGÇGÚ	_is_asyncÚapi_basec                 ó€   — |r| j                  ||||¬«      S t        j                  | j                  ||||¬«      «      S )aX  
        Download file content from S3 bucket for Bedrock files.
        Supports both sync and async operations.

        Args:
            _is_async: Whether to run asynchronously
            file_content_request: Contains file_id (encoded or S3 URI)
            api_base: API base (unused for S3 operations)
            optional_params: Optional parameters containing AWS credentials
            timeout: Request timeout
            max_retries: Max retry attempts

        Returns:
            HttpxBinaryResponseContent or Coroutine: Binary content wrapped in compatible response format
        )r.   r/   r0   r1   )rf   ÚasyncioÚrun)r   rg   r.   rh   r/   r0   r1   s          r   rc   z BedrockFilesHandler.file_content‘   s]   € ñ0 Ø×%Ñ%Ø%9Ø /ØØ'ð	 &ó ð ô —;‘;Ø×"Ñ"Ø)=Ø$3Ø#Ø +ð	 #ó óð r   )F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr"   ÚboolÚtupler)   r   Úobjectr-   r   ÚdictÚfloatr\   ÚTimeoutÚintr   rf   r   r   rc   Ú__classcell__)r   s   @r   r   r      s0  ø„ ñô
ð4°Cð 4¸Có 4ð -2ñ	
àð
ð !$ð
ð &*ð	
ð
 
ˆs�Cˆx‰ó
ð.=¸WÀSÈ&À[Ñ=Qð =ÐVYó =ð
JBà0ðJBð ðJBð ˜Ÿ™Ñ&ð	JBð
 ˜4‘ZðJBð 
$óJBðX'àð'ð 1ð'ð ˜‘*ð	'ð
 ð'ð ˜Ÿ™Ñ&ð'ð ˜4‘Zð'ð 
$ i°°SÐ:TÐ0TÑ&UÑ	U÷'r   r   )rj   Úcollections.abcr   r   Útypingr   r   r\   Úlitellmr   Ú1litellm.litellm_core_utils.cloud_storage_securityr   r	   r
   Ú&litellm.llms.custom_httpx.http_handlerr   Úlitellm.types.llms.openair   r   Úbase_aws_llmr   r   © r   r   ú<module>r�      s<   ðÛ ß .ß ã å  ÷ñ õ
 J÷õ
 &ôb˜*õ br   