o
    h                     @  s  U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dl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@mAZAmBZBmCZCmDZDmEZEmFZF d	dlGmHZHmIZImJZJ d	dlKmLZLmMZMmNZNmOZO d	dlPmQZQmRZRmSZSmTZT d	dlUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\ d	dl]m^Z^m_Z_m`Z`maZa d	dl*mbZbmcZcmdZdmeZe e	fegZhdeid< edddZjedddZkedZledddZmed e^e dZned!e`e dZoerNd d"lpmqZr nzd d"lpmqZr W n esyd   e6d#ZrY nw G d$d% d%ZtG d&d' d'eLeel ZuG d(d) d)euel eel ZvG d*d+ d+eelekf ZwG d,d- d-euel eel Zxed.ee$jye$jzf dZ{ed/ee^e e`e f dZ|G d0d1 d1ee{e|f Z}G d2d3 d3e$jyZ~ere$jyZne~ZG d4d5 d5eZG d6d7 d7e}e$jye^e f ZG d8d9 d9e$jzZere$jzZneZG d:d; d;eZG d<d= d=e}e$jze`e f Zddddde1e1d>dpdNdOZG dPdQ dQeedf ZG dRdS dSZeee dT f ZdqdVdWZeEddXdrd^d_ZG d`da daZeee db f ZdsdcddZdsdedfZdtdhdiZdudndoZdS )v    )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)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APIResponseValidationErrorzlogging.Loggerlog	SyncPageTzBaseSyncPage[Any])bound
AsyncPageTzBaseAsyncPage[Any]_T_T_coT)	covariant_StreamT_AsyncStreamT)DEFAULT_TIMEOUT_CONFIGg      @c                   @  s^   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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paramsr   returnNonec                C     d S N selfrZ   ra   ra   e/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/groq/_base_client.py__init__w      zPageInfo.__init__r"   c                C  r_   r`   ra   )rc   r\   ra   ra   rd   re   ~   rf   rZ   r\   c                C  s   || _ || _d S r`   rg   )rc   rZ   r\   ra   ra   rd   re      s   
strc                 C  s2   | j r| jj d| j  dS | jj d| j dS )Nz(url=)z(params=)rZ   	__class____name__r\   rc   ra   ra   rd   __repr__   s   zPageInfo.__repr__N)rZ   r   r]   r^   )r\   r"   r]   r^   )rZ   rY   r\   r[   r]   r^   r]   rh   )
rk   
__module____qualname____doc____annotations__r   re   r   r   rm   ra   ra   ra   rd   rX   n   s   
 		rX   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
    r8   _optionsType[_T]_modelr]   boolc                 C  s   |   }|sdS |  d uS )NF)_get_page_itemsnext_page_info)rc   itemsra   ra   rd   has_next_page   s   zBasePage.has_next_pageOptional[PageInfo]c                 C  r_   r`   ra   rl   ra   ra   rd   ry      s    zBasePage.next_page_infoIterable[_T]c                 C  r_   r`   ra   rl   ra   ra   rd   rx         zBasePage._get_page_itemsrZ   r   httpx.QueryParamsc                 C  s   t tt| jj|jS r`   )httpxQueryParamsr   r   rt   r\   mergerb   ra   ra   rd   _params_from_url   s   zBasePage._params_from_urlinforX   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)r5   rt   _strip_raw_response_header
isinstancer\   r%   rZ   r   	copy_withdictrh   
ValueError)rc   r   optionsr\   rZ   ra   ra   rd   _info_to_options   s   

zBasePage._info_to_optionsNr]   rw   )r]   r|   )r]   r}   )rZ   r   r]   r   )r   rX   r]   r8   )rk   ro   rp   rq   r   rt   rr   rv   r{   ry   rx   r   r   ra   ra   ra   rd   rs      s   
 



rs   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modelru   r   r8   r]   r^   c                 C  s0   t rt| dd d u ri | _|| _|| _|| _d S N__pydantic_private__r4   getattrr   rv   r   rt   )rc   r   r   r   ra   ra   rd   _set_private_attributes   
   
z$BaseSyncPage._set_private_attributesIterator[_T]c                 c  s(    |   D ]}| D ]}|V  qqd S r`   
iter_pagesrx   rc   pageitemra   ra   rd   __iter__   s   zBaseSyncPage.__iter__rc   rO   Iterator[SyncPageT]c                 c  s&    | }	 |V  |  r| }nd S qr`   r{   get_next_pagerc   r   ra   ra   rd   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   ry   RuntimeErrorr   r   _request_api_listrv   rj   rc   r   r   ra   ra   rd   r      s   
zBaseSyncPage.get_next_pageN)r   r   r   ru   r   r8   r]   r^   )r]   r   )rc   rO   r]   r   )rc   rO   r]   rO   )rk   ro   rp   pydanticr   r   rr   r   r   r   r   ra   ra   ra   rd   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   r8   page_clsType[AsyncPageT]r   ru   r]   r^   c                 C  s   || _ || _|| _|| _d S r`   )rv   r   rt   	_page_cls)rc   r   r   r   r   ra   ra   rd   re      s   
zAsyncPaginator.__init__ Generator[Any, None, AsyncPageT]c                 C  s   |    S r`   )	_get_page	__await__rl   ra   ra   rd   r     s   zAsyncPaginator.__await__rQ   c                   s0   d fdd}| j _ j j j I d H S )NresprQ   r]   c                   s   | j  j j jd | S )N)r   r   r   )r   rv   rt   r   r   rl   ra   rd   _parser  s   z)AsyncPaginator._get_page.<locals>._parser)r   rQ   r]   rQ   )rt   post_parserr   requestr   )rc   r   ra   rl   rd   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 r`   )r   rQ   r   ra   ra   rd   	__aiter__  s   zAsyncPaginator.__aiter__N)
r   r   r   r8   r   r   r   ru   r]   r^   )r]   r   )r]   rQ   r]   r   )rk   ro   rp   re   r   r   r   ra   ra   ra   rd   r      s
    


