o
    ØRWjÖ4  ã                   @  s°  d dl 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
mZmZmZmZmZmZ d dlmZ d dlmZmZ d dlmZmZ d dlZddlmZmZmZmZmZ ed	ƒZed
e	e df d�Z!ede
e"e f d�Z#edee  d�Z$ededef d�Z%erŠddl&m'Z'm(Z( d�dd„Z)ddœdžd d!„Z*dŸd%d&„Z+d d.d/„Z,d¡d2d3„Z-d¢d5d6„Z.d£d9d:„Z/d¤d<d=„Z0d¥d@dA„Z1d¦dCdD„Z2d§dGdH„Z3d¨dJdK„Z4d©dMdN„Z5dªdPdQ„Z6dRdSdTœd«dXdY„Z7d¬d[d\„Z8d­d_d`„Z9edaƒZ:edbƒZ;ed®ddde„ƒZ<ed¯dhde„ƒZ<ed°dide„ƒZ<d±dkde„Z<d²dmdn„Z=d³dpdq„Z>d´dsdt„Z?dµdvdw„Z@d¶dydz„ZAd·d|d}„ZBd¸dd€„ZCd¹d‚dƒ„ZDdºd…d†„ZEd»dŠd‹„ZFd¼dŒd�„ZGdŽd�œd½d‘d’„ZHd¾d”d•„ZId¿d˜d™„ZJdÀd›dœ„ZKdS )Áé    )ÚannotationsN)
ÚTYPE_CHECKINGÚAnyÚTupleÚMappingÚTypeVarÚCallableÚIterableÚSequenceÚcastÚoverload)ÚPath)ÚdateÚdatetime)Ú	TypeGuardÚget_argsé   )ÚOmitÚNotGivenÚ	FileTypesÚArrayFormatÚHeadersLikeÚ_TÚ_TupleT.)ÚboundÚ	_MappingTÚ
_SequenceTÚ	CallableT)ÚAzureOpenAIÚAsyncAzureOpenAIÚtúIterable[Iterable[_T]]Úreturnúlist[_T]c                 C  s   dd„ | D ƒS )Nc                 S  s   g | ]	}|D ]}|‘qqS © r$   )Ú.0ÚsublistÚitemr$   r$   úc/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/openai/_utils/_utils.pyÚ
<listcomp>&   s    zflatten.<locals>.<listcomp>r$   )r    r$   r$   r(   Úflatten%   s   r*   Úbrackets)Úarray_formatÚqueryúMapping[str, object]ÚpathsúSequence[Sequence[str]]r,   r   úlist[tuple[str, FileTypes]]c             
   C  s*   g }|D ]}|  t| |dd|d�¡ q|S )a¨  Recursively extract files from the given dictionary based on specified paths.

    A path may look like this ['foo', 'files', '<array>', 'data'].

    ``array_format`` controls how ``<array>`` segments contribute to the emitted
    field name. Supported values: ``"brackets"`` (``foo[]``), ``"repeat"`` and
    ``"comma"`` (``foo``), ``"indices"`` (``foo[0]``, ``foo[1]``).

    Note: this mutates the given dictionary.
    r   N©ÚindexÚflattened_keyr,   )ÚextendÚ_extract_items)r-   r/   r,   ÚfilesÚpathr$   r$   r(   Úextract_files)   s   r9   Úarray_indexÚintÚstrc                 C  sR   | dkrdS | dkrd|› d�S | dks| dkrdS t d	| › d
d ttƒ¡› �ƒ‚)Nr+   z[]Úindicesú[ú]ÚrepeatÚcommaÚ zUnknown array_format value: z, choose from ú, )ÚNotImplementedErrorÚjoinr   r   )r,   r:   r$   r$   r(   Ú_array_suffixA   s   ÿrF   ÚobjÚobjectr8   úSequence[str]r3   r4   ú
str | Nonec             
     s†  zˆˆ }W n[ t ya   t| ƒsg  Y S ddlm} ˆd us!J ‚t| ƒrQg }t| ƒD ]!\}}	tˆ |ƒ}
ˆr:ˆ|
 n|
}||	|d� | |tt	|	ƒf¡ q+| Y S || ˆd� ˆtt	| ƒfg Y S w ˆd7 ‰t
| ƒr§ztdd„ ˆˆd … D ƒƒr~|  |¡}n| | }W n tyŽ   g  Y S w ˆd u r–|‰nˆd|› d�7 ‰t|ˆˆˆˆ d	�S t| ƒrÁ|d
kr±g S t‡ ‡‡‡fdd„t| ƒD ƒƒS g S )Nr   )Úassert_is_file_content)Úkeyé   c                 s  s   � | ]}|d kV  qdS )ú<array>Nr$   )r%   Úpr$   r$   r(   Ú	<genexpr>u   ó   € z!_extract_items.<locals>.<genexpr>r>   r?   r2   rN   c              
     s8   g | ]\}}t |ˆˆˆd urˆndtˆ |ƒ ˆ d�‘qS )NrB   r2   )r6   rF   )r%   r:   r'   ©r,   r4   r3   r8   r$   r(   r)   Ž   s    
