o
    î6Wj÷y ã                   @  s  U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dl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 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-m.Z.m/Z/ d dl+m0Z0 d	d
l1m2Z2 d	dl3m4Z4 d	dl5m6Z6m7Z7 d	dl8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZI d	dlJmKZKmLZLmMZMmNZNmOZOmPZP d	dlQmRZRmSZSmTZT d	dlUmVZVmWZWmXZXmYZY d	dlZm[Z[ d	dl\m]Z]m^Z^m_Z_m`Z` d	dlambZbmcZcmdZdmeZemfZfmgZgmhZh d	dlimjZjmkZkmlZlmmZm d	dl2mnZnmoZompZpmqZqmrZrmsZs d	dltmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z| d	dl}m~Z~ d	dlm€Z€ d	dl�m‚Z‚ e
 ƒe„¡Z…de†d< eddd�Z‡edd d�Zˆed!ƒZ‰ed"d#d$�ZŠed%eje d�Z‹ed&ele d�ZŒe�r˜d d'l�mŽZŽ eŽZ�nzd d'l�mŽZ� W n e��y®   e=d(ƒZ�Y nw G d)d*„ d*ƒZ‘G d+d,„ d,eVee‰ ƒZ’G d-d.„ d.e’e‰ ee‰ ƒZ“G d/d0„ d0ee‰eˆf ƒZ”G d1d2„ d2e’e‰ ee‰ ƒZ•ed3ee)j–e)j—f d�Z˜ed4eeje ele f d�Z™G d5d6„ d6ee˜e™f ƒZšG d7d8„ d8e)j–ƒZ›e�re)j–Zœne›ZœG d9d:„ d:eœƒZ�G d;d<„ d<eše)j–eje f ƒZžG d=d>„ d>e)j—ƒZŸzd dl Z W n e��yX   G d?d@„ d@e)j—ƒZ¡Y n
w G dAd@„ d@e j¢ƒZ¡e�rme)j—Z£	 e)j—Z¤neŸZ£e¡Z¤G dBdC„ dCe£ƒZ¥G dDdE„ dEeše)j—ele f ƒZ¦dddddeIeIdFœd‘dVdW„Z§G dXdY„ dYee¨df ƒZ©G dZd[„ d[ƒZªeeªe%d\ f Z«d’d^d_„Z¬eOdd`�d“dfdg„ƒZ­G dhdi„ diƒZ®ee®e%dj f Z¯d”dkdl„Z°d”dmdn„Z±d•dpdq„Z²d–dudv„Z³d—dydz„Z´eµd{hƒZ¶d˜d~d„Z·d™d‚dƒ„Z¸dšd‡dˆ„Z¹d›dŠd‹„Zºdœd�d�„Z»dS )�é    )ÚannotationsN)ÚTracebackType)Úrandom)ÚTYPE_CHECKINGÚAnyÚDictÚListÚTypeÚTupleÚUnionÚGenericÚMappingÚTypeVarÚIterableÚIteratorÚOptionalÚSequenceÚ	GeneratorÚAsyncIteratorÚcastÚoverload)ÚLiteralÚoverrideÚ
get_origin)ÚURLÚProxyÚHTTPTransportÚAsyncHTTPTransport)ÚPrivateAttré   )Ú_exceptions©ÚQuerystring)Úto_httpx_filesÚasync_to_httpx_files)ÚBodyÚOmitÚQueryÚHeadersÚTimeoutÚNotGivenÚ	ResponseTÚ
AnyMappingÚ
PostParserÚBinaryTypesÚRequestFilesÚHttpxSendArgsÚRequestOptionsÚAsyncBinaryTypesÚHttpxRequestFilesÚModelBuilderProtocolÚ	not_given)Úis_dictÚis_listÚasyncifyÚis_givenÚ	lru_cacheÚ
is_mapping)ÚPYDANTIC_V1Ú
model_copyÚ
model_dump)ÚGenericModelÚFinalRequestOptionsÚvalidate_typeÚconstruct_type)Ú
APIRequest)Ú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)ÚAnthropicErrorÚAPIStatusErrorÚRetryableErrorÚAPITimeoutErrorÚAPIConnectionErrorÚAPIResponseValidationError)ÚCallNextÚ
MiddlewareÚAsyncCallNextÚMiddlewareInputÚMiddlewareCallableÚAsyncMiddlewareCallableÚvalidate_sync_middlewareÚvalidate_async_middleware)Úopenapi_dumps)Úget_environment_proxies)ÚLegacyAPIResponsezlogging.LoggerÚlogÚ	SyncPageTzBaseSyncPage[Any])ÚboundÚ
AsyncPageTzBaseAsyncPage[Any]Ú_TÚ_T_coT)Ú	covariantÚ_StreamTÚ_AsyncStreamT)ÚDEFAULT_TIMEOUT_CONFIGç      @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 )ÚPageInfoz€Stores 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© ©Úselfrq   rz   rz   úe/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/anthropic/_base_client.pyÚ__init__“   ó   zPageInfo.__init__r'   c                C  rx   ry   rz   )r|   rs   rz   rz   r}   r~   š   r   r%   c                C  rx   ry   rz   )r|   ru   rz   rz   r}   r~   ¡   r   ©rq   ru   rs   c                C  s   || _ || _|| _d S ry   r€   )r|   rq   ru   rs   rz   rz   r}   r~   ¨   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=)rq   Ú	__class__Ú__name__ru   rs   ©r|   rz   rz   r}   Ú__repr__³   s
   zPageInfo.__repr__N)rq   r   rv   rw   )rs   r'   rv   rw   )ru   r%   rv   rw   )rq   rp   ru   rt   rs   rr   rv   rw   ©rv   r�   )
r„   Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   r~   r5   r   r†   rz   rz   rz   r}   ro   ‰   s"   
 	ûro   c                   @  s`   e Zd ZU dZeƒ Zded< eƒ Zded< ddd	„Zddd„Z	ddd„Z
ddd„Zddd„ZdS )ÚBasePagea<  
    Defines the core interface for pagination.

    Type Args:
        ModelT: The pydantic model that represents an item in the response.

    Methods:
        has_next_page(): Check if there is another page available
        next_page_info(): Get the necessary information to make a request for the next page
    r@   Ú_optionsúType[_T]Ú_modelrv   Úboolc                 C  s   |   ¡ }|sdS |  ¡ d uS )NF)Ú_get_page_itemsÚnext_page_info)r|   Úitemsrz   rz   r}   Úhas_next_pageË   s   zBasePage.has_next_pageúOptional[PageInfo]c                 C  rx   ry   rz   r…   rz   rz   r}   r’   Ñ   s    zBasePage.next_page_infoúIterable[_T]c                 C  rx   ry   rz   r…   rz   rz   r}   r‘   Ó   ó   zBasePage._get_page_itemsrq   r   úhttpx.QueryParamsc                 C  s   t  tt| jjƒ¡ |j¡S ry   )ÚhttpxÚQueryParamsr   r   r�   rs   Úmerger{   rz   rz   r}   Ú_params_from_urlÖ   s   zBasePage._params_from_urlÚinforo   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)rs   z*Pagination is only supported with mappingszUnexpected PageInfo state)r=   r�   Ú_strip_raw_response_headerÚ
isinstancers   r*   rq   rœ   Ú	copy_withÚdictr�   ru   r;   Ú	TypeErrorÚ	json_dataÚ
ValueError)r|   r�   Úoptionsrs   rq   rz   rz   r}   Ú_info_to_optionsÚ   s,   



üzBasePage._info_to_optionsN©rv   r�   )rv   r•   )rv   r–   )rq   r   rv   r˜   )r�   ro   rv   r@   )r„   rˆ   r‰   rŠ   r   r�   r‹   r�   r”   r’   r‘   rœ   r¦   rz   rz   rz   r}   rŒ   ¼   s   
 



rŒ   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ÚmodelrŽ   r¥   r@   rv   rw   c                 C  s0   t st| dd ƒd u ri | _|| _|| _|| _d S ©NÚ__pydantic_private__©r<   Úgetattrr¯   r�   r«   r�   )r|   r¬   r­   r¥   rz   rz   r}   Ú_set_private_attributesü   ó
   
z$BaseSyncPage._set_private_attributesúIterator[_T]c                 c  s(   � |   ¡ D ]}| ¡ D ]}|V  qqd S ry   ©Ú
iter_pagesr‘   ©r|   ÚpageÚitemrz   rz   r}   Ú__iter__  s   €ÿÿzBaseSyncPage.__iter__r|   re   úIterator[SyncPageT]c                 c  s&   � | }	 |V  |  ¡ r| ¡ }nd S qry   ©r”   Úget_next_page©r|   r¸   rz   rz   r}   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_listr�   rƒ   ©r|   r�   r¥   rz   rz   r}   r½     s   ÿ
zBaseSyncPage.get_next_pageN)r¬   rª   r­   rŽ   r¥   r@   rv   rw   )rv   r´   )r|   re   rv   r»   )r|   re   rv   re   )r„   rˆ   r‰   Úpydanticr   r«   r‹   r²   rº   r¶   r½   rz   rz   rz   r}   r©   ù   s   
 


	r©   c                   @  s4   e Zd Zddd„Zddd„Zddd„Zddd„ZdS )ÚAsyncPaginatorr¬   ÚAsyncAPIClientr¥   r@   Úpage_clsúType[AsyncPageT]r­   rŽ   rv   rw   c                 C  s   || _ || _|| _|| _d S ry   )r�   r«   r�   Ú	_page_cls)r|   r¬   r¥   rÇ   r­   rz   rz   r}   r~   +  s   
