o
    #`^h                    @  s  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(m)Z) d dl'm*Z* d	d
l+m,Z, d	dl-m.Z. d	dl/m0Z0m1Z1 d	dl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD d	dlEmFZFmGZGmHZHmIZImJZJmKZK d	dlLmMZMmNZN d	dlOmPZPmQZQmRZRmSZS d	dlTmUZUmVZVmWZWmXZX d	dlYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z` d	dlambZbmcZcmdZdmeZe d	dl,mfZfmgZgmhZhmiZi d	dljmkZk e	lemZndeod< edddZpedddZqedZreddd Zsed!ebe dZted"ede dZuer^d d#lvmwZx nzd d#lvmwZx W n eyyt   e8d$ZxY nw G d%d& d&ZzG d'd( d(ePeer Z{G d)d* d*e{er eer Z|G d+d, d,eereqf Z}G d-d. d.e{er eer Z~ed/ee%je%jf dZed0eebe ede f dZG d1d2 d2eeef ZG d3d4 d4e%jZere%jZneZG d5d6 d6eZG d7d8 d8ee%jebe f ZG d9d: d:e%jZere%jZneZG d;d< d<eZG d=d> d>ee%jede f Zddddde3e3d?dqdOdPZG dQdR dReedf ZG dSdT dTZeee!dU f ZdrdWdXZeJddYdsd_d`ZG dadb dbZeee!dc f ZdtdddeZdtdfdgZdudidjZdvdodpZdS )w    )annotationsN)TracebackType)random)TYPE_CHECKINGAnyDictTypeUnionGenericMappingTypeVarIterableIteratorOptional	GeneratorAsyncIteratorcastoverload)Literaloverride
get_origin)URLLimits)PrivateAttr   )_exceptionsQuerystring)to_httpx_filesasync_to_httpx_files)	NOT_GIVENBodyOmitQueryHeadersTimeoutNotGiven	ResponseT	Transport
AnyMapping
PostParserProxiesTypesRequestFilesHttpxSendArgsAsyncTransportRequestOptionsHttpxRequestFilesModelBuilderProtocol)is_dictis_listasyncifyis_given	lru_cache
is_mapping)
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)LegacyAPIResponsezlogging.Loggerlog	SyncPageTzBaseSyncPage[Any])bound
AsyncPageTzBaseAsyncPage[Any]_T_T_coT)	covariant_StreamT_AsyncStreamT)DEFAULT_TIMEOUT_CONFIGg      @c                   @  sP   e Zd ZU dZded< ded< edd	d
Zeddd
Zeed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paramsr   returnNonec                C     d S N selfr^   re   re   Q/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/openai/_base_client.py__init__|      zPageInfo.__init__r#   c                C  rc   rd   re   )rg   r`   re   re   rh   ri      rj   r^   r`   c                C  s   || _ || _d S rd   rk   )rg   r^   r`   re   re   rh   ri      s   
N)r^   r   ra   rb   )r`   r#   ra   rb   )r^   r]   r`   r_   ra   rb   )__name__
__module____qualname____doc____annotations__r   ri   r    re   re   re   rh   r\   s   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]_modelra   boolc                 C  s   |   }|sdS |  d uS )NF)_get_page_itemsnext_page_info)rg   itemsre   re   rh   has_next_page   s   zBasePage.has_next_pageOptional[PageInfo]c                 C  rc   rd   re   rg   re   re   rh   rw      s    zBasePage.next_page_infoIterable[_T]c                 C  rc   rd   re   r{   re   re   rh   rv         zBasePage._get_page_itemsr^   r   httpx.QueryParamsc                 C  s   t tt| jj|jS rd   )httpxQueryParamsr   r   rr   r`   mergerf   re   re   rh   _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d)N)r`   zUnexpected PageInfo state)r8   rr   _strip_raw_response_header
isinstancer`   r&   r^   r   	copy_withdictstr
ValueError)rg   r   optionsr`   r^   re   re   rh   _info_to_options   s   

zBasePage._info_to_optionsNra   ru   )ra   rz   )ra   r|   )r^   r   ra   r~   )r   r\   ra   r;   )rl   rm   rn   ro   r   rr   rp   rt   ry   rw   rv   r   r   re   re   re   rh   rq      s   
 