÷ùÿz"_extract_items.<locals>.<listcomp>)Ú
IndexErrorÚis_givenÚ_filesrK   Úis_listÚ	enumeraterF   Úappendr   r   Úis_dictÚallÚpopÚKeyErrorr6   r*   )rG   r8   r3   r4   r,   rL   rK   r7   r:   ÚentryÚsuffixÚemitted_keyr'   r$   rR   r(   r6   O   s^   
ë€üû
öÿr6   ú_T | NotGiven | OmitúTypeGuard[_T]c                 C  s   t | tƒ ot | tƒ S ©N)Ú
isinstancer   r   ©rG   r$   r$   r(   rT       ó   rT   úTypeGuard[tuple[object, ...]]c                 C  ó
   t | tƒS rb   ©rc   Útuplerd   r$   r$   r(   Úis_tuple®   ó   
rj   ú_TupleT | objectúTypeGuard[_TupleT]c                 C  rg   rb   rh   rd   r$   r$   r(   Ú
is_tuple_t²   rk   rn   úTypeGuard[Sequence[object]]c                 C  rg   rb   ©rc   r
   rd   r$   r$   r(   Úis_sequence¶   rk   rq   ú_SequenceT | objectúTypeGuard[_SequenceT]c                 C  rg   rb   rp   rd   r$   r$   r(   Úis_sequence_tº   rk   rt   úTypeGuard[Mapping[str, object]]c                 C  rg   rb   ©rc   r   rd   r$   r$   r(   Ú
is_mapping¾   rk   rw   ú_MappingT | objectúTypeGuard[_MappingT]c                 C  rg   rb   rv   rd   r$   r$   r(   Úis_mapping_tÂ   rk   rz   úTypeGuard[dict[object, object]]c                 C  rg   rb   )rc   Údictrd   r$   r$   r(   rY   Æ   rk   rY   úTypeGuard[list[object]]c                 C  rg   rb   )rc   Úlistrd   r$   r$   r(   rV   Ê   rk   rV   úTypeGuard[Iterable[object]]c                 C  rg   rb   )rc   r	   rd   r$   r$   r(   Úis_iterableÎ   rk   r€   rC   Úor)ÚdelimÚfinalÚseqr‚   rƒ   c                C  sn   t | ƒ}|dkr
dS |dkr| d S |dkr$| d › d|› d| d › �S | | d d… ¡d|› d| d › � S )Nr   rB   rM   r   ú éÿÿÿÿ)ÚlenrE   )r„   r‚   rƒ   Úsizer$   r$   r(   Ú
human_joinÓ   s   &r‰   Ústringc                 C  s   d| › d�S )zOAdd single quotation marks around the given string. Does *not* do any escaping.ú'r$   )rŠ   r$   r$   r(   Úquoteá   s   rŒ   Úvariantsú Callable[[CallableT], CallableT]c                    s   d‡ fdd„}|S )a4  Decorator to enforce a given set of arguments or variants of arguments are passed to the decorated function.

    Useful for enforcing runtime validation of overloaded functions.

    Example usage:
    ```py
    @overload
    def foo(*, a: str) -> str: ...


    @overload
    def foo(*, b: bool) -> str: ...


    # This enforces the same constraints that a static type checker would
    # i.e. that either a or b must be passed to the function
    @required_args(["a"], ["b"])
    def foo(*, a: str | None = None, b: bool | None = None) -> str: ...
    ```
    Úfuncr   r"   c                   s>   t  ˆ ¡j}dd„ | ¡ D ƒ‰t ˆ ¡d	‡ ‡‡fdd„ƒ}|S )
Nc                 S  s&   g | ]\}}|j |j|jhv r|‘qS r$   )ÚkindÚPOSITIONAL_ONLYÚPOSITIONAL_OR_KEYWORD)r%   ÚnameÚparamr$   r$   r(   r)   þ   s    þÿþz0required_args.<locals>.inner.<locals>.<listcomp>ÚargsrH   Úkwargsr"   c            
        sH  t ƒ ‰ t| ƒD ]'\}}z	ˆ  ˆ| ¡ W q ty.   tˆj› dtˆƒ› dt| ƒ› d�ƒd ‚w | ¡ D ]}ˆ  |¡ q3ˆD ]}t‡ fdd„|D ƒƒ}|rN nOq=tˆƒdkrht	dd„ ˆD ƒƒ}d	|› d