zAsyncPaginator.__init__ú Generator[Any, None, AsyncPageT]c                 C  s   |   ¡  ¡ S ry   )Ú	_get_pageÚ	__await__r…   rz   rz   r}   rÌ   7  s   zAsyncPaginator.__await__rg   c                 ƒ  s0   �d‡ fdd„}|ˆ j _ˆ j ˆ jˆ j ¡I d H S )NÚresprg   rv   c                   s   | j ˆ jˆ jˆ jd� | S )N)r­   r¥   r¬   )r²   r�   r�   r«   ©rÍ   r…   rz   r}   Ú_parser;  s   ýz)AsyncPaginator._get_page.<locals>._parser)rÍ   rg   rv   rg   )r�   Úpost_parserr«   ÚrequestrÉ   )r|   rÏ   rz   r…   r}   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 ry   )r   rg   r·   rz   rz   r}   Ú	__aiter__G  s   €þÿzAsyncPaginator.__aiter__N)
r¬   rÆ   r¥   r@   rÇ   rÈ   r­   rŽ   rv   rw   )rv   rÊ   )rv   rg   ©rv   rÒ   )r„   rˆ   r‰   r~   rÌ   rË   rÓ   rz   rz   rz   r}   rÅ   *  s
    


rÅ   c                   @  r¨   )ÚBaseAsyncPagerÆ   r«   r­   rŽ   r¬   r¥   r@   rv   rw   c                 C  s0   t st| dd ƒd u ri | _|| _|| _|| _d S r®   r°   )r|   r­   r¬   r¥   rz   rz   r}   r²   T  r³   z%BaseAsyncPage._set_private_attributesrÒ   c                 C s2   �|   ¡ 2 z3 d H W }| ¡ D ]}|V  qq6 d S ry   rµ   r·   rz   rz   r}   rÓ   a  s   €ÿÿzBaseAsyncPage.__aiter__r|   rg   úAsyncIterator[AsyncPageT]c                 C s,   �| }	 |V  |  ¡ r| ¡ I d H }nd S qry   r¼   r¾   rz   rz   r}   r¶   f  s   €ûzBaseAsyncPage.iter_pagesc                 Ã  s<   �|   ¡ }|stdƒ‚|  |¡}| jj| j| j|d�I d H S r¿   rÀ   rÃ   rz   rz   r}   r½   o  s   €ÿ
zBaseAsyncPage.get_next_pageN)r­   rŽ   r¬   rÆ   r¥   r@   rv   rw   rÔ   )r|   rg   rv   rÖ   )r|   rg   rv   rg   )r„   rˆ   r‰   rÄ   r   r«   r‹   r²   rÓ   r¶   r½   rz   rz   rz   r}   rÕ   Q  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< ded< eeddddœdŠd!d"„Zd‹d$d%„ZdŒd)d*„Z	d�d/d0„Z
d1d2œdŽd7d8„Zd�d9d:„Zd�d<d=„Zd1d2œd‘d?d@„Zd’dDdE„Zd“dHdI„Zd”dMdN„Zd•dPdQ„Zd–dSdT„Zed—dVdW„ƒZed˜dYdZ„ƒZed™d\d]„ƒZedšd_d`„ƒZed›dadb„ƒZdœdedf„Zed�dgdh„ƒZedždidj„ƒZejdŸdldj„ƒZed dmdn„ƒZd¡dpdq„Zd¢dvdw„Z d£d¤d{d|„Z!	d£d¥dd€„Z"d¦d�d‚„Z#d§d†d‡„Z$d�dˆd‰„Z%dS )¨Ú
BaseClientr×   r«   r�   Ú_versionr   Ú	_base_urlÚintÚmax_retrieszUnion[float, Timeout, None]Útimeoutr�   Ú_strict_response_validationú
str | NoneÚ_idempotency_headerNztype[_DefaultStreamT] | NoneÚ_default_stream_clsútuple[MiddlewareInput, ...]Ú_middleware)rÝ   rÞ   Úcustom_headersÚcustom_queryÚ
middlewareÚversionÚbase_urlú	str | URLúfloat | Timeout | Nonerå   úMapping[str, str] | Noneræ   úMapping[str, object] | Nonerç   ú Sequence[MiddlewareInput] | Nonerv   rw   c          	      C  sj   || _ |  t|ƒ¡| _|| _|| _|pi | _|pi | _|| _d | _	d | _
t|p(dƒ| _|d u r3tdƒ‚d S )Nrz   zÒmax_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 `anthropic.DEFAULT_MAX_RETRIES`)rÚ   Ú_enforce_trailing_slashr   rÛ   rÝ   rÞ   Ú_custom_headersÚ_custom_queryrß   rá   Ú	_platformÚtuplerä   r¢   )	r|   rè   ré   rß   rÝ   rÞ   rå   ræ   rç   rz   rz   r}   r~   ‰  s   

ÿÿzBaseClient.__init__rq   c                 C  s"   |j  d¡r|S |j|j d d�S )Nó   /©Úraw_path)rö   Úendswithr    r{   rz   rz   r}   rï   ¥  s   z"BaseClient._enforce_trailing_slashÚresponseúhttpx.ResponserT   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Ústripru   ÚloadsÚ	ExceptionÚ_make_status_error)r|   rø   rú   Úerr_msgÚerr_textrz   rz   r}   Ú _make_status_error_from_responseª  s   

ÿz+BaseClient._make_status_error_from_responser  rú   Úobjectú_exceptions.APIStatusErrorc                C  s   t ƒ ‚ry   )ÚNotImplementedError)r|   r  rú   rø   rz   rz   r}   r  À  ó   zBaseClient._make_status_errorr   ©Úretries_takenr¥   r@   r  úhttpx.Headersc          
      C  sæ   |j pi }tdt|jtƒrt|jjƒnt|jƒi| j¥|ƒ}t|ƒ}|  	||¡ t
 |¡}| j}|r>|jr>||vr>|j||< dd„ |D ƒ}d|vrOt|ƒ|d< d|vrqt|jtƒr\| jn|j}	t|	tƒrg|	j}	|	d urqt|	ƒ|d< |S )Nzx-stainless-timeoutc                 S  s   g | ]}|  ¡ ‘qS rz   )Úlower)Ú.0Úheaderrz   rz   r}   Ú
<listcomp>à  ó    z-BaseClient._build_headers.<locals>.<listcomp>zx-stainless-retry-countzx-stainless-read-timeout)ÚheadersÚmerge_headersrŸ   rÞ   r)   r�   ÚreadÚdefault_headersÚ_strip_omitÚ_validate_headersr™   r(   rá   Úidempotency_keyr*   )
r|   r¥   r  rå   Úmerged_headersÚheaders_dictr  Úidempotency_headerÚlower_custom_headersrÞ   rz   rz   r}   Ú_build_headersÉ  s6   

ÿýüù	


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    )r|   rq   Ú	merge_urlÚmerge_raw_pathrz   rz   r}   Ú_prepare_urlì  s
   zBaseClient._prepare_urlúSSEDecoder | SSEBytesDecoderc                 C  ó   t ƒ S ry   )rP   r…   rz   rz   r}   Ú_make_sse_decoderù  s   zBaseClient._make_sse_decoderúhttpx.Requestc                C  sˆ  t  tj¡rt  dt|dtrdhni d�¡ i }|j}|jd ur@|d u r+t	t
|jƒ}nt|ƒr6t||jƒ}n
tdt|ƒ› d�ƒ‚| j||d�}t| j|jƒ}| d¡}|j}|d ur‡| d	¡r‡d
|vrh| d¡ |rt|ƒsxtdt|ƒ› d�ƒ‚|  |¡|d< |s‡t	ttƒ ƒ}|  |j¡}	|rª|	jrªi t|	j ¡ ƒ¥|¥}|	j |	j! "dd¡d d�}	d|	j#v rºd|	j# $dd¡i|d< |j% &¡ dk}
|
�r|j'd urÑ|d urÑtdƒ‚|j'd urÞ|d urÞtdƒ‚|j'd uré|j'|d< nt(|t)ƒró||d< n|�st*|ƒ�r|d u�rt+|ƒnd |d< ||d< n| dd ¡ | dd ¡ | j,j-d|t(|j.t/ƒ�r(| j.n|j.|j%|	|�r=| j0 1t	t2t3t4f |ƒ¡nd dœ|¤ŽS )NzRequest options: %sTÚcontent)Úexclude_unsetÚexcludez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ó   ?r   r   rõ   Ú_Úsni_hostnameú-Ú
extensionsÚgetz7Passing both `content` and `json_data` is not supportedz3Passing both `content` and `files` is not supportedÚfiles)r  rÞ   Úmethodrq   rs   rz   )5rd   ÚisEnabledForÚloggingÚDEBUGÚdebugr>   r<   r£   Ú
extra_jsonr   r%   r;   Ú_merge_mappingsrÁ   Útyper  Údefault_queryrs   r2  r3  Ú
startswithÚpopr6   r¢   Ú_serialize_multipartformr3   ÚForceMultipartDictr"  rq   Úqueryr¡   r“   r    rö   ÚsplitÚhostÚreplacer4  r  r'  rŸ   Úbytesr9   ra   r«   Úbuild_requestrÞ   r*   ÚqsÚ	stringifyr   r�   r   )r|   r¥   r  Úkwargsr£   r  rs   Úcontent_typer3  Úprepared_urlÚis_body_allowedrz   rz   r}   Ú_build_requestü  s„   ýÿøþ


ÿ




$
"÷
ö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)rG  Ústringify_itemsr2  r7   Úappend)r|   r,  r“   Ú
serializedÚkeyÚvalueÚexistingrz   rz   r}   r?  h  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 ry   )	r9   r  r¡   r>  rM   r5   r   r	   r+   )r|   rX  r¥   r  Úoverride_cast_torz   rz   r}   Ú_maybe_override_cast_to†  s   

z"BaseClient._maybe_override_cast_toÚsourceúBaseAPIResponse[Any]úLegacyAPIResponse[Any]c              	   C  s"   t |j|j| |j|j|j|jd�S )zVConvert an `APIResponse` / `AsyncAPIResponse` into the equivalent `LegacyAPIResponse`.)ÚrawrX  r¬   ÚstreamÚ
stream_clsr¥   r  )rc   Úhttp_responseÚ_cast_toÚ_is_sse_streamÚ_stream_clsr�   r  )r|   r\  rz   rz   r}   Ú_convert_to_legacy_response—  s   ùz&BaseClient._convert_to_legacy_responserÑ   c                 C  s   |j  t¡dkS )Nr`  )r  r2  rL   ©r|   rÑ   rz   rz   r}   Ú_should_stream_response_body£  s   z'BaseClient._should_stream_response_bodyr+   c             
   C  s¦   |d u r	t td ƒS |tu rt t|ƒS z,t |¡r(t|tƒr(t t|j||d�ƒW S | jr5t tt	||d�ƒW S t tt
||d�ƒW S  tjyR } zt||d�|‚d }~ww )N)rø   r,  )Útype_rV  )rø   rú   )r   r+   r  ÚinspectÚisclassÚ
issubclassr4   Úbuildrß   rA   rB   rÄ   ÚValidationErrorrX   )r|   r,  rX  rø   Úerrrz   rz   r}   Ú_process_response_data¦  s   

