o
    Yi                     @  sV  U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dl m!Z!m"Z"m#Z# d dl$Z$d dl%Z%d dl&Z&d dl'Z'd dl%m(Z( d dl'm)Z) d	d
l*m+Z+ d	dl,m-Z- d	dl.m/Z/m0Z0 d	dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZB d	dlCmDZDmEZEmFZFmGZGmHZHmIZI d	dlJmKZKmLZLmMZM d	dlNmOZOmPZPmQZQmRZR d	dlSmTZTmUZUmVZVmWZW d	dlXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_ d	dl`maZambZbmcZcmdZd d	dl+meZemfZfmgZgmhZh d	dlimjZj e	kelZmdend< edddZoedddZpedZqeddd Zred!eae dZsed"ece dZter^d d#lumvZv evZwnzd d#lumvZw W n exyt   e6d$ZwY nw G d%d& d&ZyG d'd( d(eOeeq ZzG d)d* d*ezeq eeq Z{G d+d, d,eeqepf Z|G d-d. d.ezeq eeq Z}ed/ee%j~e%jf dZed0eeae ece f dZG d1d2 d2eeef ZG d3d4 d4e%j~Zere%j~ZneZG d5d6 d6eZG d7d8 d8ee%j~eae f ZG d9d: d:e%jZzd dlZW n exy   G d;d< d<e%jZY n
w G d=d< d<ejZer3e%jZ	 e%jZneZeZG d>d? d?eZG d@dA dAee%jece f ZdddddeBeBdBdtdRdSZG dTdU dUeedf ZG dVdW dWZeee!dX f ZdudZd[ZeHdd\dvdbdcZG ddde deZeee!df f ZdwdgdhZdwdidjZdxdldmZdydrdsZdS )z    )annotationsN)TracebackType)random)TYPE_CHECKINGAnyDictTypeUnionGenericMappingTypeVarIterableIteratorOptional	GeneratorAsyncIteratorcastoverload)Literaloverride
get_origin)URL)PrivateAttr   )_exceptionsQuerystring)to_httpx_filesasync_to_httpx_files)BodyOmitQueryHeadersTimeoutNotGiven	ResponseT
AnyMapping
PostParserBinaryTypesRequestFilesHttpxSendArgsRequestOptionsAsyncBinaryTypesHttpxRequestFilesModelBuilderProtocol	not_given)is_dictis_listasyncifyis_given	lru_cache
is_mapping)PYDANTIC_V1
model_copy
model_dump)GenericModelFinalRequestOptionsvalidate_typeconstruct_type)APIResponseBaseAPIResponseAsyncAPIResponseextract_response_type)DEFAULT_TIMEOUTMAX_RETRY_DELAYDEFAULT_MAX_RETRIESINITIAL_RETRY_DELAYRAW_RESPONSE_HEADEROVERRIDE_CAST_TO_HEADERDEFAULT_CONNECTION_LIMITS)Stream
SSEDecoderAsyncStreamSSEBytesDecoder)APIStatusErrorAPITimeoutErrorAPIConnectionErrorAPIResponseValidationError)openapi_dumpszlogging.Loggerlog	SyncPageTzBaseSyncPage[Any])bound
AsyncPageTzBaseAsyncPage[Any]_T_T_coT)	covariant_StreamT_AsyncStreamT)DEFAULT_TIMEOUT_CONFIGg      @c                   @  sv   e Zd ZU dZded< ded< ded< edddZedddZedddZeeeddddZedddZ	dS )PageInfozStores the necessary information to build the request to retrieve the next page.

    Either `url` or `params` must be set.
    URL | NotGivenurlQuery | NotGivenparamsBody | NotGivenjsonr   returnNonec                C     d S N selfr]   rf   rf   a/home/kim/smarthome/.venv/lib/python3.10/site-packages/google/genai/_interactions/_base_client.py__init__      zPageInfo.__init__r!   c                C  rd   re   rf   )rh   r_   rf   rf   ri   rj      rk   r   c                C  rd   re   rf   )rh   ra   rf   rf   ri   rj      rk   r]   ra   r_   c                C  s   || _ || _|| _d S re   rl   )rh   r]   ra   r_   rf   rf   ri   rj      s   
strc                 C  sN   | j r| jj d| j  dS | jr| jj d| j dS | jj d| j dS )Nz(url=)z(json=z(params=)r]   	__class____name__ra   r_   rh   rf   rf   ri   __repr__   s
   zPageInfo.__repr__N)r]   r   rb   rc   )r_   r!   rb   rc   )ra   r   rb   rc   )r]   r\   ra   r`   r_   r^   rb   rc   rb   rm   )