rq   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modelrs   r   r;   ra   rb   c                 C  s   || _ || _|| _d S rd   rt   r   rr   )rg   r   r   r   re   re   rh   _set_private_attributes      
z$BaseSyncPage._set_private_attributesIterator[_T]c                 c  s(    |   D ]}| D ]}|V  qqd S rd   
iter_pagesrv   rg   pageitemre   re   rh   __iter__   s   zBaseSyncPage.__iter__rg   rS   Iterator[SyncPageT]c                 c  s&    | }	 |V  |  r| }nd S qrd   ry   get_next_pagerg   r   re   re   rh   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   rw   RuntimeErrorr   r   _request_api_listrt   	__class__rg   r   r   re   re   rh   r      s   
zBaseSyncPage.get_next_pageN)r   r   r   rs   r   r;   ra   rb   )ra   r   )rg   rS   ra   r   )rg   rS   ra   rS   )rl   rm   rn   pydanticr   r   rp   r   r   r   r   re   re   re   rh   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   rs   ra   rb   c                 C  s   || _ || _|| _|| _d S rd   )rt   r   rr   	_page_cls)rg   r   r   r   r   re   re   rh   ri      s   
zAsyncPaginator.__init__ Generator[Any, None, AsyncPageT]c                 C  s   |    S rd   )	_get_page	__await__r{   re   re   rh   r      s   zAsyncPaginator.__await__rU   c                   s0   d fdd}| j _ j j j I d H S )NresprU   ra   c                   s   | j  j j jd | S )N)r   r   r   )r   rt   rr   r   r   r{   re   rh   _parser  s   z)AsyncPaginator._get_page.<locals>._parser)r   rU   ra   rU   )rr   post_parserr   requestr   )rg   r   re   r{   rh   r     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 rd   )r   rU   r   re   re   rh   	__aiter__  s   zAsyncPaginator.__aiter__N)
r   r   r   r;   r   r   r   rs   ra   rb   )ra   r   )ra   rU   ra   r   )rl   rm   rn   ri   r   r   r   re   re   re   rh   r      s
    


r   c                   @  r   )BaseAsyncPager   r   r   rs   r   r   r;   ra   rb   c                 C  s   || _ || _|| _d S rd   r   )rg   r   r   r   re   re   rh   r     r   z%BaseAsyncPage._set_private_attributesr   c                 C s2   |   2 z3 d H W }| D ]}|V  qq6 d S rd   r   r   re   re   rh   r   &  s   zBaseAsyncPage.__aiter__rg   rU   AsyncIterator[AsyncPageT]c                 C s,   | }	 |V  |  r| I d H }nd S qrd   r   r   re   re   rh   r   +  s   zBaseAsyncPage.iter_pagesc                   s<   |   }|std| |}| jj| j| j|dI d H S r   r   r   re   re   rh   r   4  s   
zBaseAsyncPage.get_next_pageN)r   rs   r   r   r   r;   ra   rb   r   )rg   rU   ra   r   )rg   rU   ra   rU   )rl   rm   rn   r   r   r   rp   r   r   r   r   re   re   re   rh   r     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ed< ded< ded< dZded< eedddd}d&d'Zd~d)d*Zdd.d/Z	dd4d5Z
d6d7dd<d=Zdd>d?ZddAdBZd6d7ddDdEZddIdJZddMdNZddPdQZddSdTZeddVdWZeddYdZZedd\d]Zedd_d`ZeddadbZddedfZeddgdhZeddidjZejddldjZddndoZdddsdtZ	dddwdxZddydzZ dd{d|Z!dS )
BaseClientr   r   r   _versionr   	_base_urlintmax_retrieszUnion[float, Timeout, None]timeouthttpx.Limits_limitsProxiesTypes | None_proxies!Transport | AsyncTransport | None
_transportru   _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 | Nonelimits	transportproxiesr   Mapping[str, str] | Noner   Mapping[str, object] | Nonera   rb   c       
         C  sn   || _ | t|| _|| _|| _|| _|| _|| _|	pi | _	|
p"i | _
|| _d | _d | _|d u r5tdd S )Nzmax_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 `openai.DEFAULT_MAX_RETRIES`)r   _enforce_trailing_slashr   r   r   r   r   r   r   _custom_headers_custom_queryr   r   	_platform	TypeError)rg   r   r   r   r   r   r   r   r   r   r   re   re   rh   ri   P  s"   

zBaseClient.__init__r^   c                 C  s"   |j dr|S |j|j d dS )N   /raw_path)r   endswithr   rf   re   re   rh   r   p  s   z"BaseClient._enforce_trailing_slashresponsehttpx.ResponserM   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_closedis_stream_consumedstatus_codetextstripjsonloads	Exception_make_status_error)rg   r   r   err_msgerr_textre   re   rh    _make_status_error_from_responseu  s   

z+BaseClient._make_status_error_from_responser   r   object_exceptions.APIStatusErrorc                C  s   t  rd   )NotImplementedError)rg   r   r   r   re   re   rh   r     s   zBaseClient._make_status_errorr   retries_takenr   r;   r   httpx.Headersc                C  s   |j pi }t| j|}| || t|}| j}|r/|j dkr/||vr/|j	p,| 
 ||< ddd |D vr>t||d< |S )Ngetzx-stainless-retry-countc                 s  s    | ]}|  V  qd S rd   )lower).0headerre   re   rh   	<genexpr>  s    z,BaseClient._build_headers.<locals>.<genexpr>)headers_merge_mappingsdefault_headers_validate_headersr   r$   r   methodr   idempotency_key_idempotency_keyr   )rg   r   r   r   headers_dictr   idempotency_headerre   re   rh   _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   is_relative_urlr   r   lstripr   )rg   r^   	merge_urlmerge_raw_pathre   re   rh   _prepare_url  s
   zBaseClient._prepare_urlSSEDecoder | SSEBytesDecoderc                 C     t  S rd   )rJ   r{   re   re   rh   _make_sse_decoder  s   zBaseClient._make_sse_decoderhttpx.Requestc          
      C  s  t tjrt dt|dd i }|j}|jd ur:|d u r%tt	|j}nt
|r0t||j}n
tdt| d| j||d}t| j|j}|d}|j}|d ur|drd	|vrb|d |ryt|srtd
t| d| ||d< |sttt }| |j}	d|	jv rd|	jddi|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)exclude_unsetzUnexpected JSON data type, z , cannot merge with `extra_body`r   Content-Typezmultipart/form-databoundaryzGExpected query input to be a dictionary for multipart requests but got z	 instead.data_sni_hostname-
extensions)r   r   r   r^   r`   r   filesre   ))rR   isEnabledForloggingDEBUGdebugr9   	json_data
extra_jsonr   r!   r7   r   r   typer  default_queryr`   r   r  
startswithpopr2   r   _serialize_multipartformr0   ForceMultipartDictr  r^   hostreplacer   build_requestr   r   r&   r   qs	stringifyr   r   r   )
rg   r   r   kwargsr  r   r`   content_typer  prepared_urlre   re   rh   _build_request  sN   



 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 )Nbrackets)array_format)r%  stringify_itemsr   r3   append)rg   r  rx   
