o
    ØRWjú?  ã                
   @  s~  d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	 d dl
mZmZ d dlZddlmZmZ ddlm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mZ eg df ZdZ e !dej"¡Z#dEdd„Z$dFdd„Z%dGdd„Z&dHd!d"„Z'dId$d%„Z(dJd(d)„Z)G d*d+„ d+ƒZ*G d,d-„ d-ƒZ+eG d.d/„ d/eƒƒZ,ed0d1�G d2d3„ d3ƒƒZ-deeddddddd4œ	dKdBdC„Z.g dD¢Z/dS )Lé    )ÚannotationsN)ÚLiteralÚCallableÚ	AwaitableÚcast)ÚfieldÚ	dataclassé   )Ú	NOT_GIVENÚNotGiven)Úasyncify)ÚFinalRequestOptions)Ú	_ProviderÚ_create_providerÚ_ProviderRuntime)ÚOpenAIError)ÚBedrockAwsAuthÚBedrockAwsAuthConfigÚAwsCredentialsProviderzstr | Awaitable[str])Úauthorizationzx-amz-content-sha256z
x-amz-datezx-amz-security-tokenz(^bedrock-mantle\.([a-z0-9-]+)\.api\.aws$Úvalueú
str | NoneÚreturnc                 C  s   | d u rd S |   ¡ }|pd S ©N)Ústrip)r   Ú
normalized© r   úg/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/openai/providers/bedrock.pyÚ_normalize_optional_string   s   r   Úbase_urlústr | httpx.URLú	httpx.URLc                 C  sJ   t  | ¡}|j d¡}t d|¡}|d ur|d | ¡ … }|j|p"dd�S )Nú/z/responses(?:/.*)?$)Úpath)ÚhttpxÚURLr#   ÚrstripÚreÚsearchÚstartÚ	copy_with)r   Úurlr#   Úresponses_matchr   r   r   Ú_normalize_base_url$   s   
r-   ÚleftÚrightÚboolc                 C  s    | j | j| jf|j |j|jfkS r   )ÚschemeÚhostÚport)r.   r/   r   r   r   Ú_same_origin.   s    r4   Úrequestúhttpx.RequestÚbytesc              
   C  s.   z| j W S  tjy } ztdƒ|‚d }~ww )Nz}Bedrock SigV4 authentication requires a replayable request body. Buffer the body before sending or use bearer authentication.)Úcontentr$   ÚRequestNotReadr   )r5   Úexcr   r   r   Ú_body_for_signing2   s   ÿý€ÿr;   ÚNonec                 C  s   d| j v r	tdƒ‚d S )NÚAuthorizationzXBedrock provider authentication cannot be combined with a custom `Authorization` header.)Úheadersr   )r5   r   r   r   Ú#_assert_provider_owns_authorization<   s   
ÿr?   Úoptionsr   c                 C  s   | j rtdƒ‚d| _ | S )Nz‡Bedrock SigV4 authentication does not support automatic redirects. Send a new request to the redirect target so it can be signed again.F)Úfollow_redirectsr   )r@   r   r   r   Ú_without_redirectsA   s   ÿrB   c                   @  sH   e Zd Zddd„Zddd„Zddd„Zddd„Zddd„Zddd„ZdS )Ú_BedrockBearerAuthÚtoken_providerÚBedrockTokenProviderr   r!   r   r<   c                C  s   || _ || _d S r   )Ú_token_providerÚ	_base_url)ÚselfrD   r   r   r   r   Ú__init__L   s   
z_BedrockBearerAuth.__init__r5   r6   c                 C  s"   t |ƒ t|j| jƒstdƒ‚d S )Nz`Refusing to authenticate a Bedrock request for an origin other than the configured provider URL.)r?   r4   r+   rG   r   ©rH   r5   r   r   r   Ú_validate_requestP   s   ÿÿz$_BedrockBearerAuth._validate_requestÚstrc              
   C  sŽ   z	t t|  ¡ ƒ}W n ty   ‚  ty! } ztdƒ|‚d }~ww t |¡r8t|dd ƒ}t|ƒr4|ƒ  tdƒ‚t	|t