rp   
__module____qualname____doc____annotations__r   rj   r/   r   rr   rf   rf   rf   ri   r[      s"   
 	r[   c                   @  s`   e Zd ZU dZe Zded< e Zded< ddd	ZdddZ	dddZ
dddZdddZdS )BasePagea<  
    Defines the core interface for pagination.

    Type Args:
        ModelT: The pydantic model that represents an item in the response.

    Methods:
        has_next_page(): Check if there is another page available
        next_page_info(): Get the necessary information to make a request for the next page
    r:   _optionsType[_T]_modelrb   boolc                 C  s   |   }|sdS |  d uS )NF)_get_page_itemsnext_page_info)rh   itemsrf   rf   ri   has_next_page   s   zBasePage.has_next_pageOptional[PageInfo]c                 C  rd   re   rf   rq   rf   rf   ri   r~      s    zBasePage.next_page_infoIterable[_T]c                 C  rd   re   rf   rq   rf   rf   ri   r}         zBasePage._get_page_itemsr]   r   httpx.QueryParamsc                 C  s   t tt| jj|jS re   )httpxZQueryParamsr   r   ry   r_   mergerg   rf   rf   ri   _params_from_url   s   zBasePage._params_from_urlinfor[   c                 C  s   t | j}|  t|jtsi |j|j|_|S t|jts:| |j}|jj|d}t	|j|_t
||_|S t|jtsht|jsItd|jsTi |j|_|S t|js]tdi |j|j|_|S td)N)r_   z*Pagination is only supported with mappingszUnexpected PageInfo state)r7   ry   Z_strip_raw_response_header
isinstancer_   r$   r]   r   	copy_withdictrm   ra   r5   	TypeError	json_data
ValueError)rh   r   optionsr_   r]   rf   rf   ri   _info_to_options   s,   



zBasePage._info_to_optionsNrb   r|   )rb   r   )rb   r   )r]   r   rb   r   )r   r[   rb   r:   )rp   rt   ru   rv   r   ry   rw   r{   r   r~   r}   r   r   rf   rf   rf   ri   rx      s   
 



rx   c                   @  F   e Zd ZU e Zded< dd
dZdddZdddZ	dddZ
dS )BaseSyncPageSyncAPIClient_clientclientmodelrz   r   r:   rb   rc   c                 C  s0   t st| dd d u ri | _|| _|| _|| _d S N__pydantic_private__r6   getattrr   r{   r   ry   )rh   r   r   r   rf   rf   ri   _set_private_attributes   
   
z$BaseSyncPage._set_private_attributesIterator[_T]c                 c  s(    |   D ]}| D ]}|V  qqd S re   
iter_pagesr}   rh   pageitemrf   rf   ri   __iter__  s   zBaseSyncPage.__iter__rh   rR   Iterator[SyncPageT]c                 c  s&    | }	 |V  |  r| }nd S qre   r   get_next_pagerh   r   rf   rf   ri   r     s   
zBaseSyncPage.iter_pagesc                 C  s4   |   }|s
td| |}| jj| j| j|dS NzYNo next page expected; please check `.has_next_page()` before calling `.get_next_page()`.)r   r   r~   RuntimeErrorr   r   _request_api_listr{   ro   rh   r   r   rf   rf   ri   r     s   
zBaseSyncPage.get_next_pageN)r   r   r   rz   r   r:   rb   rc   )rb   r   )rh   rR   rb   r   )rh   rR   rb   rR   )rp   rt   ru   pydanticr   r   rw   r   r   r   r   rf   rf   rf   ri   r      s   
 


	r   c                   @  s4   e Zd ZdddZdddZdddZdddZdS )AsyncPaginatorr   AsyncAPIClientr   r:   page_clsType[AsyncPageT]r   rz   rb   rc   c                 C  s   || _ || _|| _|| _d S re   )r{   r   ry   	_page_cls)rh   r   r   r   r   rf   rf   ri   rj   '  s   
zAsyncPaginator.__init__ Generator[Any, None, AsyncPageT]c                 C  s   |    S re   )	_get_page	__await__rq   rf   rf   ri   r   3  s   zAsyncPaginator.__await__rT   c                   s0   d fdd}| j _ j j j I d H S )NresprT   rb   c                   s   | j  j j jd | S )N)r   r   r   )r   r{   ry   r   r   rq   rf   ri   _parser7  s   z)AsyncPaginator._get_page.<locals>._parser)r   rT   rb   rT   )ry   post_parserr   requestr   )rh   r   rf   rq   ri   r   6  s   zAsyncPaginator._get_pageAsyncIterator[_T]c                 C s0   t t| I d H }|2 z	3 d H W }|V  q6 d S re   )r   rT   r   rf   rf   ri   	__aiter__C  s   zAsyncPaginator.__aiter__N)
r   r   r   r:   r   r   r   rz   rb   rc   )rb   r   )rb   rT   rb   r   )rp   rt   ru   rj   r   r   r   rf   rf   rf   ri   r   &  s
    


r   c                   @  r   )BaseAsyncPager   r   r   rz   r   r   r:   rb   rc   c                 C  s0   t st| dd d u ri | _|| _|| _|| _d S r   r   )rh   r   r   r   rf   rf   ri   r   P  r   z%BaseAsyncPage._set_private_attributesr   c                 C s2   |   2 z3 d H W }| D ]}|V  qq6 d S re   r   r   rf   rf   ri   r   ]  s   zBaseAsyncPage.__aiter__rh   rT   AsyncIterator[AsyncPageT]c                 C s,   | }	 |V  |  r| I d H }nd S qre   r   r   rf   rf   ri   r   b  s   zBaseAsyncPage.iter_pagesc                   s<   |   }|std| |}| jj| j| j|dI d H S r   r   r   rf   rf   ri   r   k  s   
zBaseAsyncPage.get_next_pageN)r   rz   r   r   r   r:   rb   rc   r   )rh   rT   rb   r   )rh   rT   rb   rT   )rp   rt   ru   r   r   r   rw   r   r   r   r   rf   rf   rf   ri   r   M  s   
 


	r   _HttpxClientT_DefaultStreamTc                   @  s  e Zd ZU ded< ded< ded< ded< d	ed
< ded< ded< dZded< eedddduddZdvd!d"Zdwd$d%Z	dxd)d*Z
dyd/d0Zdzd4d5Zd{d6d7Zd|d9d:Zd}d<d=Zd~dAdBZddEdFZddHdIZddKdLZeddNdOZeddQdRZeddTdUZeddWdXZeddYdZZdd]d^Zedd_d`ZeddadbZejddddbZddfdgZdddkdlZ	dddodpZ ddqdrZ!ddsdtZ"dS )
BaseClientr   r   rm   _versionr   	_base_urlintmax_retrieszUnion[float, Timeout, None]timeoutr|   _strict_response_validation
str | None_idempotency_headerNztype[_DefaultStreamT] | None_default_stream_cls)r   r   custom_headerscustom_queryversionbase_url	str | URLfloat | Timeout | Noner   Mapping[str, str] | Noner   Mapping[str, object] | Nonerb   rc   c                C  sn   || _ | t|| _|| _|| _|pi | _|pi | _|| _d | _	d | _
d| _d | _d | _|d u r5tdd S )NFzmax_retries cannot be None. If you want to disable retries, pass `0`; if you want unlimited retries, pass `math.inf` or a very high number; if you want the default behavior, pass `google.genai._interactions.DEFAULT_MAX_RETRIES`)r   _enforce_trailing_slashr   r   r   r   _custom_headers_custom_queryr   r   	_platform
_is_vertex_vertex_project_vertex_locationr   )rh   r   r   r   r   r   r   r   rf   rf   ri   rj     s"   

