a
    f                 
   @  s6  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rd d#lvmwZx n.zd d#lvmwZx W n eyy   e8d$ZxY n0 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?d@dAd@dBdCdDdEdFdGdHdIZG dJdK dKeedf ZG dLdM dMZeee!dN f ZdOdPdQdRZeJddSdTdUdVdWdXdYZG dZd[ d[Zeee!d\ f ZdTdPd]d^ZdTdPd_d`ZdadPdbdcZdddddedfdgdhZdS )i    )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                   @  sd   e Zd ZU dZded< ded< edddd	d
Zeddddd
Zeeddd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.
    zURL | NotGivenurlzQuery | NotGivenparamsr   Noner]   returnc                C  s   d S N selfr]   rc   rc   L/var/www/ai-form-bot/venv/lib/python3.9/site-packages/openai/_base_client.py__init__|   s    zPageInfo.__init__r#   )r^   ra   c                C  s   d S rb   rc   )re   r^   rc   rc   rf   rg      s    r]   r^   )r]   r^   ra   c                C  s   || _ || _d S rb   rh   )re   r]   r^   rc   rc   rf   rg      s    N)__name__
__module____qualname____doc____annotations__r   rg   r    rc   rc   rc   rf   r\   s   s   
	r\   c                   @  sx   e Zd ZU dZe Zded< e Zded< dddd	Zd
dddZ	ddddZ
dddddZdd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]_modelboolra   c                 C  s   |   }|sdS |  d uS )NF)_get_page_itemsnext_page_info)re   itemsrc   rc   rf   has_next_page   s    zBasePage.has_next_pagezOptional[PageInfo]c                 C  s   d S rb   rc   re   rc   rc   rf   ru          zBasePage.next_page_infozIterable[_T]c                 C  s   d S rb   rc   rx   rc   rc   rf   rt      s    zBasePage._get_page_itemsr   zhttpx.QueryParamsr`   c                 C  s   t tt| jj|jS rb   )httpxZQueryParamsr   r   ro   r^   mergerd   rc   rc   rf   _params_from_url   s    zBasePage._params_from_urlr\   )infora   c                 C  s   t | j}|  t|jts4i |j|j|_|S t|jtst| |j}|jj|d}t	|j|_t
||_|S tdd S )N)r^   zUnexpected PageInfo state)r8   ro   Z_strip_raw_response_header
isinstancer^   r&   r]   r|   	copy_withdictstr
ValueError)re   r}   optionsr^   r]   rc   rc   rf   _info_to_options   s    

zBasePage._info_to_optionsN)ri   rj   rk   rl   r   ro   rm   rq   rw   ru   rt   r|   r   rc   rc   rc   rf   rn      s   
rn   c                   @  s`   e Zd ZU e Zded< dddddddZd	d
ddZdddddZ	dddddZ
dS )BaseSyncPageSyncAPIClient_clientrp   r;   r_   )clientmodelr   ra   c                 C  s   || _ || _|| _d S rb   rq   r   ro   )re   r   r   r   rc   rc   rf   _set_private_attributes   s    z$BaseSyncPage._set_private_attributeszIterator[_T]rs   c                 c  s&   |   D ]}| D ]
}|V  qqd S rb   
iter_pagesrt   re   pageitemrc   rc   rf   __iter__   s    zBaseSyncPage.__iter__rS   zIterator[SyncPageT]re   ra   c                 c  s&   | }|V  |  r| }qd S qd S rb   rw   get_next_pagere   r   rc   rc   rf   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   ru   RuntimeErrorr   r   _request_api_listrq   	__class__re   r}   r   rc   rc   rf   r      s    
zBaseSyncPage.get_next_pageN)ri   rj   rk   pydanticr   r   rm   r   r   r   r   rc   rc   rc   rf   r      s
   
	r   c                   @  sL   e Zd ZddddddddZd	d