€ÿz!BaseClient._process_response_datar"   c                 C  r$  ry   r!   r…   rz   rz   r}   rG  ¾  ó   zBaseClient.qsúhttpx.Auth | Nonec                 C  rx   ry   rz   r…   rz   rz   r}   Úcustom_authÂ  ó   zBaseClient.custom_authúdict[str, str]c                 C  s   i S ry   rz   r…   rz   rz   r}   Úauth_headersÆ  rt  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_headersrv  rð   r…   rz   rz   r}   r  Ê  s   ýüûúzBaseClient.default_headersc                 C  s
   i | j ¥S ry   )rñ   r…   rz   rz   r}   r<  Õ  s   ÿzBaseClient.default_queryr  r(   c                 C  ó   dS )zaValidate the given default headers and custom headers.

        Does nothing by default.
        Nrz   )r|   r  rå   rz   rz   r}   r  Û  ó   	zBaseClient._validate_headersc                 C  s   | j j› d| j› �S )Nz/Python )rƒ   r„   rÚ   r…   rz   rz   r}   ry  æ  s   zBaseClient.user_agentc                 C  ó   | j S ry   )rÛ   r…   rz   rz   r}   ré   ê  rq  zBaseClient.base_urlú	URL | strc                 C  s"   |   t|tƒr	|nt|ƒ¡| _d S ry   )rï   rŸ   r   rÛ   r{   rz   rz   r}   ré   î  s   "c                 C  r}  )zÇThe client-level middleware, outermost first.

        To run extra middleware for specific calls, derive a client with
        `client.with_options(middleware=[*client.middleware, extra])`.
        )rä   r…   rz   rz   r}   rç   ò  r	  zBaseClient.middlewareúDict[str, str]c                 C  s   t | j| jd�S )N)Úplatform)rz  rÚ   rò   r…   rz   rz   r}   rz  û  s   zBaseClient.platform_headersÚ
max_tokensÚmax_nonstreaming_tokensú
int | Noner)   c                 C  s<   d}d}|| d }||ks|r||krt dƒ‚t|dd�S )Ni  iX  i ô z Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-python#long-requests for more detailsrn   )Úconnect)r¤   r)   )r|   r�  r‚  Úmaximum_timeÚdefault_timeÚexpected_timerz   rz   r}   Ú_calculate_nonstreaming_timeout  s   ÿþz*BaseClient._calculate_nonstreaming_timeoutÚ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)	r2  Úfloatr¢   r¤   ÚemailÚutilsÚparsedate_tzÚ	mktime_tzÚtime)r|   r‰  Úretry_ms_headerÚretry_headerÚretry_date_tupleÚ
retry_daterz   rz   r}   Ú_parse_retry_after_header  s&   ÿ

ÿz$BaseClient._parse_retry_after_headerÚremaining_retriesr�  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   é<   rŒ  g       @r   g      Ð?)Úget_max_retriesrÝ   r—  ÚminrK   ÚpowrI   r   )
r|   r˜  r¥   r‰  rÝ   Úretry_afterÚ
nb_retriesÚsleep_secondsÚjitterrÞ   rz   rz   r}   Ú_calculate_retry_timeout2  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  r2  rd   r8  rý   )r|   rø   Úshould_retry_headerrz   rz   r}   Ú_should_retryJ  s*   






zBaseClient._should_retryro  ÚBaseExceptionú"tuple[bool, httpx.Response | None]c                 C  s‚   t ƒ }|}|dur?t|ƒ|vr?| t|ƒ¡ t|tƒrdS t|tƒr+|  |j¡|jfS t|tƒr2dS |j	}|dur?t|ƒ|vsdS )al  Whether an exception raised by a request attempt should be retried.

        Also returns the HTTP response behind the failure, when there is one, so
        retry timing can honor `retry-after` headers.

        Exceptions raised by middleware propagate to the caller as-is, except the
        ones that opt into the retry policy by type: `APIStatusError` (subject to
        the usual status-code policy), `APIConnectionError` / `APITimeoutError`,
        and `RetryableError`. The check walks each error's `__cause__` chain, so
        wrapping a retryable failure via `raise ... from err` preserves retries.
        N)TN)FN)
ÚsetÚidÚaddrŸ   rU   rT   r¥  rø   rW   Ú	__cause__)r|   ro  ÚseenÚcurrentrz   rz   r}   Ú_should_retry_exceptionm  s   


ø	z"BaseClient._should_retry_exceptionc                 C  s   dt  ¡ › �S )Nzstainless-python-retry-)ÚuuidÚuuid4r…   rz   rz   r}   Ú_idempotency_key†  s   zBaseClient._idempotency_key)rè   r�   ré   rê   rß   r�   rÝ   rÜ   rÞ   rë   rå   rì   ræ   rí   rç   rî   rv   rw   )rq   r   rv   r   )rø   rù   rv   rT   )r  r�   rú   r  rø   rù   rv   r  )r¥   r@   r  rÜ   rv   r  )rq   r�   rv   r   )rv   r#  )r¥   r@   r  rÜ   rv   r&  )r,  rN  rv   rO  )rX  rY  r¥   r@   rv   rY  )r\  r]  rv   r^  )rÑ   r&  rv   r�   )r,  r  rX  rY  rø   rù   rv   r+   )rv   r"   )rv   rr  )rv   ru  )rv   rw  )rv   rO  )r  r(   rå   r(   rv   rw   r‡   )rv   r   )rq   r~  rv   rw   )rv   rã   )rv   r  )r�  rÜ   r‚  rƒ  rv   r)   ry   )r‰  rŠ  rv   r‹  )r˜  rÜ   r¥   r@   r‰  rŠ  rv   r�  )rø   rù   rv   r�   )ro  r¦  rv   r§  )&r„   rˆ   r‰   r‹   râ   rJ   rH   r~   rï   r  r  r  r"  r%  rM  r?  r[  rf  rh  rp  ÚpropertyrG  rs  rv  r  r<  r  ry  ré   Úsetterrç   rz  rˆ  r—  r¡  r¥  r®  r±  rz   rz   rz   r}   rÙ   ~  sp   
 ö


	
#
ü
l







&ü

