o
    "chA	                    @  sV  U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlm Z m!Z!m"Z" d dl#Z#d dl$Z$d dl%Z%d dl&Z&d dl$m'Z' d dl&m(Z( d	d
l)m*Z* d	dl+m,Z, d	dl-m.Z.m/Z/ d	dl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? d	dl@mAZAmBZBmCZCmDZDmEZEmFZFmGZG d	dlHmIZImJZJmKZK d	dlLmMZMmNZNmOZOmPZP d	dlQmRZRmSZSmTZTmUZU d	dlVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z] d	dl^m_Z_m`Z`maZambZb d	dl*mcZcmdZdmeZemfZf d	dlgmhZh e	iejZkdeld< ekmeA  edddZnedddZoedZpeddd Zqed!e_e dZred"eae dZser^d d#ltmuZu euZvnzd d#ltmuZv W n ewyt   e6d$ZvY nw G d%d& d&ZxG d'd( d(eMeep ZyG d)d* d*eyep eep ZzG d+d, d,eepeof Z{G d-d. d.eyep eep Z|ed/ee$j}e$j~f dZed0ee_e eae f dZG d1d2 d2eeef ZG d3d4 d4e$j}Zere$j}ZneZG d5d6 d6eZG d7d8 d8ee$j}e_e f ZG d9d: d:e$j~Zzd dlZW n ewy   G d;d< d<e$j~ZY n
w G d=d< d<ejZer3e$j~Z	 e$j~ZneZeZG d>d? d?eZG d@dA dAee$j~eae f Zddddde1e1dBdtdRdSZG dTdU dUeedf ZG dVdW dWZeee dX f ZdudZd[ZeFdd\dvdbdcZG ddde deZeee df f ZdwdgdhZdwdidjZdxdldmZdydrdsZdS )z    )annotationsN)TracebackType)random)TYPE_CHECKINGAnyDictTypeUnionGenericMappingTypeVarIterableIteratorOptional	GeneratorAsyncIteratorcastoverload)Literaloverride
get_origin)URL)PrivateAttr   )_exceptionsQuerystring)to_httpx_filesasync_to_httpx_files)	NOT_GIVENBodyOmitQueryHeadersTimeoutNotGiven	ResponseT
AnyMapping
PostParserRequestFilesHttpxSendArgsRequestOptionsHttpxRequestFilesModelBuilderProtocol)SensitiveHeadersFilteris_dictis_listasyncifyis_given	lru_cache
is_mapping)PYDANTIC_V2
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                   @  sv   e Zd ZU dZded< ded< ded< edddZedddZedddZeeeddddZedddZ	dS )PageInfozStores the necessary information to build the request to retrieve the next page.

    Either `url` or `params` must be set.
    URL | NotGivenurlQuery | NotGivenparamsBody | NotGivenjsonr   returnNonec                C     d S N selfr\   re   re   Q/home/air/goalskill/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    c                C  rc   rd   re   )rg   r`   re   re   rh   ri      rj   r\   r`   r^   c                C  s   || _ || _|| _d S rd   rk   )rg   r\   r`   r^   re   re   rh   ri      s   
strc                 C  sN   | j r| jj d| j  dS | jr| jj d| j dS | jj d| j dS )Nz(url=)z(json=z(params=)r\   	__class____name__r`   r^   rg   re   re   rh   __repr__   s
   zPageInfo.__repr__N)r\   r   ra   rb   )r^   r"   ra   rb   )r`   r    ra   rb   )r\   r[   r`   r_   r^   r]   ra   rb   ra   rl   )
ro   
__module____qualname____doc____annotations__r   ri   r   r   rq   re   re   re   rh   rZ   t   s"   
 	rZ   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
    r9   _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   rp   re   re   rh   r}      s    zBasePage.next_page_infoIterable[_T]c                 C  rc   rd   re   rp   re   re   rh   r|         zBasePage._get_page_itemsr\   r   httpx.QueryParamsc                 C  s   t tt| jj|jS rd   )httpxQueryParamsr   r   rx   r^   mergerf   re   re   rh   _params_from_url   s   zBasePage._params_from_urlinforZ   c                 C  s   t | j}|  t|jtsi |j|j|_|S t|jts:| |j}|jj|d}t	|j|_t