ddZdd
ddZdd
ddZdS )AsyncPaginatorAsyncAPIClientr;   Type[AsyncPageT]rp   r_   )r   r   page_clsr   ra   c                 C  s   || _ || _|| _|| _d S rb   )rq   r   ro   	_page_cls)re   r   r   r   r   rc   rc   rf   rg      s    zAsyncPaginator.__init__z Generator[Any, None, AsyncPageT]rs   c                 C  s   |    S rb   )	_get_page	__await__rx   rc   rc   rf   r      s    zAsyncPaginator.__await__rU   c                   s4   ddd fdd}| j _ j j j I d H S )NrU   respra   c                   s   | j  j j jd | S )N)r   r   r   )r   rq   ro   r   r   rx   rc   rf   _parser  s    z)AsyncPaginator._get_page.<locals>._parser)ro   post_parserr   requestr   )re   r   rc   rx   rf   r     s    zAsyncPaginator._get_pageAsyncIterator[_T]c                 C s.   t t| I d H }|2 z3 d H W }|V  q6 d S rb   )r   rU   r   rc   rc   rf   	__aiter__  s    zAsyncPaginator.__aiter__N)ri   rj   rk   rg   r   r   r   rc   rc   rc   rf   r      s   r   c                   @  s`   e Zd ZU e Zded< dddddddZd	d
ddZdddddZ	dddddZ
dS )BaseAsyncPager   r   rp   r;   r_   )r   r   r   ra   c                 C  s   || _ || _|| _d S rb   r   )re   r   r   r   rc   rc   rf   r     s    z%BaseAsyncPage._set_private_attributesr   rs   c                 C s0   |   2 z 3 d H W }| D ]
}|V  qq6 d S rb   r   r   rc   rc   rf   r   &  s    zBaseAsyncPage.__aiter__rU   zAsyncIterator[AsyncPageT]r   c                 C s,   | }|V  |  r"| I d H }qd S qd S rb   r   r   rc   rc   rf   r   +  s
    zBaseAsyncPage.iter_pagesc                   s:   |   }|std| |}| jj| j| j|dI d H S r   r   r   rc   rc   rf   r   4  s    
zBaseAsyncPage.get_next_pageN)ri   rj   rk   r   r   r   rm   r   r   r   r   rc   rc   rc   rf   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ddddddddddd Zddd!d"d#Zd$d%d&d'd(Z	dd)d$d*d+d,d-Z
d.d/dd0d1d2Zd/d3d4d5d6Zddd!d7d8Zd9d:d;d<Zd/d=d4d>d?Zd@dAdBdCdDZdEd/dEdFdGdHZd=ddIdJdKZd)dEd$dLdMdNdOZedPd:dQdRZedSd:dTdUZedVd:dWdXZedYd:dZd[ZedAd:d\d]Zd^d^dd_d`daZedd:dbdcZedd:dddeZejdfdd!dgdeZdhd:didjZdxdkdldmdndoZdydd/dkdpdqdrdsZ d$dd&dtduZ!dd:dvdwZ"dS )z
BaseClientr   r   r   _versionr   	_base_urlintmax_retrieszUnion[float, Timeout, None]timeoutzhttpx.Limits_limitsProxiesTypes | None_proxiesz!Transport | AsyncTransport | None
_transportrr   _strict_response_validation
str | None_idempotency_headerNztype[_DefaultStreamT] | None_default_stream_cls)r   r   custom_headerscustom_query	str | URLzfloat | Timeout | NoneMapping[str, str] | NoneMapping[str, object] | Noner_   )versionbase_urlr   r   r   limits	transportproxiesr   r   ra   c       
         C  sn   || _ | t|| _|| _|| _|| _|| _|| _|	p:i | _	|
pDi | _
|| _d | _d | _|d u rjt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)re   r   r   r   r   r   r   r   r   r   r   rc   rc   rf   rg   P  s     

zBaseClient.__init__r`   c                 C  s"   |j dr|S |j|j d dS )N   /raw_path)r   endswithr   rd   rc   rc   rf   r   p  s    z"BaseClient._enforce_trailing_slashhttpx.ResponserM   )responsera   c                 C  s   |j r|jsd }d|j }nR|j }|}z t|}d|j d| }W n" tyn   |phd|j }Y n0 | j|||dS )NzError code: z - )bodyr   )		is_closedZis_stream_consumedstatus_codetextstripjsonloads	Exception_make_status_error)re   r   r   err_msgZerr_textrc   rc   rf    _make_status_error_from_responseu  s    

z+BaseClient._make_status_error_from_responseobjectz_exceptions.APIStatusError)r   r   r   ra   c                C  s
   t  d S rb   )NotImplementedError)re   r   r   r   rc   rc   rf   r     s    zBaseClient._make_status_errorOptional[int]r;   )remaining_retriesr   ra   c                 C  s   |d ur|S | | jS rb   )get_max_retriesr   )re   r   r   rc   rc   rf   _remaining_retries  s    zBaseClient._remaining_retrieszhttpx.Headersr   ra   c                 C  sb   |j pi }t| j|}| || t|}| j}|r^|j dkr^||vr^|j	pX| 
 ||< |S )Nget)headers_merge_mappingsdefault_headers_validate_headersrz   r$   r   methodloweridempotency_key_idempotency_key)re   r   r   Zheaders_dictr   Zidempotency_headerrc   rc   rf   _build_headers  s    

zBaseClient._build_headersc                 C  s4   t |}|jr0| 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   )re   r]   Z	merge_urlZmerge_raw_pathrc   rc   rf   _prepare_url  s
    zBaseClient._prepare_urlzSSEDecoder | SSEBytesDecoderrs   c                 C  s   t  S rb   )rJ   rx   rc   rc   rf   _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rt|d u rJtt	|j}n*t
|r`t||j}ntdt| d| |}t| j|j}|d}|j}|d ur|drd|vr|d |rt|std	t| d
| ||d< |sttt }| jjf |t|jtr| jn|j|j|  |j!|rN| j"#tt$t%t&f |nd ||d|S )NzRequest options: %sT)Z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   files)'rR   isEnabledForloggingDEBUGdebugr9   	json_data
extra_jsonr   r!   r7   r   r   typer   default_queryr^   r   r   
startswithpopr2   r   _serialize_multipartformr0   ForceMultipartDictr   Zbuild_requestr~   r   r&   r   r   r]   qs	stringifyr   r   r   )re   r   kwargsr   r   r^   content_typer   rc   rc   rf   _build_request  sH    