r   c                   @  r   )BaseAsyncPager   r   r   ru   r   r   r8   r]   r^   c                 C  s0   t rt| dd d u ri | _|| _|| _|| _d S r   r   )rc   r   r   r   ra   ra   rd   r      r   z%BaseAsyncPage._set_private_attributesr   c                 C s2   |   2 z3 d H W }| D ]}|V  qq6 d S r`   r   r   ra   ra   rd   r   -  s   zBaseAsyncPage.__aiter__rc   rQ   AsyncIterator[AsyncPageT]c                 C s,   | }	 |V  |  r| I d H }nd S qr`   r   r   ra   ra   rd   r   2  s   zBaseAsyncPage.iter_pagesc                   s<   |   }|std| |}| jj| j| j|dI d H S r   r   r   ra   ra   rd   r   ;  s   
zBaseAsyncPage.get_next_pageN)r   ru   r   r   r   r8   r]   r^   r   )rc   rQ   r]   r   )rc   rQ   r]   rQ   )rk   ro   rp   r   r   r   rr   r   r   r   r   ra   ra   ra   rd   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   rh   _versionr   	_base_urlintmax_retrieszUnion[float, Timeout, None]timeoutrw   _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] | Noner]   r^   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 `groq.DEFAULT_MAX_RETRIES`)r   _enforce_trailing_slashr   r   r   r   _custom_headers_custom_queryr   r   	_platform	TypeError)rc   r   r   r   r   r   r   r   ra   ra   rd   re   T  s   

zBaseClient.__init__rZ   c                 C  s"   |j dr|S |j|j d dS )N   /raw_path)r   endswithr   rb   ra   ra   rd   r   n  s   z"BaseClient._enforce_trailing_slashresponsehttpx.ResponserJ   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)rc   r   r   err_msgerr_textra   ra   rd    _make_status_error_from_responses  s   

z+BaseClient._make_status_error_from_responser   r   object_exceptions.APIStatusErrorc                C  s   t  r`   )NotImplementedError)rc   r   r   r   ra   ra   rd   r     s   zBaseClient._make_status_errorr   retries_takenr   r8   r   httpx.Headersc          	      C  s   |j pi }t| j|}| || t|}| j}|r/|j dkr/||vr/|j	p,| 
 ||< dd |D }d|vr@t||d< d|vrbt|jtrM| jn|j}t|trX|j}|d urbt||d< |S )Ngetc                 S  s   g | ]}|  qS ra   )lower).0headerra   ra   rd   
<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   methodr   idempotency_key_idempotency_keyrh   r   r   r%   r$   read)	rc   r   r   r   headers_dictr   idempotency_headerlower_custom_headersr   ra   ra   rd   _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   )rc   rZ   	merge_urlmerge_raw_pathra   ra   rd   _prepare_url  s
   zBaseClient._prepare_urlSSEDecoder | SSEBytesDecoderc                 C     t  S r`   )rG   rl   ra   ra   rd   _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   r   rZ   r\   r   filesra   )*rN   isEnabledForloggingDEBUGdebugr6   	json_data
