o
    #i|1                     @  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 d dlZddl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rddl$m%Z%m&Z& dddZ'dddZ(dd&d'Z)dd*d+Z*dd-d.Z+dd1d2Z,dd4d5Z-dd8d9Z.dd;d<Z/dd?d@Z0ddBdCZ1ddEdFZ2ddHdIZ3ddKdLZ4dMdNdOddTdUZ5ddWdXZ6dd[d\Z7ed]Z8ed^Z9edd`daZ:eddddaZ:eddedaZ:ddgdaZ:ddidjZ;ddldmZ<ddodpZ=ddrdsZ>ddudvZ?ddxdyZ@dd{d|ZAdd~dZBdddZCdddZDdddZEdddddZFdddZGdddZHdddZIdS )    )annotationsN)
TYPE_CHECKINGAnyTupleMappingTypeVarCallableIterableSequencecastoverload)Path)datedatetime)	TypeGuard   )OmitNotGiven	FileTypes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"   T/var/www/html/flask_server/venv/lib/python3.10/site-packages/openai/_utils/_utils.py
<listcomp>&       zflatten.<locals>.<listcomp>r"   )r   r"   r"   r&   flatten%   s   r)   queryMapping[str, object]pathsSequence[Sequence[str]]list[tuple[str, FileTypes]]c             	   C  s(   g }|D ]}| t| |ddd q|S )zRecursively extract files from the given dictionary based on specified paths.

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

    Note: this mutates the given dictionary.
    r   Nindexflattened_key)extend_extract_items)r*   r,   filespathr"   r"   r&   extract_files)   s   r6   objobjectr5   Sequence[str]r0   intr1   
str | Nonec          	   
     s^  z }W nR t yX   t| sg  Y S ddlm}  d us!J t| rHg }| D ]}|| r3 d ndd | d tt|f q)| Y S ||  d  tt| fg Y S w d7 t| rzt	krn| 
|}n| | }W n ty~   g  Y S w  d u r| n d| d7  t| d	S t| r|d
krg S t fdd| D S g S )Nr   )assert_is_file_content[] )key   []r/   z<array>c                   s,   g | ]}t | d ur d nddqS )Nr=   r/   )r3   r#   r%   r1   r0   r5   r"   r&   r'   v   s    z"_extract_items.<locals>.<listcomp>)
IndexErroris_given_filesr<   is_listappendr   r   is_dictlenpopKeyErrorr3   r)   )	r7   r5   r0   r1   r?   r<   r4   entryr%   r"   rD   r&   r3   <   sX   r3   _T | NotGiven | OmitTypeGuard[_T]c                 C  s   t | t ot | t S N)
isinstancer   r   r7   r"   r"   r&   rF         rF   TypeGuard[tuple[object, ...]]c                 C  
   t | tS rQ   rR   tuplerS   r"   r"   r&   is_tuple      