#rÙ   c                      ó   e Zd Zd‡ fdd„Z‡  ZS )Ú_DefaultHttpxClientrI  r   rv   rw   c           
        ób  ˆ   dt¡ ˆ   dt¡ ˆ   dd¡ dˆ vr¦tjtjdfg}ttdd ƒ}|d ur2| tj|df¡ nt	j
dkrFttd	d
ƒ}| tj|df¡ ttdd ƒ}|d urY| tj|df¡ ttdd ƒ}|d url| tj|df¡ dd„ tƒ  ¡ D ƒ}‡ fdd„dD ƒ‰|ˆd< ‡fdd„| ¡ D ƒ}tdi ˆ¤Ž}	| ˆ  di ¡¡ |ˆ d< |	ˆ d< tƒ jdi ˆ ¤Ž d S )NrÞ   ÚlimitsÚfollow_redirectsTÚ	transportÚTCP_KEEPINTVLr™  ÚdarwinÚTCP_KEEPALIVEé   ÚTCP_KEEPCNTé   ÚTCP_KEEPIDLEc                 S  ó(   i | ]\}}||d u rd nt |d�“qS ©N)rq   ©r   ©r  rU  rq   rz   rz   r}   Ú
<dictcomp>£  ó   ( z0_DefaultHttpxClient.__init__.<locals>.<dictcomp>c                   ó   i | ]}|ˆ v r|ˆ | “qS rz   rz   ©r  Úarg©rI  rz   r}   rÅ  ¥  ó    ©ÚverifyÚcertÚ	trust_envÚhttp1Úhttp2r·  Úsocket_optionsc                   ó0   i | ]\}}||d u rd nt dd|iˆ ¤Ž“qS ©NÚproxyrz   )r   ©r  rU  rÕ  ©Útransport_kwargsrz   r}   rÅ  «  ó    ÿÿÚmountsrz   )Ú
setdefaultrH   rN   ÚsocketÚ
SOL_SOCKETÚSO_KEEPALIVEr±   rS  ÚIPPROTO_TCPÚsysr€  rb   r“   r   Úupdater2  Úsuperr~   ©
r|   rI  rÒ  rº  r¼  r¾  rÀ  Ú	proxy_mapÚproxy_mountsÚdefault_transport©rƒ   ©rI  rØ  r}   r~   ‹  ó<   

ÿ
þz_DefaultHttpxClient.__init__©rI  r   rv   rw   ©r„   rˆ   r‰   r~   Ú__classcell__rz   rz   rç  r}   rµ  Š  ó    rµ  c                   @  ó   e Zd Zddd„ZdS )ÚSyncHttpxClientWrapperrv   rw   c                 C  s.   | j rd S z|  ¡  W d S  ty   Y d S w ry   )rû   Úcloser  r…   rz   rz   r}   Ú__del__È  s   ÿzSyncHttpxClientWrapper.__del__N©rv   rw   ©r„   rˆ   r‰   rñ  rz   rz   rz   r}   rï  Ç  ó    rï  c                      s@  e Zd ZU ded< dZded< dZded< dZded	< eeddddd
œd’‡ fdd „Z	d“d!d"„Z
d”d#d$„Zd•d'd(„Zd–d/d0„Zd—d3d4„Zd˜d7d8„Zed™d@dA„ƒZedBdCœdšdFdA„ƒZedBddGœd›dJdA„ƒZdBddGœdœdLdA„Zd�dMdN„ZdždRdS„ZdBdTdUœdŸdXdY„Zd d\d]„ZdTd^œd¡dadb„Zd¢dhdi„Zei dBdjœd£dmdn„ƒZei doœd¤dqdn„ƒZei ddrœd¥dsdn„ƒZi dBddtœd¥dudn„Zeddi ddBdvœd¦d}d~„ƒZeddi ddœd§d€d~„ƒZeddi ddd�œd¨d‚d~„ƒZddi ddBddƒœd¨d„d~„Zdddi d…œd©d†d‡„Zdddi d…œd©dˆd‰„Zddi dŠœdªd‹dŒ„Zdi d�dŽœd«d�d‘„Z‡  ZS )¬rª   zhttpx.Clientr«   Nztype[Stream[Any]] | Nonerâ   úCallNext | NoneÚ_middleware_chainrà   Úwebhook_key©rÝ   rÞ   Úhttp_clientrå   ræ   rç   rè   r�   ré   rê   rÝ   rÜ   rÞ   ú!float | Timeout | None | NotGivenrù  úhttpx.Client | Nonerå   rì   ræ   rí   rç   rî   rß   r�   rv   rw   c       	   
   
     s¨   t |ƒs|r|jtkr|j}nt}|d ur$t|tjƒs$tdt|ƒ› �ƒ‚t	|p(dƒ}|r0t
|ƒ tƒ j|tt|ƒ||||||	d� |  ¡ | _|pPt|tt|ƒd�| _d S )NzOInvalid `http_client` argument; Expected an instance of `httpx.Client` but got rz   )rè   rÞ   ré   rÝ   ræ   rå   rç   rß   ©ré   rÞ   )r9   rÞ   ÚHTTPX_DEFAULT_TIMEOUTrH   rŸ   r™   ÚClientr¢   r;  ró   r_   râ  r~   r   r)   Ú_build_middleware_chainrö  rï  r«   )
r|   rè   ré   rÝ   rÞ   rù  rå   ræ   rç   rß   rç  rz   r}   r~   Ø  s4   ÿ÷
ýzSyncAPIClient.__init__c                 C  ó   | j jS ry   ©r«   rû   r…   rz   rz   r}   rû     ó   zSyncAPIClient.is_closedc                 C  s   t | dƒr| j ¡  dS dS )ú`Close the underlying HTTPX client.

        The client will *not* be usable after this.
        r«   N)Úhasattrr«   rð  r…   rz   rz   r}   rð    s   
ÿzSyncAPIClient.closer|   rh   c                 C  s   | S ry   rz   r…   rz   rz   r}   Ú	__enter__  r—   zSyncAPIClient.__enter__Úexc_typeútype[BaseException] | NoneÚexcúBaseException | NoneÚexc_tbúTracebackType | Nonec                 C  s   |   ¡  d S ry   ©rð  ©r|   r  r  r
  rz   rz   r}   Ú__exit__   s   zSyncAPIClient.__exit__r¥   r@   c                 C  s   |S ©z#Hook for mutating the given optionsrz   ©r|   r¥   rz   rz   r}   Ú_prepare_options(  r   zSyncAPIClient._prepare_optionsrÑ   r&  c                 C  r{  ©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.
        Nrz   rg  rz   rz   r}   Ú_prepare_request/  r|  zSyncAPIClient._prepare_requestrX  úType[ResponseT]r`  úLiteral[True]ra  úType[_StreamT]rk   c                C  rx   ry   rz   ©r|   rX  r¥   r`  ra  rz   rz   r}   rÑ   :  ó   zSyncAPIClient.requestF©r`  úLiteral[False]r+   c                C  rx   ry   rz   ©r|   rX  r¥   r`  rz   rz   r}   rÑ   D  s   ©r`  ra  úType[_StreamT] | NoneúResponseT | _StreamTc                C  rx   ry   rz   r  rz   rz   r}   rÑ   M  r  útype[_StreamT] | Nonec                C  s¾  |   ||¡}t|ƒ}|jd u r|j ¡ dkr|  ¡ |_| j}| | j¡}t	|d ƒD ]°}|| }	zO|d u rS| j
t|ƒ||d�\}
}|
jrR| j|||
|||d�W   S n+tt|ƒ||||d�}||ƒ}t|tƒrk|jjr{ttttf |  ||¡ƒW   S |j}
W n4 ty³ } z(|  |¡\}}|	dks”|s•‚ |d ur |js | ¡  | j||||d� W Y d }~q*d }~ww |	dkrÎ|  |
¡rÎ|
jsÄ|
 ¡  | j||||
d� q*|
jsÕ|
 ¡  |  |
¡d ‚tdƒ‚©	Nr2  r   ©r`  r  ©rX  r¥   rø   r`  ra  r  )r¥   rX  r`  ra  r  r   )r  rÝ   r¥   rø   z0could not resolve response (should never happen))r[  r=   r  r4  r  r±  rö  rš  rÝ   ÚrangeÚ_attempt_requestÚ
is_successÚ_process_responserC   rŸ   rE   rb  r   r   r+   rk   Ú_finalize_middleware_resultr  r®  rû   rð  Ú_sleep_for_retryr¥  r  r  rÁ   ©r|   rX  r¥   r`  ra  Úinput_optionsÚchainrÝ   r  r˜  rø   ÚpreparedrÑ   Úresultro  Úshould_retryÚfailed_responserz   rz   r}   rÑ   W  s€   