extra_jsonr   r    r3   r   r   typer   default_queryr\   r   r  
startswithpopr.   r   _serialize_multipartformr,   ForceMultipartDictr  rZ   hostreplacer   build_requestr   r   r%   r   qs	stringifyr   rh   r   r1   )
rc   r   r   kwargsr  r   r\   content_typer  prepared_urlra   ra   rd   _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   r/   append)rc   r  rz   
serializedkeyvalueexistingra   ra   rd   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 r`   )	r1   r   r   r  rD   r   r   r   r&   )rc   r0  r   r   override_cast_tora   ra   rd   _maybe_override_cast_to%  s   

z"BaseClient._maybe_override_cast_tor   c                 C  s   |j tdkS )Nstream)r   r   rC   rc   r   ra   ra   rd   _should_stream_response_body6  s   z'BaseClient._should_stream_response_bodyr&   c             
   C  s   |d u r	t td S |tu rt t|S z,t|r(t|tr(t t|j||dW S | jr5t tt	||dW S t tt
||dW S  tjyR } zt||d|d }~ww )N)r   r  )type_r.  )r   r   )r   r&   r   inspectisclass
issubclassr-   buildr   r9   r:   r   ValidationErrorrM   )rc   r  r0  r   errra   ra   rd   _process_response_data9  s   

z!BaseClient._process_response_datar   c                 C  r  r`   r   rl   ra   ra   rd   r   Q     zBaseClient.qshttpx.Auth | Nonec                 C  r_   r`   ra   rl   ra   ra   rd   custom_authU     zBaseClient.custom_authdict[str, str]c                 C  s   i S r`   ra   rl   ra   ra   rd   auth_headersY  rB  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_headersrD  r   rl   ra   ra   rd   r   ]  s   zBaseClient.default_headersc                 C  s
   i | j S r`   )r   rl   ra   ra   rd   r  h  s   zBaseClient.default_queryr   r#   c                 C     dS )zaValidate the given default headers and custom headers.

        Does nothing by default.
        Nra   )rc   r   r   ra   ra   rd   r   n     	zBaseClient._validate_headersc                 C  s   | j j d| j S )Nz/Python )rj   rk   r   rl   ra   ra   rd   rG  y  s   zBaseClient.user_agentc                 C  s   | j S r`   )r   rl   ra   ra   rd   r   }  r?  zBaseClient.base_url	URL | strc                 C  s"   |  t|tr	|nt|| _d S r`   )r   r   r   r   rb   ra   ra   rd   r     s   "Dict[str, str]c                 C  s   t | j| jdS )N)platform)rH  r   r   rl   ra   ra   rd   rH    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)rc   rN  retry_ms_headerretry_headerretry_date_tuple
retry_datera   ra   rd   _parse_retry_after_header  s&   

z$BaseClient._parse_retry_after_headerremaining_retriesrR  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   <   rQ  g       @r   g      ?)get_max_retriesr   r\  minrB   powr@   r   )
rc   r]  r   rN  r   retry_after
nb_retriessleep_secondsjitterr   ra   ra   rd   _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   rN   r  r   )rc   r   should_retry_headerra   ra   rd   _should_retry  s*   






zBaseClient._should_retryc                 C  s   dt   S )Nzstainless-python-retry-)uuiduuid4rl   ra   ra   rd   r     s   zBaseClient._idempotency_key)r   rh   r   r   r   rw   r   r   r   r   r   r   r   r   r]   r^   )rZ   r   r]   r   )r   r   r]   rJ   )r   rh   r   r   r   r   r]   r   )r   r8   r   r   r]   r   )rZ   rh   r]   r   )r]   r  )r   r8   r   r   r]   r  )r  r&  r]   r'  )r0  r1  r   r8   r]   r1  )r   r  r]   rw   )r  r   r0  r1  r   r   r]   r&   )r]   r   )r]   r@  )r]   rC  )r]   rE  )r]   r'  )r   r#   r   r#   r]   r^   rn   )r]   r   )rZ   rK  r]   r^   )r]   rL  r`   )rN  rO  r]   rP  )r]  r   r   r8   rN  rO  r]   rR  )r   r   r]   rw   )"rk   ro   rp   rr   r   rA   r?   re   r   r   r   r   r  r  r%  r  r3  r6  r>  propertyr   rA  rD  r   r  r   rG  r   setterrH  r\  rf  rj  r   ra   ra   ra   rd   r   J  sb   
 


	