||_|S t|jtsht|jsItd|jsTi |j|_|S t|js]tdi |j|j|_|S td)N)r^   z*Pagination is only supported with mappingszUnexpected PageInfo state)r6   rx   _strip_raw_response_header
isinstancer^   r%   r\   r   	copy_withdictrl   r`   r4   	TypeError	json_data
ValueError)rg   r   optionsr^   r\   re   re   rh   _info_to_options   s,   



zBasePage._info_to_optionsNra   r{   )ra   r   )ra   r   )r\   r   ra   r   )r   rZ   ra   r9   )ro   rs   rt   ru   r   rx   rv   rz   r   r}   r|   r   r   re   re   re   rh   rw      s   
 



rw   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modelry   r   r9   ra   rb   c                 C  s0   t rt| dd d u ri | _|| _|| _|| _d S N__pydantic_private__r5   getattrr   rz   r   rx   )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_pagesr|   rg   pageitemre   re   rh   __iter__   s   zBaseSyncPage.__iter__rg   rQ   Iterator[SyncPageT]c                 c  s&    | }	 |V  |  r| }nd S qrd   r   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   r}   RuntimeErrorr   r   _request_api_listrz   rn   rg   r   r   re   re   rh   r   
  s   
zBaseSyncPage.get_next_pageN)r   r   r   ry   r   r9   ra   rb   )ra   r   )rg   rQ   ra   r   )rg   rQ   ra   rQ   )ro   rs   rt   pydanticr   r   rv   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   r9   page_clsType[AsyncPageT]r   ry   ra   rb   c                 C  s   || _ || _|| _|| _d S rd   )rz   r   rx   	_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__rp   re   re   rh   r   "  s   zAsyncPaginator.__await__rS   c                   s0   d fdd}| j _ j j j I d H S )NresprS   ra   c                   s   | j  j j jd | S )N)r   r   r   )r   rz   rx   r   r   rp   re   rh   _parser&  s   z)AsyncPaginator._get_page.<locals>._parser)r   rS   ra   rS   )rx   post_parserr   requestr   )rg   r   re   rp   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   rS   r   re   re   rh   	__aiter__2  s   zAsyncPaginator.__aiter__N)
r   r   r   r9   r   r   r   ry   ra   rb   )ra   r   )ra   rS   ra   r   )ro   rs   rt   ri   r   r   r   re   re   re   rh   r     s
    


r   c                   @  r   )BaseAsyncPager   r   r   ry   r   r   r9   ra   rb   c                 C  s0   t rt| dd d u ri | _|| _|| _|| _d S r   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   L  s   zBaseAsyncPage.__aiter__rg   rS   AsyncIterator[AsyncPageT]c                 C s,   | }	 |V  |  r| I d H }nd S qrd   r   r   re   re   rh   r   Q  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   Z  s   
zBaseAsyncPage.get_next_pageN)r   ry   r   r   r   r9   ra   rb   r   )rg   rS   ra   r   )rg   rS   ra   rS   )ro   rs   rt   r   r   r   rv   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Zded< eeddddtddZdud d!Zdvd%d&Z	dwd+d,Z
d-d.dxd3d4Zdyd5d6Zdzd8d9Zd-d.d{d;d<Zd|d@dAZd}dDdEZd~dGdHZddJdKZeddMdNZeddPdQZeddSdTZeddVdWZeddXdYZdd\d]Zedd^d_Zedd`daZejddcdaZddedfZdddjdkZ	dddndoZddpdqZ ddrdsZ!dS )
BaseClientr   r   rl   _versionr   	_base_urlintmax_retrieszUnion[float, Timeout, None]timeoutr{   _strict_response_validation
str | None_idempotency_headerNztype[_DefaultStreamT] | None_default_stream_cls)r   r   custom_headerscustom_queryversionbase_url	str | URLfloat | Timeout | Noner   Mapping[str, str] | Noner   Mapping[str, object] | Nonera   rb   c                C  s\   || _ | t|| _|| _|| _|pi | _|pi | _|| _d | _	d | _
|d u r,t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   _custom_headers_custom_queryr   r   	_platformr   )rg   r   r   r   r   r   r   r   re   re   rh   ri   s  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     s   z"BaseClient._enforce_trailing_slashresponsehttpx.ResponserK   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stripr`   loads	Exception_make_status_error)rg   r   r   err_msgerr_textre   re   rh    _make_status_error_from_response  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   r9   r   httpx.Headersc          	      C  s   |j pi }t| j|}| || t|}| j}|r'|jr'||vr'|j||< dd |D }d|vr8t||d< d|vrZt	|j
trE| j
n|j
}t	|trP|j}|d urZt||d< |S )Nc                 S  s   g | ]}|  qS re   )lower).0headerre   re   rh   
<listcomp>  s    z-BaseClient._build_headers.<locals>.<listcomp>zx-stainless-retry-countzx-stainless-read-timeout)headers_merge_mappingsdefault_headers_validate_headersr   r#   r   idempotency_keyrl   r   r   r%   r$   read)	rg   r   r   r   headers_dictr   idempotency_headerlower_custom_headersr   re   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   )rH   rp   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 t)|r|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   methodr\   r^   r`   filesre   )*rP   isEnabledForloggingDEBUGdebugr7   r   
extra_jsonr   r    r4   r   r   typer   default_queryr^   getr  
startswithpopr/   r   _serialize_multipartformr,   ForceMultipartDictr  r\   hostreplacer   build_requestr   r   r%   r  qs	stringifyr   rl   r   r2   )
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  r0   append)rg   r  r~   
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   )	r2   r   r   r  rE   r   r   r   r&   )rg   r2  r   r   override_cast_tore   re   rh   _maybe_override_cast_toD  s   

