o
    {$f                    @  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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.m/Z/m0Z0 d	dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC d	dlDmEZEmFZFmGZGmHZHmIZImJZJ d	dlKmLZLmMZM 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rZd d#lumvZw nzd d#lumvZw W n exyp   e7d$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Zere$jZneZG d;d< d<eZG d=d> d>ee$jece f Zddddde2e2d?dqdOdPZG dQdR dReedf ZG dSdT dTZeee dU f ZdrdWdXZeId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   I/var/www/html/dev/env/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\   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]_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   3  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
dd:d;Zdd=d>Zdd?d@ZddBdCZddEdFZddJdKZddNdOZddQdRZddTdUZeddWdXZeddZd[Zedd]d^Zedd`daZeddbdcZddfdgZeddhdiZeddjdkZejddmdkZddodpZdddtdu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   O  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   o  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_responset  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_errorremaining_retriesOptional[int]r   r;   c                 C  s   |d ur|S | | jS rd   )get_max_retriesr   )rg   r   r   re   re   rh   _remaining_retries  s   zBaseClient._remaining_retrieshttpx.Headersc                 C  sb   |j pi }t| j|}| || t|}| j}|r/|j dkr/||vr/|j	p,| 
 ||< |S )Nget)headers_merge_mappingsdefault_headers_validate_headersr   r$   r   methodloweridempotency_key_idempotency_key)rg   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| |}t| j|j}|d}|j}|d ur|drd|vr`|d |rwt|sptd	t| d
| ||d< |sttt }| jjd|t|jtr| jn|j|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`Content-Typezmultipart/form-databoundaryzGExpected query input to be a dictionary for multipart requests but got z	 instead.data)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   build_requestr   r   r&   r   r  r^   qs	stringifyr   r   r   )rg   r   kwargsr  r   r`   content_typer  re   re   rh   _build_request  sH   




 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   r-  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_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
issubclassr1   buildr   r<   r=   r   ValidationErrorrP   )rg   r  r-  r   errre   re   rh   _process_response_data.  s   

z!BaseClient._process_response_datar   c                 C  r	  rd   r   r{   re   re   rh   r  F     zBaseClient.qshttpx.Auth | Nonec                 C  rc   rd   re   r{   re   re   rh   custom_authJ     zBaseClient.custom_authdict[str, str]c                 C  s   i S rd   re   r{   re   re   rh   auth_headersN  r?  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_headersrA  r   r{   re   re   rh   r   R  s   zBaseClient.default_headersc                 C  s
   i | j S rd   )r   r{   re   re   rh   r  ]  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   c     	zBaseClient._validate_headersc                 C  s   | j j d| j S )Nz/Python )r   rl   r   r{   re   re   rh   rD  n  s   zBaseClient.user_agentc                 C  s   | j S rd   )r   r{   re   re   rh   r   r  r<  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   v  s   "Dict[str, str]c                 C  s   t | j| jdS )N)platform)rE  r   r   r{   re   re   rh   rE  z  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   rK  retry_ms_headerretry_headerretry_date_tuple
retry_datere   re   rh   _parse_retry_after_header  s&   

z$BaseClient._parse_retry_after_headerrN  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      ?)r   r   rX  minrE   powrC   r   )
rg   r   r   rK  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   )r^   r   ra   r   )ra   r  )r   r;   ra   r  )r  r#  ra   r$  )r-  r.  r   r;   ra   r.  )r   r  ra   ru   )r  r   r-  r.  r   r   ra   r'   )ra   r   )ra   r=  )ra   r@  )ra   rB  )ra   r$  )r   r$   r   r$   ra   rb   ra   r   )ra   r   )r^   rH  ra   rb   )ra   rI  rd   )rK  rL  ra   rM  )r   r   r   r;   rK  rL  ra   rN  )r   r   ra   ru   )#rl   rm   rn   rp   r   rD   rB   ri   r   r   r   r   r  r  r
  r"  r  r0  r3  r;  propertyr  r>  rA  r   r  r   rD  r   setterrE  rX  r`  rd  r   re   re   re   rh   r   B  sh   
 
 


	




D