�}t|ƒ‚tˆƒdkspJ ‚t
t ˆd ƒˆ  ƒ}	t|	ƒdkr�dt	dd„ |	D ƒƒ› �}t|ƒ‚dt|	d ƒ› �}t|ƒ‚ˆ| i |¤ŽS )Nz	() takes z argument(s) but z were givenc                 3  s   � | ]}|ˆ v V  qd S rb   r$   )r%   r”   ©Úgiven_paramsr$   r(   rP     rQ   z@required_args.<locals>.inner.<locals>.wrapper.<locals>.<genexpr>rM   c                 S  s*   g | ]}d t dd„ |D ƒdd� d ‘qS )ú(c                 S  ó   g | ]}t |ƒ‘qS r$   ©rŒ   ©r%   Úargr$   r$   r(   r)     ó    zLrequired_args.<locals>.inner.<locals>.wrapper.<locals>.<listcomp>.<listcomp>Úand)rƒ   ú))r‰   )r%   Úvariantr$   r$   r(   r)     s   * zArequired_args.<locals>.inner.<locals>.wrapper.<locals>.<listcomp>z,Missing required arguments; Expected either z arguments to be givenr   zMissing required arguments: c                 S  rš   r$   r›   rœ   r$   r$   r(   r)   &  rž   zMissing required argument: )ÚsetrW   ÚaddrS   Ú	TypeErrorÚ__name__r‡   ÚkeysrZ   r‰   r~   rŒ   )
r•   r–   ÚiÚ_rL   r¡   ÚmatchesÚ
variationsÚmsgÚmissing)r�   Ú
positionalr�   r—   r(   Úwrapper  s@   ÿþÿÿÿ
øÿz-required_args.<locals>.inner.<locals>.wrapper)r•   rH   r–   rH   r"   rH   )ÚinspectÚ	signatureÚ
parametersÚitemsÚ	functoolsÚwraps)r�   Úparamsr®   ©r�   )r�   r­   r(   Úinnerü   s   þ
#zrequired_args.<locals>.innerN)r�   r   r"   r   r$   )r�   r·   r$   r¶   r(   Úrequired_argsæ   s   2r¸   Ú_KÚ_VÚNonec                 C  ó   d S rb   r$   rd   r$   r$   r(   Ústrip_not_given5  ó   r½   úMapping[_K, _V | NotGiven]údict[_K, _V]c                 C  r¼   rb   r$   rd   r$   r$   r(   r½   9  r¾   c                 C  r¼   rb   r$   rd   r$   r$   r(   r½   =  r¾   úobject | Nonec                 C  s*   | du rdS t | ƒs| S dd„ |  ¡ D ƒS )zHRemove all top-level keys where their values are instances of `NotGiven`Nc                 S  s    i | ]\}}t |tƒs||“qS r$   )rc   r   ©r%   rL   Úvaluer$   r$   r(   Ú
<dictcomp>I  s     z#strip_not_given.<locals>.<dictcomp>)rw   r²   rd   r$   r$   r(   r½   A  s
   Úvalc                 C  s   t | dd�S )Né
   )Úbase)r;   ©rÅ   r$   r$   r(   Úcoerce_integerL  s   rÉ   Úfloatc                 C  s   t | ƒS rb   )rÊ   rÈ   r$   r$   r(   Úcoerce_floatP  s   rË   Úboolc                 C  s   | dkp| dkp| dkS )NÚtrueÚ1Úonr$   rÈ   r$   r$   r(   Úcoerce_booleanT  re   rÐ   ú
int | Nonec                 C  ó   | d u rd S t | ƒS rb   )rÉ   rÈ   r$   r$   r(   Úmaybe_coerce_integerX  ó   rÓ   úfloat | Nonec                 C  rÒ   rb   )rË   rÈ   r$   r$   r(   Úmaybe_coerce_float^  rÔ   rÖ   úbool | Nonec                 C  rÒ   rb   )rÐ   rÈ   r$   r$   r(   Úmaybe_coerce_booleand  rÔ   rØ   Úprefixc                 C  s   |   |¡r| t|ƒd… S | S )zXRemove a prefix from a string.

    Backport of `str.removeprefix` for Python < 3.9
    N)Ú