serializedkeyvalueexistingre   re   rh   r     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 rd   )	r5   r   r   r  rG   r    r   r   r'   )rg   r5  r   r   override_cast_tore   re   rh   _maybe_override_cast_to   s   

z"BaseClient._maybe_override_cast_tor   c                 C  s   |j tdkS )Nstream)r   r   rF   rg   r   re   re   rh   _should_stream_response_body1  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_r3  )r   r   )r   r'   r   inspectisclass
issubclassr1   buildr   r<   r=   r   ValidationErrorrP   )rg   r  r5  r   errre   re   rh   _process_response_data4  s   

z!BaseClient._process_response_datar   c                 C  r
  rd   r   r{   re   re   rh   r%  L     zBaseClient.qshttpx.Auth | Nonec                 C  rc   rd   re   r{   re   re   rh   custom_authP     zBaseClient.custom_authdict[str, str]c                 C  s   i S rd   re   r{   re   re   rh   auth_headersT  rG  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_agentplatform_headersrI  r   r{   re   re   rh   r   X  s   zBaseClient.default_headersc                 C  s
   i | j S rd   )r   r{   re   re   rh   r  c  s   zBaseClient.default_queryr   r$   c                 C     dS )zaValidate the given default headers and custom headers.

        Does nothing by default.
        Nre   )rg   r   r   re   re   rh   r   i     	zBaseClient._validate_headersc                 C  s   | j j d| j S )Nz/Python )r   rl   r   r{   re   re   rh   rL  t  s   zBaseClient.user_agentc                 C  s   | j S rd   )r   r{   re   re   rh   r   x  rD  zBaseClient.base_url	URL | strc                 C  s"   |  t|tr	|nt|| _d S rd   )r   r   r   r   rf   re   re   rh   r   |  s   "Dict[str, str]c                 C  s   t | j| jdS )N)platform)rM  r   r   r{   re   re   rh   rM    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-msi  zretry-after)	r   floatr   r   emailutilsparsedate_tz	mktime_tztime)rg   rS  retry_ms_headerretry_headerretry_date_tuple
retry_datere   re   rh   _parse_retry_after_header  s&   

z$BaseClient._parse_retry_after_headerremaining_retriesrV  c           
      C  sx   | | j}| |}|d urd|  k rdkr|S  || }tttd| t}ddt   }|| }	|	dkr:|	S dS )Nr   <   g       @r   g      ?)get_max_retriesr   r`  minrE   powrC   r   )
rg   ra  r   rS  r   retry_after
nb_retriessleep_secondsjitterr   re   re   rh   _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   rR   r  r   )rg   r   should_retry_headerre   re   rh   _should_retry  s*   






zBaseClient._should_retryc                 C  s   dt   S )Nzstainless-python-retry-)uuiduuid4r{   re   re   rh   r     s   zBaseClient._idempotency_key)r   r   r   r   r   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   )r^   r   ra   r   )r   r   ra   rM   )r   r   r   r   r   r   ra   r   )r   r;   r   r   ra   r   )r^   r   ra   r   )ra   r	  )r   r;   r   r   ra   r  )r  r+  ra   r,  )r5  r6  r   r;   ra   r6  )r   r  ra   ru   )r  r   r5  r6  r   r   ra   r'   )ra   r   )ra   rE  )ra   rH  )ra   rJ  )ra   r,  )r   r$   r   r$   ra   rb   ra   r   )ra   r   )r^   rP  ra   rb   )ra   rQ  rd   )rS  rT  ra   rU  )ra  r   r   r;   rS  rT  ra   rV  )r   r   ra   ru   )"rl   rm   rn   rp   r   rD   rB   ri   r   r   r   r  r  r  r*  r   r8  r;  rC  propertyr%  rF  rI  r   r  r   rL  r   setterrM  r`  rj  rn  r   re   re   re   rh   r   C  sh   
 
 

	


