o
    àejT@  ã                
   @  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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&dFdd„Z'dGdd„Z(dHdd„Z)dId"d#„Z*dJd%d&„Z+dKd)d*„Z,G d+d,„ d,ƒZ-G d-d.„ d.ƒZ.eG d/d0„ d0eƒƒZ/ed1d2�G d3d4„ d4ƒƒZ0deeddddddd5œ	dLdCdD„Z1g dE¢Z2dS )Mé    )ÚannotationsN)ÚLiteralÚCallableÚ	AwaitableÚcast)ÚfieldÚ	dataclassé   )Ú	NOT_GIVENÚNotGiven)Úasyncify)Únormalize_httpx_urlÚrequest_not_read_exceptions)Ú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   úX/var/www/html/choboyeo/PHP/venv/lib/python3.10/site-packages/openai/providers/bedrock.pyÚ_normalize_optional_string   s   r    Úbase_urlústr | httpx.URLú	httpx.URLc                 C  sH   t | ƒ}|j d¡}t d|¡}|d ur|d | ¡ … }|j|p!dd�S )Nú/z/responses(?:/.*)?$)Úpath)r   r%   Ú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ƒ 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   r   )r5   Úexcr   r   r   Ú_body_for_signing3   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_redirectsB   s   ÿrA   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)ÚselfrC   r!   r   r   r   Ú__init__M   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+   rF   r   ©rG   r5   r   r   r   Ú_validate_requestQ   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   ÚobjectrE   r   Ú	ExceptionÚinspectÚisawaitableÚgetattrÚcallableÚ
isinstancerK   r   )rG   Útokenr9   rM   r   r   r   Ú_resolve_tokenX   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 )NrL   rN   )
r   rO   rE   rQ   rR   r   rP   rU   rK   r   )rG   rV   r9   r   r   r   Ú_resolve_token_asynci   s   €

€
€ÿz'_BedrockBearerAuth._resolve_token_asyncc                 C  s"   |   |¡ d|  ¡ › �|jd< d S ©NzBearer r<   )rJ   rW   r=   rI   r   r   r   Úprepare_requestw   s   
z"_BedrockBearerAuth.prepare_requestc                 Ã  s*   �|   |¡ d|  ¡ I d H › �|jd< d S rY   )rJ   rX   r=   rI   r   r   r   Úprepare_async_request{   s   €
z(_BedrockBearerAuth.prepare_async_requestN)rC   rD   r!   r#   r   r;   ©r5   r6   r   r;   ©r   rK   )	Ú__name__Ú
__module__Ú__qualname__rH   rJ   rW   rX   rZ   r[   r   r   r   r   rB   L   s    




rB   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#   rb   úBedrockAwsAuth | Noner   r;   c                C  s   || _ || _|| _d S r   )Ú_configrF   Ú_auth)rG   rc   r!   rb   r   r   r   rH   �   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+   rF   r   Ú_CANONICAL_BEDROCK_HOSTÚ	fullmatchr2   Úgroupre   Úregionr:   )rG   r5   Úendpoint_region_matchr   r   r   rJ   Œ   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=   rm   )
Ú_AWS_SIGNING_HEADERSr=   ÚpopÚsignro   rK   r+   ÚdictÚclearÚupdate)rG   r5   rb   rm   ÚheaderÚsigned_headersr   r   r   Ú_signœ   s   ü
z_BedrockSigV4Auth._signc                 C  s6   |   |¡}| jd u rt| jƒ| _| j|| j|d� d S )N)rb   rm   )rJ   rf   r   re   rx   )rG   r5   rm   r   r   r   rZ   ©   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   )Úlowerrp   )Ú.0Únamer   r   r   r   Ú
<dictcomp>·   s    z;_BedrockSigV4Auth.prepare_async_request.<locals>.<dictcomp>rn   )rJ   rf   r   r   re   rr   ro   rK   r+   r=   Úitemsrt   ru   )rG   r5   rm   rw   r   r   r   r[   ¯   s   €


ÿú
z'_BedrockSigV4Auth.prepare_async_request)rc   r   r!   r#   rb   rd   r   r;   ©r5   r6   r   r7   )r5   r6   rb   r   rm   r7   r   r;   r\   )r^   r_   r`   rH   rJ   rx   rZ   r[   r   r   r   r   ra   €   s    û


ra   c                   @  s   e Zd ZU dZded< dS )Ú_BedrockProviderRuntimeNr   rk   )r^   r_   r`   rk   Ú__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 | NonerC   r0   Úuse_environment_bearerÚprofileÚaccess_key_idÚsecret_access_keyÚsession_tokenúAwsCredentialsProvider | NoneÚcredential_providerÚbedrock)r†   ÚinitrK   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‘   ©rG   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)rk   Úsourcer„   rŒ   r�   rŽ   r�   Úcredentials_provider)rk   rŒ   r�   rŽ   r�   rœ   )rƒ   r   r˜   r„   rŒ   r�   rŽ   r�   r‘   r   Úresolverc   )rG   rb   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   rK   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   )rV   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)rc   r!   rb   zmBedrock requires an AWS region. Pass `region` to `bedrock(...)`, or set `AWS_REGION` or `AWS_DEFAULT_REGION`.)r!   )r{   r!   rk   Útransform_requestrZ   r[   )r{   r!   rk   rZ   r[   r]   )rˆ   rƒ   rC   r‹   rž   rk   r…   r-   ra   r   rB   rU   r   r{   rA   rZ   r[   )rG   r£   rb   Úbearer_providerrk   Ú
aws_configÚaws_authr!   r   r—   r   Ú	configure÷   sX   
	


ÿ
ÿ
ú	ûz$_BedrockProviderDefinition.configure)r   r”   )r   r™   )r   r   )r^   r_   r`   r€   r   rˆ   rC   r‹   rŒ   r�   rŽ   r�   r‘   r{   r˜   rž   rª   r   r   r   r   r‚   Å   s    
 

	r‚   )	rk   r!   rˆ   rC   r�   rŽ   r�   rŒ   r‘   rk   ú!str | httpx.URL | None | NotGivenrˆ   ústr | None | NotGivenrC   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.rg   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ˆ   rC   r‹   rŒ   r�   rŽ   r�   r‘   )r    r   r    r¡   r¢   rU   r   r-   rK   r   r   Úsumr0   r   r‚   )rk   r!   rˆ   rC   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’   5  s’   ÿ
 ÿýÿÿÿÿþüõÿr’   )r’   rD   r   )r   r   r   r   )r!   r"   r   r#   )r.   r#   r/   r#   r   r0   r~   r\   )r?   r   r   r   )rk   r   r!   r«   rˆ   r¬   rC   rŠ   r�   r   rŽ   r   r�   r   rŒ   r   r‘   r�   r   r   )3Ú
__future__r   r    r'   rQ   Útypingr   r   r   r   Údataclassesr   r   ÚhttpxÚ_typesr
   r   Ú_utilsr   Ú_httpx2r   r   Ú_modelsr   Ú	_providerr   r   r   Ú_exceptionsr   Úlib._bedrock_authr   r   r   rD   rp   ÚcompileÚ
IGNORECASErh   r    r-   r4   r:   r>   rA   rB   ra   r   r‚   r’   Ú__all__r   r   r   r   Ú<module>   sP    







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