rY   _TupleT | objectTypeGuard[_TupleT]c                 C  rV   rQ   rW   rS   r"   r"   r&   
is_tuple_t   rZ   r]   TypeGuard[Sequence[object]]c                 C  rV   rQ   rR   r
   rS   r"   r"   r&   is_sequence   rZ   r`   _SequenceT | objectTypeGuard[_SequenceT]c                 C  rV   rQ   r_   rS   r"   r"   r&   is_sequence_t   rZ   rc   TypeGuard[Mapping[str, object]]c                 C  rV   rQ   rR   r   rS   r"   r"   r&   
is_mapping   rZ   rf   _MappingT | objectTypeGuard[_MappingT]c                 C  rV   rQ   re   rS   r"   r"   r&   is_mapping_t   rZ   ri   TypeGuard[dict[object, object]]c                 C  rV   rQ   )rR   dictrS   r"   r"   r&   rJ      rZ   rJ   TypeGuard[list[object]]c                 C  rV   rQ   )rR   listrS   r"   r"   r&   rH      rZ   rH   TypeGuard[Iterable[object]]c                 C  rV   rQ   )rR   r	   rS   r"   r"   r&   is_iterable   rZ   ro   r%   c                 C  s@   t | rttdd |  D S t| rttdd | D S | S )zMinimal reimplementation of copy.deepcopy() that will only copy certain object types:

    - mappings, e.g. `dict`
    - list

    This is done for performance reasons.
    c                 S  s   i | ]	\}}|t |qS r"   deepcopy_minimal)r#   kvr"   r"   r&   
<dictcomp>   r(   z$deepcopy_minimal.<locals>.<dictcomp>c                 S     g | ]}t |qS r"   rp   )r#   rN   r"   r"   r&   r'          z$deepcopy_minimal.<locals>.<listcomp>)rf   r   r   itemsrH   )r%   r"   r"   r&   rq      s
   rq   z, or)delimfinalseqry   strrz   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   r>   r@   r    )rK   join)r{   ry   rz   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>argsr8   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rd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 rQ   r"   )r#   r   given_paramsr"   r&   	<genexpr>  s    z@required_args.<locals>.inner.<locals>.wrapper.<locals>.<genexpr>r@   c                 S  s*   g | ]}d t dd |D dd d qS )(c                 S  ru   r"   r   r#   argr"   r"   r&   r'     rv   zLrequired_args.<locals>.inner.<locals>.wrapper.<locals>.<listcomp>.<listcomp>and)rz   ))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  ru   r"   r   r   r"   r"   r&   r'     rv   zMissing required argument: )set	enumerateaddrE   	TypeError__name__rK   keysallr   rm   r   )
r   r   i_r?   r   matches
variationsmsgmissing)r   
positionalr   r   r&   wrapper   s@   
z-required_args.<locals>.inner.<locals>.wrapper)r   r8   r   r8   r    r8   )inspect	signature
parametersrw   	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 rQ   r"   rS   r"   r"   r&   strip_not_given)     r   Mapping[_K, _V | NotGiven]dict[_K, _V]c                 C  r   rQ   r"   rS   r"   r"   r&   r   -  r   c                 C  r   rQ   r"   rS   r"   r"   r&   r   1  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"   )rR   r   r#   r?   valuer"   r"   r&   rt   =  s     z#strip_not_given.<locals>.<dictcomp>)rf   rw   rS   r"   r"   r&   r   5  s
   valc                 C  s   t | ddS )N
   )base)r:   r   r"   r"   r&   coerce_integer@  s   r   floatc                 C  s   t | S rQ   )r   r   r"   r"   r&   coerce_floatD  s   r   boolc                 C  s   | dkp| dkp| dkS )Ntrue1onr"   r   r"   r"   r&   coerce_booleanH  rT   r   
int | Nonec                 C     | d u rd S t | S rQ   )r   r   r"   r"   r&   maybe_coerce_integerL     r   float | Nonec                 C  r   rQ   )r   r   r"   r"   r&   maybe_coerce_floatR  r   r   bool | Nonec                 C  r   rQ   )r   r   r"   r"   r&   maybe_coerce_booleanX  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)
startswithrK   )r   r   r"   r"   r&   removeprefix^  s   
r   suffixc                 C  s    |  |r| dt|  S | S )zXRemove a suffix from a string.

    Backport of `str.removesuffix` for Python < 3.9
    N)endswithrK   )r   r   r"   r"   r&   removesuffixh  s   
r   r   c                 C  s    t |  }tj| }||fS rQ   )r   
read_bytesosr5   basename)r5   contents	file_namer"   r"   r&   file_from_pathr  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 )Nr@   r   )groupupper)patr"   r"   r&   <lambda>  s    z%get_required_header.<locals>.<lambda>zCould not find z header)lowerri   rw   rR   r|   resub
capitalizer   get
ValueError)r   r   lower_headerrr   rs   intercaps_headernormalized_headerr   r"   r"   r&   get_required_headerx  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&   rt     s    zjson_safe.<locals>.<dictcomp>c                 S  ru   r"   r   rC   r"   r"   r&   r'     rv   zjson_safe.<locals>.<listcomp>)
rf   rw   ro   rR   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   rR   )r   r   r"   r"   r&   is_azure_client     
r   TypeGuard[AsyncAzureOpenAI]c                 C  r   )Nr   )r   )r   r   rR   )r   r   r"   r"   r&   is_async_azure_client  r   r  )r   r   r    r!   )r*   r+   r,   r-   r    r.   )
r7   r8   r5   r9   r0   r:   r1   r;   r    r.   )r7   rO   r    rP   )r7   r8   r    rU   )r7   r[   r    r\   )r7   r8   r    r^   )r7   ra   r    rb   )r7   r8   r    rd   )r7   rg   r    rh   )r7   r8   r    rj   )r7   r8   r    rl   )r7   r8   r    rn   )r%   r   r    r   )r{   r9   ry   r|   rz   r|   r    r|   )r   r|   r    r|   )r   r9   r    r   )r7   r   r    r   )r7   r   r    r   )r7   r8   r    r8   )r7   r   r    r8   )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|   r   r|   r    r|   )r   r|   r   r|   r    r|   )r5   r|   r    r   )r   r   r   r|   r    r|   )r    r|   )r   r   r    r   )r   r8   r    r8   )r   r8   r    r   )r   r8   r    r  )J
__future__r   r   r   r   r   typingr   r   r   r   r   r   r	   r
   r   r   pathlibr   r   r   typing_extensionsr   r   _typesr   r   r   r   r   r8   r   r|   r   r   r   r   r   r   r)   r6   r3   rF   rY   r]   r`   rc   rf   ri   rJ   rH   ro   rq   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>   sv    0



I











K
