z"BaseClient._maybe_override_cast_tor   c                 C  s   |j tdkS )Nstream)r   r  rD   rg   r   re   re   rh   _should_stream_response_bodyU  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_r0  )r   r   )r   r&   r   inspectisclass
issubclassr-   buildr   r:   r;   r   ValidationErrorrN   )rg   r  r2  r   errre   re   rh   _process_response_dataX  s   

z!BaseClient._process_response_datar   c                 C  r  rd   r   rp   re   re   rh   r"  p     zBaseClient.qshttpx.Auth | Nonec                 C  rc   rd   re   rp   re   re   rh   custom_autht     zBaseClient.custom_authdict[str, str]c                 C  s   i S rd   re   rp   re   re   rh   auth_headersx  rD  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_headersrF  r   rp   re   re   rh   r   |  s   zBaseClient.default_headersc                 C  s
   i | j S rd   )r   rp   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        	zBaseClient._validate_headersc                 C  s   | j j d| j S )Nz/Python )rn   ro   r   rp   re   re   rh   rI    s   zBaseClient.user_agentc                 C  s   | j S rd   )r   rp   re   re   rh   r     rA  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)rJ  r   r   rp   re   re   rh   rJ    s   zBaseClient.platform_headersresponse_headersOptional[httpx.Headers]float | Nonec              	   C  s   |du rdS z| dd}t|d W S  ttfy   Y nw | d}zt|W S  ttfy4   Y nw tj|}|du rAdS tj|}t|t  S )a@  Returns a float of the number of seconds (not milliseconds) to wait after retrying, or None if unspecified.

        About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After
        See also  https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After#syntax
        Nzretry-after-ms  zretry-after)	r  floatr   r   emailutilsparsedate_tz	mktime_tztime)rg   rP  retry_ms_headerretry_headerretry_date_tuple
retry_datere   re   rh   _parse_retry_after_header  s&   

z$BaseClient._parse_retry_after_headerremaining_retriesrT  c           
      C  s~   | | j}| |}|d urd|  k rdkr|S  t|| d}tttd| t}ddt   }|| }	|	dkr=|	S dS )Nr   <   rS  g       @r   g      ?)get_max_retriesr   r^  minrC   powrA   r   )