ÿúÿ
û €ü€òüc                   óD   ˆ j sdS d‡ fdd„}ddd„}|}tˆ j ƒD ]}|||ƒ}q|S )á  Build the middleware invocation chain.

        The chain only depends on the immutable `self._middleware` tuple so it is built
        once at construction time. It is invoked once per HTTP attempt, inside the
        SDK's retry loop, with that attempt's `APIRequest`.
        NÚreqrC   rv   úAPIResponse[Any]c              
     sD   t | ƒ}ˆ j|| j| jd�\}}tdˆ j| j||| j| j| jd�ƒS )Nr!  r3  r"  ©Ú_prepare_middleware_optionsr$  r`  r  r   r&  rX  ra  ©r2  r¥   rø   r,  r…   rz   r}   Úbase_handler¹  s   úþz;SyncAPIClient._build_middleware_chain.<locals>.base_handlerrç   r\   Ú	call_nextrY   c                   ó.   t | tƒr| jntt| ƒ‰d‡ ‡fdd„}|S )Nr2  rC   rv   r3  c                   s
   ˆ| ˆ ƒS ry   rz   ©r2  ©r8  Úhandlerrz   r}   ÚhandleË  ó   
zCSyncAPIClient._build_middleware_chain.<locals>.wrap.<locals>.handle©r2  rC   rv   r3  )rŸ   rZ   r=  r   r]   ©rç   r8  r=  rz   r;  r}   ÚwrapÈ  s   z3SyncAPIClient._build_middleware_chain.<locals>.wrapr?  )rç   r\   r8  rY   rv   rY   ©rä   Úreversed©r|   r7  rA  r+  Úentryrz   r…   r}   rÿ  ¯  s   
z%SyncAPIClient._build_middleware_chainr-  r   rC   c                 C  s\   t |tƒs|S td|ƒ}t|ƒ}|dks|dkr|S |dkr#|  |¡S t|jƒr*|S | ¡ S )aª  Convert the `APIResponse` returned by the middleware chain into the value the original caller expects.

        The middleware chain operates on `APIResponse` objects; the original caller may
        have asked for a parsed model (the default), a `LegacyAPIResponse`
        (`.with_raw_response`) or the `APIResponse` wrapper itself
        (`.with_streaming_response` / a `cast_to` that is itself a response class).
        r3  r_  r`  r¢  ©rŸ   rE   r   Ú_middleware_entry_moderf  Ú_expects_response_wrapperrX  Úparse©r|   r-  rÑ   rø   Ú
entry_moderz   rz   r}   r'  Õ  s   



z)SyncAPIClient._finalize_middleware_resultr   r!  r  ú*tuple[httpx.Response, FinalRequestOptions]c             
   C  s4  |   |¡}| j||d�}|  |¡ i }| jdur| j|d< |jdur'|j|d< t d|j|j¡ z| j	j
|fd|p>| j|d�i|¤Ž}W n8 tjy^ } ztjdd	d
� t|d�|‚d}~w ty| } zt|tƒrk‚ tjdd	d
� t|d�|‚d}~ww t d|j|j|j|j|j¡ t d|j d¡¡ ||fS )õ¦  Prepare, build and send a single HTTP attempt.

        Returns the response regardless of its status code, along with the prepared
        options it was sent with â€” status handling (the retry policy, raising typed
        errors for the caller) happens above, where middleware can inspect error
        responses first. Connection failures raise typed errors (`APITimeoutError`,
        `APIConnectionError`).
        r
  NÚauthr¸  úSending HTTP Request: %s %sr`  ©rÑ   ú"Encountered httpx.TimeoutExceptionT©Úexc_infoúEncountered ExceptionúHTTP Response: %s %s "%i %s" %súrequest_id: %sú
request-id©r  rM  r  rs  r¸  rd   r8  r4  rq   r«   Úsendrh  r™   ÚTimeoutExceptionrV   r  rŸ   rS   rW   rý   Úreason_phraser  r2  ©r|   r¥   r`  r  rÑ   rI  rø   ro  rz   rz   r}   r$  ñ  sL   





ÿþ
ý€
€úúzSyncAPIClient._attempt_requestrø   ú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)rd   r8  r¡  r  r�   rq   r’  Úsleep©r|   r  rÝ   r¥   rø   r˜  rÞ   rz   rz   r}   r(  +  s   zSyncAPIClient._sleep_for_retryr
  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 )Nr¢  ©r_  r¬   rX  r`  ra  r¥   r  ú!API Response types must subclass ú; Received útype[BaseAPIResponse[Any]]rY  )rÑ   r  r2  rL   r   r+   rc   r   rj  rk  rl  rE   r�   rD   r¢   rG   r™   ÚResponserI  ©
r|   rX  r¥   rø   r`  ra  r  ÚoriginÚresponse_clsÚapi_responserz   rz   r}   r&  9  sf   
ùþÿþúú

ùþ

ù	
zSyncAPIClient._process_responser­   úType[object]r¸   úType[SyncPageT]re   c                   s(   d‡ ‡‡fdd„}|ˆ_ ˆj|ˆdd�S )	NrÍ   re   rv   c                   s   | j ˆˆ ˆd� | S )N)r¬   r­   r¥   )r²   rÎ   ©r­   r¥   r|   rz   r}   rÏ   ƒ  s   ýz0SyncAPIClient._request_api_list.<locals>._parserFr  )rÍ   re   rv   re   )rÐ   rÑ   )r|   r­   r¸   r¥   rÏ   rz   rm  r}   rÂ   }  s   zSyncAPIClient._request_api_list©r¥   r`  Úpathr1   c                C  rx   ry   rz   ©r|   ro  rX  r¥   r`  rz   rz   r}   r2  �  r  zSyncAPIClient.get©r¥   útype[_StreamT]c                C  rx   ry   rz   ©r|   ro  rX  r¥   r`  ra  rz   rz   r}   r2  ™  r|  ©r¥   ra  c                C  rx   ry   rz   rs  rz   rz   r}   r2  ¤  r|  ©r¥   r`  ra  c                C  s.   t jdd|dœ|¤Ž}tt| j||||d�ƒS ©Nr2  )r4  rq   r  rz   )r@   Ú	constructr   r+   rÑ   ©r|   ro  rX  r¥   r`  ra  Úoptsrz   rz   r}   r2  ¯  s   	)rú   r'  r¥   r3  r`  rú   úBody | Noner'  úBinaryTypes | Noner3  úRequestFiles | Nonec                C  rx   ry   rz   )r|   ro  rX  rú   r'  r¥   r3  r`  rz   rz   r}   Úpost½  s   zSyncAPIClient.post)rú   r'  r¥   r3  c          	      C  rx   ry   rz   ©	r|   ro  rX  rú   r'  r¥   r3  r`  ra  rz   rz   r}   r}  Ê  ó   )rú   r'  r¥   r3  ra  c          	      C  rx   ry   rz   r~  rz   rz   r}   r}  Ø  r  )rú   r'  r¥   r3  r`  ra  c          
      C  s‚   |d ur|d urt dƒ‚|d ur|d urt dƒ‚t|tƒr%tjdtdd� tjd	d|||t|ƒdœ|¤Ž}	t	t
| j||	||d�ƒS ©
Nú2Passing both `body` and `content` is not supportedú3Passing both `files` and `content` is not supportedú�Passing raw bytes as `body` is deprecated and will be removed in a future version. Please pass raw bytes via the `content` parameter instead.é   ©Ú
stacklevelr}  ©r4  rq   r£   r'  r3  r  rz   )r¢   rŸ   rE  ÚwarningsÚwarnÚDeprecationWarningr@   rw  r#   r   r+   rÑ   )
r|   ro  rX  rú   r'  r¥   r3  r`  ra  ry  rz   rz   r}   r}  æ  s    
üÿÿ©rú   r'  r3  r¥   c                C  óv   |d ur|d urt dƒ‚|d ur|d urt dƒ‚t|tƒr%tjdtdd� tjdd|||t|ƒdœ|¤Ž}|  	||¡S ©	Nr�  r‚  rƒ  r„  r…  Úpatchr‡  rz   ©
r¢   rŸ   rE  rˆ  r‰  rŠ  r@   rw  r#   rÑ   ©r|   ro  rX  rú   r'  r3  r¥   ry  rz   rz   r}   rŽ    ó    

üÿÿzSyncAPIClient.patchc                C  rŒ  ©	Nr�  r‚  rƒ  r„  r…  Úputr‡  rz   r�  r�  rz   rz   r}   r“    r‘  zSyncAPIClient.put©rú   r'  r¥   c                C  sX   |d ur|d urt dƒ‚t|tƒrtjdtdd� tjdd|||dœ|¤Ž}|  ||¡S ©Nr�  rƒ  r„  r…  Údelete)r4  rq   r£   r'  rz   ©	r¢   rŸ   rE  rˆ  r‰  rŠ  r@   rw  rÑ   ©r|   ro  rX  rú   r'  r¥   ry  rz   rz   r}   r–  6  s   	
üzSyncAPIClient.deleter2  ©rú   r¥   r4  r4  c                C  ó&   t jd|||dœ|¤Ž}|  |||¡S ©N)r4  rq   r£   rz   ©r@   rw  rÂ   ©r|   ro  r­   r¸   rú   r¥   r4  ry  rz   rz   r}   Úget_api_listK  ó   
zSyncAPIClient.get_api_list)rè   r�   ré   rê   rÝ   rÜ   rÞ   rú  rù  rû  rå   rì   ræ   rí   rç   rî   rß   r�   rv   rw   r§   rò  ©r|   rh   rv   rh   ©r  r  r  r	  r
  r  rv   rw   ©r¥   r@   rv   r@   ©rÑ   r&  rv   rw   )