K





&
#r   c                         e Zd Zd fddZ  ZS )_DefaultHttpxClientr"  r   r]   r^   c                   :   | dt | dt | dd t jdi | d S Nr   limitsfollow_redirectsTra   
setdefaultr?   rE   superre   rc   r"  rj   ra   rd   re        z_DefaultHttpxClient.__init__r"  r   r]   r^   rk   ro   rp   re   __classcell__ra   ra   ry  rd   rp        rp  c                   @     e Zd ZdddZdS )SyncHttpxClientWrapperr]   r^   c                 C  s.   | j rd S z|   W d S  ty   Y d S w r`   )r   closer   rl   ra   ra   rd   __del__  s   zSyncHttpxClientWrapper.__del__Nr]   r^   rk   ro   rp   r  ra   ra   ra   rd   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	ddd<d=Ze	dd>d?ddBd=Ze	dd>ddCddFd=Z	dd>ddCddHd=ZddJdKZddNdOZdPdQddUdVZdd\d]Zei d>d^ddadbZei dcddedbZei ddfddgdbZi d>ddhddidbZedi dd>djddodpZedi ddqddrdpZedi dddsddtdpZdi dd>dduddvdpZdi dwddxdyZddi dzdd{d|Zdi dwdd}d~Zdi dddddZ  ZS )r   zhttpx.Clientr   Nztype[Stream[Any]] | Noner   r   r   http_clientr   r   r   rh   r   r   r   r   r   !float | Timeout | None | NotGivenr  httpx.Client | Noner   r   r   r   r   rw   r]   r^   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   )r1   r   HTTPX_DEFAULT_TIMEOUTr?   r   r   Clientr   r  rw  re   r   r$   r  r   )	rc   r   r   r   r   r  r   r   r   ry  ra   rd   re     s*   
zSyncAPIClient.__init__c                 C     | j jS r`   r   r   rl   ra   ra   rd   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  rl   ra   ra   rd   r  @  s   
zSyncAPIClient.closerc   rR   c                 C  s   | S r`   ra   rl   ra   ra   rd   	__enter__J  r~   zSyncAPIClient.__enter__exc_typetype[BaseException] | NoneexcBaseException | Noneexc_tbTracebackType | Nonec                 C  s   |    d S r`   r  rc   r  r  r  ra   ra   rd   __exit__M  s   zSyncAPIClient.__exit__r   r8   c                 C  s   |S z#Hook for mutating the given optionsra   rc   r   ra   ra   rd   _prepare_optionsU  rf   zSyncAPIClient._prepare_optionsr   r  c                 C  rI  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.
        Nra   r5  ra   ra   rd   _prepare_request\  rJ  zSyncAPIClient._prepare_requestr0  Type[ResponseT]r]  Optional[int]r4  Literal[True]