&
#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   rs  rh   rk        rk  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   rz        rz  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ddcddZei dDdeddhdiZei djddldiZei ddmddndiZi dDddoddpdiZedi ddDdqddvdwZedi ddxddydwZedi dddzdd{dwZdi ddDdd|dd}dw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   rn  )warningswarnDeprecationWarningr   rH   r5   r   HTTPX_DEFAULT_TIMEOUTrB   r   r   Clientr   r  rq  ri   r   r%   rz  r   )rg   r   r   r   r   r   r   r   r  r   r   r   rs  re   rh   ri      sl   zSyncAPIClient.__init__c                 C     | j jS rd   r   r   r{   re   re   rh   r   U     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{  X  s   
zSyncAPIClient.closerg   rV   c                 C  s   | S rd   re   r{   re   re   rh   	__enter__b  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__e  s   zSyncAPIClient.__exit__r   r;   c                 C  s   |S z#Hook for mutating the given optionsre   rg   r   re   re   rh   _prepare_optionsm  rj   zSyncAPIClient._prepare_optionsr   r  c                 C  rF  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   r2  re   re   rh   _prepare_requestt  rG  zSyncAPIClient._prepare_requestr-  Type[ResponseT]r   r   r1  Literal[True]
stream_clsType[_StreamT]rY   c                C  rc   rd   re   rg   r-  r   r   r1  r  re   re   rh   r     rG  zSyncAPIClient.requestFr1  Literal[False]r'   c                C  rc   rd   re   )rg   r-  r   r   r1  re   re   rh   r        r1  r  Type[_StreamT] | NoneResponseT | _StreamTc                C  rc   rd   re   r  re   re   rh   r     rG  type[_StreamT] | Nonec                C  s   | j |||||dS N)r-  r   r1  r  r   _requestr  re   re   rh   r     s   	
int | Nonec                C  s^  t |}| ||}| |}| ||}| |}| | i }	| jd ur+| j|	d< td|j	|j
 z| jj|fd|pB| j|di|	}
W nf tjy| } z'tjddd |dkrm| 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 |||
|||!| j"| dS )NauthzSending HTTP Request: %s %sr1  r   "Encountered httpx.TimeoutExceptionTexc_infor   r1  r  rK  Raising timeout errorEncountered ExceptionRaising connection errorzHTTP Response: %s %s "%i %s" %szrequest_id: %szx-request-id!Encountered httpx.HTTPStatusErrorr  Re-raising status errorr-  r   r   r1  r  retries_taken)#r8   r0  r  r   r"  r  r>  rR   r  r   r^   r   sendr3  r   TimeoutException_retry_requestrN   r   rO   r   reason_phraser   r   raise_for_statusHTTPStatusErrorrd  r   r{  r   readr   _process_responser   r   )rg   r-  r   r   r1  r  input_optionsretriesr   r   r   r:  re   re   rh   r    s   






	
	