rX  r  r¥   r@   r`  r  ra  r  rv   rk   ©rX  r  r¥   r@   r`  r  rv   r+   )
rX  r  r¥   r@   r`  r�   ra  r  rv   r  )
rX  r  r¥   r@   r`  r�   ra  r  rv   r  )rv   rõ  ©r-  r   rÑ   rC   rv   r   ©r¥   r@   r`  r�   r  rÜ   rv   rL  ©
r  rÜ   rÝ   rÜ   r¥   r@   rø   r]  rv   rw   ©rX  r  r¥   r@   rø   rù   r`  r�   ra  ra  r  rÜ   rv   r+   )r­   rk  r¸   rl  r¥   r@   rv   re   ©
ro  r�   rX  r  r¥   r1   r`  r  rv   r+   )ro  r�   rX  r  r¥   r1   r`  r  ra  rr  rv   rk   )ro  r�   rX  r  r¥   r1   r`  r�   ra  r  rv   r  )ro  r�   rX  r  rú   rz  r'  r{  r¥   r1   r3  r|  r`  r  rv   r+   )ro  r�   rX  r  rú   rz  r'  r{  r¥   r1   r3  r|  r`  r  ra  rr  rv   rk   )ro  r�   rX  r  rú   rz  r'  r{  r¥   r1   r3  r|  r`  r�   ra  r  rv   r  )ro  r�   rX  r  rú   rz  r'  r{  r3  r|  r¥   r1   rv   r+   )ro  r�   rX  r  rú   rz  r'  r{  r¥   r1   rv   r+   )ro  r�   r­   rk  r¸   rl  rú   rz  r¥   r1   r4  r�   rv   re   )r„   rˆ   r‰   r‹   râ   rö  r÷  rJ   r5   r~   rû   rð  r  r  r  r  r   rÑ   rÿ  r'  r$  r(  r&  rÂ   r2  r}  rŽ  r“  r–  rž  rì  rz   rz   rç  r}   rª   Ò  sÆ   
 ö
8





	ûúú
X
& û
:ø
Dú	û
ùù÷øöö!øøùørª   c                      r´  )Ú_DefaultAsyncHttpxClientrI  r   rv   rw   c           
        r¶  )NrÞ   r·  r¸  Tr¹  rº  r™  r»  r¼  r½  r¾  r¿  rÀ  c                 S  rÁ  rÂ  rÃ  rÄ  rz   rz   r}   rÅ  r  rÆ  z5_DefaultAsyncHttpxClient.__init__.<locals>.<dictcomp>c                   rÇ  rz   rz   rÈ  rÊ  rz   r}   rÅ  t  rË  rÌ  rÒ  c                   rÓ  rÔ  )r   rÖ  r×  rz   r}   rÅ  z  rÙ  rÚ  rz   )rÛ  rH   rN   rÜ  rÝ  rÞ  r±   rS  rß  rà  r€  rb   r“   r   rá  r2  râ  r~   rã  rç  rè  r}   r~   Z  ré  z!_DefaultAsyncHttpxClient.__init__rê  rë  rz   rz   rç  r}   rª  Y  rí  rª  c                   @  s   e Zd Zddd„ZdS )	Ú_DefaultAioHttpClientÚ_kwargsr   rv   rw   c                 K  s   t dƒ‚)NzVTo use the aiohttp client you must have installed the package with the `aiohttp` extra)rÁ   )r|   r¬  rz   rz   r}   r~   �  r  ú_DefaultAioHttpClient.__init__N)r¬  r   rv   rw   )r„   rˆ   r‰   r~   rz   rz   rz   r}   r«  Ž  rô  r«  c                      r´  )r«  rI  r   rv   rw   c                   s:   |  dt¡ |  dt¡ |  dd¡ tƒ jdi |¤Ž d S )NrÞ   r·  r¸  Trz   )rÛ  rH   rN   râ  r~   )r|   rI  rç  rz   r}   r~   ”  s   r­  rê  rë  rz   rz   rç  r}   r«  “  rí  c                   @  rî  )ÚAsyncHttpxClientWrapperrv   rw   c                 C  s8   | j rd S zt ¡  |  ¡ ¡ W d S  ty   Y d S w ry   )rû   ÚasyncioÚget_running_loopÚcreate_taskÚacloser  r…   rz   rz   r}   rñ  ­  s   ÿzAsyncHttpxClientWrapper.__del__Nrò  ró  rz   rz   rz   r}   r®  ¬  rô  r®  c                      s>  e Zd ZU ded< dZded< dZded< dZded	< eeddddd
œd�‡ fdd „Z	d‘d!d"„Z
d’d#d$„Zd“d'd(„Zd”d/d0„Zd•d3d4„Zd–d7d8„Zed9d:œd—d@dA„ƒZed˜dFdA„ƒZeddGœd™dJdA„ƒZd9ddKœd™dLdA„ZdšdMdN„Zd›dRdS„Zd9dTdUœdœdXdY„Zd�d\d]„ZdTd^œdždadb„ZdŸdhdi„Zei d9djœd dmdn„ƒZei doœd¡dpdn„ƒZei ddqœd¢drdn„ƒZi d9ddsœd¢dtdn„Zedddi d9duœd£d|d}„ƒZedddi d~œd¤dd}„ƒZedddi dd€œd¥d�d}„ƒZdddi d9dd‚œd¥dƒd}„Zdddi d~œd¦d„d…„Zdddi d~œd¦d†d‡„Zddi dˆœd§d‰dŠ„Zdi d‹dŒœd¨dŽd�„Z‡  ZS )©rÆ   zhttpx.AsyncClientr«   Nztype[AsyncStream[Any]] | Nonerâ   úAsyncCallNext | Nonerö  rà   r÷  rø  rè   r�   ré   rê   rß   r�   rÝ   rÜ   rÞ   rú  rù  úhttpx.AsyncClient | Nonerå   rì   ræ   rí   rç   rî   rv   rw   c       	   
   
     s¨   t |ƒs|r|jtkr|j}nt}|d ur$t|tjƒs$tdt|ƒ› �ƒ‚t	|	p(dƒ}	|	r0t
|	ƒ tƒ j||tt|ƒ||||	|d� |  ¡ | _|pPt|tt|ƒd�| _d S )NzTInvalid `http_client` argument; Expected an instance of `httpx.AsyncClient` but got rz   )rè   ré   rÞ   rÝ   ræ   rå   rç   rß   rü  )r9   rÞ   rý  rH   rŸ   r™   ÚAsyncClientr¢   r;  ró   r`   râ  r~   r   r)   rÿ  rö  r®  r«   )
r|   rè   ré   rß   rÝ   rÞ   rù  rå   ræ   rç   rç  rz   r}   r~   ¾  s4   ÿ÷
ýzAsyncAPIClient.__init__c                 C  r   ry   r  r…   rz   rz   r}   rû   ö  r  zAsyncAPIClient.is_closedc                 Ã  s   �| j  ¡ I dH  dS )r  N)r«   r²  r…   rz   rz   r}   rð  ù  s   €zAsyncAPIClient.closer|   rh   c                 Ã  s   �| S ry   rz   r…   rz   rz   r}   Ú
__aenter__   s   €zAsyncAPIClient.__aenter__r  r  r  r	  r
  r  c                 Ã  s   �|   ¡ I d H  d S ry   r  r  rz   rz   r}   Ú	__aexit__  s   €zAsyncAPIClient.__aexit__r¥   r@   c                 Ã  s   �|S r  rz   r  rz   rz   r}   r    s   €zAsyncAPIClient._prepare_optionsrÑ   r&  c                 Ã  s   �dS r  rz   rg  rz   rz   r}   r    ó   €	zAsyncAPIClient._prepare_requestFr  rX  r  r`  r  r+   c                Ã  ó   �d S ry   rz   r  rz   rz   r}   rÑ     s   €zAsyncAPIClient.requestr  ra  útype[_AsyncStreamT]rl   c                Ã  r¹  ry   rz   r  rz   rz   r}   rÑ   &  ó   €)ra  útype[_AsyncStreamT] | NoneúResponseT | _AsyncStreamTc                Ã  r¹  ry   rz   r  rz   rz   r}   rÑ   0  r»  r  c                Ã  s  �| j d u rttƒƒ I d H | _ |  ||¡}t|ƒ}|jd u r*|j ¡ dkr*|  ¡ |_| j	}| 
| j¡}t|d ƒD ]Ë}|| }	z[|d u rh| jt|ƒ||d�I d H \}
}|
jrg| j|||
|||d�I d H W   S n1tt|ƒ||||d�}||ƒI d H }t|tƒrƒ|jjr–ttttf |  ||¡I d H ƒW   S |j}
W n: tyÔ } z.|  |¡\}}|	dks¯|s°‚ |d ur¾|js¾| ¡ I d H  | j||||d�I d H  W Y d }~q9d }~ww |	dkrõ|  |
¡rõ|
jsè|
 ¡ I d H  | j||||
d�I d H  q9|
jsÿ|
 ¡ I d H  |   |
¡d ‚t!dƒ‚r   )"rò   r8   Úget_platformr[  r=   r  r4  r  r±  rö  rš  rÝ   r#  r$  r%  r&  rC   rŸ   rE   rb  r   r   r+   rl   r'  r  r®  rû   r²  r(  r¥  Úareadr  rÁ   r)  rz   rz   r}   rÑ   :  sŠ   €


ÿúÿ
û
ÿ€ü€òüc                   r0  )r1  Nr2  rC   rv   úAsyncAPIResponse[Any]c              
   “  sR   �t | ƒ}ˆ j|| j| jd�I d H \}}tdˆ j| j||| j| j| jd�I d H ƒS )Nr!  rÀ  r"  r4  r6  r…   rz   r}   r7  £  s    €
ÿ
úþz<AsyncAPIClient._build_middleware_chain.<locals>.base_handlerrç   r\   r8  r[   c                   r9  )Nr2  rC   rv   rÀ  c                 “  s   �ˆ| ˆ ƒI d H S ry   rz   r:  r;  rz   r}   r=  »  s   €zDAsyncAPIClient._build_middleware_chain.<locals>.wrap.<locals>.handle©r2  rC   rv   rÀ  )rŸ   rZ   Úhandle_asyncr   r^   r@  rz   r;  r}   rA  ´  s   ÿýz4AsyncAPIClient._build_middleware_chain.<locals>.wraprÁ  )rç   r\   r8  r[   rv   r[   rB  rD  rz   r…   r}   rÿ  ™  s   
z&AsyncAPIClient._build_middleware_chainr-  r   rC   c                 Ã  sd   �t |tƒs|S td|ƒ}t|ƒ}|dks|dkr|S |dkr$|  |¡S t|jƒr+|S | ¡ I dH S )a¹  Convert the `AsyncAPIResponse` returned by the middleware chain into the value the original caller expects.

        The middleware chain operates on `AsyncAPIResponse` objects; the original caller
        may have asked for a parsed model (the default), a `LegacyAPIResponse`
        (`.with_raw_response`) or the `AsyncAPIResponse` wrapper itself
        (`.with_streaming_response` / a `cast_to` that is itself a response class).
        rÀ  r_  r`  r¢  NrF  rJ  rz   rz   r}   r'  Å  s   €