rg   r_  r   rP  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  rP   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uuid4rp   re   re   rh   _idempotency_key  s   zBaseClient._idempotency_key)r   rl   r   r   r   r{   r   r   r   r   r   r   r   r   ra   rb   )r\   r   ra   r   )r   r   ra   rK   )r   rl   r   r   r   r   ra   r   )r   r9   r   r   ra   r   )r\   rl   ra   r   )ra   r  )r   r9   r   r   ra   r  )r  r(  ra   r)  )r2  r3  r   r9   ra   r3  )r   r  ra   r{   )r  r   r2  r3  r   r   ra   r&   )ra   r   )ra   rB  )ra   rE  )ra   rG  )ra   r)  )r   r#   r   r#   ra   rb   rr   )ra   r   )r\   rM  ra   rb   )ra   rN  rd   )rP  rQ  ra   rR  )r_  r   r   r9   rP  rQ  ra   rT  )r   r   ra   r{   )"ro   rs   rt   rv   r   rB   r@   ri   r   r   r   r   r  r  r'  r  r5  r8  r@  propertyr"  rC  rF  r   r  r   rI  r   setterrJ  r^  rh  rl  ro  re   re   re   rh   r   i  sb   
 


	


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   limitsfollow_redirectsTre   
setdefaultr@   rF   superri   rg   r$  rn   re   rh   ri        z_DefaultHttpxClient.__init__r$  r   ra   rb   ro   rs   rt   ri   __classcell__re   re   r|  rh   rs        rs  c                   @     e Zd ZdddZdS )SyncHttpxClientWrapperra   rb   c                 C  s.   | j rd S z|   W d S  ty   Y d S w rd   )r   closer   rp   re   re   rh   __del__   s   zSyncHttpxClientWrapper.__del__Nra   rb   ro   rs   rt   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 fddZdddZdddZ	dd!d"Z
dd)d*Zdd-d.Zdd1d2Zedd:d;Zed<d=dd@d;Zed<ddAddDd;Zd<ddAddFd;ZddJdKZdLdMddPdQZddWdXZei d<dYdd\d]Zei d^dd`d]Zei ddaddbd]Zi d<ddcdddd]Zedi dd<deddjdkZedi ddlddmdkZedi dddnddodkZdi dd<ddpddqdkZdi drddsdtZddi duddvdwZdi drddxdyZdi dzd{dd}d~Z  ZS )r   zhttpx.Clientr   Nztype[Stream[Any]] | Noner   r   r   http_clientr   r   r   rl   r   r   r   r   r   !float | Timeout | None | NotGivenr  httpx.Client | Noner   r   r   r   r   r{   ra   rb   c          	   	     s   t |s|r|jtkr|j}nt}|d ur$t|tjs$tdt| t	 j
|tt||||||d |p>t|tt|d| _d S )NzOInvalid `http_client` argument; Expected an instance of `httpx.Client` but got )r   r   r   r   r   r   r   r   r   )r2   r   HTTPX_DEFAULT_TIMEOUTr@   r   r   Clientr   r  rz  ri   r   r$   r  r   )	rg   r   r   r   r   r  r   r   r   r|  re   rh   ri   .  s*   
zSyncAPIClient.__init__c                 C     | j jS rd   r   r   rp   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  rp   re   re   rh   r  _  s   
zSyncAPIClient.closerg   rT   c                 C  s   | S rd   re   rp   re   re   rh   	__enter__i  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__l  s   zSyncAPIClient.__exit__r   r9   c                 C  s   |S z#Hook for mutating the given optionsre   rg   r   re   re   rh   _prepare_optionst  rj   zSyncAPIClient._prepare_optionsr   r  c                 C  rK  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   r7  re   re   rh   _prepare_request{  rL  zSyncAPIClient._prepare_requestr2  Type[ResponseT]r6  Literal[True]
stream_clsType[_StreamT]rW   c                C  rc   rd   re   rg   r2  r   r6  r  re   re   rh   r        zSyncAPIClient.requestFr6  Literal[False]r&   c                C  rc   rd   re   rg   r2  r   r6  re   re   rh   r     s   r6  r  Type[_StreamT] | NoneResponseT | _StreamTc                C  rc   rd   re   r  re   re   rh   r     r  type[_StreamT] | Nonec                C  s  |  ||}t|}|jd u r|j dkr|  |_d }|| j}d}t|d D ]}t|}| 	|}|| }	| j
||d}
| |
 i }| jd urS| j|d< |jd ur]|j|d< td|
j|
j d }z| jj|
fd|pv| j|
d	i|}W nb tjy } z%tjd
dd |	dkr| j|||d d W Y d }~q+td t|
d	|d }~w ty } z%tjddd |	dkr| j|||d d W Y d }~q+td t|
d	|d }~ww td|
j|
j|j|j|j td|jd z|  W nK tjyI } z=tjddd |	dkr/|  |j!r/|j!"  | j||||d W Y d }~q+|j!j#s9|j!$  td | %|j!d d }~ww  |d usTJ d| j&||||||dS Nr  r   r   r   authrw  zSending HTTP Request: %s %sr6  )r   z"Encountered httpx.TimeoutExceptionT)exc_info)r   r   r   r   zRaising timeout errorzEncountered ExceptionzRaising connection errorzHTTP Response: %s %s "%i %s" %szrequest_id: %szx-request-idz!Encountered httpx.HTTPStatusErrorzRe-raising status errorz0could not resolve response (should never happen))r2  r   r   r6  r  r   )'r5  r6   r   r  r   ro  ra  r   ranger  r'  r  rC  rw  rP   r  r\   r   sendr8  r   TimeoutException_sleep_for_retryrL   r   rM   r   reason_phraser   r  raise_for_statusHTTPStatusErrorrl  r   r  r   r   r   _process_responserg   r2  r   r6  r  input_optionsr   r   r   r_  r   r$  r?  re   re   rh   r     s   













r   r   httpx.Response | Nonec                C  s^   || }|dkrt d nt d| | |||r|jnd }t d|j| t| d S Nr   z1 retry leftz%i retries leftz$Retrying request to %s in %f seconds)rP   r  rh  r   r   r\   rY  sleeprg   r   r   r   r   r_  r   re   re   rh   r    s   zSyncAPIClient._sleep_for_retryr   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	|rVt
|trV|r2t|j jtrVt
|tsAtdt d| td|}tt||| t|||||dS |tjkr`tt|S t|| td|||||d}	t|j jtr|tt|	S |	 S )Nri  rawr   r2  r6  r  r   r   !API Response types must subclass ; Received type[BaseAPIResponse[Any]]r3  )r   r   r  rD   r   r&   rO   r   r:  r;  r<  r=   r{   r<   r   r?   r   Responseparse
rg   r2  r   r   r6  r  r   originresponse_clsapi_responsere   re   rh   r  )  sf   




	
zSyncAPIClient._process_responser   Type[object]r   Type[SyncPageT]rQ   c                   s(   d fdd}|_ j|ddS )	Nr   rQ   ra   c                   s   | j  d | S )N)r   r   r   )r   r   r   r   rg   re   rh   r   s  s   z0SyncAPIClient._request_api_list.<locals>._parserFr  )r   rQ   ra   rQ   )r   r   )rg   r   r   r   r   re   r  rh   r   m  s   zSyncAPIClient._request_api_listr   r6  pathr+   c                C  rc   rd   re   rg   r  r2  r   r6  re   re   rh   r    r  zSyncAPIClient.getr   type[_StreamT]c                C  rc   rd   re   rg   r  r2  r   r6  r  re   re   rh   r    rL  r   r  c                C  rc   rd   re   r  re   re   rh   r    rL  r   r6  r  c                C  s.   t jdd|d|}tt| j||||dS Nr  )r  r\   r  re   )r9   	constructr   r&   r   rg   r  r2  r   r6  r  optsre   re   rh   r    s   	)r   r   r  r6  r   Body | Noner  RequestFiles | Nonec                C  rc   rd   re   )rg   r  r2  r   r   r  r6  re   re   rh   post  s   
zSyncAPIClient.post)r   r   r  c                C  rc   rd   re   rg   r  r2  r   r   r  r6  r  re   re   rh   r       )r   r   r  r  c                C  rc   rd   re   r  re   re   rh   r    r  )r   r   r  r6  r  c          	      C  s6   t jdd||t|d|}tt| j||||dS Nr  r  r\   r   r  r  re   )r9   r  r   r   r&   r   )	rg   r  r2  r   r   r  r6  r  r  re   re   rh   r    s   r   r   c                C  $   t jdd||d|}| ||S Npatchr  r\   r   re   r9   r  r   rg   r  r2  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   )r9   r  r   r   rg   r  r2  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   r9   r  r   rg   r  r   r   r   r   r  r  re   re   rh   get_api_list     
zSyncAPIClient.get_api_list)r   rl   r   r   r   r   r   r  r  r  r   r   r   r   r   r{   ra   rb   r   r  rg   rT   ra   rT   r  r  r  r  r  r  ra   rb   r   r9   ra   r9   r   r  ra   rb   )
r2  r  r   r9   r6  r  r  r  ra   rW   r2  r  r   r9   r6  r  ra   r&   )
r2  r  r   r9   r6  r{   r  r  ra   r  )
r2  r  r   r9   r6  r{   r  r  ra   r  
r   r   r   r   r   r9   r   r  ra   rb   r2  r  r   r9   r   r   r6  r{   r  r  r   r   ra   r&   )r   r  r   r  r   r9   ra   rQ   
r  rl   r2  r  r   r+   r6  r  ra   r&   )r  rl   r2  r  r   r+   r6  r  r  r  ra   rW   )r  rl   r2  r  r   r+   r6  r{   r  r  ra   r  )r  rl   r2  r  r   r  r   r+   r  r  r6  r  ra   r&   )r  rl   r2  r  r   r  r   r+   r  r  r6  r  r  r  ra   rW   )r  rl   r2  r  r   r  r   r+   r  r  r6  r{   r  r  ra   r  
r  rl   r2  r  r   r  r   r+   ra   r&   r  rl   r2  r  r   r  r  r  r   r+   ra   r&   )r  rl   r   r  r   r  r   r  r   r+   r  rl   ra   rQ   )ro   rs   rt   rv   r   rB   r   ri   r   r  r  r  r  r  r   r   r  r  r   r  r  r  r  r  r  r  re   re   r|  rh   r   *  s   
 
