o
    î6WjMJ  ã                   @  sä  U 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
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 dd	lmZmZm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" ddlm#Z#m$Z$ ddl%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4m5Z5 e 6e7¡Z8de9d< dZ:e
deej;ej<f d�Z=e
dee!e e"e f d�Z>d(dd„Z?d)d d!„Z@G d"d#„ d#e)e=e>f ƒZAG d$d%„ d%eAej;e!e f e*ƒZBG d&d'„ d'eAej<e"e f e+ƒZCdS )*é    )ÚannotationsN)ÚAnyÚUnionÚMappingÚTypeVarÚSequence)ÚSelfÚoverrideé   )Ú_exceptionsé   )ÚBetaÚ	AsyncBeta)Ú	NOT_GIVENÚTimeoutÚNotGiven)Úis_dictÚis_given)Ú
model_copy)Ú__version__)ÚStreamÚAsyncStream)ÚAnthropicErrorÚAPIStatusError)ÚMiddlewareInput)ÚDEFAULT_MAX_RETRIESÚ
BaseClientÚSyncAPIClientÚAsyncAPIClientÚFinalRequestOptionsÚmerge_headers©ÚAWSEventStreamDecoder)ÚMessagesÚAsyncMessages)ÚCompletionsÚAsyncCompletionszlogging.LoggerÚlogzbedrock-2023-05-31Ú_HttpxClientT)ÚboundÚ_DefaultStreamTÚinput_optionsr   Úreturnc                 C  sô   t | dd�}t|jƒr)|j dt¡ t|jƒr)|j d¡}|r)|j d| d¡¡ |j	dv re|j
dkret|jƒs<td	ƒ‚|j d
d ¡}tjjt|ƒdd�}|j dd¡}|r^d|› d�|_	nd|› d�|_	|j	 d¡rotdƒ‚|j	dkrxtdƒ‚|S )NT)ÚdeepÚanthropic_versionzanthropic-betaÚanthropic_betaú,>   ú/v1/completeú/v1/messagesú/v1/messages?beta=trueÚpostz<Expected dictionary json_data for post /completions endpointÚmodelú:)ÚsafeÚstreamFz/model/z/invoke-with-response-streamz/invokez/v1/messages/batchesz-The Batch API is not supported in Bedrock yetz/v1/messages/count_tokensz.Token counting is not supported in Bedrock yet)r   r   Ú	json_dataÚ
setdefaultÚDEFAULT_VERSIONr   ÚheadersÚgetÚsplitÚurlÚmethodÚRuntimeErrorÚpopÚurllibÚparseÚquoteÚstrÚ
startswithr   )r+   ÚoptionsÚbetasr5   r8   © rJ   úl/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/anthropic/lib/bedrock/_client.pyÚ_prepare_options(   s*   



rL   rF   c                  C  sb   t j d¡} | du r$zddl}| ¡ }|jr|j} W n	 ty#   Y nw | du r/t d¡ d} | S )zi
    Infer the AWS region from the environment variables or
    from the boto3 session if available.
    Ú