zBaseClient.__init__api_versionpathc                C  s@   | j r	| jr	| jsd| d| S | d| j d| j d| S )N/z
/projects/z/locations/)r   r   r   )rh   r   r   rf   rf   ri   _build_maybe_vertex_path  s   z#BaseClient._build_maybe_vertex_pathr]   c                 C  s"   |j dr|S |j|j d dS )N   /raw_path)r   endswithr   rg   rf   rf   ri   r     s   z"BaseClient._enforce_trailing_slashresponsehttpx.ResponserL   c                 C  s   |j r|jsd }d|j }n)|j }|}zt|}d|j d| }W n ty7   |p4d|j }Y nw | j|||dS )NzError code: z - )bodyr   )		is_closedZis_stream_consumedstatus_codetextstripra   loads	Exception_make_status_error)rh   r   r   err_msgZerr_textrf   rf   ri    _make_status_error_from_response  s   

z+BaseClient._make_status_error_from_responser   r   object_exceptions.APIStatusErrorc                C  s   t  re   )NotImplementedError)rh   r   r   r   rf   rf   ri   r     s   zBaseClient._make_status_errorr   r:   httpx.Headersc                 C  sR   |j pi }t| j|}| || t|}| j}|r'|jr'||vr'|j||< |S re   )headers_merge_mappingsdefault_headers_validate_headersr   r"   r   idempotency_key)rh   r   r   Zheaders_dictr   Zidempotency_headerrf   rf   ri   _build_headers  s   


zBaseClient._build_headersc                 C  s4   t |}|jr| jj|jd }| jj|dS |S )z
        Merge a URL argument together with any 'base_url' on the client,
        to create the URL used for the outgoing request.
        r   r   )r   Zis_relative_urlr   r   lstripr   )rh   r]   Z	merge_urlZmerge_raw_pathrf   rf   ri   _prepare_url  s
   zBaseClient._prepare_urlSSEDecoder | SSEBytesDecoderc                 C     t  S re   )rI   rq   rf   rf   ri   _make_sse_decoder  s   zBaseClient._make_sse_decoderhttpx.Requestc           
      C  sB  t tjrt dt|dtrdhni d i }|j}|jd ur@|d u r+t	t
|j}nt|r6t||j}n
tdt| d| |}t| j|j}|d}|j}|d ur|drd	|vrf|d |r}t|svtd
t| d| ||d< |st	tt }| |j}d|jv rd|jddi|d< |j  dk}	|	r|j!d ur|d urtd|j!d ur|d urtd|j!d ur|j!|d< nt"|t#r||d< n|st$|r|d urt%|nd |d< ||d< n|dd  |dd  | j&j'd|t"|j(t)r| j(n|j(|j||r| j*+t	t,t-t.f |nd d|S )NzRequest options: %sTcontent)Zexclude_unsetexcludezUnexpected JSON data type, z , cannot merge with `extra_body`Content-Typezmultipart/form-databoundaryzGExpected query input to be a dictionary for multipart requests but got z	 instead.data_Zsni_hostname-
extensionsgetz7Passing both `content` and `json_data` is not supportedz3Passing both `content` and `files` is not supportedfiles)r   r   methodr]   r_   rf   )/rQ   isEnabledForloggingDEBUGdebugr8   r6   r   
extra_jsonr   r   r5   r   r   typer   default_queryr_   r  r	  
startswithpopr0   r   _serialize_multipartformr-   ForceMultipartDictr   r]   hostreplacer
  lowerr   r   bytesr3   rP   r   Zbuild_requestr   r$   qs	stringifyr   rm   r   )
rh   r   kwargsr   r   r_   content_typer	  Zprepared_urlZis_body_allowedrf   rf   ri   _build_request  s~   







 
"
zBaseClient._build_requestr  Mapping[object, object]dict[str, object]c                 C  s^   | j j|dd}i }|D ] \}}||}|s|||< qt|r&|| q||g||< q|S )NZbrackets)Zarray_format)r  Zstringify_itemsr  r1   append)rh   r  r   Z
serializedkeyvalueexistingrf   rf   ri   r  O  s   

z#BaseClient._serialize_multipartformcast_totype[ResponseT]c                 C  sD   t |js|S t|j}|tt}t |r ||_ttt |S |S re   )	r3   r   r   r  rF   r/   r   r   r%   )rh   r%  r   r   Zoverride_cast_torf   rf   ri   _maybe_override_cast_tom  s   

z"BaseClient._maybe_override_cast_tor   c                 C  s   |j tdkS )Nstream)r   r  rE   rh   r   rf   rf   ri   _should_stream_response_body~  s   z'BaseClient._should_stream_response_bodyr%   c             
   C  s   |d u r	t td S |tu rt t|S z,t|r(t|tr(t t|j||dW S | jr5t tt	||dW S t tt
||dW S  tjyR } zt||d|d }~ww )N)r   r  )type_r#  )r   r   )r   r%   r   inspectisclass
issubclassr.   buildr   r;   r<   r   ZValidationErrorrO   )rh   r  r%  r   errrf   rf   ri   _process_response_data  s   