ƒrA| ¡ sEtdƒ‚|S )Nú2Failed to resolve a bearer credential for Bedrock.Úclosez7An async Bedrock token provider requires `AsyncOpenAI`.úFThe Bedrock bearer credential provider must return a non-empty string.)r   ÚobjectrF   r   Ú	ExceptionÚinspectÚisawaitableÚgetattrÚcallableÚ
isinstancerL   r   )rH   Útokenr:   rN   r   r   r   Ú_resolve_tokenW   s    
€ÿ
z!_BedrockBearerAuth._resolve_tokenc              
   Ã  sx   �zt t|  ¡ ƒ}t |¡r|I d H }W n ty   ‚  ty, } ztdƒ|‚d }~ww t|tƒr6| 	¡ s:tdƒ‚|S )NrM   rO   )
r   rP   rF   rR   rS   r   rQ   rV   rL   r   )rH   rW   r:   r   r   r   Ú_resolve_token_asynch   s   €

€
€ÿz'_BedrockBearerAuth._resolve_token_asyncc                 C  s"   |   |¡ d|  ¡ › �|jd< d S ©NzBearer r=   )rK   rX   r>   rJ   r   r   r   Úprepare_requestv   s   
z"_BedrockBearerAuth.prepare_requestc                 Ã  s*   �|   |¡ d|  ¡ I d H › �|jd< d S rZ   )rK   rY   r>   rJ   r   r   r   Úprepare_async_requestz   s   €
z(_BedrockBearerAuth.prepare_async_requestN)rD   rE   r   r!   r   r<   ©r5   r6   r   r<   ©r   rL   )	Ú__name__Ú
__module__Ú__qualname__rI   rK   rX   rY   r[   r\   r   r   r   r   rC   K   s    




rC   c                   @  sD   e Zd Zddœddd„Zddd„Zddd„Zddd„Zddd„ZdS )Ú_BedrockSigV4AuthN)ÚauthÚconfigr   r   r!   rc   úBedrockAwsAuth | Noner   r<   c                C  s   || _ || _|| _d S r   )Ú_configrG   Ú_auth)rH   rd   r   rc   r   r   r   rI   €   s   
z_BedrockSigV4Auth.__init__r5   r6   r7   c                 C  sn   t |ƒ t|j| jƒstdƒ‚t |jj¡}|d ur3| d¡| j	j
kr3td| d¡› d| j	j
› d�ƒ‚t|ƒS )NzXRefusing to sign a Bedrock request for an origin other than the configured provider URL.é   zThe Bedrock endpoint region `z#` does not match the SigV4 region `z`.)r?   r4   r+   rG   r   Ú_CANONICAL_BEDROCK_HOSTÚ	fullmatchr2   Úgrouprf   Úregionr;   )rH   r5   Úendpoint_region_matchr   r   r   rK   ‹   s   ÿÿÿz#_BedrockSigV4Auth._validate_requestr   Úbodyc                C  sR   t D ]	}|j |d ¡ q|j|jt|jƒt|jƒ|d�}|j ¡  |j 	|¡ d S )N©Úmethodr+   r>   rn   )
Ú_AWS_SIGNING_HEADERSr>   ÚpopÚsignrp   rL   r+   ÚdictÚclearÚupdate)rH   r5   rc   rn   ÚheaderÚsigned_headersr   r   r   Ú_sign›   s   ü
z_BedrockSigV4Auth._signc                 C  s6   |   |¡}| jd u rt| jƒ| _| j|| j|d� d S )N)rc   rn   )rK   rg   r   rf   ry   )rH   r5   rn   r   r   r   r[   ¨   s   

z!_BedrockSigV4Auth.prepare_requestc                 Ã  s|   �|   |¡}| jd u rttƒ| jƒI d H | _t| jjƒ|jt|jƒdd„ |j	 
¡ D ƒ|d�I d H }|j	 ¡  |j	 |¡ d S )Nc                 S  s"   i | ]\}}|  ¡ tvr||“qS r   )Úlowerrq   )Ú.0Únamer   r   r   r   Ú
<dictcomp>¶   s    z;_BedrockSigV4Auth.prepare_async_request.<locals>.<dictcomp>ro   )rK   rg   r   r   rf   rs   rp   rL   r+   r>   Úitemsru   rv   )rH   r5   rn   rx   r   r   r   r\   ®   s   €