z*AsyncAPIClient._finalize_middleware_resultr   r!  r  rL  c             
   Ã  sH  �|   |¡I dH }| j||d�}|  |¡I dH  i }| jdur$| j|d< |jdur.|j|d< t d|j|j¡ z| j	j
|fd|pE| j|d�i|¤ŽI dH }W n8 tjyh } ztjdd	d
� t|d�|‚d}~w ty† } zt|tƒru‚ tjdd	d
� t|d�|‚d}~ww t d|j|j|j|j|j¡ t d|j d¡¡ ||fS )rM  Nr
  rN  r¸  rO  r`  rP  rQ  TrR  rT  rU  rV  rW  rX  r\  rz   rz   r}   r$  á  sN   €



ÿþý€
€úúzAsyncAPIClient._attempt_requestrø   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^  )rd   r8  r¡  r  r�   rq   Úanyior_  r`  rz   rz   r}   r(    s   €zAsyncAPIClient._sleep_for_retryr
  rù   ra  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 )Nr¢  rb  rc  rd  re  r+   rY  )rÑ   r  r2  rL   r   r+   rc   r   rj  rk  rl  rE   r�   rF   r¢   rG   r™   rf  rI  rg  rz   rz   r}   r&  )  sh   €
ùþÿþúú

ùþ

ù	
z AsyncAPIClient._process_responser­   rŽ   r¸   rÈ   úAsyncPaginator[_T, AsyncPageT]c                 C  s   t | |||d�S )N)r¬   r¥   rÇ   r­   )rÅ   )r|   r­   r¸   r¥   rz   rz   r}   rÂ   m  s   z AsyncAPIClient._request_api_listrn  ro  r1   c                Ã  r¹  ry   rz   rp  rz   rz   r}   r2  u  r»  zAsyncAPIClient.getrq  c                Ã  r¹  ry   rz   rs  rz   rz   r}   r2    r¸  rt  c                Ã  r¹  ry   rz   rs  rz   rz   r}   r2  Š  r¸  ru  c                Ã  s0   �t jdd|dœ|¤Ž}| j||||d�I d H S rv  )r@   rw  rÑ   rx  rz   rz   r}   r2  •  s   €	)rú   r'  r3  r¥   r`  rú   rz  r'  úAsyncBinaryTypes | Noner3  r|  c                Ã  r¹  ry   rz   )r|   ro  rX  rú   r'  r3  r¥   r`  rz   rz   r}   r}  ¡  s   €zAsyncAPIClient.postr‹  c          	      Ã  r¹  ry   rz   ©	r|   ro  rX  rú   r'  r3  r¥   r`  ra  rz   rz   r}   r}  ®  ó   €)rú   r'  r3  r¥   ra  c          	      Ã  r¹  ry   rz   rÆ  rz   rz   r}   r}  ¼  rÇ  )rú   r'  r3  r¥   r`  ra  c          
      Ã  sŠ   �|d ur|d urt dƒ‚|d ur|d urt dƒ‚t|tƒr&tjdtdd� tjd	d|||t|ƒI d H dœ|¤Ž}	| j	||	||d�I d H S r€  ©
r¢   rŸ   rE  rˆ  r‰  rŠ  r@   rw  r$   rÑ   )
r|   ro  rX  rú   r'  r3  r¥   r`  ra  ry  rz   rz   r}   r}  Ê  s"   €
üÿÿc                Ã  ó„   �|d ur|d urt dƒ‚|d ur|d urt dƒ‚t|tƒr&tjdtdd� tjdd|||t|ƒI d H dœ|¤Ž}|  	||¡I d H S r�  rÈ  r�  rz   rz   r}   rŽ  æ  s*   €

üûúzAsyncAPIClient.patchc                Ã  rÉ  r’  rÈ  r�  rz   rz   r}   r“  	  s"   €