z!BaseClient._process_response_datar   c                 C  r   re   r   rq   rf   rf   ri   r       zBaseClient.qshttpx.Auth | Nonec                 C  rd   re   rf   rq   rf   rf   ri   custom_auth     zBaseClient.custom_authdict[str, str]c                 C  s   i S re   rf   rq   rf   rf   ri   auth_headers  r5  zBaseClient.auth_headersdict[str, str | Omit]c                 C  s   dd| j d| j| jS )Nzapplication/json)Acceptr  z
User-Agent)
user_agentr7  r   rq   rf   rf   ri   r     s   zBaseClient.default_headersc                 C  s
   i | j S re   )r   rq   rf   rf   ri   r    s   zBaseClient.default_queryr   r"   c                 C     dS )zaValidate the given default headers and custom headers.

        Does nothing by default.
        Nrf   )rh   r   r   rf   rf   ri   r        	zBaseClient._validate_headersc                 C  s   | j j d| j S )Nz/Python )ro   rp   r   rq   rf   rf   ri   r:    s   zBaseClient.user_agentc                 C  s   | j S re   )r   rq   rf   rf   ri   r     r2  zBaseClient.base_url	URL | strc                 C  s"   |  t|tr	|nt|| _d S re   )r   r   r   r   rg   rf   rf   ri   r     s   "Dict[str, str]c                 C  s   t | j| jdS )N)platform)platform_headersr   r   rq   rf   rf   ri   r@    s   zBaseClient.platform_headersresponse_headersOptional[httpx.Headers]float | Nonec              	   C  s   |du rdS z| dd}t|d W S  ttfy   Y nw | d}zt|W S  ttfy4   Y nw tj|}|du rAdS tj|}t|t  S )a@  Returns a float of the number of seconds (not milliseconds) to wait after retrying, or None if unspecified.

        About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After
        See also  https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After#syntax
        Nzretry-after-ms  zretry-after)	r  floatr   r   emailutilsparsedate_tz	mktime_tztime)rh   rA  Zretry_ms_headerZretry_headerretry_date_tuple
retry_daterf   rf   ri   _parse_retry_after_header  s&   

z$BaseClient._parse_retry_after_headerremaining_retriesrE  c           
      C  s~   | | j}| |}|d urd|  k rdkr|S  t|| d}tttd| t}ddt   }|| }	|	dkr=|	S dS )Nr   <   rD  g       @r   g      ?)get_max_retriesr   rM  minrD   powrB   r   )
rh   rN  r   rA  r   retry_afterZ
nb_retriesZsleep_secondsZjitterr   rf   rf   ri   _calculate_retry_timeout  s   
z#BaseClient._calculate_retry_timeoutc                 C  s   |j d}|dkrtd dS |dkrtd dS |jdkr*td	|j dS |jd
kr8td	|j dS |jdkrFtd	|j dS |jdkrTtd	|j dS td dS )Nzx-should-retrytruez4Retrying as header `x-should-retry` is set to `true`Tfalsez9Not retrying as header `x-should-retry` is set to `false`Fi  zRetrying due to status code %ii  i  i  zNot retrying)r   r  rQ   r  r   )rh   r   Zshould_retry_headerrf   rf   ri   _should_retry  s*   






zBaseClient._should_retryc                 C  s   dt   S )Nzstainless-python-retry-)uuiduuid4rq   rf   rf   ri   _idempotency_key/  s   zBaseClient._idempotency_key)r   rm   r   r   r   r|   r   r   r   r   r   r   r   r   rb   rc   )r   rm   r   rm   rb   rm   )r]   r   rb   r   )r   r   rb   rL   )r   rm   r   r   r   r   rb   r   )r   r:   rb   r   )r]   rm   rb   r   )rb   r   )r   r:   rb   r   )r  r  rb   r   )r%  r&  r   r:   rb   r&  )r   r   rb   r|   )r  r   r%  r&  r   r   rb   r%   )rb   r   )rb   r3  )rb   r6  )rb   r8  )rb   r   )r   r"   r   r"   rb   rc   rs   )rb   r   )r]   r=  rb   rc   )rb   r>  re   )rA  rB  rb   rC  )rN  r   r   r:   rA  rB  rb   rE  )r   r   rb   r|   )#rp   rt   ru   rw   r   rC   rA   rj   r   r   r   r   r   r   r   r  r  r'  r*  r1  propertyr  r4  r7  r   r  r   r:  r   setterr@  rM  rT  rW  rZ  rf   rf   rf   ri   r   z  sb   
 




	



f


	

&
#r   c                         e Zd Zd fddZ  ZS )_DefaultHttpxClientr  r   rb   rc   c                   :   | dt | dt | dd t jdi | d S Nr   Zlimitsfollow_redirectsTrf   
setdefaultrA   rG   superrj   rh   r  ro   rf   ri   rj   4     z_DefaultHttpxClient.__init__r  r   rb   rc   rp   rt   ru   rj   __classcell__rf   rf   rf  ri   r^  3      r^  c                   @     e Zd ZdddZdS )SyncHttpxClientWrapperrb   rc   c                 C  s.   | j rd S z|   W d S  ty   Y d S w re   )r   closer   rq   rf   rf   ri   __del__H  s   zSyncHttpxClientWrapper.__del__Nrb   rc   rp   rt   ru   ro  rf   rf   rf   ri   rm  G      rm  c                      s   e Zd ZU ded< dZded< eeddddd fddZdddZdddZ	dd!d"Z
dd)d*Zdd-d.Zdd1d2Zedd:d;Zed<d=dd@d;Zed<ddAddDd;Zd<ddAddFd;ZddJdKZdLdMddPdQZddWdXZei d<dYdd\d]Zei d^dd`d]Zei ddaddbd]Zi d<ddcdddd]Zeddi dd<deddldmZeddi ddnddodmZeddi dddpddqdmZddi dd<ddrddsdmZdddi dtddudvZdddi dtddwdxZddi dyddzd{Zdi d|d}dddZ  ZS )r   zhttpx.Clientr   Nztype[Stream[Any]] | Noner   r   r   http_clientr   r   r   rm   r   r   r   r   r   !float | Timeout | None | NotGivenrt  httpx.Client | Noner   r   r   r   r   r|   rb   rc   c          	   	     s   t |s|r|jtkr|j}nt}|d ur$t|tjs$tdt| t	 j
|tt||||||d |p>t|tt|d| _d S )NzOInvalid `http_client` argument; Expected an instance of `httpx.Client` but got )r   r   r   r   r   r   r   r   r   )r3   r   HTTPX_DEFAULT_TIMEOUTrA   r   r   Clientr   r  rd  rj   r   r#   rm  r   )	rh   r   r   r   r   rt  r   r   r   rf  rf   ri   rj   V  s*   
zSyncAPIClient.__init__c                 C     | j jS re   r   r   rq   rf   rf   ri   r        zSyncAPIClient.is_closedc                 C  s   t | dr| j  dS dS )`Close the underlying HTTPX client.

        The client will *not* be usable after this.
        r   N)hasattrr   rn  rq   rf   rf   ri   rn    s   