.





	
x
D	
r   c                      rr  )_DefaultAsyncHttpxClientr$  r   ra   rb   c                   rt  ru  rx  r{  r|  re   rh   ri     r}  z!_DefaultAsyncHttpxClient.__init__r~  r  re   re   r|  rh   r    r  r  c                   @  s   e Zd ZdddZdS )	_DefaultAioHttpClient_kwargsr   ra   rb   c                 K  s   t d)NzVTo use the aiohttp client you must have installed the package with the `aiohttp` extra)r   )rg   r  re   re   rh   ri   "  r  _DefaultAioHttpClient.__init__N)r  r   ra   rb   )ro   rs   rt   ri   re   re   re   rh   r  !  r  r  c                      rr  )r  r$  r   ra   rb   c                   rt  ru  rx  r{  r|  re   rh   ri   '  s   r  r~  r  re   re   r|  rh   r  &  r  c                   @  r  )AsyncHttpxClientWrapperra   rb   c                 C  s8   | j rd S zt |   W d S  ty   Y d S w rd   )r   asyncioget_running_loopcreate_taskacloser   rp   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} fddZd~ddZdddZ	dd!d"Z
dd)d*Zdd-d.Zdd1d2Zed3d4dd:d;Zedd@d;ZeddAddDd;Zd3ddEddFd;ZddJdKZdLdMddPdQZddWdXZei d3dYdd\d]Zei d^dd_d]Zei dd`ddad]Zi d3ddbddcd]Zeddi d3ddddidjZeddi dkddldjZeddi ddmddndjZddi d3ddoddpdjZdi dqddrdsZddi dkddtduZdi dqddvdwZdi dxdydd{d|Z  ZS )r   zhttpx.AsyncClientr   Nztype[AsyncStream[Any]] | Noner   r  r   rl   r   r   r   r{   r   r   r   r  r  httpx.AsyncClient | Noner   r   r   r   ra   rb   c          	   	     s   t |s|r|jtkr|j}nt}|d ur$t|tjs$tdt| t	 j
||tt|||||d |p>t|tt|d| _d S )NzTInvalid `http_client` argument; Expected an instance of `httpx.AsyncClient` but got )r   r   r   r   r   r   r   r  )r2   r   r  r@   r   r   AsyncClientr   r  rz  ri   r   r$   r  r   )	rg   r   r   r   r   r   r  r   r   r|  re   rh   ri   O  s*   
zAsyncAPIClient.__init__c                 C  r  rd   r  rp   re   re   rh   r   }  r  zAsyncAPIClient.is_closedc                   s   | j  I dH  dS )r  N)r   r  rp   re   re   rh   r    s   zAsyncAPIClient.closerg   rT   c                   s   | S rd   re   rp   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   r9   c                   s   |S r  re   r  re   re   rh   r    s   zAsyncAPIClient._prepare_optionsr   r  c                   s   dS r  re   r7  re   re   rh   r       	zAsyncAPIClient._prepare_requestFr  r2  r  r6  r  r&   c                     d S rd   re   r  re   re   rh   r     s   zAsyncAPIClient.requestr  r  type[_AsyncStreamT]rX   c                  r  rd   re   r  re   re   rh   r        )r  type[_AsyncStreamT] | NoneResponseT | _AsyncStreamTc                  r  rd   re   r  re   re   rh   r     r  r  c                  s  | j d u rtt I d H | _ | ||}t|}|jd u r*|j dkr*|  |_d }|	| j
}d}t|d D ]6}t|}| |I d H }|| }	| j||d}
| |
I d H  i }| jd urh| j|d< |jd urr|j|d< td|
j|
j d }z| jj|
fd|p| j|
d	i|I d H }W nh tjy } z(tjd
dd |	dkr| j|||d dI d H  W Y d }~q:td t|
d	|d }~w ty } z(tjddd |	dkr| j|||d dI d H  W Y d }~q:td t|
d	|d }~ww td|
j|
j|j|j|j td|j d z|!  W nT tj"yp } zFtjddd |	dkrS| #|j$rS|j$% I d H  | j||||dI d H  W Y d }~q:|j$j&s`|j$' I d H  td | (|j$d d }~ww  |d us{J d| j)||||||dI d H S r  )*r   r1   get_platformr5  r6   r   r  r   ro  ra  r   r  r  r'  r  rC  rw  rP   r  r\   r   r  r8  r   r  r  rL   r   rM   r   r  r   r  r  r  rl  r   r  r   areadr   r  r  re   re   rh   r     s   