K





&
#r   c                         e Zd Zd fddZ  ZS )_DefaultHttpxClientr'  r   ra   rb   c                   :   | dt | dt | dd t jdi | d S Nr   r   follow_redirectsTre   
setdefaultrB   rH   superri   rg   r'  r   re   rh   ri        z_DefaultHttpxClient.__init__r'  r   ra   rb   rl   rm   rn   ri   __classcell__re   re   r}  rh   ru        ru  c                   @     e Zd ZdddZdS )SyncHttpxClientWrapperra   rb   c                 C  s$   z|    W d S  ty   Y d S w rd   )closer   r{   re   re   rh   __del__  s
   zSyncHttpxClientWrapper.__del__Nra   rb   rl   rm   rn   r  re   re   re   rh   r        r  c                	      s  e Zd ZU ded< dZded< eedddddddd fdd Zdd!d"Zdd#d$Z	dd'd(Z
dd/d0Zdd3d4Zdd7d8Ze	dddBdCZe	ddDdEddHdCZe	ddDddIddLdCZ	ddDddIddNdCZddPdQZddTdUZdVdWdd[d\ZddbdcZei dDddddgdhZei diddkdhZei ddlddmdhZi dDddnddodhZedi ddDdpddudvZedi ddwddxdvZedi dddyddzdvZdi ddDdd{dd|dvZdi d}dd~dZddi ddddZdi d}dddZdi dddddZ  ZS )r   zhttpx.Clientr   Nztype[Stream[Any]] | Noner   r   r   r   r   r   http_clientr   r   r   r   r   r   r   r   r   !float | Timeout | None | NotGivenr   Transport | Noner   r   r   Limits | Noner  httpx.Client | Noner   r   r   r   r   ru   ra   rb   c                  s  |d urt jdtdd |d urtdnt}|d ur+t jdtdd |d ur+td|d ur?t jdtdd |d ur?tdt|sP|rN|jtkrN|j}nt}|d urct	|t
jsctd	t| t j||tt||||||
|	|d

 |pt|tt||||dd| _d S )NhThe `connection_pool_limits` argument is deprecated. The `http_client` argument should be passed instead   category
stacklevelNThe `http_client` argument is mutually exclusive with `connection_pool_limits`[The `transport` argument is deprecated. The `http_client` argument should be passed insteadAThe `http_client` argument is mutually exclusive with `transport`YThe `proxies` argument is deprecated. The `http_client` argument should be passed instead?The `http_client` argument is mutually exclusive with `proxies`zOInvalid `http_client` argument; Expected an instance of `httpx.Client` but got )
r   r   r   r   r   r   r   r   r   r   Tr   r   r   r   r   rx  )warningswarnDeprecationWarningr   rH   r5   r   HTTPX_DEFAULT_TIMEOUTrB   r   r   Clientr   r  r{  ri   r   r%   r  r   )rg   r   r   r   r   r   r   r   r  r   r   r   r}  re   rh   ri     sl   zSyncAPIClient.__init__c                 C     | j jS rd   r   r   r{   re   re   rh   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   r  r{   re   re   rh   r  ^  s   
zSyncAPIClient.closerg   rV   c                 C  s   | S rd   re   r{   re   re   rh   	__enter__h  r}   zSyncAPIClient.__enter__exc_typetype[BaseException] | NoneexcBaseException | Noneexc_tbTracebackType | Nonec                 C  s   |    d S rd   r  rg   r  r  r  re   re   rh   __exit__k  s   zSyncAPIClient.__exit__r   r;   c                 C  s   |S z#Hook for mutating the given optionsre   rg   r   re   re   rh   _prepare_optionss  rj   zSyncAPIClient._prepare_optionsr   r  c                 C  rN  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.
        Nre   r:  re   re   rh   _prepare_requestz  rO  zSyncAPIClient._prepare_requestr5  Type[ResponseT]ra  Optional[int]r9  Literal[True]
stream_clsType[_StreamT]rY   c                C  rc   rd   re   rg   r5  r   ra  r9  r  re   re   rh   r     rO  zSyncAPIClient.requestFr9  Literal[False]r'   c                C  rc   rd   re   )rg   r5  r   ra  r9  re   re   rh   r        r9  r  Type[_StreamT] | NoneResponseT | _StreamTc                C  rc   rd   re   r  re   re   rh   r     rO  type[_StreamT] | Nonec                C  s2   |d ur| | j| }nd}| j|||||dS Nr   )r5  r   r9  r  r   rc  r   _request)rg   r5  r   ra  r9  r  r   re   re   rh   r     s   	r   c                C  sZ  t |}| ||}| |}|| j| }| j||d}| | i }	| jd ur/| j|	d< t	d|j
|j z| jj|fd|pF| j|di|	}
W nf tjy } z'tj	ddd |d	krq| j|||||d d
W  Y d }~S t	d t|d|d }~w ty } z'tj	ddd |d	kr| j|||||d d
W  Y d }~S t	d t|d|d }~ww t	d|j
|j|
j|
j|
j t	d|
jd z|
  W nO tjy! } zAtj	ddd |d	kr| |jr|j  | j||||jj||dW  Y d }~S |jjs|j  t	d |  |jd d }~ww | j!|||