zSyncAPIClient.closerh   rU   c                 C  s   | S re   rf   rq   rf   rf   ri   	__enter__  r   zSyncAPIClient.__enter__exc_typetype[BaseException] | NoneexcBaseException | Noneexc_tbTracebackType | Nonec                 C  s   |    d S re   rn  rh   r  r  r  rf   rf   ri   __exit__  s   zSyncAPIClient.__exit__r   r:   c                 C  s   |S z#Hook for mutating the given optionsrf   rh   r   rf   rf   ri   _prepare_options  rk   zSyncAPIClient._prepare_optionsr   r   c                 C  r;  a  This method is used as a callback for mutating the `Request` object
        after it has been constructed.
        This is useful for cases where you want to add certain headers based off of
        the request properties, e.g. `url`, `method` etc.
        Nrf   r)  rf   rf   ri   _prepare_request  r<  zSyncAPIClient._prepare_requestr%  Type[ResponseT]r(  Literal[True]
stream_clsType[_StreamT]rX   c                C  rd   re   rf   rh   r%  r   r(  r  rf   rf   ri   r        zSyncAPIClient.requestFr(  Literal[False]r%   c                C  rd   re   rf   rh   r%  r   r(  rf   rf   ri   r     s   r(  r  Type[_StreamT] | NoneResponseT | _StreamTc                C  rd   re   rf   r  rf   rf   ri   r     r  type[_StreamT] | Nonec                C  s  |  ||}t|}|jd u r|j dkr|  |_d }|| j}d}t|d D ]}t|}| 	|}|| }	| 
|}
| |
 i }| jd urQ| j|d< |jd ur[|j|d< td|
j|
j d }z| jj|
fd|pt| j|
di|}W nb tjy } z%tjd	d
d |	dkr| j|||d d W Y d }~q+td t|
d|d }~w ty } z%tjdd
d |	dkr| j|||d d W Y d }~q+td t|
d|d }~ww td|
j|
j|j|j|j z|  W nK tjy= } z=tjdd
d |	dkr#| |j r#|j !  | j||||d W Y d }~q+|j j"s-|j #  td | $|j d d }~ww  |d usHJ d| j%||||||dS Nr  r   r   authra  zSending HTTP Request: %s %sr(  )r   z"Encountered httpx.TimeoutExceptionT)exc_info)retries_takenr   r   r   zRaising timeout errorzEncountered ExceptionzRaising connection errorzHTTP Response: %s %s "%i %s" %sz!Encountered httpx.HTTPStatusErrorzRe-raising status errorz0could not resolve response (should never happen))r%  r   r   r(  r  r  )&r'  r7   r   r
  r  rZ  rP  r   ranger  r  r  r4  ra  rQ   r  r]   r   sendr*  r   TimeoutException_sleep_for_retryrM   r   rN   r   reason_phraser   raise_for_statusHTTPStatusErrorrW  r   rn  r   readr   _process_responserh   r%  r   r(  r  Zinput_optionsr   r   r  rN  r   r  r0  rf   rf   ri   r     s   










	



r  r   httpx.Response | Nonec                C  s^   || }|dkrt d nt d| | |||r|jnd }t d|j| t| d S Nr   z1 retry leftz%i retries leftz$Retrying request to %s in %f seconds)rQ   r  rT  r   r   r]   rJ  sleeprh   r  r   r   r   rN  r   rf   rf   ri   r  B  s   zSyncAPIClient._sleep_for_retryr   r  r   1type[Stream[Any]] | type[AsyncStream[Any]] | Nonec          
      C  s   t |p|}t|r?t|tr?|rt|jjt	r?t|t
s*tdt
 d| td|}tt||| t|||||dS |tjkrItt|S t
|| td|||||d}	t|jjt	rett|	S |	 S )N!API Response types must subclass ; Received type[BaseAPIResponse[Any]]rawr   r%  r(  r  r   r  r&  )r   r,  r-  r.  r>   r|   r   r   r  rE   r=   r   r   r%   r@   r   Responseparse
rh   r%  r   r   r(  r  r  originZresponse_clsZapi_responserf   rf   ri   r  P  sL   




	
zSyncAPIClient._process_responser   Type[object]r   Type[SyncPageT]rR   c                   s(   d fdd}|_ j|ddS )	Nr   rR   rb   c                   s   | j  d | S )N)r   r   r   )r   r   r   r   rh   rf   ri   r     s   z0SyncAPIClient._request_api_list.<locals>._parserFr  )r   rR   rb   rR   )r   r   )rh   r   r   r   r   rf   r  ri   r     s   zSyncAPIClient._request_api_listr   r(  r   r+   c                C  rd   re   rf   rh   r   r%  r   r(  rf   rf   ri   r    r  zSyncAPIClient.getr   type[_StreamT]c                C  rd   re   rf   rh   r   r%  r   r(  r  rf   rf   ri   r    r<  r   r  c                C  rd   re   rf   r  rf   rf   ri   r    r<  r   r(  r  c                C  s.   t jdd|d|}tt| j||||dS Nr  )r
  r]   r  rf   )r:   	constructr   r%   r   rh   r   r%  r   r(  r  optsrf   rf   ri   r    s   	)r   r   r   r	  r(  r   Body | Noner   BinaryTypes | Noner	  RequestFiles | Nonec                C  rd   re   rf   )rh   r   r%  r   r   r   r	  r(  rf   rf   ri   post  s   zSyncAPIClient.post)r   r   r   r	  c          	      C  rd   re   rf   	rh   r   r%  r   r   r   r	  r(  r  rf   rf   ri   r       )r   r   r   r	  r  c          	      C  rd   re   rf   r  rf   rf   ri   r    r  )r   r   r   r	  r(  r  c          
      C  s   |d ur|d urt d|d ur|d urt dt|tr%tjdtdd tjd	d|||t|d|}	t	t