zSyncAPIClient._requestrK  httpx.Headers | Nonec          	      C  sd   |d }|dkrt d nt d| | |||}t d|j| t| | j|||||dS Nr   z1 retry leftz%i retries leftz$Retrying request to %s in %f seconds)r   r-  r   r1  r  )rR   r  r`  r   r^   rS  sleepr  	rg   r   r-  r   rK  r1  r  	remainingr   re   re   rh   r    s   

zSyncAPIClient._retry_requestr   r  r   r   1type[Stream[Any]] | type[AsyncStream[Any]] | Noner  c          
      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 )Nra  rawr   r-  r1  r  r   r  !API Response types must subclass ; Received type[BaseAPIResponse[Any]]r.  )r   r   r   rF   r   r'   rQ   r   r5  r6  r7  r?   r>   r   rA   r   Responseru   parse
rg   r-  r   r   r1  r  r  originresponse_clsapi_responsere   re   rh   r  :  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   w  s   zSyncAPIClient._request_api_listr   r1  pathr/   c                C  rc   rd   re   rg   r  r-  r   r1  re   re   rh   r     r  zSyncAPIClient.getr   type[_StreamT]c                C  rc   rd   re   rg   r  r-  r   r1  r  re   re   rh   r     rG  r   r  c                C  rc   rd   re   r  re   re   rh   r     rG  r   r1  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  r-  r   r1  r  optsre   re   rh   r     s   	)r   r   r  r1  r   Body | Noner  RequestFiles | Nonec                C  rc   rd   re   )rg   r  r-  r   r   r  r1  re   re   rh   post  s   
zSyncAPIClient.post)r   r   r  c                C  rc   rd   re   rg   r  r-  r   r   r  r1  r  re   re   rh   r       )r   r   r  r  c                C  rc   rd   re   r  re   re   rh   r    r  )r   r   r  r1  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  r-  r   r   r  r1  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  r-  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  r-  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   )r-  r  r   r;   r   r   r1  r  r  r  ra   rY   )
r-  r  r   r;   r   r   r1  r  ra   r'   )r-  r  r   r;   r   r   r1  ru   r  r  ra   r  )r-  r  r   r;   r   r   r1  ru   r  r  ra   r  )r-  r  r   r;   r   r  r1  ru   r  r  ra   r  )r   r;   r-  r  r   r   rK  r  r1  ru   r  r  ra   r  r-  r  r   r;   r   r   r1  ru   r  r  r  r   ra   r'   )r   r  r   r  r   r;   ra   rS   
r  r   r-  r  r   r/   r1  r  ra   r'   )r  r   r-  r  r   r/   r1  r  r  r  ra   rY   )r  r   r-  r  r   r/   r1  ru   r  r  ra   r  )r  r   r-  r  r   r  r   r/   r  r  r1  r  ra   r'   )r  r   r-  r  r   r  r   r/   r  r  r1  r  r  r  ra   rY   )r  r   r-  r  r   r  r   r/   r  r  r1  ru   r  r  ra   r  
r  r   r-  r  r   r  r   r/   ra   r'   r  r   r-  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  rw  re   re   rs  rh   r     s   
 
U






	

k'
=	
r   c                      rj  )_DefaultAsyncHttpxClientr   r   ra   rb   c                   rl  rm  ro  rr  rs  re   rh   ri      rt  z!_DefaultAsyncHttpxClient.__init__ru  rv  re   re   rs  rh   r    rx  r  c                   @  ry  )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|  4  s
   zAsyncHttpxClientWrapper.__del__Nr}  r~  re   re   re   rh   r  3  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ddddeZei d9dfddidjZei dkddldjZei ddmddndjZi d9ddoddpdjZeddi d9dqddvdwZeddi dxddydwZeddi ddzdd{dwZddi d9dd|dd}dwZdi d~dddZddi dx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  rq  ri   r   r%   r  r   )rg   r   r   r   r   r   r   r   r   r  r   r   rs  re   rh   ri   @  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   r2  re   re   rh   r       	zAsyncAPIClient._prepare_requestF)r1  r   r-  r  r1  r  r   r   r'   c                     d S rd   re   )rg   r-  r   r1  r   re   re   rh   r        zAsyncAPIClient.request)r   r  r  type[_AsyncStreamT]rZ   c                  r"  rd   re   rg   r-  r   r1  r  r   re   re   rh   r     r!  )r  r   type[_AsyncStreamT] | NoneResponseT | _AsyncStreamTc                  r"  rd   re   r%  re   re   rh   r     r!  )r1  r  r   c                  s   | j |||||dI d H S r  r  r%  re   re   rh   r     s   	r  c                  s  | j d u rtt I d H | _ t|}| ||}| |I d H }| ||}| |}| |I d H  i }	| j	d ur@| j	|	d< z| j
j|fd|pN| 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y/ } 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"|||
|||#| j$| dI d H S )Nr  r1  r  r  Tr  r   r  r  r  r  zHTTP Request: %s %s "%i %s"r  r  r  r  )%r   r4   get_platformr8   r0  r  r   r"  r  r>  r   r  r3  r   r  rR   r  r  rN   r   rO   r   r^   r   r  r  r  rd  r   r  r   r   areadr   r  r   r   )rg   r-  r   r1  r  r   r  r  r   r   r   r:  re   re   rh   r    s   
	



	
	

zAsyncAPIClient._requestrK  r  c          	        sr   |d }|dkrt d nt d| | |||}t d|j| t|I d H  | j|||||dI d H S r  )rR   r  r`  r   r^   anyior  r  r  re   re   rh   r  U  s   
zAsyncAPIClient._retry_requestr   r  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 )Nra  r  r  r  r  r'   r.  )r   r   r   rF   r   r'   rQ   r   r5  r6  r7  r?   r@   r   rA   r   r  ru   r  r  re   re   rh   r  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   r1  r   r  r  r  c                  r"  rd   re   )rg   r  r-  r   r  r   r1  re   re   rh   r    s   
zAsyncAPIClient.postr  c                  r"  rd   re   rg   r  r-  r   r  r   r1  r  re   re   rh   r       )r   r  r   r  c                  r"  rd   re   r,  re   re   rh   r    r-  )r   r  r   r1  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  r-  r   r  r   r1  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  r.  r  re   re   rh   r  $  s   	zAsyncAPIClient.putc                  r/  r  r  r  re   re   rh   r  2  r0  zAsyncAPIClient.deleter   r  r   c                C  r  r	  r
  r  re   re   rh   r  =  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  )