ÿú
z'_BedrockSigV4Auth.prepare_async_request)rd   r   r   r!   rc   re   r   r<   ©r5   r6   r   r7   )r5   r6   rc   r   rn   r7   r   r<   r]   )r_   r`   ra   rI   rK   ry   r[   r\   r   r   r   r   rb      s    û


rb   c                   @  s   e Zd ZU dZded< dS )Ú_BedrockProviderRuntimeNr   rl   )r_   r`   ra   rl   Ú__annotations__r   r   r   r   r€   ¿   s   
 r€   T)Úfrozenc                   @  sì   e Zd ZU ded< ded< ded< eddd	�Zded
< edddd�Zded< dZded< dZded< eddd	�Z	ded< eddd	�Z
ded< eddd	�Zded< edddd�Zded< eddd�Zded< d$dd„Zd%dd „Zd&d"d#„ZdS )'Ú_BedrockProviderDefinitionr   Úconfigured_regionz)Literal['explicit', 'environment'] | NoneÚregion_sourcezhttpx.URL | NoneÚconfigured_base_urlNF)ÚdefaultÚreprÚapi_key)r‡   rˆ   ÚcompareúBedrockTokenProvider | NonerD   r0   Úuse_environment_bearerÚprofileÚaccess_key_idÚsecret_access_keyÚsession_tokenúAwsCredentialsProvider | NoneÚcredential_providerÚbedrock)r‡   ÚinitrL   r|   r   ú3Literal['static', 'profile', 'provider', 'default']c                 C  s.   | j d urdS | jd urdS | jd urdS dS )NÚstaticr�   Úproviderr‡   )rŽ   r�   r’   ©rH   r   r   r   Ú_aws_sourceÓ   s   


z&_BedrockProviderDefinition._aws_sourceú2tuple[BedrockAwsAuthConfig, BedrockAwsAuth | None]c              
   C  sf   | j d urt| j |  ¡ | jpd| j| j| j| j| jd�d fS t	j
d | j| j| j| j| jd�}|j|fS )NÚexplicit)rl   Úsourcer…   r�   rŽ   r�   r�   Úcredentials_provider)rl   r�   rŽ   r�   r�   r�   )r„   r   r™   r…   r�   rŽ   r�   r�   r’   r   Úresolverd   )rH   rc   r   r   r   Ú_resolve_aws_authÜ   s,   
ø
õú
z,_BedrockProviderDefinition._resolve_aws_authr   c                   s   ddd„}d }d }ˆ j d ur‡ fdd„}ˆ j}n0ˆ jd ur$ˆ j}ˆ j}n$ˆ jr-|}ˆ j}nˆ  ¡ \}}|j}ˆ jp@td|› d�ƒ}t|||d	�}ˆ jd urQˆ j}n|d ur^td|› d�ƒ}nt	d
ƒ‚|d urlt
||d�}|d usrJ ‚t|tƒr„tˆ j||t|j|jd�S tˆ j|||j|jd�S )Nr   rL   c                  S  s   t j d¡} | stdƒ‚| S )NÚAWS_BEARER_TOKEN_BEDROCKzµCould not find credentials for Bedrock. Pass a bearer credential or AWS credentials to `bedrock(...)`, set `AWS_BEARER_TOKEN_BEDROCK`, or configure the default AWS credential chain.)ÚosÚenvironÚgetr   )rW   r   r   r   Úenvironment_token÷   s   ÿz?_BedrockProviderDefinition.configure.<locals>.environment_tokenc                     s
   ˆ j pdS )NÚ )r‰   r   r˜   r   r   Ú<lambda>  s   
 z6_BedrockProviderDefinition.configure.<locals>.<lambda>zhttps://bedrock-mantle.z.api.aws/openai/v1)rd   r   rc   zmBedrock requires an AWS region. Pass `region` to `bedrock(...)`, or set `AWS_REGION` or `AWS_DEFAULT_REGION`.)r   )r|   r   rl   Útransform_requestr[   r\   )r|   r   rl   r[   r\   r^   )r‰   r„   rD   rŒ   rŸ   rl   r†   r-   rb   r   rC   rV   r€   r|   rB   r[   r\   )rH   r¤   rc   Úbearer_providerrl   Ú
aws_configÚaws_authr   r   r˜   r   Ú	configureö   sX   
	


ÿ
ÿ
ú	ûz$_BedrockProviderDefinition.configure)r   r•   )r   rš   )r   r   )r_   r`   ra   r�   r   r‰   rD   rŒ   r�   rŽ   r�   r�   r’   r|   r™   rŸ   r«   r   r   r   r   rƒ   Ä   s    
 

	rƒ   )	rl   r   r‰   rD   rŽ   r�   r�   r�   r’   rl   ú!str | httpx.URL | None | NotGivenr‰   ústr | None | NotGivenrD   r‹   rŽ   r�   r�   r�   r’   r‘   r   c        	         C  s0  t | ƒ}	| dur|	du rtdƒ‚d}