| j||	||dS 
N2Passing both `body` and `content` is not supported3Passing both `files` and `content` is not supportedPassing raw bytes as `body` is deprecated and will be removed in a future version. Please pass raw bytes via the `content` parameter instead.   
stacklevelr  r
  r]   r   r   r	  r  rf   )r   r   r  warningswarnDeprecationWarningr:   r  r   r   r%   r   )
rh   r   r%  r   r   r   r	  r(  r  r  rf   rf   ri   r    s    
r   r   r	  r   c                C  v   |d ur|d urt d|d ur|d urt dt|tr%tjdtdd tjdd|||t|d|}| 	||S 	Nr  r  r  r  r  patchr  rf   
r   r   r  r  r  r  r:   r  r   r   rh   r   r%  r   r   r	  r   r  rf   rf   ri   r        

zSyncAPIClient.patchc                C  r  	Nr  r  r  r  r  putr  rf   r  r  rf   rf   ri   r  %  r  zSyncAPIClient.putr   r   r   c                C  sX   |d ur|d urt dt|trtjdtdd tjdd|||d|}| ||S Nr  r  r  r  delete)r
  r]   r   r   rf   	r   r   r  r  r  r  r:   r  r   rh   r   r%  r   r   r   r  rf   rf   ri   r  ?  s   	
zSyncAPIClient.deleter  r   r   r
  r
  c                C  &   t jd|||d|}| |||S N)r
  r]   r   rf   r:   r  r   rh   r   r   r   r   r   r
  r  rf   rf   ri   get_api_listT     
zSyncAPIClient.get_api_list)r   rm   r   r   r   r   r   ru  rt  rv  r   r   r   r   r   r|   rb   rc   r   rp  rh   rU   rb   rU   r  r  r  r  r  r  rb   rc   r   r:   rb   r:   r   r   rb   rc   )
r%  r  r   r:   r(  r  r  r  rb   rX   r%  r  r   r:   r(  r  rb   r%   )
r%  r  r   r:   r(  r|   r  r  rb   r  )
r%  r  r   r:   r(  r|   r  r  rb   r  
r  r   r   r   r   r:   r   r  rb   rc   r%  r  r   r:   r   r   r(  r|   r  r  r  r   rb   r%   )r   r  r   r  r   r:   rb   rR   
r   rm   r%  r  r   r+   r(  r  rb   r%   )r   rm   r%  r  r   r+   r(  r  r  r  rb   rX   )r   rm   r%  r  r   r+   r(  r|   r  r  rb   r  )r   rm   r%  r  r   r  r   r  r   r+   r	  r  r(  r  rb   r%   )r   rm   r%  r  r   r  r   r  r   r+   r	  r  r(  r  r  r  rb   rX   )r   rm   r%  r  r   r  r   r  r   r+   r	  r  r(  r|   r  r  rb   r  )r   rm   r%  r  r   r  r   r  r	  r  r   r+   rb   r%   )r   rm   r%  r  r   r  r   r  r   r+   rb   r%   )r   rm   r   r  r   r  r   r  r   r+   r
  rm   rb   rR   )rp   rt   ru   rw   r   rC   r/   rj   r   rn  r  r  r  r  r   r   r  r  r   r  r  r  r  r  r  rj  rf   rf   rf  ri   r   R  s   
 