r-  r  r   r;   r1  r  r   r   ra   r'   )r-  r  r   r;   r1  r  r  r$  r   r   ra   rZ   )r-  r  r   r;   r1  ru   r  r&  r   r   ra   r'  )r-  r  r   r;   r1  ru   r  r&  r   r  ra   r'  )r   r;   r-  r  r   r   rK  r  r1  ru   r  r&  ra   r'  r  )r   rs   r   r   r   r;   ra   r+  r  )r  r   r-  r  r   r/   r1  r  r  r$  ra   rZ   )r  r   r-  r  r   r/   r1  ru   r  r&  ra   r'  )r  r   r-  r  r   r  r  r  r   r/   r1  r  ra   r'   )r  r   r-  r  r   r  r  r  r   r/   r1  r  r  r$  ra   rZ   )r  r   r-  r  r   r  r  r  r   r/   r1  ru   r  r&  ra   r'  r  r  )r  r   r   rs   r   r   r   r  r   r/   r   r   ra   r+  )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  rw  re   re   rs  rh   r   <  s   
 
U




	


h%
=	
r   )queryextra_headersextra_query
extra_bodyr   r   r   r1  Query | Noner2  Headers | Noner3  r4  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   )r1  r2  r3  r4  r   r   r   r   re   re   rh   make_request_optionsK  s    
r9  c                   @  ry  )r  ra   ru   c                 C  rF  )NTre   r{   re   re   rh   __bool__q  r}   zForceMultipartDict.__bool__Nr   )rl   rm   rn   r:  re   re   re   rh   r  p  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   r=  rg   r=  re   re   rh   ri   v     
zOtherPlatform.__init__c                 C     d| j  S )NzOther:r?  r{   re   re   rh   __str__y     zOtherPlatform.__str__Nr=  r   ra   rb   rg  rl   rm   rn   ri   r   rC  re   re   re   rh   r<  u      
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 )NrO  iphoneipadrM  darwinrH  windowsrJ  androidrN  linuxfreebsdrK  openbsdrL  rI  )rJ  systemr   r   distroidr<  )rY  platform_name	distro_idre   re   rh   r(    s0   r(  )maxsizer   r   rJ  Platform | NonerI  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   rJ  re   re   rh   rE    s   rE  c                   @  r;  )	OtherArchr=  r   ra   rb   c                 C  r>  rd   r?  r@  re   re   rh   ri     rA  zOtherArch.__init__c                 C  rB  )Nzother:r?  r{   re   re   rh   rC    rD  zOtherArch.__str__NrE  rg  rF  re   re   re   rh   rd    rG  rd  )x32x64armarm64unknownc                   C      zt  W S  ty   Y dS w Nri  )rJ  python_implementationr   re   re   re   rh   rb    
   
rb  c                   C  rj  rk  )rJ  python_versionr   re   re   re   rh   rc    rm  rc  Archc                  C  sr   zt  \} }t   }W n
 ty   Y dS w |dv rdS |dkr%dS |dkr+dS | dkr1dS |r7t|S dS )	Nri  )rh  aarch64rh  rg  x86_64rf  32bitre  )rJ  architecturemachiner   r   rd  )python_bitness_rt  re   re   rh   ra    s"   ra  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"   ).0r*  r+  re   re   rh   
<dictcomp>  s     z#_merge_mappings.<locals>.<dictcomp>)rx   )rw  ry  mergedre   re   rh   r     s   r   )r1  r5  r2  r6  r3  r5  r4  r  r   r   r   r7  r   r8  ra   r/   )ra   rP  )r   r   rJ  r_  ra   rI  rg  )ra   ro  )rw  rx  ry  rx  ra   rz  )
__future__r   r   rS  re  rO  r  r5  r  rJ  r  email.utilstypesr   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   typing_extensionsr   r   r   r*  r   rZ  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   rk  DefaultHttpxClientrz  r   r  DefaultAsyncHttpxClientr  r   r9  r   r  r<  rP  r(  rE  rd  ro  rb  rc  ra  r   re   re   re   rh   <module>   s    DP $	!0.'&   !    '	    %	
*	