stream_clsType[_StreamT]rU   c                C  r_   r`   ra   rc   r0  r   r]  r4  r  ra   ra   rd   r   g  rJ  zSyncAPIClient.requestFr4  Literal[False]r&   c                C  r_   r`   ra   )rc   r0  r   r]  r4  ra   ra   rd   r   r     r4  r  Type[_StreamT] | NoneResponseT | _StreamTc                C  r_   r`   ra   r  ra   ra   rd   r   |  rJ  type[_StreamT] | Nonec                C  s2   |d ur| | j| }nd}| j|||||dS Nr   )r0  r   r4  r  r   r_  r   _request)rc   r0  r   r]  r4  r  r   ra   ra   rd   r     s   	r   c                C  sB  t |}| ||}| |}|| j| }| j||d}| | i }	| jd ur/| j|	d< t	d|j
|j z| jj|fd|pF| j|di|	}
W nf tjy } z'tj	ddd |d	krq| j|||||d d
W  Y d }~S t	d t|d|d }~w ty } z'tj	ddd |d	kr| j|||||d d
W  Y d }~S t	d t|d|d }~ww t	d|j
|j|
j|
j|
j z|
  W nM tjy } z?tj	ddd |d	kr| |jr|j  | j||||jj||dW  Y d }~S |jjs|j  t	d | |jd d }~ww | j |||
|||dS )Nr   authzSending HTTP Request: %s %sr4  r   "Encountered httpx.TimeoutExceptionTexc_infor   r   r4  r  rN  Raising timeout errorEncountered ExceptionRaising connection errorzHTTP Response: %s %s "%i %s" %s!Encountered httpx.HTTPStatusErrorr   rN  r4  r  Re-raising status errorr0  r   r   r4  r  r   )!r5   r3  r  r_  r   r%  r  rA  rN   r  r   rZ   r   sendr6  r   TimeoutException_retry_requestrK   r   rL   r   reason_phraser   raise_for_statusHTTPStatusErrorrj  r   r  r   r   r   _process_response)rc   r0  r   r   r4  r  input_optionsr]  r   r"  r   r=  ra   ra   rd   r    s   





	
		



zSyncAPIClient._requestrN  httpx.Headers | Nonec          	      C  sp   | | j| }|dkrtd ntd| | |||}td|j| t| | j	|||d ||dS Nr   z1 retry leftz%i retries leftz$Retrying request to %s in %f seconds)r   r0  r   r4  r  )
r_  r   rN   r  rf  r   rZ   rW  sleepr  	rc   r   r0  r   rN  r4  r  r]  r   ra   ra   rd   r    s   

zSyncAPIClient._retry_requestr   r   r   r   1type[Stream[Any]] | type[AsyncStream[Any]] | Nonec          
      C  s   t |p|}t|r4t|tr4t|tst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rZtt|	S |	 S )N!API Response types must subclass ; Received type[BaseAPIResponse[Any]]rawr   r0  r4  r  r   r   r1  )r   r8  r9  r:  r<   r;   r   r   r&   r>   r   Responserw   r   r   r   rC   parse
rc   r0  r   r   r4  r  r   originresponse_clsapi_responsera   ra   rd   r  &  s>   




	
zSyncAPIClient._process_responser   Type[object]r   Type[SyncPageT]rO   c                   s(   d fdd}|_ j|ddS )	Nr   rO   r]   c                   s   | j  d | S )N)r   r   r   )r   r   r   r   rc   ra   rd   r   [  s   z0SyncAPIClient._request_api_list.<locals>._parserFr  )r   rO   r]   rO   )r   r   )rc   r   r   r   r   ra   r  rd   r   U  s   zSyncAPIClient._request_api_listr   r4  pathr+   c                C  r_   r`   ra   rc   r  r0  r   r4  ra   ra   rd   r   g  r  zSyncAPIClient.getr   type[_StreamT]c                C  r_   r`   ra   rc   r  r0  r   r4  r  ra   ra   rd   r   q  rJ  r   r  c                C  r_   r`   ra   r  ra   ra   rd   r   |  rJ  r   r4  r  c                C  s.   t jdd|d|}tt| j||||dS Nr   )r   rZ   r  ra   )r8   	constructr   r&   r   rc   r  r0  r   r4  r  optsra   ra   rd   r     s   	)r   r   r  r4  r   Body | Noner  RequestFiles | Nonec                C  r_   r`   ra   )rc   r  r0  r   r   r  r4  ra   ra   rd   post  s   
zSyncAPIClient.post)r   r   r  c                C  r_   r`   ra   rc   r  r0  r   r   r  r4  r  ra   ra   rd   r       )r   r   r  r  c                C  r_   r`   ra   r  ra   ra   rd   r    r  )r   r   r  r4  r  c          	      C  s6   t jdd||t|d|}tt| j||||dS Nr  r   rZ   r  r  r  ra   )r8   r  r   r   r&   r   )	rc   r  r0  r   r   r  r4  r  r  ra   ra   rd   r    s   r   r   c                C  $   t jdd||d|}| ||S Npatchr   rZ   r  ra   r8   r  r   rc   r  r0  r   r   r  ra   ra   rd   r       zSyncAPIClient.patchr   r  r   c                C  s*   t jdd||t|d|}| ||S Nputr  ra   )r8   r  r   r   rc   r  r0  r   r  r   r  ra   ra   rd   r    s   	zSyncAPIClient.putc                C  r  Ndeleter  ra   r  r  ra   ra   rd   r    r  zSyncAPIClient.deleter   r   r   r   r   c                C  &   t jd|||d|}| |||S Nr  ra   r8   r  r   rc   r  r   r   r   r   r   r  ra   ra   rd   get_api_list     
zSyncAPIClient.get_api_list)r   rh   r   r   r   r   r   r  r  r  r   r   r   r   r   rw   r]   r^   r   r  rc   rR   r]   rR   r  r  r  r  r  r  r]   r^   r   r8   r]   r8   r   r  r]   r^   r`   )r0  r  r   r8   r]  r  r4  r  r  r  r]   rU   )
r0  r  r   r8   r]  r  r4  r  r]   r&   )r0  r  r   r8   r]  r  r4  rw   r  r  r]   r  )r0  r  r   r8   r]  r  r4  rw   r  r  r]   r  )r0  r  r   r8   r   r   r4  rw   r  r  r]   r  )r   r8   r0  r  r   r   rN  r  r4  rw   r  r  r]   r  r0  r  r   r8   r   r   r4  rw   r  r  r   r   r]   r&   )r   r  r   r  r   r8   r]   rO   
r  rh   r0  r  r   r+   r4  r  r]   r&   )r  rh   r0  r  r   r+   r4  r  r  r  r]   rU   )r  rh   r0  r  r   r+   r4  rw   r  r  r]   r  )r  rh   r0  r  r   r  r   r+   r  r  r4  r  r]   r&   )r  rh   r0  r  r   r  r   r+   r  r  r4  r  r  r  r]   rU   )r  rh   r0  r  r   r  r   r+   r  r  r4  rw   r  r  r]   r  
r  rh   r0  r  r   r  r   r+   r]   r&   r  rh   r0  r  r   r  r  r  r   r+   r]   r&   )r  rh   r   r  r   r  r   r  r   r+   r   rh   r]   rO   )rk   ro   rp   rr   r   rA   r   re   r   r  r  r  r  r  r   r   r  r  r  r   r   r  r  r  r  r  r}  ra   ra   ry  rd   r     s   
 
