o
    î6WjSH  ã                   @  sÊ  d dl m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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 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/m0Z0 ddl1m2Z2m3Z3 er–d dl4m5Z6 dZ7edeej8ej9f d�Z:edee%e e&e f d�Z;G dd„ de-e:e;f ƒZ<G dd„ de<ej8e%e f e.ƒZ=G dd„ de<ej9e&e f e/ƒZ>d(d&d'„Z?dS ))é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚUnionÚMappingÚTypeVarÚSequence)ÚSelfÚoverrideé   )Ú_exceptionsé   )Ú	load_authÚrefresh_auth)ÚBetaÚ	AsyncBeta)Ú	NOT_GIVENÚNotGiven)Úis_dictÚasyncifyÚis_given)Ú
model_copyÚtyped_cached_property)ÚFinalRequestOptions)Ú__version__)ÚStreamÚAsyncStream)ÚAnthropicErrorÚAPIStatusError)ÚMiddlewareInput)ÚDEFAULT_MAX_RETRIESÚ
BaseClientÚSyncAPIClientÚAsyncAPIClientÚmerge_headers)ÚMessagesÚAsyncMessages)ÚCredentialszvertex-2023-10-16Ú_HttpxClientT)ÚboundÚ_DefaultStreamTc                   @  s6   e Zd Zeddd„ƒZeddd„ƒZeddd„ƒZdS )ÚBaseVertexClientÚreturnÚstrc                 C  s   t dƒ‚)Nzregion not set)ÚRuntimeError)Úself© r0   úk/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/anthropic/lib/vertex/_client.pyÚregion(   s   zBaseVertexClient.regionú
str | Nonec                 C  s   t j d¡}|r
|S d S )NÚANTHROPIC_VERTEX_PROJECT_ID)ÚosÚenvironÚget©r/   Ú
project_idr0   r0   r1   r9   ,   s   zBaseVertexClient.project_idÚerr_msgÚbodyÚobjectÚresponseúhttpx.Responser   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 |j dkr‚tj|||d�S t|||d�S )Ni�  )r=   r;   i‘  i“  i”  i™  i¦  i­  i÷  iø  iô  )Ústatus_coder   ÚBadRequestErrorÚAuthenticationErrorÚPermissionDeniedErrorÚNotFoundErrorÚConflictErrorÚUnprocessableEntityErrorÚRateLimitErrorÚServiceUnavailableErrorÚDeadlineExceededErrorÚInternalServerErrorr   )r/   r:   r;   r=   r0   r0   r1   Ú_make_status_error4   s*   









z#BaseVertexClient._make_status_errorN©r,   r-   )r,   r3   )r:   r-   r;   r<   r=   r>   r,   r   )Ú__name__Ú
__module__Ú__qualname__r   r2   r9   r
   rJ   r0   r0   r0   r1   r+   '   s    r+   c                      óª   e Zd ZU ded< ded< eedddeeddddddœd;‡ fd!d"„Zed<d%d&„ƒZed=d)d*„ƒZ	d>d,d-„Z