r   r   r  c                  sf   || }|dkrt d nt d| | |||r|jnd }t d|j| t|I d H  d S r  )rP   r  rh  r   r   r\   anyior  r  re   re   rh   r  >  s   zAsyncAPIClient._sleep_for_retryr   r   r   r  c          
        s  |j jtdkrttt|| |||||dS t|p|}t	|rWt
|trW|r3t|j jtrWt
|tsBtdt d| td|}td||| t|||||dS |tjkratt|S t|| td|||||d}	t|j jtr}tt|	S |	 I d H S )Nri  r  r  r  r  r&   r3  )r   r   r  rD   r   r&   rO   r   r:  r;  r<  r=   r{   r>   r   r?   r   r  r  r  re   re   rh   r  L  sh   




	
z AsyncAPIClient._process_responser   ry   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   r6  r   r  r  r  c                  r  rd   re   )rg   r  r2  r   r  r   r6  re   re   rh   r    s   
zAsyncAPIClient.postr  c                  r  rd   re   rg   r  r2  r   r  r   r6  r  re   re   rh   r       )r   r  r   r  c                  r  rd   re   r  re   re   rh   r    r  )r   r  r   r6  r  c          	        s>   t jdd||t|I d H d|}| j||||dI d H S r  r9   r  r   r   )	rg   r  r2  r   r  r   r6  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    r  zAsyncAPIClient.deleter  r  r  c                C  r  r  r  r  re   re   rh   r    r  zAsyncAPIClient.get_api_list)r   rl   r   r   r   r{   r   r   r   r  r  r  r   r   r   r   ra   rb   r   r  r  r  r  r  r  )
r2  r  r   r9   r6  r  r  r  ra   rX   )
r2  r  r   r9   r6  r{   r  r  ra   r  r  r  )r   ry   r   r   r   r9   ra   r  r   )r  rl   r2  r  r   r+   r6  r  r  r  ra   rX   )r  rl   r2  r  r   r+   r6  r{   r  r  ra   r  )r  rl   r2  r  r   r  r  r  r   r+   r6  r  ra   r&   )r  rl   r2  r  r   r  r  r  r   r+   r6  r  r  r  ra   rX   )r  rl   r2  r  r   r  r  r  r   r+   r6  r{   r  r  ra   r  r  r  )r  rl   r   ry   r   r   r   r  r   r+   r  rl   ra   r  )ro   rs   rt   rv   r   rB   r   ri   r   r  r  r  r  r  r   r   r  r  r   r  r  r  r  r  r  r  re   re   r|  rh   r   K  s   
 
