o
    ØRWj4  ã                   @  sÈ   d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	m
Z
 d dlmZmZ ddlmZ eg ef ZG dd„ de	ƒZd	Zed
ddfZddd„Zedd�G dd„ dƒƒZG dd„ dƒZddœd dd„ZdS )!é    )ÚannotationsN)ÚAnyÚLiteralÚMappingÚCallableÚProtocolÚcast)ÚfieldÚ	dataclassé   )ÚOpenAIErrorc                   @  s   e Zd Zddd„ZdS )Ú_BotocoreSessionÚreturnúobject | Nonec                 C  s   d S )N© )Úselfr   r   úg/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/openai/lib/_bedrock_auth.pyÚget_credentials   s    z _BotocoreSession.get_credentialsN)r   r   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s    r   Úauthorizationzx-amz-content-sha256z
x-amz-datezx-amz-security-tokenr   útuple[Any, Any, Any, Any]c               
   C  sd   zddl m}  ddlm} ddlm} ddlm} W n ty+ } zt	dƒ|‚d }~ww | |||fS )Nr   )Ú	SigV4Auth)ÚSession)Ú
AWSRequest)ÚCredentialsz}Bedrock AWS authentication requires optional AWS dependencies. Install them with `pip install openai[bedrock]` and try again.)
Úbotocore.authr   Úbotocore.sessionr   Úbotocore.awsrequestr   Úbotocore.credentialsr   ÚImportErrorr   )r   r   r   r   Úexcr   r   r   Ú_load_botocore   s   ÿý€ÿr#   T)Úfrozenc                   @  sˆ   e Zd ZU ded< 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< dS )ÚBedrockAwsAuthConfigÚstrÚregionz3Literal['static', 'profile', 'provider', 'default']ÚsourceÚexplicitz-Literal['explicit', 'environment', 'profile']Úregion_sourceNú
str | NoneÚprofileF)ÚdefaultÚreprÚaccess_key_idÚsecret_access_keyÚsession_token)r-   r.   ÚcompareúAwsCredentialsProvider | NoneÚcredentials_provider)r   r   r   Ú__annotations__r*   r,   r	   r/   r0   r1   r4   r   r   r   r   r%   +   s   
 r%   c                   @  s4   e Zd Zddœdd	d
„Zed dd„ƒZd!dd„ZdS )"ÚBedrockAwsAuthN©ÚsessionÚconfigr%   r8   ú_BotocoreSession | Noner   ÚNonec             
   C  s¦   t ƒ \}}}}|d u r%z||jd�}W n ty$ } ztdƒ|‚d }~ww |d us+J ‚|| _|| _|j| _|jd urH|j	d urH||j|j	|j
ƒnd | _|| _|| _d S )N©r,   ú�Failed to resolve AWS credentials for Bedrock. Verify your AWS profile, environment variables, or runtime identity configuration and try again.)r#   r,   Ú	Exceptionr   r9   Ú_sessionr4   Ú_credentials_providerr/   r0   r1   Ú_explicit_credentialsÚ_aws_request_clsÚ_sigv4_auth_cls)r   r9   r8   Úsigv4_auth_clsÚaws_request_clsÚcredentials_clsÚsession_clsr"   r   r   r   Ú__init__8   s,   ÿý€ÿÿý
zBedrockAwsAuth.__init__r'   r+   r,   r/   r0   r1   r4   r3   c             
   C  s°   t ƒ \}}}}z||d�}	t||	d�\}
}W n ty   ‚  ty. } ztdƒ|‚d }~ww |d ur6d}n|d ur=d}n	|d urDd}nd}t|
|||||||d�}| ||	d�S )	Nr<   r7   r=   Ústaticr,   Úproviderr-   )r'   r(   r*   r,   r/   r0   r1   r4   )r#   Úresolve_aws_region_with_sourcer   r>   r%   )Úclsr'   r,   r/   r0   r1   r4   Ú_rG   r8   Úresolved_regionr*   r"   r(   r9   r   r   r   ÚresolveP   s@   
ÿý€ÿø
zBedrockAwsAuth.resolveÚmethodr&   ÚurlÚheadersúMapping[str, str]Úbodyúbytes | Noneúdict[str, str]c          
   
   C  sâ   zQ| j d ur
|   ¡ n| jp| j ¡ }|d u rtdƒ‚t|dd ƒ}t|ƒr'|ƒ }dd„ | ¡ D ƒ}t 	|p5d¡ 
¡ |d< | j||||d�}|  |d| jj¡ |¡ W n tyY   ‚  tyi }	 ztd	ƒ|	‚d }	~	ww t|j ¡ ƒS )
Nzµ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.Úget_frozen_credentialsc                 S  s"   i | ]\}}|  ¡ tvr||“qS r   )ÚlowerÚ_AWS_SIGNING_HEADERS)Ú.0ÚnameÚvaluer   r   r   Ú
<dictcomp>�   s    z'BedrockAwsAuth.sign.<locals>.<dictcomp>ó    zX-Amz-Content-SHA256)rP   rQ   ÚdatarR   zbedrock-mantler=   )r@   rA   r?   r   r   ÚgetattrÚcallableÚitemsÚhashlibÚsha256Ú	hexdigestrB   rC   r9   r'   Úadd_authr>   ÚdictrR   )
r   rP   rQ   rR   rT   ÚcredentialsrW   Úsigned_headersÚaws_requestr"   r   r   r   Úsign~   sD   
ÿýÿÿüÿý€ÿzBedrockAwsAuth.sign)r9   r%   r8   r:   r   r;   )r'   r+   r,   r+   r/   r+   r0   r+   r1   r+   r4   r3   r   r6   )
rP   r&   rQ   r&   rR   rS   rT   rU   r   rV   )r   r   r   rH   ÚclassmethodrO   rk   r   r   r   r   r6   7   s
    -r6   r7   Ú
aws_regionr+   r8   r   ú9tuple[str, Literal['explicit', 'environment', 'profile']]c                C  s–   | }d}|d u s|  ¡ stj d¡ptj d¡}d}|d u s"|  ¡ s9|d ur9t|dd ƒ}t|ƒr9td|dƒƒ}d}|d u sA|  ¡ sEtd	ƒ‚|  ¡ |fS )
Nr)   Ú
AWS_REGIONÚAWS_DEFAULT_REGIONÚenvironmentÚget_config_variabler+   r'   r,   zmBedrock requires an AWS region. Pass `region` to `bedrock(...)`, or set `AWS_REGION` or `AWS_DEFAULT_REGION`.)ÚstripÚosÚenvironÚgetr`   ra   r   r   )rm   r8   r'   r(   rr   r   r   r   rK   ¦   s   ÿrK   )r   r   )rm   r+   r8   r   r   rn   )Ú
__future__r   rt   rc   Útypingr   r   r   r   r   r   Údataclassesr	   r
   Ú_exceptionsr   ÚobjectÚAwsCredentialsProviderr   Ú_AUTHORIZATIONrY   r#   r%   r6   rK   r   r   r   r   Ú<module>   s(    ü
pÿ