|||dS )Nr   authzSending HTTP Request: %s %sr9  r   "Encountered httpx.TimeoutExceptionTexc_infor   r   r9  r  rS  Raising timeout errorEncountered ExceptionRaising connection errorzHTTP Response: %s %s "%i %s" %szrequest_id: %szx-request-id!Encountered httpx.HTTPStatusErrorr   rS  r9  r  Re-raising status errorr5  r   r   r9  r  r   )"r8   r8  r  rc  r   r*  r  rF  rR   r  r   r^   r   sendr;  r   TimeoutException_retry_requestrN   r   rO   r   reason_phraser   r   raise_for_statusHTTPStatusErrorrn  r   r  r   readr   _process_response)rg   r5  r   r   r9  r  input_optionsra  r   r'  r   rB  re   re   rh   r    s   





	
	



zSyncAPIClient._requestrS  httpx.Headers | Nonec          	      C  sp   | | j| }|dkrtd ntd| | |||}td|j| t| | j	|||d ||dS Nr   z1 retry leftz%i retries leftz$Retrying request to %s in %f seconds)r   r5  r   r9  r  )
rc  r   rR   r  rj  r   r^   r[  sleepr  	rg   r   r5  r   rS  r9  r  ra  r   re   re   rh   r  &  s   

zSyncAPIClient._retry_requestr   r   r   r   1type[Stream[Any]] | type[AsyncStream[Any]] | Nonec          
      C  s   |j jtdkrttt|| |||||dS t|p|}t	|rKt
|trKt
|ts6tdt d| td|}tt||| t|||||dS |tjkrUtt|S t|| td|||||d}	t|j jtrqtt|	S |	 S )Nrk  rawr   r5  r9  r  r   r   !API Response types must subclass ; Received type[BaseAPIResponse[Any]]r6  )r   r   r   rF   r   r'   rQ   r   r=  r>  r?  r?   r>   r   rA   r   Responseru   parse
rg   r5  r   r   r9  r  r   originresponse_clsapi_responsere   re   rh   r  E  sX   




	
zSyncAPIClient._process_responser   Type[object]r   Type[SyncPageT]rS   c                   s(   d fdd}|_ j|ddS )	Nr   rS   ra   c                   s   | j  d | S )N)r   r   r   )r   r   r   r   rg   re   rh   r     s   z0SyncAPIClient._request_api_list.<locals>._parserFr  )r   rS   ra   rS   )r   r   )rg   r   r   r   r   re   r  rh   r     s   zSyncAPIClient._request_api_listr   r9  pathr/   c                C  rc   rd   re   rg   r  r5  r   r9  re   re   rh   r     r  zSyncAPIClient.getr   type[_StreamT]c                C  rc   rd   re   rg   r  r5  r   r9  r  re   re   rh   r     rO  r   r  c                C  rc   rd   re   r  re   re   rh   r     rO  r   r9  r  c                C  s.   t jdd|d|}tt| j||||dS Nr   )r   r^   r  re   )r;   	constructr   r'   r   rg   r  r5  r   r9  r  optsre   re   rh   r     s   	)r   r   r  r9  r   Body | Noner  RequestFiles | Nonec                C  rc   rd   re   )rg   r  r5  r   r   r  r9  re   re   rh   post  s   
zSyncAPIClient.post)r   r   r  c                C  rc   rd   re   rg   r  r5  r   r   r  r9  r  re   re   rh   r       )r   r   r  r  c                C  rc   rd   re   r  re   re   rh   r    r  )r   r   r  r9  r  c          	      C  s6   t jdd||t|d|}tt| j||||dS Nr  r   r^   r  r  r  re   )r;   r  r   r   r'   r   )	rg   r  r5  r   r   r  r9  r  r  re   re   rh   r    s   r   r   c                C  $   t jdd||d|}| ||S Npatchr   r^   r  re   r;   r  r   rg   r  r5  r   r   r  re   re   rh   r       zSyncAPIClient.patchr   r  r   c                C  s*   t jdd||t|d|}| ||S Nputr  re   )r;   r  r   r   rg   r  r5  r   r  r   r  re   re   rh   r
    s   	zSyncAPIClient.putc                C  r  Ndeleter  re   r  r  re   re   rh   r    r  zSyncAPIClient.deleter   r   r   r   r   c                C  &   t jd|||d|}| |||S Nr  re   r;   r  r   rg   r  r   r   r   r   r   r  re   re   rh   get_api_list     