üÿÿzAsyncAPIClient.putr”  c                Ã  s`   �|d ur|d urt dƒ‚t|tƒrtjdtdd� tjdd|||dœ|¤Ž}|  ||¡I d H S r•  r—  r˜  rz   rz   r}   r–  	  s   €	
üzAsyncAPIClient.deleter2  r™  r4  c                C  rš  r›  rœ  r�  rz   rz   r}   rž  4	  rŸ  zAsyncAPIClient.get_api_list)rè   r�   ré   rê   rß   r�   rÝ   rÜ   rÞ   rú  rù  r´  rå   rì   ræ   rí   rç   rî   rv   rw   r§   rò  r   r¡  r¢  r£  r¤  )
rX  r  r¥   r@   r`  r  ra  rº  rv   rl   )
rX  r  r¥   r@   r`  r�   ra  r¼  rv   r½  )rv   r³  r¥  r¦  r§  r¨  )r­   rŽ   r¸   rÈ   r¥   r@   rv   rÄ  r©  )ro  r�   rX  r  r¥   r1   r`  r  ra  rº  rv   rl   )ro  r�   rX  r  r¥   r1   r`  r�   ra  r¼  rv   r½  )ro  r�   rX  r  rú   rz  r'  rÅ  r3  r|  r¥   r1   r`  r  rv   r+   )ro  r�   rX  r  rú   rz  r'  rÅ  r3  r|  r¥   r1   r`  r  ra  rº  rv   rl   )ro  r�   rX  r  rú   rz  r'  rÅ  r3  r|  r¥   r1   r`  r�   ra  r¼  rv   r½  )ro  r�   rX  r  rú   rz  r'  rÅ  r3  r|  r¥   r1   rv   r+   )ro  r�   rX  r  rú   rz  r'  rÅ  r¥   r1   rv   r+   )ro  r�   r­   rŽ   r¸   rÈ   rú   rz  r¥   r1   r4  r�   rv   rÄ  )r„   rˆ   r‰   r‹   râ   rö  r÷  rJ   r5   r~   rû   rð  r¶  r·  r  r  r   rÑ   rÿ  r'  r$  r(  r&  rÂ   r2  r}  rŽ  r“  r–  rž  rì  rz   rz   rç  r}   rÆ   ¸  sÄ   
 õ
8




û	úú
_
, û
:ø
Dú	û
ùù÷øöö!ø$øùørÆ   )rA  Úextra_headersÚextra_queryÚ
extra_bodyr  rÞ   rÐ   rA  úQuery | NonerÊ  úHeaders | NonerË  rÌ  rz  r  rà   rÞ   ú'float | httpx.Timeout | None | NotGivenrÐ   úPostParser | NotGivenrv   r1   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  r9  rs   rÞ   r  rÐ   )r   r,   r2  rŸ   r*   r9   )rA  rÊ  rË  rÌ  r  rÞ   rÐ   r¥   rz   rz   r}   Úmake_request_optionsB	  s    
rÑ  c                   @  rî  )r@  rv   r�   c                 C  r{  )NTrz   r…   rz   rz   r}   Ú__bool__h	  r—   zForceMultipartDict.__bool__Nr§   )r„   rˆ   r‰   rÒ  rz   rz   rz   r}   r@  g	  rô  r@  c                   @  ó$   e Zd Zd
dd„Zeddd„ƒZd	S )ÚOtherPlatformÚnamer�   rv   rw   c                 C  ó
   || _ d S ry   ©rÕ  ©r|   rÕ  rz   rz   r}   r~   m	  r>  zOtherPlatform.__init__c                 C  ó   d| j › �S )NzOther:r×  r…   rz   rz   r}   Ú__str__p	  ó   zOtherPlatform.__str__N©rÕ  r�   rv   rw   r‡   ©r„   rˆ   r‰   r~   r   rÚ  rz   rz   rz   r}   rÔ  l	  ó    
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ä  r»  rß  Úwindowsrá  Úandroidrå  ÚlinuxÚfreebsdrâ  Úopenbsdrã  rà  )r€  Úsystemr  r  Údistror©  rÔ  )rï  Úplatform_nameÚ	distro_idrz   rz   r}   r¾  „	  s0   ÿr¾  )Úmaxsizerè   r�   r€  úPlatform | Noner  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€  rz   rz   r}   rz  ®	  s   úrz  c                   @  rÓ  )Ú	OtherArchrÕ  r�   rv   rw   c                 C  rÖ  ry   r×  rØ  rz   rz   r}   r~   »	  r>  zOtherArch.__init__c                 C  rÙ  )Nzother:r×  r…   rz   rz   r}   rÚ  ¾	  rÛ  zOtherArch.__str__NrÜ  r‡   rÝ  rz   rz   rz   r}   rù  º	  rÞ  rù  )Úx32Úx64ÚarmÚarm64Úunknownc                   C  ó    zt  ¡ W S  ty   Y dS w ©Nrþ  )r€  Úpython_implementationr  rz   rz   rz   r}   r÷  Æ	  ó
   
ÿr÷  c                   C  rÿ  r   )r€  Úpython_versionr  rz   rz   rz   r}   rø  Í	  r  rø  Ú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þ  )rý  Úaarch64rý  rü  Úx86_64rû  l        rú  )r€  Úmachiner  r  rà  ró  rù  )r  rz   rz   r}   rö  Ô	  s    ÿ
rö  ÚmappingúMapping[_T_co, Union[_T, Omit]]úDict[_T_co, _T]c                 C  s   dd„ |   ¡ D ƒS )z5Drop entries whose value is an `Omit` removal marker.c                 S  s    i | ]\}}t |tƒs||“qS rz   )rŸ   r&   )r  rU  rV  rz   rz   r}   rÅ  ð	  s     z_strip_omit.<locals>.<dictcomp>)r“   )r  rz   rz   r}   r  î	  s   r  Úobj1Úobj2c                 C  s   t i | ¥|¥ƒS )z¢Merge two mappings of the same type, removing any values that are instances of `Omit`.

    In cases with duplicate keys the second mapping takes precedence.
    )r  )r  r  rz   rz   r}   r:  ó	  s   r:  zx-stainless-helperrW  Úadditionc                 C  sX   dd„ dd„ |   d¡D ƒD ƒ}dd„ |  d¡D ƒD ]}|r&||vr&| |¡ qd |¡S )a  Append `addition` to a comma-separated header value, skipping tokens that
    are already present so the same helper isn't recorded twice.

    Values are joined with `", "`, the same format `lib._stainless_helpers` uses
    when it builds the `x-stainless-helper` header.
    c                 S  s   g | ]}|r|‘qS rz   rz   )r  Útokenrz   rz   r}   r  
  r  z(_append_header_value.<locals>.<listcomp>c                 s  ó   � | ]}|  ¡ V  qd S ry   ©rÿ   ©r  r_  rz   rz   r}   Ú	<genexpr>
  ó   € z'_append_header_value.<locals>.<genexpr>ú,c                 s  r  ry   r  r  rz   rz   r}   r  
  r  z, )rB  rS  Újoin)rW  r  Útokensr  rz   rz   r}   Ú_append_header_value
  s   
€
r  ÚmappingsúMapping[str, Union[str, Omit]]c                  G  sz   i }| D ]3}|  ¡ D ],\}}| ¡ }|tvr|||< q
| |¡}t|tƒr2t|tƒr2t||ƒ||< q
|||< q
qtd|ƒS )a¬  Merge header mappings, with later mappings taking precedence on a key
    clash, exactly like `_merge_mappings`.

    The exception is the headers in `_APPEND_HEADERS`: those keys are matched
    case-insensitively (and stored under their lowercase form) and their string
    values accumulate into a single comma-separated, deduplicated value instead
    of the later one overriding the earlier one.

    `Omit` values are preserved (they mark a header for removal and are only
    dropped at request-build time, e.g. with `_strip_omit`); the
    `Dict[str, str]` return type is the same fudge the rest of the header
    plumbing already uses for `Omit`-bearing header mappings.
    r  )r“   r  Ú_APPEND_HEADERSr2  rŸ   r�   r  r   )r  Úmergedr  rU  rV  r  rW  rz   rz   r}   r  
  s   

ò
r  rÑ   rC   ú'Literal['raw', 'stream', 'true'] | Nonec                 C  s8   | j j}t|ƒr| t¡nd}t|tƒr|dv r|S dS )zLThe raw-response mode the original caller entered the middleware chain with.N)r_  r`  r¢  )r¥   r  r9   r2  rL   rŸ   r�   )rÑ   r  Úmoderz   rz   r}   rG  8
  s
   rG  r@   c                 C  sB   t | jƒ}t|jƒrt|jƒni }| t¡dvrd|t< ||_|S )at  Build the options the base middleware handler hands to `_attempt_request()`.

    Returns a copy so that mutations made by the request pipeline never leak back
    into the `APIRequest` between separate `call_next(...)` invocations, with the
    raw-response header set so that the pipeline produces an `APIResponse` /
    `AsyncAPIResponse` for the middleware chain.
    )r_  r`  r_  )r=   r¥   r9   r  r¡   r2  rL   )rÑ   r¥   r  rz   rz   r}   r5  B
  s   
r5  rX  r   r�   c                 C  s    t | ƒp| }t |¡ot|tƒS )zFWhether the given `cast_to` asks for the `APIResponse` wrapper itself.)r   rj  rk  rl  rE   )rX  rh  rz   rz   r}   rH  X
  s   rH  )rA  rÍ  rÊ  rÎ  rË  rÍ  rÌ  rz  r  rà   rÞ   rÏ  rÐ   rÐ  rv   r1   )rv   rç  )rè   r�   r€  rô  rv   r  r‡   )rv   r  )r  r	  rv   r
  )r  r	  r  r	  rv   r
  )rW  r�   r  r�   rv   r�   )r  r  rv   r  )rÑ   rC   rv   r  )rÑ   rC   rv   r@   )rX  r   rv   r�   )¼Ú
__future__r   rà  ru   r’  r¯  rŽ  rÜ  r¯  rj  r6  r€  rˆ  Úemail.utilsÚtypesr   r   Útypingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Útyping_extensionsr   r   r   rÃ  r™   rð  rÄ   r   r   r   r   r   Ú r    Ú_qsr"   Ú_filesr#   r$   Ú_typesr%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   Ú_utilsr6   r7   r8   r9   r:   r;   Ú_compatr<   r=   r>   Ú_modelsr?   r@   rA   rB   Ú_requestrC   Ú	_responserD   rE   rF   rG   Ú
_constantsrH   rI   rJ   rK   rL   rM   rN   Ú
_streamingrO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rä   rY   rZ   r[   r\   r]   r^   r_   r`   Ú_utils._jsonra   Ú_utils._httpxrb   Ú_legacy_responserc   Ú	getLoggerr„   rd   r‹   re   rg   rh   ri   rk   rl   Úhttpx._configrm   rý  ÚImportErrorro   rŒ   r©   rÅ   rÕ   rþ  rµ  r×   rØ   rÙ   rµ  ÚDefaultHttpxClientrï  rª   rª  Úhttpx_aiohttpr«  ÚHttpxAiohttpClientÚDefaultAsyncHttpxClientÚDefaultAioHttpClientr®  rÆ   rÑ  r�   r@  rÔ  rç  r¾  rz  rù  r  r÷  rø  rö  r  r:  Ú	frozensetr  r  r  rG  r5  rH  rz   rz   rz   r}   Ú<module>   s   PL $	 (
þ3=1')    1     1þ	     ø%	ÿÿÿ
*	








#