"zBaseClient._build_requestzMapping[object, object]zdict[str, object])r   ra   c                 C  s^   | j j|dd}i }|D ]@\}}||}|s8|||< qt|rL|| q||g||< q|S )NZbrackets)Zarray_format)r  Zstringify_itemsr   r3   append)re   r   rv   Z
serializedkeyvalueexistingrc   rc   rf   r     s    

z#BaseClient._serialize_multipartformtype[ResponseT])cast_tor   ra   c                 C  sD   t |js|S t|j}|tt}t |r@||_ttt |S |S rb   )	r5   r   r   r   rG   r    r   r   r'   )re   r  r   r   Zoverride_cast_torc   rc   rf   _maybe_override_cast_to  s    

z"BaseClient._maybe_override_cast_tor   ra   c                 C  s   |j tdkS )Nstream)r   r   rF   re   r   rc   rc   rf   _should_stream_response_body,  s    z'BaseClient._should_stream_response_bodyr'   )r   r  r   ra   c             
   C  s   |d u rt td S |tu r$t t|S zXt|rPt|trPt t|j||dW S | jrjt tt	||dW S t tt
||dW S  tjy } zt||d|W Y d }~n
d }~0 0 d S )N)r   r   )type_r	  )r   r   )r   r'   r   inspectisclass
issubclassr1   buildr   r<   r=   r   ZValidationErrorrP   )re   r   r  r   errrc   rc   rf   _process_response_data/  s    

z!BaseClient._process_response_datar   c                 C  s   t  S rb   r   rx   rc   rc   rf   r  G  s    zBaseClient.qszhttpx.Auth | Nonec                 C  s   d S rb   rc   rx   rc   rc   rf   custom_authK  s    zBaseClient.custom_authzdict[str, str]c                 C  s   i S rb   rc   rx   rc   rc   rf   auth_headersO  s    zBaseClient.auth_headerszdict[str, str | Omit]c                 C  s"   dd| j d|  | j| jS )Nzapplication/json)Acceptr   z
User-Agent)
user_agentplatform_headersr  r   rx   rc   rc   rf   r   S  s    zBaseClient.default_headersc                 C  s
   i | j S rb   )r   rx   rc   rc   rf   r   ^  s    zBaseClient.default_queryr$   )r   r   ra   c                 C  s   dS )zaValidate the given default headers and custom headers.

        Does nothing by default.
        Nrc   )re   r   r   rc   rc   rf   r   d  s    	zBaseClient._validate_headersc                 C  s   | j j d| j S )Nz/Python )r   ri   r   rx   rc   rc   rf   r  o  s    zBaseClient.user_agentc                 C  s   | j S rb   )r   rx   rc   rc   rf   r   s  s    zBaseClient.base_urlz	URL | strc                 C  s"   |  t|tr|nt|| _d S rb   )r   r~   r   r   rd   rc   rc   rf   r   w  s    Dict[str, str]c                 C  s   t | j| jdS )N)platform)r  r   r   rx   rc   rc   rf   r  {  s    zBaseClient.platform_headerszOptional[httpx.Headers]zfloat | None)response_headersra   c              	   C  s   |du rdS z| dd}t|d W S  ttfy<   Y n0 | d}z
t|W S  ttfyh   Y n0 tj|}|du rd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)re   r   Zretry_ms_headerZretry_headerretry_date_tuple
retry_daterc   rc   rf   _parse_retry_after_header  s"    

z$BaseClient._parse_retry_after_headerr!  )r   r   r   ra   c           
      C  s|   | | j}| |}|d ur:d|  k r2dkr:n n|S || }tttd| t}ddt   }|| }	|	dkrx|	S dS )Nr   <   g       @r   g      ?)r   r   r)  minrE   powrC   r   )
re   r   r   r   r   retry_afterZ
nb_retriesZsleep_secondsZjitterr   rc   rc   rf   _calculate_retry_timeout  s    
 z#BaseClient._calculate_retry_timeoutc                 C  s   |j d}|dkr"td dS |dkr8td dS |jdkrTtd	|j dS |jd