|	durd}
nt tj d¡p%tj d¡ƒ}	|	dur-d}
t|tƒrCt tj d¡ƒ}|r@t|ƒnd}n|du rJd}nt|tƒrW| 	¡ sWtdƒ‚t|ƒ}t |ƒ}|durk|du rktd	ƒ‚|du |du ks{|dur|du rtd
ƒ‚|dur’| 	¡ rŽt
t|ƒ 	¡ s’tdƒ‚|durž| 	¡ sžtdƒ‚t|tƒ o§|du}|r·t|tƒr³| 	¡ s·tdƒ‚|rÁ|durÁtdƒ‚|pÆ|du}t|du|du|dufƒ}|dkrÜtdƒ‚|rä|rätdƒ‚t|tƒ oí|du }| oþ| oþ| oþttj d¡ƒ}tt|	|
||�rt
d|ƒnd|||||||d�ƒS )z?Configure the standard OpenAI client for Amazon Bedrock Mantle.Nz+The Bedrock AWS `region` must not be empty.r›   Ú
AWS_REGIONÚAWS_DEFAULT_REGIONÚenvironmentÚAWS_BEDROCK_BASE_URLz)The Bedrock `base_url` must not be empty.z,The Bedrock AWS `profile` must not be empty.zzStatic AWS credentials require both `access_key_id` and `secret_access_key`. A `session_token` may only be used with both.zXStatic AWS credentials require non-empty `access_key_id` and `secret_access_key` values.z=A static AWS `session_token` must not be empty when provided.z0The Bedrock bearer credential must not be empty.zVThe `api_key` and `token_provider` options are mutually exclusive. Configure only one.rh   z‚Bedrock authentication is ambiguous. Configure exactly one explicit AWS mode: static credentials, profile, or credential provider.z•Bedrock authentication is ambiguous. Configure exactly one explicit mode: bearer credential, static AWS credentials, profile, or credential provider.r    r   )r„   r…   r†   r‰   rD   rŒ   r�   rŽ   r�   r�   r’   )r   r   r¡   r¢   r£   rV   r   r-   rL   r   r   Úsumr0   r   rƒ   )rl   r   r‰   rD   rŽ   r�   r�   r�   r’   Únormalized_regionr…   Úenvironment_base_urlr†   Únormalized_profileÚexplicit_api_keyÚexplicit_bearerÚ	aws_modesÚskip_environment_bearerrŒ   r   r   r   r“   4  s’   ÿ
 ÿýÿÿÿÿþüõÿr“   )r“   rE   r   )r   r   r   r   )r   r    r   r!   )r.   r!   r/   r!   r   r0   r   r]   )r@   r   r   r   )rl   r   r   r¬   r‰   r­   rD   r‹   rŽ   r   r�   r   r�   r   r�   r   r’   r‘   r   r   )0Ú
__future__r   r¡   r'   rR   Útypingr   r   r   r   Údataclassesr   r   r$   Ú_typesr
   r   Ú_utilsr   Ú_modelsr   Ú	_providerr   r   r   Ú_exceptionsr   Úlib._bedrock_authr   r   r   rE   rq   ÚcompileÚ
IGNORECASEri   r   r-   r4   r;   r?   rB   rC   rb   r€   rƒ   r“   Ú__all__r   r   r   r   Ú<module>   sN    








4@qög