.





	
w
6	
!r   c                      r]  )_DefaultAsyncHttpxClientr  r   rb   rc   c                   r_  r`  rb  re  rf  rf   ri   rj   c  rg  z!_DefaultAsyncHttpxClient.__init__rh  ri  rf   rf   rf  ri   r  b  rk  r  c                   @  s   e Zd ZdddZdS )	_DefaultAioHttpClient_kwargsr   rb   rc   c                 K  s   t d)NzVTo use the aiohttp client you must have installed the package with the `aiohttp` extra)r   )rh   r  rf   rf   ri   rj   o  r|  _DefaultAioHttpClient.__init__N)r  r   rb   rc   )rp   rt   ru   rj   rf   rf   rf   ri   r  n  rr  r  c                      r]  )r  r  r   rb   rc   c                   r_  r`  rb  re  rf  rf   ri   rj   t  s   r  rh  ri  rf   rf   rf  ri   r  s  rk  c                   @  rl  )AsyncHttpxClientWrapperrb   rc   c                 C  s8   | j rd S zt |   W d S  ty   Y d S w re   )r   asyncioZget_running_loopZcreate_taskacloser   rq   rf   rf   ri   ro    s   zAsyncHttpxClientWrapper.__del__Nrp  rq  rf   rf   rf   ri   r    rr  r  c                      s  e Zd ZU ded< dZded< eeddddd fddZdddZdddZ	dd!d"Z
dd)d*Zdd-d.Zdd1d2Zed3d4dd:d;Zedd@d;ZeddAddDd;Zd3ddEddFd;ZddJdKZdLdMddPdQZddWdXZei d3dYdd\d]Zei d^dd_d]Zei dd`ddad]Zi d3ddbddcd]Zedddi d3ddddkdlZedddi dmddndlZedddi ddoddpdlZdddi d3ddqddrdlZdddi dmddsdtZdddi dmddudvZddi dwddxdyZdi dzd{dd}d~Z  ZS )r   zhttpx.AsyncClientr   Nztype[AsyncStream[Any]] | Noner   rs  r   rm   r   r   r   r|   r   r   r   ru  rt  httpx.AsyncClient | Noner   r   r   r   rb   rc   c          	   	     s   t |s|r|jtkr|j}nt}|d ur$t|tjs$tdt| t	 j
||tt|||||d |p>t|tt|d| _d S )NzTInvalid `http_client` argument; Expected an instance of `httpx.AsyncClient` but got )r   r   r   r   r   r   r   rw  )r3   r   rx  rA   r   r   AsyncClientr   r  rd  rj   r   r#   r  r   )	rh   r   r   r   r   r   rt  r   r   rf  rf   ri   rj     s*   
zAsyncAPIClient.__init__c                 C  rz  re   r{  rq   rf   rf   ri   r     r|  zAsyncAPIClient.is_closedc                   s   | j  I dH  dS )r}  N)r   r  rq   rf   rf   ri   rn    s   zAsyncAPIClient.closerh   rU   c                   s   | S re   rf   rq   rf   rf   ri   
__aenter__  s   zAsyncAPIClient.__aenter__r  r  r  r  r  r  c                   s   |   I d H  d S re   r  r  rf   rf   ri   	__aexit__  s   zAsyncAPIClient.__aexit__r   r:   c                   s   |S r  rf   r  rf   rf   ri   r    s   zAsyncAPIClient._prepare_optionsr   r   c                   s   dS r  rf   r)  rf   rf   ri   r       	zAsyncAPIClient._prepare_requestFr  r%  r  r(  r  r%   c                     d S re   rf   r  rf   rf   ri   r     s   zAsyncAPIClient.requestr  r  type[_AsyncStreamT]rY   c                  r   re   rf   r  rf   rf   ri   r        )r  type[_AsyncStreamT] | NoneResponseT | _AsyncStreamTc                  r   re   rf   r  rf   rf   ri   r     r  r  c                  s  | j d u rtt I d H | _ | ||}t|}|jd u r*|j dkr*|  |_d }|	| j
}d}t|d D ]*}t|}| |I d H }|| }	| |}
| |
I d H  i }| jd urf| j|d< |jd urp|j|d< td|
j|
j d }z| jj|
fd|p| j|
di|I d H }W nh tjy } z(tjd	d
d |	dkr| j|||d dI d H  W Y d }~q:td t|
d|d }~w ty } z(tjdd
d |	dkr| j|||d dI d H  W Y d }~q:td t|
d|d }~ww td|
j|
j|j|j|j z|   W nT tj!yd } zFtjdd
d |	dkrG| "|j#rG|j#$ I d H  | j||||dI d H  W Y d }~q:|j#j%sT|j#& I d H  td | '|j#d d }~ww  |d usoJ d| j(||||||dI d H S r  ))r   r2   get_platformr'  r7   r   r
  r  rZ  rP  r   r  r  r  r  r4  ra  rQ   r  r]   r   r  r*  r   r  r  rM   r   rN   r   r  r   r  r  rW  r   r  r   Zareadr   r  r  rf   rf   ri   r     s   








	

r  r   r  c                  sf   || }|dkrt d nt d| | |||r|jnd }t d|j| t|I d H  d S r  )rQ   r  rT  r   r   r]   anyior  r  rf   rf   ri   r    s   zAsyncAPIClient._sleep_for_retryr   r  r   r  c          
        s   t |p|}t|r@t|tr@|rt|jjt	r@t|t
s+tdt
 d| td|}td||| t|||||dS |tjkrJtt|S t
|| td|||||d}	t|jjt	rftt|	S |	 I d H S )Nr  r  r  r%   r  r&  )r   r,  r-  r.  r>   r|   r   r   r  rE   r?   r   r   r@   r   r  r%   r  r  rf   rf   ri   r    sN   




	
z AsyncAPIClient._process_responser   rz   r   r   AsyncPaginator[_T, AsyncPageT]c                 C  s   t | |||dS )N)r   r   r   r   )r   )rh   r   r   r   rf   rf   ri   r     s   z AsyncAPIClient._request_api_listr  r   r+   c                  r   re   rf   r  rf   rf   ri   r    r  zAsyncAPIClient.getr  c                  r   re   rf   r  rf   rf   ri   r    r  r  c                  r   re   rf   r  rf   rf   ri   r    r  r  c                  s0   t jdd|d|}| j||||dI d H S r  )r:   r  r   r  rf   rf   ri   r    s   	)r   r   r	  r   r(  r   r  r   AsyncBinaryTypes | Noner	  r  c                  r   re   rf   )rh   r   r%  r   r   r	  r   r(  rf   rf   ri   r    s   zAsyncAPIClient.postr  c          	        r   re   rf   	rh   r   r%  r   r   r	  r   r(  r  rf   rf   ri   r       )r   r   r	  r   r  c          	        r   re   rf   r	  rf   rf   ri   r    r
  )r   r   r	  r   r(  r  c          
        s   |d ur|d urt d|d ur|d urt dt|tr&tjdtdd tjd	d|||t|I d H d|}	| j	||	||dI d H S r  
r   r   r  r  r  r  r:   r  r   r   )
rh   r   r%  r   r   r	  r   r(  r  r  rf   rf   ri   r  +  s"   
c                     |d ur|d urt d|d ur|d urt dt|tr&tjdtdd tjdd|||t|I d H d|}| 	||I d H S r  r  r  rf   rf   ri   r  G  s*   

zAsyncAPIClient.patchc                  r  r  r  r  rf   rf   ri   r  f  s"   

zAsyncAPIClient.putr  c                  s`   |d ur|d urt dt|trtjdtdd tjdd|||d|}| ||I d H S r  r  r  rf   rf   ri   r    s   	
zAsyncAPIClient.deleter  r  r
  c                C  r  r  r  r  rf   rf   ri   r    r  zAsyncAPIClient.get_api_list)r   rm   r   r   r   r|   r   r   r   ru  rt  r  r   r   r   r   rb   rc   r   rp  r  r  r  r  r  )
