o
    +i@                     @  s  d dl m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 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, ddl-m.Z.m/Z/ erd dl0m1Z2 dZ3edeej4ej5f dZ6edee$e e%e f dZ7G dd de*e6e7f Z8G dd de8ej4e$e f e+Z9G dd de8ej5e%e f e,Z:d'd%d&Z;dS )(    )annotationsN)TYPE_CHECKINGAnyUnionMappingTypeVar)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)DEFAULT_MAX_RETRIES
BaseClientSyncAPIClientAsyncAPIClient)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 r-   Y/var/www/html/psymed-ai/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_idr-   r-   r.   r6   *   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rtj|||dS t|||dS )Ni  )r:   r8   i  i  i  i  i  i  i  i  i  )status_coder   BadRequestErrorAuthenticationErrorPermissionDeniedErrorNotFoundErrorConflictErrorUnprocessableEntityErrorRateLimitErrorServiceUnavailableErrorDeadlineExceededErrorInternalServerErrorr   )r,   r7   r8   r:   r-   r-   r.   _make_status_error2   s*   









z#BaseVertexClient._make_status_errorNr)   r*   )r)   r0   )r7   r*   r8   r9   r:   r;   r)   r   )__name__
__module____qualname__r   r/   r6   r	   rG   r-   r-   r-   r.   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d5 fdd Zed6d#d$Zed7d'd(Z	d8d*d+Z
eedddededdddi d,d9d3d4ZeZ  ZS ):AnthropicVertexr"   messagesr   betaNFr/   r6   access_tokencredentialsbase_urltimeoutmax_retriesdefault_headersdefault_queryhttp_client_strict_response_validationr/   str | NotGivenr6   rQ   r0   rR   GoogleCredentials | NonerS   str | httpx.URL | NonerT   'float | httpx.Timeout | None | NotGivenrU   intrV   Mapping[str, str] | NonerW   Mapping[str, object] | NonerX   httpx.Client | NonerY   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| d}t jt|||||	|
|d t |rC|| _	|| _
|| _|| _t| | _t| | _d S 	NCLOUD_ML_REGIONzNo 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/v1zhttps://z-aiplatform.googleapis.com/v1)versionrS   rT   rU   custom_headerscustom_queryrX   rY   )r   r2   r3   r4   r   
ValueErrorsuper__init__r   r6   r/   rQ   rR   r"   rN   r   rO   r,   r/   r6   rQ   rR   rS   rT   rU   rV   rW   rX   rY   	__class__r-   r.   rn   ^   :   
zAnthropicVertex.__init__optionsr   c                 C  s   t || j| jdS N)r6   r/   _prepare_optionsr6   r/   r,   rs   r-   r-   r.   rv      s   z AnthropicVertex._prepare_optionsrequesthttpx.Requestc                 C  s(   |j drd S d|   |j d< d S NAuthorizationzBearer headersr4   _ensure_access_tokenr,   rx   r-   r-   r.   _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)r6   z0Could not resolve API token from the environment)
rQ   rR   r   r6   expiredtokenr   r+   
isinstancer*   r5   r-   r-   r.   r~      s   

z$AnthropicVertex._ensure_access_tokenr/   r6   rQ   rR   rS   rT   rX   rU   rV   set_default_headersrW   set_default_query_extra_kwargs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@|}|pD| j}| jdt|rN|n| jt|rV|n| jpZt|p^| j	|pb| j
|pf| jt|trn| jn||t|rv|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)
r/   r6   rQ   rR   rS   rT   rX   rU   rV   rW   r-   rl   _custom_headers_custom_query_clientrq   r   r/   r6   r   rQ   rR   rS   r   r   rT   rU   r,   r/   r6   rQ   rR   rS   rT   rX   rU   rV   r   rW   r   r   r}   paramsr-   r-   r.   copy   :   
zAnthropicVertex.copy)r/   rZ   r6   rZ   rQ   r0   rR   r[   rS   r\   rT   r]   rU   r^   rV   r_   rW   r`   rX   ra   rY   rb   r)   rc   rs   r   r)   r   rx   ry   r)   rc   rH   )r/   rZ   r6   rZ   rQ   r0   rR   r[   rS   r\   rT   r]   rX   ra   rU   r   rV   r_   r   r_   rW   r`   r   r`   r   r   r)   r   rI   rJ   rK   __annotations__r   r   rn   r	   rv   r   r~   r   with_options__classcell__r-   r-   rp   r.   rM   Z   F   
 4
8rM   c                      rL   ):AsyncAnthropicVertexr#   rN   r   rO   NFrP   r/   rZ   r6   rQ   r0   rR   r[   rS   r\   rT   r]   rU   r^   rV   r_   rW   r`   rX   httpx.AsyncClient | NonerY   rb   r)   rc   c             
     rd   re   )r   r2   r3   r4   r   rl   rm   rn   r   r6   r/   rQ   rR   r#   rN   r   rO   ro   rp   r-   r.   rn      rr   zAsyncAnthropicVertex.__init__rs   r   c                   s   t || j| jdS rt   ru   rw   r-   r-   r.   rv   #  s   z%AsyncAnthropicVertex._prepare_optionsrx   ry   c                   s0   |j dr	d S d|  I d H  |j d< d S rz   r|   r   r-   r-   r.   r   '  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   )rQ   rR   r   r   r6   r   r   r   r+   r   r*   r5   r-   r-   r.   r~   /  s   
z)AsyncAnthropicVertex._ensure_access_tokenr   r   r   r   r   r   r   c                C  r   r   r   r   r-   r-   r.   r   A  r   zAsyncAnthropicVertex.copy)r/   rZ   r6   rZ   rQ   r0   rR   r[   rS   r\   rT   r]   rU   r^   rV   r_   rW   r`   rX   r   rY   rb   r)   rc   r   r   rH   )r/   rZ   r6   rZ   rQ   r0   rR   r[   rS   r\   rT   r]   rX   r   rU   r   rV   r_   r   r_   rW   r`   r   r`   r   r   r)   r   r   r-   r-   rp   r.   r      r   r   input_optionsr   r6   r0   r/   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postzNo 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+   popr4   
startswithr   )r   r6   r/   rs   r   r   	specifierr-   r-   r.   rv   |  s.   

rv   )r   r   r6   r0   r/   r*   r)   r   )<
__future__r   r2   typingr   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   _base_clientr   r   r    r!   resources.messagesr"   r#   google.auth.credentialsr$   GoogleCredentialsr   ClientAsyncClientr%   r'   r(   rM   r   rv   r-   r-   r-   r.   <module>   s8     5   