krptd	|j dS |jdkrtd	|j dS |jdkrt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   )re   r   Zshould_retry_headerrc   rc   rf   _should_retry  s*    






zBaseClient._should_retryc                 C  s   dt   S )Nzstainless-python-retry-)uuiduuid4rx   rc   rc   rf   r     s    zBaseClient._idempotency_key)N)N)#ri   rj   rk   rm   r   rD   rB   rg   r   r   r   r   r   r   r   r  r   r  r  r  propertyr  r  r  r   r   r   r  r   setterr  r)  r.  r1  r   rc   rc   rc   rf   r   C  sf   
& 	D
& #r   c                      s$   e Zd Zddd fddZ  ZS )_DefaultHttpxClientr   r_   r  ra   c                   s:   | dt | dt | dd t jf i | d S Nr   r   follow_redirectsT
setdefaultrB   rH   superrg   re   r  r   rc   rf   rg     s    z_DefaultHttpxClient.__init__ri   rj   rk   rg   __classcell__rc   rc   r>  rf   r6    s   r6  c                   @  s   e Zd ZddddZdS )SyncHttpxClientWrapperr_   rs   c                 C  s$   z|    W n ty   Y n0 d S rb   )closer   rx   rc   rc   rf   __del__  s    zSyncHttpxClientWrapper.__del__Nri   rj   rk   rC  rc   rc   rc   rf   rA    s   rA  c                      sf  e Zd ZU ded< dZded< eedddddddddd	d
ddddddddd fddZddddZddddZ	dddddZ
dd d!dd"d#d$Zd%d%d&d'd(Zd)dd*d+d,Zed~d-d%d.d/d0d1d2d3d4Zedd5d6d-d%d.d7d8d9d:d4Zedd5dd;d-d%d.dd<d=d2d>d4Zdd5dd;d-d%d.dd?d=d2d@d4Zd-d%dAdd?d=d2dBdCZd%d-d	dDdd?d=dEdFdGZdHdId-d%dJddKd	d8dLdMdNZdOdPd%dQdRdSdTZei d5dUdd-dVd7d8dWdXdYZei dZdd-dVd/d[d1d\d]dYZei dd^dd-dVdd?d=d\d_dYZi d5dd`dd-dVdd?d=d\dadYZedi dd5dbdd-dcdVddd7d8dedfdgZedi ddhdd-dcdVddd/d[d1didjdgZedi dddkdd-dcdVdddd?d=didldgZdi dd5ddmdd-dcdVdddd?d=didndgZdi dodd-dcdVd8dpdqdrZddi dsdd-dcdddVd8dtdudvZdi dodd-dcdVd8dpdwdxZdi dydzddOdPdcdVddQd{d|d}Z  ZS )r   zhttpx.Clientr   Nztype[Stream[Any]] | Noner   r   r   r   r   r   http_clientr   r   r   r   r   !float | Timeout | None | NotGivenzTransport | Noner   Limits | Nonezhttpx.Client | Noner   r   rr   r_   )r   r   r   r   r   r   r   rF  r   r   r   ra   c                  s  |d ur*t jdtdd |d ur.tdnt}|d urVt jdtdd |d urVtd|d ur~t jdtdd |d ur~tdt|s|r|jtkr|j}nt}|d urt	|t
jstd	t| t j||tt||||||
|	|d

 |p