r%  r  r   r:   r(  r  r  r  rb   rY   )
r%  r  r   r:   r(  r|   r  r  rb   r  r  r  )r   rz   r   r   r   r:   rb   r  r  )r   rm   r%  r  r   r+   r(  r  r  r  rb   rY   )r   rm   r%  r  r   r+   r(  r|   r  r  rb   r  )r   rm   r%  r  r   r  r   r  r	  r  r   r+   r(  r  rb   r%   )r   rm   r%  r  r   r  r   r  r	  r  r   r+   r(  r  r  r  rb   rY   )r   rm   r%  r  r   r  r   r  r	  r  r   r+   r(  r|   r  r  rb   r  )r   rm   r%  r  r   r  r   r  r	  r  r   r+   rb   r%   )r   rm   r%  r  r   r  r   r  r   r+   rb   r%   )r   rm   r   rz   r   r   r   r  r   r+   r
  rm   rb   r  )rp   rt   ru   rw   r   rC   r/   rj   r   rn  r  r  r  r  r   r   r  r  r   r  r  r  r  r  r  rj  rf   rf   rf  ri   r     s   
 
.




	
|
6	
!$r   )queryextra_headersextra_query
extra_bodyr   r   r   r  Query | Noner  Headers | Noner  r  r  r   r   r   'float | httpx.Timeout | None | NotGivenr   PostParser | NotGivenrb   r+   c                 C  s   i }|dur
||d< |durt t||d< | dur| |d< |dur-i |di ||d< t|ts6||d< |dur>||d< t|rF||d< |S )zECreate a dict of type RequestOptions without keys of NotGiven values.Nr   r  r_   r   r   r   )r   r&   r  r   r$   r3   )r  r  r  r  r   r   r   r   rf   rf   ri   make_request_options  s    
r  c                   @  rl  )r  rb   r|   c                 C  r;  )NTrf   rq   rf   rf   ri   __bool__  r   zForceMultipartDict.__bool__Nr   )rp   rt   ru   r  rf   rf   rf   ri   r    rr  r  c                   @  $   e Zd Zd
ddZedddZd	S )OtherPlatformnamerm   rb   rc   c                 C  
   || _ d S re   r  rh   r  rf   rf   ri   rj        
zOtherPlatform.__init__c                 C     d| j  S )NzOther:r  rq   rf   rf   ri   __str__     zOtherPlatform.__str__Nr  rm   rb   rc   rs   rp   rt   ru   rj   r   r  rf   rf   rf   ri   r        
r  )MacOSLinuxWindowsFreeBSDOpenBSDiOSAndroidUnknownPlatformc                  C  s   zt   } t    }W n
 ty   Y dS w d|v s!d|v r#dS | dkr)dS | dkr/dS d	|v r5d
S | dkrKt }|dkrCdS |dkrIdS dS |rQt|S dS )Nr+  iphoneZipadr)  darwinr$  windowsr&  androidr*  linuxfreebsdr'  openbsdr(  r%  )r?  systemr  r   distroidr  )r4  Zplatform_name	distro_idrf   rf   ri   r    s0   r  )maxsizer   rm   r?  Platform | Noner>  c                C  s&   d| t |pt t t t t dS )Npython)zX-Stainless-LangzX-Stainless-Package-VersionzX-Stainless-OSzX-Stainless-ArchzX-Stainless-RuntimezX-Stainless-Runtime-Version)rm   r  get_architectureget_python_runtimeget_python_version)r   r?  rf   rf   ri   r@    s   r@  c                   @  r  )	OtherArchr  rm   rb   rc   c                 C  r  re   r  r  rf   rf   ri   rj     r  zOtherArch.__init__c                 C  r  )Nzother:r  rq   rf   rf   ri   r    r   zOtherArch.__str__Nr!  rs   r"  rf   rf   rf   ri   r>    r#  r>  )x32x64armarm64unknownc                   C      zt  W S  ty   Y dS w NrC  )r?  python_implementationr   rf   rf   rf   ri   r<  '  
   
r<  c                   C  rD  rE  )r?  python_versionr   rf   rf   rf   ri   r=  .  rG  r=  Archc                  C  sh   zt   } W n
 ty   Y dS w | dv rdS | dkrdS | dkr%dS tjdkr,dS | r2t| S dS )	NrC  )rB  aarch64rB  rA  x86_64r@  l        r?  )r?  machiner  r   sysr8  r>  )rL  rf   rf   ri   r;  5  s    
r;  obj1Mapping[_T_co, Union[_T, Omit]]obj2Dict[_T_co, _T]c                 C  s   i | |}dd |  D S )zMerge two mappings of the same type, removing any values that are instances of `Omit`.

    In cases with duplicate keys the second mapping takes precedence.
    c                 S  s    i | ]\}}t |ts||qS rf   )r   r    ).0r"  r#  rf   rf   ri   
<dictcomp>X  s     z#_merge_mappings.<locals>.<dictcomp>)r   )rN  rP  Zmergedrf   rf   ri   r   O  s   r   )r  r  r  r  r  r  r  r  r   r   r   r  r   r  rb   r+   )rb   r,  )r   rm   r?  r9  rb   r>  rs   )rb   rI  )rN  rO  rP  rO  rb   rQ  )
__future__r   rM  ra   rJ  rX  rF  r  r,  r  r?  r  email.utilstypesr   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   Ztyping_extensionsr   r   r   r  r   r5  r   r   r    r   Z_qsr   _filesr   r   _typesr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   Z_utilsr0   r1   r2   r3   r4   r5   _compatr6   r7   r8   Z_modelsr9   r:   r;   r<   	_responser=   r>   r?   r@   
_constantsrA   rB   rC   rD   rE   rF   rG   Z
_streamingrH   rI   rJ   rK   rL   rM   rN   rO   Z_utils._jsonrP   	getLoggerrp   rQ   rw   rR   rT   rU   rV   rX   rY   Zhttpx._configrZ   rx  ImportErrorr[   rx   r   r   r   ry  r  r   r   r   r^  ZDefaultHttpxClientrm  r   r  Zhttpx_aiohttpr  ZHttpxAiohttpClientZDefaultAsyncHttpxClientZDefaultAioHttpClientr  r   r  rm   r  r  r,  r  r@  r>  rI  r<  r=  r;  r   rf   rf   rf   ri   <module>   s   DL $	3=1')   <    	    %	
*	


