o
    ùT·j  ã                   @  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   ú[/home/dinkstrade/pdmp-scanner/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  sj   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 t
d| |||fƒS )Nr   )Ú	SigV4Auth)ÚSession)Ú
AWSRequest)ÚCredentialsz}Bedrock AWS authentication requires optional AWS dependencies. Install them with `pip install openai[bedrock]` and try again.r   )Úbotocore.authr   Úbotocore.sessionr   Úbotocore.awsrequestr   Úbotocore.credentialsr   ÚImportErrorr   r   )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
< 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úbedrock-mantleú$Literal['bedrock-mantle', 'bedrock']ÚserviceÚexplicitz-Literal['explicit', 'environment', 'profile']Úregion_sourceNú
str | NoneÚprofileF)ÚdefaultÚreprÚaccess_key_idÚsecret_access_keyÚsession_token)r0   r1   ÚcompareúAwsCredentialsProvider | NoneÚcredentials_provider)r   r   r   Ú__annotations__r+   r-   r/   r	   r2   r3   r4   r7   r   r   r   r   r%   +   s   
 r%   c                   @  s:   e Zd Zddœd#d	d
„Zeddœd$dd„ƒZd%d!d"„ZdS )&ÚBedrockAwsAuthN©ÚsessionÚconfigr%   r;   ú_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   r<   Ú_sessionr7   Ú_credentials_providerr2   r3   r4   Ú_explicit_credentialsÚ_aws_request_clsÚ_sigv4_auth_cls)r   r<   r;   Úsigv4_auth_clsÚaws_request_clsÚcredentials_clsÚsession_clsr"   r   r   r   Ú__init__9   s,   ÿý€ÿÿý
zBedrockAwsAuth.__init__r)   )r+   r'   r.   r/   r2   r3   r4   r7   r6   r+   r*   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?   r:   r@   Ústaticr/   Úproviderr0   )	r'   r(   r+   r-   r/   r2   r3   r4   r7   )r#   Úresolve_aws_region_with_sourcer   rA   r%   )Úclsr'   r/   r2   r3   r4   r7   r+   Ú_rJ   r;   Úresolved_regionr-   r"   r(   r<   r   r   r   ÚresolveQ   sB   
ÿý€ÿ÷zBedrockAwsAuth.resolveÚmethodr&   ÚurlÚheadersúMapping[str, str]Úbodyúbytes | Noneúdict[str, str]c          
   
   C  sæ   zS| 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�}|  || jj| jj¡ |¡ W n ty[   ‚  tyk }	 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)rS   rT   ÚdatarU   r@   )rC   rD   rB   r   r   ÚgetattrÚcallableÚitemsÚhashlibÚsha256Ú	hexdigestrE   rF   r<   r+   r'   Úadd_authrA   ÚdictrU   )
r   rS   rT   rU   rW   ÚcredentialsrZ   Úsigned_headersÚaws_requestr"   r   r   r   Úsign�   sD   
ÿýÿÿü ÿý€ÿzBedrockAwsAuth.sign)r<   r%   r;   r=   r   r>   )r'   r.   r/   r.   r2   r.   r3   r.   r4   r.   r7   r6   r+   r*   r   r9   )
rS   r&   rT   r&   rU   rV   rW   rX   r   rY   )r   r   r   rK   ÚclassmethodrR   rn   r   r   r   r   r9   8   s    
÷/r9   r:   Ú
aws_regionr.   r;   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Úgetrc   rd   r   r   )rp   r;   r'   r(   ru   r   r   r   rN   ©   s   ÿrN   )r   r   )rp   r.   r;   r   r   rq   )Ú
__future__r   rw   rf   Útypingr   r   r   r   r   r   Údataclassesr	   r
   Ú_exceptionsr   ÚobjectÚAwsCredentialsProviderr   Ú_AUTHORIZATIONr\   r#   r%   r9   rN   r   r   r   r   Ú<module>   s(    ü
rÿ