t|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   r9  )warningswarnDeprecationWarningr   rH   r5   r   HTTPX_DEFAULT_TIMEOUTrB   r~   rz   Clientr   r   r<  rg   r   r%   rA  r   )re   r   r   r   r   r   r   r   rF  r   r   r   r>  rc   rf   rg     sj    
zSyncAPIClient.__init__rs   c                 C  s   | j jS rb   r   r   rx   rc   rc   rf   r   V  s    zSyncAPIClient.is_closedc                 C  s   t | dr| j  dS )`Close the underlying HTTPX client.

        The client will *not* be usable after this.
        r   N)hasattrr   rB  rx   rc   rc   rf   rB  Y  s    
zSyncAPIClient.closerV   r   c                 C  s   | S rb   rc   rx   rc   rc   rf   	__enter__c  s    zSyncAPIClient.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Noneexc_typeexcexc_tbra   c                 C  s   |    d S rb   rB  re   ra  rb  rc  rc   rc   rf   __exit__f  s    zSyncAPIClient.__exit__r;   r   c                 C  s   |S z#Hook for mutating the given optionsrc   re   r   rc   rc   rf   _prepare_optionsn  s    zSyncAPIClient._prepare_optionsr   r  c                 C  s   dS 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.
        Nrc   r  rc   rc   rf   _prepare_requestu  s    	zSyncAPIClient._prepare_requestType[ResponseT]r   Literal[True]zType[_StreamT]rY   )r  r   r   r  
stream_clsra   c                C  s   d S rb   rc   re   r  r   r   r  rn  rc   rc   rf   r     s    	zSyncAPIClient.requestFr  Literal[False]r'   )r  r   r   r  ra   c                C  s   d S rb   rc   )re   r  r   r   r  rc   rc   rf   r     s    r  rn  zType[_StreamT] | NonezResponseT | _StreamTc                C  s   d S rb   rc   ro  rc   rc   rf   r     s    	ztype[_StreamT] | Nonec                C  s   | j |||||dS N)r  r   r  rn  r   _requestro  rc   rc   rf   r     s    	
int | Nonec                C  s  t |}| ||}| |}| ||}| |}| | i }	| jd urV| j|	d< td|j	|j
 z(| jj|fd|p| j|di|	}
W n tjy } zZtjddd |dkr| j|||||d d	W  Y d }~S td
 t|d|W Y d }~n~d }~0  tyz } z\tjddd |dkrP| j|||||d d	W  Y d }~S td t|d|W Y d }~n
d }~0 0 td|j	|j
|
j|
j|
j td|
jd z|
  W n tjyd } ztjddd |dkr$| |jr$|j  | j||||jj||dW  Y d }~S |jjs8|j  td | |jd W Y d }~n
d }~0 0 | j |||
|||!| j"| dS )NauthzSending HTTP Request: %s %sr  r   "Encountered httpx.TimeoutExceptionTexc_infor   r  rn  r   Raising timeout errorEncountered ExceptionRaising connection errorzHTTP Response: %s %s "%i %s" %szrequest_id: %szx-request-id!Encountered httpx.HTTPStatusErrorrr  Re-raising status errorr  r   r   r  rn  retries_taken)#r8   r  ri  r   r  rk  r  rR   r   r   r]   r   sendr  rz   TimeoutException_retry_requestrN   r   rO   r   reason_phraser   r   raise_for_statusHTTPStatusErrorr1  r   rB  r   readr   _process_responser   r   )re   r  r   r   r  rn  input_optionsretriesr   r  r   r  rc   rc   rf   ru    s    





	
 
	
"



$zSyncAPIClient._requesthttpx.Headers | Noner   r  r   r   r  rn  ra   c          	      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   r  rn  )rR   r   r.  r}   r]   r&  sleepru  	re   r   r  r   r   r  rn  	remainingr   rc   rc   rf   r    s    

zSyncAPIClient._retry_requestr   r  r   1type[Stream[Any]] | type[AsyncStream[Any]] | Noner  r   r   r  rn  r  ra   c          
      C  s   |j jtdkr.ttt|| |||||dS t|p8|}t	|rt
|trt
|tsltdt d| td|}tt||| t|||||dS |tjkrtt|S t|| td|||||d}	t|j jtrtt|	S |	 S )Nr/  rawr   r  r  rn  r   r  !API Response types must subclass ; Received type[BaseAPIResponse[Any]]r  )r   r   r   rF   r   r'   rQ   r   r  r  r  r?   r>   r   rA   rz   Responserr   parse
re   r  r   r   r  rn  r  originZresponse_clsZapi_responserc   rc   rf   r  ;  sX    




	
zSyncAPIClient._process_responsezType[object]zType[SyncPageT]rS   r   r   r   ra   c                   s.   ddd fdd}|_ j|ddS )NrS   r   c                   s   | j  d | S )N)r   r   r   )r   r   r   r   re   rc   rf   r   ~  s    z0SyncAPIClient._request_api_list.<locals>._parserFrp  )r   r   )re   r   r   r   r   rc   r  rf   r   x  s    zSyncAPIClient._request_api_listr   r  r/   pathr  r   r  ra   c                C  s   d S rb   rc   re   r  r  r   r  rc   rc   rf   r     s    zSyncAPIClient.getr   ztype[_StreamT]r  r  r   r  rn  ra   c                C  s   d S rb   rc   re   r  r  r   r  rn  rc   rc   rf   r     s    	r   rn  c                C  s   d S rb   rc   r  rc   rc   rf   r     s    	r   r  rn  c                C  s.   t jf d|d|}tt| j||||dS Nr   )r   r]   rr  )r;   	constructr   r'   r   re   r  r  r   r  rn  optsrc   rc   rf   r     s    	)r   r   r   r  Body | NoneRequestFiles | None)r  r  r   r   r   r  ra   c                C  s   d S rb   rc   )re   r  r  r   r   r   r  rc   rc   rf   post  s    
zSyncAPIClient.post)r   r   r   )r  r  r   r   r   r  rn  ra   c                C  s   d S rb   rc   re   r  r  r   r   r   r  rn  rc   rc   rf   r    s    )r   r   r   rn  c                C  s   d S rb   rc   r  rc   rc   rf   r    s    )r   r   r   r  rn  c          	      C  s6   t jf d||t|d|}tt| j||||dS Nr  r   r]   r   r   rr  )r;   r  r   r   r'   r   )	re   r  r  r   r   r   r  rn  r  rc   rc   rf   r    s    r   r   r  r  r   r   ra   c                C  s$   t jf d||d|}| ||S Npatchr   r]   r   r;   r  r   re   r  r  r   r   r  rc   rc   rf   r    s    zSyncAPIClient.patchr   r   r   r  r  r   r   r   ra   c                C  s*   t jf d||t|d|}| ||S Nputr  )r;   r  r   r   re   r  r  r   r   r   r  rc   rc   rf   r    s    	zSyncAPIClient.putc                C  s$   t jf d||d|}| ||S Ndeleter  r  r  rc   rc   rf   r    s    zSyncAPIClient.deleter   r   r   r   r  r   r   r   r   r   ra   c                C  s&   t jf |||d|}| |||S Nr  r;   r  r   re   r  r   r   r   r   r   r  rc   rc   rf   get_api_list  s    
zSyncAPIClient.get_api_list)N)N)N)N)ri   rj   rk   rm   r   rD   r    rg   r   rB  r\  rf  ri  rk  r   r   ru  r  r  r   r   r  r  r  r  r  r@  rc   rc   r>  rf   r     s   
,U
 
 	  k'=	
 "" r   c                      s$   e Zd Zddd fddZ  ZS )_DefaultAsyncHttpxClientr   r_   r7  c                   s:   | dt | dt | dd t jf i | d S r8  r:  r=  r>  rc   rf   rg   !  s    z!_DefaultAsyncHttpxClient.__init__r?  rc   rc   r>  rf   r     s   r  c                   @  s   e Zd ZddddZdS )AsyncHttpxClientWrapperr_   rs   c                 C  s.   zt  |   W n ty(   Y n0 d S rb   )asyncioZget_running_loopZcreate_taskacloser   rx   rc   rc   rf   rC  5  s    zAsyncHttpxClientWrapper.__del__NrD  rc   rc   rc   rf   r  4  s   r  c                      sh  e Zd ZU ded< dZded< eedddddddddd	d
ddddddddd fddZd	dddZddddZ	dddddZ
dd d!dd"d#d$Zd%d%d&d'd(Zd)dd*d+d,Zed-dd.d/d%d0d1d2d3d4d5Zedd6d/d%d7d8d1d9d:d;d5Zeddd<d/d%d	d=d1d>d:d?d5Zd-ddd@d/d%d	d=d1d>d:dAd5Zd/d%d	d=dBd>d:dCdDZd%d/d
dEd	d=d>dFdGdHZdIdJd/d%dKd	dLd
d2dMdNdOZdPdQd%dRdSdTdUZei d-dVdd/dWd0d2dXdYdZZei d[dd/dWd7d8d9d\d]dZZei dd^dd/dWd	d=d>d\d_dZZi d-dd`dd/dWd	d=d>d\dadZZeddi d-dbdd/dcdddWd0d2dedfdgZeddi dhdd/dcdddWd7d8d9didjdgZeddi ddkdd/dcdddWd	d=d>didldgZddi d-ddmdd/dcdddWd	d=d>didndgZdi dodd/dcdWd2dpdqdrZddi dhdd/dcdddWd2dsdtduZdi dodd/dcdWd2dpdvdwZdi dxdyddPdQdcdWddRdzd{d|Z  ZS )}r   zhttpx.AsyncClientr   Nztype[AsyncStream[Any]] | Noner   rE  r   r   rr   r   rG  zAsyncTransport | Noner   rH  zhttpx.AsyncClient | Noner   r   r_   )r   r   r   r   r   r   r   r   rF  r   r   ra   c                  s  |d ur*t jdtdd |	d ur.tdnt}|d urVt jdtdd |	d urVtd|d ur~t jdtdd |	d ur~tdt|s|	r|	jtkr|	j}nt}|	d urt	|	t
jstd	t|	 t j|||tt||||||
|d

 |	p