AWS_REGIONNr   z0No AWS region specified, defaulting to us-east-1ú	us-east-1)	ÚosÚenvironr=   Úboto3ÚSessionÚregion_nameÚImportErrorr'   Úwarning)Ú
aws_regionrQ   ÚsessionrJ   rJ   rK   Ú_infer_regionH   s   €ÿ
rX   c                   @  s   e Zd Zedd	d
„ƒZdS )ÚBaseBedrockClientÚerr_msgrF   ÚbodyÚobjectÚresponseúhttpx.Responser,   r   c                C  sø   |j dkrtj|||d�S |j dkrtj|||d�S |j dkr'tj|||d�S |j dkr4tj|||d�S |j dkrAtj|||d�S |j dkrNtj|||d�S |j dkr[tj|||d�S |j d	krhtj	|||d�S |j d
krutj
|||d�S t|||d�S )Ni�  )r]   r[   i‘  i“  i”  i™  i¦  i­  i÷  iô  )Ústatus_coder   ÚBadRequestErrorÚAuthenticationErrorÚPermissionDeniedErrorÚNotFoundErrorÚConflictErrorÚUnprocessableEntityErrorÚRateLimitErrorÚServiceUnavailableErrorÚInternalServerErrorr   )ÚselfrZ   r[   r]   rJ   rJ   rK   Ú_make_status_error`   s&   








z$BaseBedrockClient._make_status_errorN)rZ   rF   r[   r\   r]   r^   r,   r   )Ú__name__Ú
__module__Ú__qualname__r	   rj   rJ   rJ   rJ   rK   rY   _   s    rY   c                      óº   e Zd ZU ded< ded< ded< dddddddeedddddfd=‡ fd"d#„Zed>d%d&„ƒZed?d)d*„ƒZ	ed@d-d.„ƒZ
ddddddededdddei d/œdAd8d9„ZeZdBd;d<„Z‡  ZS )CÚAnthropicBedrockr#   Úmessagesr%   Úcompletionsr   ÚbetaNFÚaws_secret_keyú
str | NoneÚaws_access_keyrV   Úaws_profileÚaws_session_tokenÚapi_keyÚbase_urlústr | httpx.URL | NoneÚtimeoutú'float | httpx.Timeout | None | NotGivenÚmax_retriesÚintÚdefault_headersúMapping[str, str] | NoneÚdefault_queryúMapping[str, object] | NoneÚhttp_clientúhttpx.Client | NoneÚ
middlewareú Sequence[MiddlewareInput] | NoneÚ_strict_response_validationÚboolr,   ÚNonec                   óä   |d u r
t j d¡}|d up|d up|d up|d u}|d ur$|r$tdƒ‚|| _|| _|| _|d u r4tƒ n|| _|| _	|| _
|d u rGt j d¡}|d u rRd| j› d�}tƒ jt|||	|
||||d�	 t| ƒ| _t| ƒ| _t| ƒ| _d S ©NÚAWS_BEARER_TOKEN_BEDROCKzzCannot specify both `api_key` and AWS credentials (`aws_access_key`, `aws_secret_key`, `aws_session_token`, `aws_profile`)ÚANTHROPIC_BEDROCK_BASE_URLzhttps://bedrock-runtime.z.amazonaws.com)	Úversionry   r{   r}   Úcustom_headersÚcustom_queryrƒ   r…   r‡   )rO   rP   r=   Ú
ValueErrorrx   rs   ru   rX   rV   rv   rw   ÚsuperÚ__init__r   r   rr   r#   rp   r%   rq   ©ri   rs   ru   rV   rv   rw   rx   ry   r{   r}   r   r�   rƒ   r…   r‡   Úhas_aws_credentials©Ú	__class__rJ   rK   r“   Š   óJ   ÿþüÿ÷

zAnthropicBedrock.__init__r"   c                 C  ó   t ƒ S ©Nr!   ©ri   rJ   rJ   rK   Ú_make_sse_decoderÒ   ó   z"AnthropicBedrock._make_sse_decoderrH   r   c                 C  s   t |ƒS rš   ©rL   ©ri   rH   rJ   rJ   rK   rL   Ö   s   z!AnthropicBedrock._prepare_optionsÚrequestúhttpx.Requestc                 C  sz   | j d urd| j › �|jd< d S ddlm} | ¡  ¡ }||jt|jƒ|j| j	| j
| j| jp/d| j|d�	}|j |¡ d S ©NzBearer ÚAuthorizationr   )Úget_auth_headersrN   )	r@   r?   r<   ru   rs   rw   ÚregionÚprofileÚdata©rx   r<   Ú_authr¤   ÚreadÚdecoder@   rF   r?   ru   rs   rw   rV   rv   Úupdate©ri   r    r¤   r§   r<   rJ   rJ   rK   Ú_prepare_requestÚ   s"   
÷z!AnthropicBedrock._prepare_request©rs   ru   rV   rw   rx   ry   r{   rƒ   r}   r   Úset_default_headersr�   Úset_default_queryr…   Ú_extra_kwargsú!float | Timeout | None | NotGivenúint | NotGivenr°   r±   ú+Sequence[MiddlewareInput] | None | NotGivenr²   úMapping[str, Any]r   c                C  óú   |
dur|durt dƒ‚|dur|durt dƒ‚| j}|
dur%t||
ƒ}n|dur+|}| j}|dur9i |¥|¥}n|dur?|}| jd|pF| j|pJ| j|pN| j|pR| j|pV| j	|pZ| j
t|tƒrb| jn||t|	ƒrj|	n| j||t|tƒrv| jn|dœ|¤ŽS ©z~
        Create a new client instance re-using the same options given to the current client with optional overriding.
        NzPThe `default_headers` and `set_default_headers` arguments are mutually exclusivezLThe `default_query` and `set_default_query` arguments are mutually exclusive)rs   ru   rV   rw   rx   ry   r{   rƒ   r}   r   r�   r…   rJ   ©r‘   Ú_custom_headersr    Ú_custom_queryr—   rs   ru   rV   rw   rx   ry   Ú
isinstancer   r{   r   r}   Ú_middleware©ri   rs   ru   rV   rw   rx   ry   r{   rƒ   r}   r   r°   r�   r±   r…   r²   r<   ÚparamsrJ   rJ   rK   Úcopyñ   ó<   ôózAnthropicBedrock.copyr   c                 G  ó   | j g | j¢|¢d�S ©zþA new client with the given middleware appended after this client's middleware.

        Convenience for applying extra middleware to a single request:

        ```py
        client.with_middleware(my_middleware).messages.create(...)
        ```
        )r…   ©rÀ   r½   ©ri   r…   rJ   rJ   rK   Úwith_middleware-  ó   	z AnthropicBedrock.with_middleware)rs   rt   ru   rt   rV   rt   rv   rt   rw   rt   rx   rt   ry   rz   r{   r|   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   r,   r‰   ©r,   r"   ©rH   r   r,   r   ©r    r¡   r,   r‰   ) rs   rt   ru   rt   rV   rt   rw   rt   rx   rt   ry   rz   r{   r³   rƒ   r„   r}   r´   r   r€   r°   r€   r�   r‚   r±   r‚   r…   rµ   r²   r¶   r,   r   ©r…   r   r,   r   ©rk   rl   rm   Ú__annotations__r   r   r“   r	   rœ   rL   r®   rÀ   Úwith_optionsrÆ   Ú__classcell__rJ   rJ   r–   rK   ro   …   óV   
 	èHï:ro   c                      rn   )CÚAsyncAnthropicBedrockr$   rp   r&   rq   r   rr   NFrs   rt   ru   rV   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   r�   r‚   rƒ   úhttpx.AsyncClient | Noner…   r†   r‡   rˆ   r,   r‰   c                   rŠ   r‹   )rO   rP   r=   r‘   rx   rs   ru   rX   rV   rv   rw   r’   r“   r   r$   rp   r&   rq   r   rr   r”   r–   rJ   rK   r“   >  r˜   zAsyncAnthropicBedrock.__init__r"   c                 C  r™   rš   r!   r›   rJ   rJ   rK   rœ   †  r�   z'AsyncAnthropicBedrock._make_sse_decoderrH   r   c                 Ã  s
   �t |ƒS rš   rž   rŸ   rJ   rJ   rK   rL   Š  s   €z&AsyncAnthropicBedrock._prepare_optionsr    r¡   c                 Ã  s|   �| j d urd| j › �|jd< d S ddlm} | ¡  ¡ }||jt|jƒ|j| j	| j
| j| jp0d| j|d�	}|j |¡ d S r¢   r¨   r­   rJ   rJ   rK   r®   Ž  s$   €
÷z&AsyncAnthropicBedrock._prepare_requestr¯   r³   r´   r°   r±   rµ   r²   r¶   r   c                C  r·   r¸   r¹   r¾   rJ   rJ   rK   rÀ   ¥  rÁ   zAsyncAnthropicBedrock.copyr   c                 G  rÂ   rÃ   rÄ   rÅ   rJ   rJ   rK   rÆ   á  rÇ   z%AsyncAnthropicBedrock.with_middleware)rs   rt   ru   rt   rV   rt   rv   rt   rw   rt   rx   rt   ry   rz   r{   r|   r}   r~   r   r€   r�   r‚   rƒ   rÒ   r…   r†   r‡   rˆ   r,   r‰   rÈ   rÉ   rÊ   ) rs   rt   ru   rt   rV   rt   rw   rt   rx   rt   ry   rz   r{   r³   rƒ   rÒ   r}   r´   r   r€   r°   r€   r�   r‚   r±   r‚   r…   rµ   r²   r¶   r,   r   rË   rÌ   rJ   rJ   r–   rK   rÑ   9  rÐ   rÑ   )r+   r   r,   r   )r,   rF   )DÚ
__future__r   rO   ÚloggingÚurllib.parserC   Útypingr   r   r   r   r   Útyping_extensionsr   r	   ÚhttpxÚ r   Ú_betar   r   Ú_typesr   r   r   Ú_utilsr   r   Ú_compatr   Ú_versionr   Ú
_streamingr   r   r   r   r½   r   Ú_base_clientr   r   r   r   r   r    Ú_stream_decoderr"   Úresources.messagesr#   r$   Úresources.completionsr%   r&   Ú	getLoggerrk   r'   rÍ   r;   ÚClientÚAsyncClientr(   r*   rL   rX   rY   ro   rÑ   rJ   rJ   rJ   rK   Ú<module>   s<     

  & $5