zSyncAPIClient.get_api_list)r   r   r   r   r   r   r   r  r   r  r   r   r   r  r  r  r   r   r   r   r   ru   ra   rb   r   r  rg   rV   ra   rV   r  r  r  r  r  r  ra   rb   r   r;   ra   r;   r   r  ra   rb   rd   )r5  r  r   r;   ra  r  r9  r  r  r  ra   rY   )
r5  r  r   r;   ra  r  r9  r  ra   r'   )r5  r  r   r;   ra  r  r9  ru   r  r  ra   r  )r5  r  r   r;   ra  r  r9  ru   r  r  ra   r  )r5  r  r   r;   r   r   r9  ru   r  r  ra   r  )r   r;   r5  r  r   r   rS  r  r9  ru   r  r  ra   r  r5  r  r   r;   r   r   r9  ru   r  r  r   r   ra   r'   )r   r  r   r  r   r;   ra   rS   
r  r   r5  r  r   r/   r9  r  ra   r'   )r  r   r5  r  r   r/   r9  r  r  r  ra   rY   )r  r   r5  r  r   r/   r9  ru   r  r  ra   r  )r  r   r5  r  r   r  r   r/   r  r  r9  r  ra   r'   )r  r   r5  r  r   r  r   r/   r  r  r9  r  r  r  ra   rY   )r  r   r5  r  r   r  r   r/   r  r  r9  ru   r  r  ra   r  
r  r   r5  r  r   r  r   r/   ra   r'   r  r   r5  r  r   r  r  r  r   r/   ra   r'   )r  r   r   r  r   r  r   r  r   r/   r   r   ra   rS   )rl   rm   rn   rp   r   rD   r    ri   r   r  r  r  r  r  r   r   r  r  r  r   r   r  r  r
  r  r  r  re   re   r}  rh   r     s   
 
U






	

k'
=	
r   c                      rt  )_DefaultAsyncHttpxClientr'  r   ra   rb   c                   rv  rw  ry  r|  r}  re   rh   ri   +  r~  z!_DefaultAsyncHttpxClient.__init__r  r  re   re   r}  rh   r  *  r  r  c                   @  r  )AsyncHttpxClientWrapperra   rb   c                 C  s.   zt  |   W d S  ty   Y d S w rd   )asyncioget_running_loopcreate_taskacloser   r{   re   re   rh   r  ?  s
   zAsyncHttpxClientWrapper.__del__Nr  r  re   re   re   rh   r  >  r  r  c                	      s
  e Zd ZU ded< dZded< eedddddddd fdd Zdd!d"Zdd#d$Z	dd'd(Z
dd/d0Zdd3d4Zdd7d8Zed9dd:ddBdCZeddDddIdCZedddJddMdCZd9dddNddOdCZddQdRZddUdVZdWdXdd\d]ZddcddZei d9deddhdiZei djddkdiZei ddlddmdiZi d9ddnddodiZeddi d9dpddudvZeddi dwddxdvZeddi ddyddzdvZddi d9dd{dd|dvZdi d}dd~dZddi dwdddZdi d}dddZdi dddddZ  ZS )r   zhttpx.AsyncClientr   Nztype[AsyncStream[Any]] | Noner   r  r   r   r   r   r   ru   r   r   r   r  r   AsyncTransport | Noner   r   r   r  r  httpx.AsyncClient | Noner   r   r   r   ra   rb   c                  s  |d urt jdtdd |	d urtdnt}|d ur+t jdtdd |	d ur+td|d ur?t jdtdd |	d ur?tdt|sP|	rN|	jtkrN|	j}nt}|	d urct	|	t
jsctd	t|	 t j|||tt||||||
|d

 |	pt|tt||||dd| _d S )Nr  r  r  r  r  r  r  r  zTInvalid `http_client` argument; Expected an instance of `httpx.AsyncClient` but got )