.




	
}
D	
r   )queryextra_headersextra_query
extra_bodyr   r   r   r  Query | Noner   Headers | Noner!  r"  r  r   r   r   'float | httpx.Timeout | None | NotGivenr   PostParser | 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%   r2   )r  r   r!  r"  r   r   r   r   re   re   rh   make_request_options,  s    
r'  c                   @  r  )r  ra   r{   c                 C  rK  )NTre   rp   re   re   rh   __bool__R  r   zForceMultipartDict.__bool__Nr   )ro   rs   rt   r(  re   re   re   rh   r  Q  r  r  c                   @  $   e Zd Zd
ddZedddZd	S )OtherPlatformnamerl   ra   rb   c                 C  
   || _ d S rd   r+  rg   r+  re   re   rh   ri   W     
zOtherPlatform.__init__c                 C     d| j  S )NzOther:r-  rp   re   re   rh   __str__Z     zOtherPlatform.__str__Nr+  rl   ra   rb   rr   ro   rs   rt   ri   r   r1  re   re   re   rh   r*  V      
r*  )MacOSLinuxWindowsFreeBSDOpenBSDiOSAndroidUnknownPlatformc                  C  s   zt   } t    }W n
 ty   Y dS w d|v s!d|v r#dS | dkr)dS | dkr/dS d	|v r5d