.






	

j'
/	
r   c                      ro  )_DefaultAsyncHttpxClientr"  r   r]   r^   c                   rq  rr  ru  rx  ry  ra   rd   re     rz  z!_DefaultAsyncHttpxClient.__init__r{  r|  ra   ra   ry  rd   r	    r~  r	  c                   @  r  )AsyncHttpxClientWrapperr]   r^   c                 C  s8   | j rd S zt |   W d S  ty   Y d S w r`   )r   asyncioget_running_loopcreate_taskacloser   rl   ra   ra   rd   r    s   zAsyncHttpxClientWrapper.__del__Nr  r  ra   ra   ra   rd   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dddZdddZ	dd!d"Z
dd)d*Zdd-d.Zdd1d2Zed3dd4dd<d=Zedd>ddCd=ZedddDddGd=Zd3dddHddId=ZddKdLZddOdPZdQdRddVdWZdd]d^Zei d3d_ddbdcZei ddddedcZei ddfddgdcZi d3ddhddidcZeddi d3djddodpZeddi dqddrdpZeddi ddsddtdpZddi d3dduddvdpZdi dwddxdyZddi dqddzd{Zdi dwdd|d}Zdi d~ddddZ  ZS )r   zhttpx.AsyncClientr   Nztype[AsyncStream[Any]] | Noner   r  r   rh   r   r   r   rw   r   r   r   r  r  httpx.AsyncClient | Noner   r   r   r   r]   r^   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  )r1   r   r  r?   r   r   AsyncClientr   r  rw  re   r   r$   r
  r   )	rc   r   r   r   r   r   r  r   r   ry  ra   rd   re   !  s*   
zAsyncAPIClient.__init__c                 C  r  r`   r  rl   ra   ra   rd   r   O  r  zAsyncAPIClient.is_closedc                   s   | j  I dH  dS )r  N)r   r  rl   ra   ra   rd   r  R  s   zAsyncAPIClient.closerc   rR   c                   s   | S r`   ra   rl   ra   ra   rd   
__aenter__Y  s   zAsyncAPIClient.__aenter__r  r  r  r  r  r  c                   s   |   I d H  d S r`   r  r  ra   ra   rd   	__aexit__\  s   zAsyncAPIClient.__aexit__r   r8   c                   s   |S r  ra   r  ra   ra   rd   r  d  s   zAsyncAPIClient._prepare_optionsr   r  c                   s   dS r  ra   r5  ra   ra   rd   r  k     	zAsyncAPIClient._prepare_requestF)r4  r]  r0  r  r4  r  r]  r  r&   c                     d S r`   ra   )rc   r0  r   r4  r]  ra   ra   rd   r   v     zAsyncAPIClient.request)r]  r  r  type[_AsyncStreamT]rV   c                  r  r`   ra   rc   r0  r   r4  r  r]  ra   ra   rd   r     r  )r  r]  type[_AsyncStreamT] | NoneResponseT | _AsyncStreamTc                  r  r`   ra   r  ra   ra   rd   r     r  )r4  r  r]  c                  s:   |d ur| | j| }nd}| j|||||dI d H S r  r  )rc   r0  r   r4  r  r]  r   ra   ra   rd   r     s   	r   c                  s  | j d u rtt I d H | _ t|}| ||}| |I d H }|| j| }| j||d}| 	|I d H  i }	| j
d urD| j
|	d< z| jj|fd|pR| j|di|	I d H }
W nl tjy } z*tjddd |dkr| j|||||d d	I d H W  Y d }~S td
 t|d|d }~w ty } z*tjddd |dkr| j|||||d d	I d H W  Y d }~S td t|d|d }~ww td|j|j|