startswithr‡   )rŠ   rÙ   r$   r$   r(   Úremoveprefixj  s   
rÛ   r^   c                 C  s    |   |¡r| dt|ƒ … S | S )zXRemove a suffix from a string.

    Backport of `str.removesuffix` for Python < 3.9
    N)Úendswithr‡   )rŠ   r^   r$   r$   r(   Úremovesuffixt  s   
rÝ   r   c                 C  s    t | ƒ ¡ }tj | ¡}||fS rb   )r   Ú
read_bytesÚosr8   Úbasename)r8   ÚcontentsÚ	file_namer$   r$   r(   Úfile_from_path~  s   rã   Úheadersr   Úheaderc                 C  s’   |  ¡ }t| ƒr |  ¡ D ]\}}|  ¡ |krt|tƒr|  S qt ddd„ | ¡ ¡}||| ¡ |fD ]}|  	|¡}|r@|  S q3t
d|› d�ƒ‚)Nz([^\w])(\w)c                 S  s   |   d¡|   d¡ ¡  S )NrM   r   )ÚgroupÚupper)Úpatr$   r$   r(   Ú<lambda>�  s    z%get_required_header.<locals>.<lambda>zCould not find z header)Úlowerrz   r²   rc   r<   ÚreÚsubÚ
capitalizerç   ÚgetÚ
ValueError)rä   rå   Úlower_headerÚkÚvÚintercaps_headerÚnormalized_headerrÃ   r$   r$   r(   Úget_required_header„  s   €
ÿrõ   c                   C  s    zt  ¡ W S  ty   Y dS w )NÚfalse)ÚsniffioÚcurrent_async_libraryÚ	Exceptionr$   r$   r$   r(   Úget_async_library—  s
   
ÿrú   é€   ©Úmaxsizerý   c                 C  s   t j| d�}tt|ƒS )zmA version of functools.lru_cache that retains the type signature
    for the wrapped function arguments.
    rü   )r³   Ú	lru_cacher   r   )rý   r®   r$   r$   r(   rþ   ž  s   ÿ
rþ   Údatac                 C  sZ   t | ƒrdd„ |  ¡ D ƒS t| ƒr t| tttfƒs dd„ | D ƒS t| ttfƒr+|  	¡ S | S )zvTranslates a mapping / sequence recursively in the same fashion
    as `pydantic` v2's `model_dump(mode="json")`.
    c                 S  s   i | ]\}}t |ƒt |ƒ“qS r$   ©Ú	json_saferÂ   r$   r$   r(   rÄ   ­  s    zjson_safe.<locals>.<dictcomp>c                 S  rš   r$   r   )r%   r'   r$   r$   r(   r)   °  rž   zjson_safe.<locals>.<listcomp>)
rw   r²   r€   rc   r<   ÚbytesÚ	bytearrayr   r   Ú	isoformat)rÿ   r$   r$   r(   r  ¨  s   r  ÚclientúTypeGuard[AzureOpenAI]c                 C  ó   ddl m} t| |ƒS )Nr   )r   )Ú	lib.azurer   rc   )r  r   r$   r$   r(   Úis_azure_client¸  ó   
r	  úTypeGuard[AsyncAzureOpenAI]c                 C  r  )Nr   )r   )r  r   rc   )r  r   r$   r$   r(   Úis_async_azure_client¾  r
  r  )r    r!   r"   r#   )r-   r.   r/   r0   r,   r   r"   r1   )r,   r   r:   r;   r"   r<   )rG   rH   r8   rI   r3   r;   r4   rJ   r,   r   r"   r1   )rG   r`   r"   ra   )rG   rH   r"   rf   )rG   rl   r"   rm   )rG   rH   r"   ro   )rG   rr   r"   rs   )rG   rH   r"   ru   )rG   rx   r"   ry   )rG   rH   r"   r{   )rG   rH   r"   r}   )rG   rH   r"   r   )r„   rI   r‚   r<   rƒ   r<   r"   r<   )rŠ   r<   r"   r<   )r�   rI   r"   rŽ   )rG   r»   r"   r»   )rG   r¿   r"   rÀ   )rG   rH   r"   rH   )rG   rÁ   r"   rH   )rÅ   r<   r"   r;   )rÅ   r<   r"   rÊ   )rÅ   r<   r"   rÌ   )rÅ   rJ   r"   rÑ   )rÅ   rJ   r"   rÕ   )rÅ   rJ   r"   r×   )rŠ   r<   rÙ   r<   r"   r<   )rŠ   r<   r^   r<   r"   r<   )r8   r<   r"   r   )rä   r   rå   r<   r"   r<   )r"   r<   )rý   rÑ   r"   rŽ   )rÿ   rH   r"   rH   )r  rH   r"   r  )r  rH   r"   r  )LÚ
__future__r   rß   rë   r¯   r³   Útypingr   r   r   r   r   r   r	   r
   r   r   Úpathlibr   r   r   Útyping_extensionsr   r   r÷   Ú_typesr   r   r   r   r   r   rH   r   r<   r   r   r   r  r   r   r*   r9   rF   r6   rT   rj   rn   rq   rt   rw   rz   rY   rV   r€   r‰   rŒ   r¸   r¹   rº   r½   rÉ   rË   rÐ   rÓ   rÖ   rØ   rÛ   rÝ   rã   rõ   rú   rþ   r  r	  r  r$   r$   r$   r(   Ú<module>   sx    0

ú


Q










K
