S | dkrKt }|dkrCdS |dkrIdS dS |rQt|S dS )Nr=  iphoneipadr;  darwinr6  windowsr8  androidr<  linuxfreebsdr9  openbsdr:  r7  )rO  systemr   r   distroidr*  )rG  platform_name	distro_idre   re   rh   r  n  s0   r  )maxsizer   rl   rO  Platform | NonerN  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)rl   r  get_architectureget_python_runtimeget_python_version)r   rO  re   re   rh   rJ    s   rJ  c                   @  r)  )	OtherArchr+  rl   ra   rb   c                 C  r,  rd   r-  r.  re   re   rh   ri     r/  zOtherArch.__init__c                 C  r0  )Nzother:r-  rp   re   re   rh   r1    r2  zOtherArch.__str__Nr3  rr   r4  re   re   re   rh   rR    r5  rR  )x32x64armarm64unknownc                   C      zt  W S  ty   Y dS w NrW  )rO  python_implementationr   re   re   re   rh   rP    
   
rP  c                   C  rX  rY  )rO  python_versionr   re   re   re   rh   rQ    r[  rQ  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 )	NrW  )rV  aarch64rV  rU  x86_64rT  l        rS  )rO  machiner   r   sysrL  rR  )r`  re   re   rh   rO    s    
rO  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   r/  r0  re   re   rh   
<dictcomp>  s     z#_merge_mappings.<locals>.<dictcomp>)r~   )rb  rd  mergedre   re   rh   r     s   r   )r  r#  r   r$  r!  r#  r"  r  r   r   r   r%  r   r&  ra   r+   )ra   r>  )r   rl   rO  rM  ra   rN  rr   )ra   r]  )rb  rc  rd  rc  ra   re  )
__future__r   ra  r`   rY  rm  rU  r  r:  r  rO  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   rH  r   r   r    r   _qsr   _filesr   r   _typesr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   _utilsr.   r/   r0   r1   r2   r3   r4   _compatr5   r6   r7   _modelsr8   r9   r:   r;   	_responser<   r=   r>   r?   
_constantsr@   rA   rB   rC   rD   rE   rF   
_streamingrG   rH   rI   rJ   rK   rL   rM   rN   _legacy_responserO   	getLoggerro   rP   rv   	addFilterrQ   rS   rT   rU   rW   rX   httpx._configrY   r  ImportErrorrZ   rw   r   r   r   r  r  r   r   r   rs  DefaultHttpxClientr  r   r  httpx_aiohttpr  HttpxAiohttpClientDefaultAsyncHttpxClientDefaultAioHttpClientr  r   r'  rl   r  r*  r>  r  rJ  rR  r]  rP  rQ  rO  r   re   re   re   rh   <module>   s    DD$$	3=1')   %   n	   f%	
*	