j|
j z|
  W nX tjy3 } zJtjddd |dkr| |jr|j I d H  | j||||jj||dI d H W  Y d }~S |jj s#|j! I d H  td | "|jd d }~ww | j#|||
|||dI d H S )Nr   r  r4  r  r  Tr  r   r  r  r  r  zHTTP Request: %s %s "%i %s"r  r  r  r  )$r   r0   get_platformr5   r3  r  r_  r   r%  r  rA  r   r  r6  r   r  rN   r  r  rK   r   rL   r   rZ   r   r  r  r  rj  r   r  r   r   areadr   r  )rc   r0  r   r4  r  r   r  r]  r   r"  r   r=  ra   ra   rd   r    s   
	


	
	

zAsyncAPIClient._requestrN  r  c          	        s~   | | j| }|dkrtd ntd| | |||}td|j| t|I d H  | j	|||d ||dI d H S r  )
r_  r   rN   r  rf  r   rZ   anyior  r  r  ra   ra   rd   r    s   
zAsyncAPIClient._retry_requestr   r   r   r   r  c          
        s   t |p|}t|r5t|tr5t|ts tdt d| td|}td||| t|||||dS |t	j
kr?tt|S t|| td|||||d}	t|jjtr[tt|	S |	 I d H S )Nr  r  r  r&   r  r1  )r   r8  r9  r:  r<   r=   r   r   r>   r   r  r&   rw   r   r   r   rC   r  r  ra   ra   rd   r  1  s@   




	
z AsyncAPIClient._process_responser   ru   r   r   AsyncPaginator[_T, AsyncPageT]c                 C  s   t | |||dS )N)r   r   r   r   )r   )rc   r   r   r   ra   ra   rd   r   `  s   z AsyncAPIClient._request_api_listr  r  r+   c                  r  r`   ra   r  ra   ra   rd   r   h  r  zAsyncAPIClient.getr  c                  r  r`   ra   r  ra   ra   rd   r   r  r  r  c                  r  r`   ra   r  ra   ra   rd   r   }  r  r  c                  s0   t jdd|d|}| j||||dI d H S r  r  r  ra   ra   rd   r     s   	)r   r  r   r4  r   r  r  r  c                  r  r`   ra   )rc   r  r0  r   r  r   r4  ra   ra   rd   r    s   
zAsyncAPIClient.postr  c                  r  r`   ra   rc   r  r0  r   r  r   r4  r  ra   ra   rd   r       )r   r  r   r  c                  r  r`   ra   r  ra   ra   rd   r    r  )r   r  r   r4  r  c          	        s>   t jdd||t|I d H d|}| j||||dI d H S r  r8   r  r   r   )	rc   r  r0  r   r  r   r4  r  r  ra   ra   rd   r    s   r  c                  ,   t jdd||d|}| ||I d H S r  r  r  ra   ra   rd   r       zAsyncAPIClient.patchc                  s8   t jdd||t|I d H d|}| ||I d H S r  r   r  ra   ra   rd   r    s   	zAsyncAPIClient.putc                  r!  r  r  r  ra   ra   rd   r    r"  zAsyncAPIClient.deleter   r  r   c                C  r  r  r  r  ra   ra   rd   r    r   zAsyncAPIClient.get_api_list)r   rh   r   r   r   rw   r   r   r   r  r  r  r   r   r   r   r]   r^   r   r  r  r  r  r  )
r0  r  r   r8   r4  r  r]  r  r]   r&   )r0  r  r   r8   r4  r  r  r  r]  r  r]   rV   )r0  r  r   r8   r4  rw   r  r  r]  r  r]   r  )r0  r  r   r8   r4  rw   r  r  r   r   r]   r  )r   r8   r0  r  r   r   rN  r  r4  rw   r  r  r]   r  r  )r   ru   r   r   r   r8   r]   r  r  )r  rh   r0  r  r   r+   r4  r  r  r  r]   rV   )r  rh   r0  r  r   r+   r4  rw   r  r  r]   r  )r  rh   r0  r  r   r  r  r  r   r+   r4  r  r]   r&   )r  rh   r0  r  r   r  r  r  r   r+   r4  r  r  r  r]   rV   )r  rh   r0  r  r   r  r  r  r   r+   r4  rw   r  r  r]   r  r  r  )r  rh   r   ru   r   r   r   r  r   r+   r   rh   r]   r  )rk   ro   rp   rr   r   rA   r   re   r   r  r  r  r  r  r   r   r  r  r  r   r   r  r  r  r  r  r}  ra   ra   ry  rd   r     s   
 
.




	


h%
/	
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 | NotGivenr]   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%   r1   )r#  r$  r%  r&  r   r   r   r   ra   ra   rd   make_request_options  s    
r+  c                   @  r  )r  r]   rw   c                 C  rI  )NTra   rl   ra   ra   rd   __bool__"  r~   zForceMultipartDict.__bool__Nr   )rk   ro   rp   r,  ra   ra   ra   rd   r  !  r  r  c                   @  $   e Zd Zd
ddZedddZd	S )OtherPlatformnamerh   r]   r^   c                 C  
   || _ d S r`   r/  rc   r/  ra   ra   rd   re   '     
