o
    +i+>                     @  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
 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%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0m1Z1 e2e3Z4de5d< dZ6e
deej7ej8f dZ9e
dee e e!e f dZ:d'ddZ;d(dd Z<G d!d" d"e&e9e:f Z=G d#d$ d$e=ej7e e f e'Z>G d%d& d&e=ej8e!e f e(Z?dS ))    )annotationsN)AnyUnionMappingTypeVar)Selfoverride   )_exceptions   )Beta	AsyncBeta)	NOT_GIVENTimeoutNotGiven)is_dictis_given)
model_copy)__version__)StreamAsyncStream)AnthropicErrorAPIStatusError)DEFAULT_MAX_RETRIES
BaseClientSyncAPIClientAsyncAPIClientFinalRequestOptions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betasr2   r5    rG   Z/var/www/html/psymed-ai/venv/lib/python3.10/site-packages/anthropic/lib/bedrock/_client.py_prepare_options&   s*   



rI   rC   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_regionrN   sessionrG   rG   rH   _infer_regionF   s   
rU   c                   @  s   e Zd Zedd	d
ZdS )BaseBedrockClienterr_msgrC   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  )rZ   rX   i  i  i  i  i  i  i  i  )status_coder
   BadRequestErrorAuthenticationErrorPermissionDeniedErrorNotFoundErrorConflictErrorUnprocessableEntityErrorRateLimitErrorServiceUnavailableErrorInternalServerErrorr   )selfrW   rX   rZ   rG   rG   rH   _make_status_error^   s&   








z$BaseBedrockClient._make_status_errorN)rW   rC   rX   rY   rZ   r[   r)   r   )__name__
__module____qualname__r   rg   rG   rG   rG   rH   rV   ]   s    rV   c                         e Zd ZU ded< ded< ded< ddddddeeddddfd6 fdd Zed7d"d#Zed8d&d'Z	ed9d*d+Z
dddddededdddi d,d:d4d5ZeZ  ZS );AnthropicBedrockr    messagesr"   completionsr   betaNFaws_secret_key
str | Noneaws_access_keyrS   aws_profileaws_session_token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_strict_response_validationboolr)   Nonec              
        || _ || _|d u rt n|| _|| _|| _|d u r tjd}|d u r+d| j d}t	 j
t||||	|
||d t| | _t| | _t| | _d S NANTHROPIC_BEDROCK_BASE_URLzhttps://bedrock-runtime.z.amazonaws.com)versionru   rw   ry   custom_headerscustom_queryr   r   )rp   rr   rU   rS   rs   rt   rL   rM   r:   super__init__r   r   ro   r    rm   r"   rn   rf   rp   rr   rS   rs   rt   ru   rw   ry   r{   r}   r   r   	__class__rG   rH   r      ,   

zAnthropicBedrock.__init__r   c                 C     t  S Nr   rf   rG   rG   rH   _make_sse_decoder      z"AnthropicBedrock._make_sse_decoderrE   r   c                 C  s   t |S r   rI   rf   rE   rG   rG   rH   rI      s   z!AnthropicBedrock._prepare_optionsrequesthttpx.Requestc                 C  sZ   ddl m} |  }||jt|j|j| j| j	| j
| jpd| j|d	}|j| d S Nr   )get_auth_headersrK   )	r=   r<   r9   rr   rp   rt   regionprofiledata_authr   readdecoder=   rC   r<   r9   rr   rp   rt   rS   rs   updaterf   r   r   r   r9   rG   rG   rH   _prepare_request   s   z!AnthropicBedrock._prepare_requestrp   rr   rS   rt   ru   rw   r   ry   r{   set_default_headersr}   set_default_query_extra_kwargs!float | Timeout | None | NotGivenint | NotGivenr   r   r   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&i ||	}n|
dur,|
}| j}|dur:i ||}n|dur@|}| jd|pG| j|pK| j|pO| j|pS| j|pW| jt	|t
r_| jn||t|rg|n| j||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)
rp   rr   rS   rt   ru   rw   r   ry   r{   r}   rG   
ValueError_custom_headers_custom_queryr   rp   rr   rS   rt   ru   
isinstancer   rw   r   ry   rf   rp   rr   rS   rt   ru   rw   r   ry   r{   r   r}   r   r   r9   paramsrG   rG   rH   copy   8   zAnthropicBedrock.copy)rp   rq   rr   rq   rS   rq   rs   rq   rt   rq   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r)   r   r)   r   rE   r   r)   r   r   r   r)   r   )rp   rq   rr   rq   rS   rq   rt   rq   ru   rv   rw   r   r   r   ry   r   r{   r|   r   r|   r}   r~   r   r~   r   r   r)   r   rh   ri   rj   __annotations__r   r   r   r   r   rI   r   r   with_options__classcell__rG   rG   r   rH   rl      L   
 	56rl   c                      rk   );AsyncAnthropicBedrockr!   rm   r#   rn   r   ro   NFrp   rq   rr   rS   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   httpx.AsyncClient | Noner   r   r)   r   c              
     r   r   )rp   rr   rU   rS   rs   rt   rL   rM   r:   r   r   r   r!   rm   r#   rn   r   ro   r   r   rG   rH   r     r   zAsyncAnthropicBedrock.__init__r   c                 C  r   r   r   r   rG   rG   rH   r   K  r   z'AsyncAnthropicBedrock._make_sse_decoderrE   r   c                   s
   t |S r   r   r   rG   rG   rH   rI   O  s   z&AsyncAnthropicBedrock._prepare_optionsr   r   c                   s\   ddl m} |  }||jt|j|j| j| j	| j
| jp d| j|d	}|j| d S r   r   r   rG   rG   rH   r   S  s   z&AsyncAnthropicBedrock._prepare_requestr   r   r   r   r   r   r   r   c                C  r   r   r   r   rG   rG   rH   r   f  r   zAsyncAnthropicBedrock.copy)rp   rq   rr   rq   rS   rq   rs   rq   rt   rq   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r)   r   r   r   r   )rp   rq   rr   rq   rS   rq   rt   rq   ru   rv   rw   r   r   r   ry   r   r{   r|   r   r|   r}   r~   r   r~   r   r   r)   r   r   rG   rG   r   rH   r     r   r   )r(   r   r)   r   )r)   rC   )@
__future__r   rL   loggingurllib.parser@   typingr   r   r   r   typing_extensionsr   r   httpx r
   _betar   r   _typesr   r   r   _utilsr   r   _compatr   _versionr   
_streamingr   r   r   r   _base_clientr   r   r   r   r   _stream_decoderr   resources.messagesr    r!   resources.completionsr"   r#   	getLoggerrh   r$   r   r8   ClientAsyncClientr%   r'   rI   rU   rV   rl   r   rG   rG   rG   rH   <module>   s:    

  & $