eedddededdddei d.œd?d6d7„ZeZd@d9d:„Z‡  ZS )AÚAnthropicVertexr%   Úmessagesr   ÚbetaNF©r2   r9   Úaccess_tokenÚcredentialsÚbase_urlÚtimeoutÚmax_retriesÚdefault_headersÚdefault_queryÚhttp_clientÚ
middlewareÚ_strict_response_validationr2   ústr | NotGivenr9   rT   r3   rU   úGoogleCredentials | NonerV   ústr | httpx.URL | NonerW   ú'float | httpx.Timeout | None | NotGivenrX   ÚintrY   úMapping[str, str] | NonerZ   úMapping[str, object] | Noner[   úhttpx.Client | Noner\   ú Sequence[MiddlewareInput] | Noner]   Úboolr,   ÚNonec                  óÎ   t |ƒstj dt¡}t |ƒstdƒ‚|d u r<tj d¡}|d u r<|dkr(d}n|dkr/d}n|dkr6d	}nd
|› d�}tƒ jt|||||	|
||d�	 t |ƒrR|| _	|| _
|| _|| _t| ƒ| _t| ƒ| _d S ©NÚCLOUD_ML_REGIONzŽNo region was given. The client should be instantiated with the `region` argument or the `CLOUD_ML_REGION` environment variable should be set.ÚANTHROPIC_VERTEX_BASE_URLÚglobalz$https://aiplatform.googleapis.com/v1Úusz+https://aiplatform.us.rep.googleapis.com/v1Úeuz+https://aiplatform.eu.rep.googleapis.com/v1zhttps://z-aiplatform.googleapis.com/v1)	ÚversionrV   rW   rX   Úcustom_headersÚcustom_queryr[   r\   r]   )r   r5   r6   r7   r   Ú
ValueErrorÚsuperÚ__init__r   r9   r2   rT   rU   r%   rQ   r   rR   ©r/   r2   r9   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   ©Ú	__class__r0   r1   ru   `   óD   ÿ÷
zAnthropicVertex.__init__Úoptionsr   c                 C  s   t || j| jd�S ©N)r9   r2   ©Ú_prepare_optionsr9   r2   ©r/   rz   r0   r0   r1   r}   š   s   z AnthropicVertex._prepare_optionsÚrequestúhttpx.Requestc                 C  s(   |j  d¡rd S d|  ¡ › �|j d< d S ©NÚAuthorizationzBearer ©Úheadersr7   Ú_ensure_access_token©r/   r   r0   r0   r1   Ú_prepare_requestž   s   z AnthropicVertex._prepare_requestr-   c                 C  sx   | j d ur| j S | jst| jd�\| _}| js|| _| jjs"| jjs't| jƒ | jjs/tdƒ‚t| jjt	ƒs8J ‚| jjS ©N)r9   z0Could not resolve API token from the environment)
rT   rU   r   r9   ÚexpiredÚtokenr   r.   Ú
isinstancer-   r8   r0   r0   r1   r…   ¦   s   

z$AnthropicVertex._ensure_access_token©r2   r9   rT   rU   rV   rW   r[   rX   rY   Úset_default_headersrZ   Úset_default_queryr\   Ú_extra_kwargsú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?|}|pC| j}| jdt|ƒrM|n| jt|ƒrU|n| jpYt	|p]| j
|pa| j|pe| jt|tƒrm| jn||t|ƒru|n| j||t|tƒr�| 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)r2   r9   rT   rU   rV   rW   r[   rX   rY   rZ   r\   r0   ©rs   Ú_custom_headersr$   Ú_custom_queryÚ_clientrx   r   r2   r9   r   rT   rU   rV   r‹   r   rW   rX   Ú_middleware©r/   r2   r9   rT   rU   rV   rW   r[   rX   rY   r�   rZ   rŽ   r\   r�   r„   Úparamsr0   r0   r1   Úcopy¸   ó<   
õôzAnthropicVertex.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™   ©r/   r\   r0   r0   r1   Úwith_middlewareô   ó   	zAnthropicVertex.with_middleware)r2   r^   r9   r^   rT   r3   rU   r_   rV   r`   rW   ra   rX   rb   rY   rc   rZ   rd   r[   re   r\   rf   r]   rg   r,   rh   ©rz   r   r,   r   ©r   r€   r,   rh   rK   )r2   r^   r9   r^   rT   r3   rU   r_   rV   r`   rW   ra   r[   re   rX   r�   rY   rc   r�   rc   rZ   rd   rŽ   rd   r\   r‘   r�   r’   r,   r	   ©r\   r   r,   r	   ©rL   rM   rN   Ú__annotations__r   r    ru   r
   r}   r‡   r…   rœ   Úwith_optionsr¢   Ú__classcell__r0   r0   rw   r1   rP   \   óL   
 ñ:
ð:rP   c                      rO   )AÚAsyncAnthropicVertexr&   rQ   r   rR   NFrS   r2   r^   r9   rT   r3   rU   r_   rV   r`   rW   ra   rX   rb   rY   rc   rZ   rd   r[   úhttpx.AsyncClient | Noner\   rf   r]   rg   r,   rh   c                  ri   rj   )r   r5   r6   r7   r   rs   rt   ru   r   r9   r2   rT   rU   r&   rQ   r   rR   rv   rw   r0   r1   ru     ry   zAsyncAnthropicVertex.__init__rz   r   c                 Ã  s   �t || j| jd�S r{   r|   r~   r0   r0   r1   r}   >  s   €z%AsyncAnthropicVertex._prepare_optionsr   r€   c                 Ã  s0   �|j  d¡r	d S d|  ¡ I d H › �|j d< d S r�   rƒ   r†   r0   r0   r1   r‡   B  s   €z%AsyncAnthropicVertex._prepare_requestr-   c                 Ã  sŽ   �| j d ur	| j S | js ttƒ| jd�I d H \| _}| js || _| jjs(| jjs2ttƒ| jƒI d H  | jjs:tdƒ‚t	| jjt
ƒsCJ ‚| jjS rˆ   )rT   rU   r   r   r9   r‰   rŠ   r   r.   r‹   r-   r8   r0   r0   r1   r…   J  s   €
z)AsyncAnthropicVertex._ensure_access_tokenrŒ   r�   r�   rŽ   r‘   r�   r’   r	   c                C  r“   r”   r•   rš   r0   r0   r1   rœ   \  r�   zAsyncAnthropicVertex.copyr   c                 G  rž   rŸ   r    r¡   r0   r0   r1   r¢   ˜  r£   z$AsyncAnthropicVertex.with_middleware)r2   r^   r9   r^   rT   r3   rU   r_   rV   r`   rW   ra   rX   rb   rY   rc   rZ   rd   r[   r­   r\   rf   r]   rg   r,   rh   r¤   r¥   rK   )r2   r^   r9   r^   rT   r3   rU   r_   rV   r`   rW   ra   r[   r­   rX   r�   rY   rc   r�   rc   rZ   rd   rŽ   rd   r\   r‘   r�   r’   r,   r	   r¦   r§   r0   r0   rw   r1   r¬      r«   r¬   Úinput_optionsr   r9   r3   r2   r-   r,   c                C  sî   t | dd�}t|jƒr|j dt¡ |jdv rO|jdkrO|d u r$tdƒ‚t|jƒs-tdƒ‚|j d¡}|j 	d	d
¡}|r>dnd}d|› d|› d|› d|› �|_|jdv rk|jdkrk|d u ratdƒ‚d|› d|› d�|_|j 
d¡rutdƒ‚|S )NT)ÚdeepÚanthropic_version>   ú/v1/messagesú/v1/messages?beta=trueÚpostzÐNo project_id was given and it could not be resolved from credentials. The client should be instantiated with the `project_id` argument or the `ANTHROPIC_VERTEX_PROJECT_ID` environment variable should be set.z;Expected json data to be a dictionary for post /v1/messagesÚmodelÚstreamFÚstreamRawPredictÚ
rawPredictz
/projects/z/locations/z/publishers/anthropic/models/ú:>   ú/v1/messages/count_tokensú#/v1/messages/count_tokens?beta=truez4/publishers/anthropic/models/count-tokens:rawPredictz/v1/messages/batchesz7The Batch API is not supported in the Vertex client yet)r   r   Ú	json_dataÚ
setdefaultÚDEFAULT_VERSIONÚurlÚmethodr.   Úpopr7   Ú
startswithr   )r®   r9   r2   rz   r´   rµ   Ú	specifierr0   r0   r1   r}   ¤  s.   
ÿ
ÿr}   )r®   r   r9   r3   r2   r-   r,   r   )@Ú
__future__r   r5   Útypingr   r   r   r   r   r   Útyping_extensionsr	   r
   ÚhttpxÚ r   Ú_authr   r   Ú_betar   r   Ú_typesr   r   Ú_utilsr   r   r   Ú_compatr   r   Ú_modelsr   Ú_versionr   Ú
_streamingr   r   r   r   r™   r   Ú_base_clientr    r!   r"   r#   r$   Úresources.messagesr%   r&   Úgoogle.auth.credentialsr'   ÚGoogleCredentialsr½   ÚClientÚAsyncClientr(   r*   r+   rP   r¬   r}   r0   r0   r0   r1   Ú<module>   s:      5  % %