zOtherPlatform.__init__c                 C     d| j  S )NzOther:r1  rl   ra   ra   rd   __str__*     zOtherPlatform.__str__Nr/  rh   r]   r^   rn   rk   ro   rp   re   r   r5  ra   ra   ra   rd   r.  &      
r.  )MacOSLinuxWindowsFreeBSDOpenBSDiOSAndroidUnknownPlatformc                  C  s   zt   } t    }W n
 ty   Y dS w d|v s!d|v r#dS | dkr)dS | dkr/dS d	|v r5d
S | dkrKt }|dkrCdS |dkrIdS dS |rQt|S dS )NrA  iphoneipadr?  darwinr:  windowsr<  androidr@  linuxfreebsdr=  openbsdr>  r;  )rM  systemr   r   distroidr.  )rK  platform_name	distro_idra   ra   rd   r  >  s0   r  )maxsizer   rh   rM  Platform | NonerL  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)rh   r  get_architectureget_python_runtimeget_python_version)r   rM  ra   ra   rd   rH  h  s   rH  c                   @  r-  )	OtherArchr/  rh   r]   r^   c                 C  r0  r`   r1  r2  ra   ra   rd   re   u  r3  zOtherArch.__init__c                 C  r4  )Nzother:r1  rl   ra   ra   rd   r5  x  r6  zOtherArch.__str__Nr7  rn   r8  ra   ra   ra   rd   rV  t  r9  rV  )x32x64armarm64unknownc                   C      zt  W S  ty   Y dS w Nr[  )rM  python_implementationr   ra   ra   ra   rd   rT    
   
rT  c                   C  r\  r]  )rM  python_versionr   ra   ra   ra   rd   rU    r_  rU  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 )	Nr[  )rZ  aarch64rZ  rY  x86_64rX  l        rW  )rM  machiner   r   sysrP  rV  )rd  ra   ra   rd   rS    s    
rS  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 ra   )r   r!   )r   r-  r.  ra   ra   rd   
<dictcomp>  s     z#_merge_mappings.<locals>.<dictcomp>)rz   )rf  rh  mergedra   ra   rd   r     s   r   )r#  r'  r$  r(  r%  r'  r&  r  r   r   r   r)  r   r*  r]   r+   )r]   rB  )r   rh   rM  rQ  r]   rL  rn   )r]   ra  )rf  rg  rh  rg  r]   ri  )
__future__r   re  r   rW  rk  rS  r  r8  r  rM  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   rL  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   _compatr4   r5   r6   _modelsr7   r8   r9   r:   	_responser;   r<   r=   r>   
_constantsr?   r@   rA   rB   rC   rD   rE   
_streamingrF   rG   rH   rI   rJ   rK   rL   rM   	getLoggerrk   rN   rr   rO   rQ   rR   rS   rU   rV   httpx._configrW   r  ImportErrorrX   rs   r   r   r   r  r  r   r   r   rp  DefaultHttpxClientr  r   r	  DefaultAsyncHttpxClientr
  r   r+  rh   r  r.  rB  r  rH  rV  ra  rT  rU  rS  r   ra   ra   ra   rd   <module>   s    DD $	'01')   %   u   d%	
*	