r   r   r   r   r   r   r   r   r   r   Tr  )r  r  r  r   rH   r5   r   r  rB   r   r   AsyncClientr   r  r{  ri   r   r%   r  r   )rg   r   r   r   r   r   r   r   r   r  r   r   r}  re   rh   ri   K  sl   zAsyncAPIClient.__init__c                 C  r  rd   r  r{   re   re   rh   r     r  zAsyncAPIClient.is_closedc                   s   | j  I dH  dS )r  N)r   r"  r{   re   re   rh   r    s   zAsyncAPIClient.closerg   rV   c                   s   | S rd   re   r{   re   re   rh   
__aenter__  s   zAsyncAPIClient.__aenter__r  r  r  r  r  r  c                   s   |   I d H  d S rd   r  r  re   re   rh   	__aexit__  s   zAsyncAPIClient.__aexit__r   r;   c                   s   |S r  re   r  re   re   rh   r    s   zAsyncAPIClient._prepare_optionsr   r  c                   s   dS r  re   r:  re   re   rh   r       	zAsyncAPIClient._prepare_requestF)r9  ra  r5  r  r9  r  ra  r  r'   c                     d S rd   re   )rg   r5  r   r9  ra  re   re   rh   r        zAsyncAPIClient.request)ra  r  r  type[_AsyncStreamT]rZ   c                  r)  rd   re   rg   r5  r   r9  r  ra  re   re   rh   r     r(  )r  ra  type[_AsyncStreamT] | NoneResponseT | _AsyncStreamTc                  r)  rd   re   r,  re   re   rh   r     r(  )r9  r  ra  c                  s:   |d ur| | j| }nd}| j|||||dI d H S r  r  )rg   r5  r   r9  r  ra  r   re   re   rh   r     s   	r   c                  s  | j d u rtt I d H | _ t|}| ||}| |I d H }|| j| }| j||d}| 	|I d H  i }	| j
d urD| j
|	d< z| jj|fd|pR| j|di|	I d H }
W nl tjy } z*tjddd |dkr| j|||||d d	I d H W  Y d }~S 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 }~S td t|d|d }~ww td|j|j|
j|
j z|
  W nX tjy3 } zJtjddd |dkr| |jr|j I d H  | j||||jj||dI d H W  Y d }~S |jj s#|j! I d H  td | "|jd d }~ww | j#|||
|||dI d H S )Nr   r  r9  r  r  Tr  r   r  r  r  r  zHTTP Request: %s %s "%i %s"r  r  r  r  )$r   r4   get_platformr8   r8  r  rc  r   r*  r  rF  r   r  r;  r   r  rR   r  r  rN   r   rO   r   r^   r   r  r  r  rn  r   r"  r   r   areadr   r  )rg   r5  r   r9  r  r   r  ra  r   r'  r   rB  re   re   rh   r    s   
	


	
	

zAsyncAPIClient._requestrS  r  c          	        s~   | | j| }|dkrtd ntd| | |||}td|j| t|I d H  | j	|||d ||dI d H S r  )
rc  r   rR   r  rj  r   r^   anyior  r  r  re   re   rh   r  e  s   
zAsyncAPIClient._retry_requestr   r   r   r   r  c          
        s   |j jtdkrttt|| |||||dS t|p|}t	|rLt
|trLt
|ts7tdt d| td|}td||| t|||||dS |tjkrVtt|S t|| td|||||d}	t|j jtrrtt|	S |	 I d H S )Nrk  r  r  r  r  r'   r6  )r   r   r   rF   r   r'   rQ   r   r=  r>  r?  r?   r@   r   rA   r   r  ru   r  r  re   re   rh   r    sZ   




	
z AsyncAPIClient._process_responser   rs   r   r   AsyncPaginator[_T, AsyncPageT]c                 C  s   t | |||dS )N)r   r   r   r   )r   )rg   r   r   r   re   re   rh   r     s   z AsyncAPIClient._request_api_listr  r  r/   c                  r)  rd   re   r  re   re   rh   r     r*  zAsyncAPIClient.getr  c                  r)  rd   re   r  re   re   rh   r     r(  r  c                  r)  rd   re   r  re   re   rh   r     r(  r  c                  s0   t jdd|d|}| j||||dI d H S r  r  r  re   re   rh   r     s   	)r   r  r   r9  r   r  r  r  c                  r)  rd   re   )rg   r  r5  r   r  r   r9  re   re   rh   r    s   
zAsyncAPIClient.postr  c                  r)  rd   re   rg   r  r5  r   r  r   r9  r  re   re   rh   r       )r   r  r   r  c                  r)  rd   re   r3  re   re   rh   r    r4  )r   r  r   r9  r  c          	        s>   t jdd||t|I d H d|}| j||||dI d H S r  r;   r  r   r   )	rg   r  r5  r   r  r   r9  r  r  re   re   rh   r    s   r   c                  ,   t jdd||d|}| ||I d H S r  r  r  re   re   rh   r  )     zAsyncAPIClient.patchc                  s8   t jdd||t|I d H d|}| ||I d H S r	  r5  r  re   re   rh   r
  4  s   	zAsyncAPIClient.putc                  r6  r  r  r  re   re   rh   r  B  r7  zAsyncAPIClient.deleter   r  r   c                C  r  r  r  r  re   re   rh   r  M  r  zAsyncAPIClient.get_api_list)r   r   r   r   r   ru   r   r   r   r  r   r#  r   r   r   r  r  r$  r   r   r   r   ra   rb   r   r  r  r  r  r  )