t|tt||||dd| _d S )NrI  rJ  rK  rN  rO  rP  rQ  rR  zTInvalid `http_client` argument; Expected an instance of `httpx.AsyncClient` but got )
r   r   r   r   r   r   r   r   r   r   TrS  )rT  rU  rV  r   rH   r5   r   rW  rB   r~   rz   AsyncClientr   r   r<  rg   r   r%   r  r   )re   r   r   r   r   r   r   r   r   rF  r   r   r>  rc   rf   rg   A  sj    
zAsyncAPIClient.__init__rs   c                 C  s   | j jS rb   rY  rx   rc   rc   rf   r     s    zAsyncAPIClient.is_closedc                   s   | j  I dH  dS )rZ  N)r   r  rx   rc   rc   rf   rB    s    zAsyncAPIClient.closerV   r   c                   s   | S rb   rc   rx   rc   rc   rf   
__aenter__  s    zAsyncAPIClient.__aenter__r]  r^  r_  r`  c                   s   |   I d H  d S rb   rd  re  rc   rc   rf   	__aexit__  s    zAsyncAPIClient.__aexit__r;   r   c                   s   |S rg  rc   rh  rc   rc   rf   ri    s    zAsyncAPIClient._prepare_optionsr   r  c                   s   dS rj  rc   r  rc   rc   rf   rk    s    	zAsyncAPIClient._prepare_requestF)r  r   rl  rq  r   r'   )r  r   r  r   ra   c                  s   d S rb   rc   )re   r  r   r  r   rc   rc   rf   r     s    zAsyncAPIClient.request)r   rm  ztype[_AsyncStreamT]rZ   )r  r   r  rn  r   ra   c                  s   d S rb   rc   re   r  r   r  rn  r   rc   rc   rf   r     s    	)rn  r   ztype[_AsyncStreamT] | NonezResponseT | _AsyncStreamTc                  s   d S rb   rc   r  rc   rc   rf   r     s    	)r  rn  r   c                  s   | j |||||dI d H S rs  rt  r  rc   rc   rf   r     s    	rv  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|p| j|di|	I d H }
W n 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|W Y d }~nd }~0  ty } zbtjd
dd |dkrx| j|||||d dI d H W  Y d }~S td t|d|W Y d }~n
d }~0 0 td|j|j|
j|
j z|
  W n tjy } zt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sZ|j  I d H  td | !|jd W Y d }~n
d }~0 0 | j"|||
|||#| j$| dI d H S )Nrw  r  rx  ry  Trz  r   r|  r}  r~  r  zHTTP Request: %s %s "%i %s"r  rr  r  r  )%r   r4   get_platformr8   r  ri  r   r  rk  r  r   r  r  rz   r  rR   r   r  rN   r   rO   r   r]   r   r  r  r  r1  r   r  r   r   Zareadr   r  r   r   )re   r  r   r  rn  r   r  r  r   r  r   r  rc   rc   rf   ru    s    	



	
 
	
"

$zAsyncAPIClient._requestr  r  c          	        sp   |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  ru  r  rc   rc   rf   r  V  s    
zAsyncAPIClient._retry_requestr   r  r   r  r  c          
        s   |j jtdkr.ttt|| |||||dS t|p8|}t	|rt
|trt
|tsltdt d| td|}td||| t|||||dS |tjkrtt|S t|| td|||||d}	t|j jtrtt|	S |	 I d H S )Nr/  r  r  r  r  r'   r  )r   r   r   rF   r   r'   rQ   r   r  r  r  r?   r@   r   rA   rz   r  rr   r  r  rc   rc   rf   r  s  sX    




	
z AsyncAPIClient._process_responserp   r   zAsyncPaginator[_T, AsyncPageT]r  c                 C  s   t | |||dS )N)r   r   r   r   )r   )re   r   r   r   rc   rc   rf   r     s    z AsyncAPIClient._request_api_listr  r/   r  c                  s   d S rb   rc   r  rc   rc   rf   r     s    zAsyncAPIClient.getr  r  c                  s   d S rb   rc   r  rc   rc   rf   r     s    	r  c                  s   d S rb   rc   r  rc   rc   rf   r     s    	r  c                  s.   t jf d|d|}| j||||dI d H S r  r  r  rc   rc   rf   r     s    	)r   r   r   r  r  r  )r  r  r   r   r   r  ra   c                  s   d S rb   rc   )re   r  r  r   r   r   r  rc   rc   rf   r    s    
zAsyncAPIClient.postr  )r  r  r   r   r   r  rn  ra   c                  s   d S rb   rc   re   r  r  r   r   r   r  rn  rc   rc   rf   r    s    )r   r   r   rn  c                  s   d S rb   rc   r  rc   rc   rf   r    s    )r   r   r   r  rn  c          	        s<   t jf d||t|I d H d|}| j||||dI d H S r  r;   r  r   r   )	re   r  r  r   r   r   r  rn  r  rc   rc   rf   r  
  s    r  r  c                  s*   t jf d||d|}| ||I d H S r  r  r  rc   rc   rf   r    s    zAsyncAPIClient.patchr  c                  s6   t jf d||t|I d H d|}| ||I d H S r  r  r  rc   rc   rf   r  %  s    	zAsyncAPIClient.putc                  s*   t jf d||d|}| ||I d H S r  r  r  rc   rc   rf   r  3  s    zAsyncAPIClient.deleter   r  r  c                C  s&   t jf |||d|}| |||S r  r  r  rc   rc   rf   r  >  s    
zAsyncAPIClient.get_api_list)ri   rj   rk   rm   r   rD   r    rg   r   rB  r  r  ri  rk  r   r   ru  r  r  r   r   r  r  r  r  r  r@  rc   rc   r>  rf   r   =  s   
,U	
h%=	
 "" r   )queryextra_headersextra_query
extra_bodyr   r   r   zQuery | NonezHeaders | Noner  r   z'float | httpx.Timeout | None | NotGivenzPostParser | NotGivenr/   )r  r  r  r  r   r   r   ra   c                 C  s   i }|dur||d< |dur*t t||d< | dur:| |d< |durZi |di ||d< t|tsl||d< |dur|||d< t|r||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   )r  r  r  r  r   r   r   r   rc   rc   rf   make_request_optionsL  s     
r  c                   @  s   e Zd ZddddZdS )r  rr   rs   c                 C  s   dS )NTrc   rx   rc   rc   rf   __bool__r  s    zForceMultipartDict.__bool__N)ri   rj   rk   r  rc   rc   rc   rf   r  q  s   r  c                   @  s.   e Zd ZdddddZeddddZd	S )
OtherPlatformr   r_   namera   c                 C  s
   || _ d S rb   r  re   r  rc   rc   rf   rg   w  s    zOtherPlatform.__init__rs   c                 C  s   d| j  S )NzOther:r  rx   rc   rc   rf   __str__z  s    zOtherPlatform.__str__Nri   rj   rk   rg   r   r  rc   rc   rc   rf   r  v  s   r  )MacOSLinuxWindowsFreeBSDOpenBSDiOSAndroidUnknownPlatformrs   c                  C  s   zt   } t    }W n ty0   Y dS 0 d|v sBd|v rFdS | dkrRdS | dkr^dS d	|v rjd
S | dkrt }|dkrdS |dkrdS dS |rt|S dS )Nr  iphoneZipadr  darwinr  windowsr  Zandroidr  linuxfreebsdr  openbsdr  r  )r  systemr   r   distroidr  )r  Zplatform_name	distro_idrc   rc   rf   r    s.    r  )maxsizer   zPlatform | Noner  )r   r  ra   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   r  rc   rc   rf   r    s    r  c                   @  s.   e Zd ZdddddZeddddZd	S )
	OtherArchr   r_   r  c                 C  s
   || _ d S rb   r  r  rc   rc   rf   rg     s    zOtherArch.__init__rs   c                 C  s   d| j  S )Nzother:r  rx   rc   rc   rf   r    s    zOtherArch.__str__Nr  rc   rc   rc   rf   r    s   r  )x32x64armarm64unknownc                   C  s$   z
t  W S  ty   Y dS 0 d S Nr  )r  python_implementationr   rc   rc   rc   rf   r    s    
r  c                   C  s$   z
t  W S  ty   Y dS 0 d S r   )r  python_versionr   rc   rc   rc   rf   r    s    
r  Archc                  C  sh   zt   } W n ty$   Y dS 0 | dv r2dS | dkr>dS | dkrJdS tjdkrXdS | rdt| S dS )	Nr  )r  aarch64r  r  x86_64r  l        r  )r  machiner   r   sysr  r  )r  rc   rc   rf   r    s    
r  zMapping[_T_co, Union[_T, Omit]]zDict[_T_co, _T])obj1obj2ra   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 rc   )r~   r"   ).0r  r	  rc   rc   rf   
<dictcomp>  ry   z#_merge_mappings.<locals>.<dictcomp>)rv   )r  r	  Zmergedrc   rc   rf   r     s    r   )
__future__r   r  r   r&  r2  r"  r  r  r   r  rT  email.utilstypesr   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   typing_extensionsr   r   r   r  rz   r  r   r   r   r    r   Z_qsr   _filesr   r   _typesr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   Z_utilsr2   r3   r4   r5   r6   r7   _compatr8   r9   Z_modelsr:   r;   r<   r=   	_responser>   r?   r@   rA   
_constantsrB   rC   rD   rE   rF   rG   rH   Z
_streamingrI   rJ   rK   rL   rM   rN   rO   rP   Z_legacy_responserQ   	getLoggerri   rR   rm   rS   rU   rV   rW   rY   rZ   Zhttpx._configr[   rW  ImportErrorr\   rn   r   r   r   rX  r  r   r   r   r6  ZDefaultHttpxClientrA  r   r  ZDefaultAsyncHttpxClientr  r   r  r   r  r  r  r  r  r  r  r  r  r  r   rc   rc   rc   rf   <module>   s   DP $	!0.'&   !    '	     %	*	