r5  r  r   r;   r9  r  ra  r  ra   r'   )r5  r  r   r;   r9  r  r  r+  ra  r  ra   rZ   )r5  r  r   r;   r9  ru   r  r-  ra  r  ra   r.  )r5  r  r   r;   r9  ru   r  r-  r   r   ra   r.  )r   r;   r5  r  r   r   rS  r  r9  ru   r  r-  ra   r.  r  )r   rs   r   r   r   r;   ra   r2  r  )r  r   r5  r  r   r/   r9  r  r  r+  ra   rZ   )r  r   r5  r  r   r/   r9  ru   r  r-  ra   r.  )r  r   r5  r  r   r  r  r  r   r/   r9  r  ra   r'   )r  r   r5  r  r   r  r  r  r   r/   r9  r  r  r+  ra   rZ   )r  r   r5  r  r   r  r  r  r   r/   r9  ru   r  r-  ra   r.  r  r  )r  r   r   rs   r   r   r   r  r   r/   r   r   ra   r2  )rl   rm   rn   rp   r   rD   r    ri   r   r  r&  r'  r  r  r   r   r  r  r  r   r   r  r  r
  r  r  r  re   re   r}  rh   r   G  s   
 
U




	


h%
=	
r   )queryextra_headersextra_query
extra_bodyr   r   r   r8  Query | Noner9  Headers | Noner:  r;  r  r   r   r   'float | httpx.Timeout | None | NotGivenr   PostParser | NotGivenra   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&   r5   )r8  r9  r:  r;  r   r   r   r   re   re   rh   make_request_options[  s    
r@  c                   @  r  )r!  ra   ru   c                 C  rN  )NTre   r{   re   re   rh   __bool__  r}   zForceMultipartDict.__bool__Nr   )rl   rm   rn   rA  re   re   re   rh   r!    r  r!  c                   @  $   e Zd Zd
ddZedddZd	S )OtherPlatformnamer   ra   rb   c                 C  
   || _ d S rd   rD  rg   rD  re   re   rh   ri        
zOtherPlatform.__init__c                 C     d| j  S )NzOther:rF  r{   re   re   rh   __str__     zOtherPlatform.__str__NrD  r   ra   rb   rq  rl   rm   rn   ri   r   rJ  re   re   re   rh   rC        
rC  )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 )NrV  iphoneipadrT  darwinrO  windowsrQ  androidrU  linuxfreebsdrR  openbsdrS  rP  )rR  systemr   r   distroidrC  )r`  platform_name	distro_idre   re   rh   r/    s0   r/  )maxsizer   r   rR  Platform | NonerQ  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)r   r/  get_architectureget_python_runtimeget_python_version)r   rR  re   re   rh   rM    s   rM  c                   @  rB  )	OtherArchrD  r   ra   rb   c                 C  rE  rd   rF  rG  re   re   rh   ri     rH  zOtherArch.__init__c                 C  rI  )Nzother:rF  r{   re   re   rh   rJ    rK  zOtherArch.__str__NrL  rq  rM  re   re   re   rh   rk    rN  rk  )x32x64armarm64unknownc                   C      zt  W S  ty   Y dS w Nrp  )rR  python_implementationr   re   re   re   rh   ri    
   
ri  c                   C  rq  rr  )rR  python_versionr   re   re   re   rh   rj    rt  rj  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 )	Nrp  )ro  aarch64ro  rn  x86_64rm  l        rl  )rR  machiner   r   sysre  rk  )ry  re   re   rh   rh    s    
rh  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 re   )r   r"   )r   r2  r3  re   re   rh   
<dictcomp>  s     z#_merge_mappings.<locals>.<dictcomp>)rx   )r{  r}  mergedre   re   rh   r     s   r   )r8  r<  r9  r=  r:  r<  r;  r  r   r   r   r>  r   r?  ra   r/   )ra   rW  )r   r   rR  rf  ra   rQ  rq  )ra   rv  )r{  r|  r}  r|  ra   r~  )
__future__r   rz  r   r[  ro  rW  r  r=  r  rR  r  email.utilstypesr   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   typing_extensionsr   r   r   r1  r   ra  r   r   r   r    r   _qsr   _filesr   r   _typesr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   _utilsr2   r3   r4   r5   r6   r7   _compatr8   r9   _modelsr:   r;   r<   r=   	_responser>   r?   r@   rA   
_constantsrB   rC   rD   rE   rF   rG   rH   
_streamingrI   rJ   rK   rL   rM   rN   rO   rP   _legacy_responserQ   	getLoggerrl   rR   rp   rS   rU   rV   rW   rY   rZ   httpx._configr[   r  ImportErrorr\   rq   r   r   r   r  r%  r   r   r   ru  DefaultHttpxClientr  r   r  DefaultAsyncHttpxClientr  r   r@  r   r!  rC  rW  r/  rM  rk  rv  ri  rj  rh  r   re   re   re   rh   <module>   s    DP $	!0.'&   &    ,	    %	
*	


