o
    "ch1                     @  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 dd	l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.dd2d3Z/dd5d6Z0dd9d:Z1dd<d=Z2dd@dAZ3ddCdDZ4ddFdGZ5ddIdJZ6ddLdMZ7dNdOdPddUdVZ8ddXdYZ9dd\d]Z:ed^Z;ed_Z<eddadbZ=eddedbZ=eddfdbZ=ddhdbZ=ddjdkZ>ddmdnZ?ddpdqZ@ddsdtZAddvdwZBddydzZCdd|d}ZDdddZEdddZFdddZGdddZHdddddZIdddZJdddZKdddZLdS )    )annotationsN)
TYPE_CHECKINGAnyTupleMappingTypeVarCallableIterableSequencecastoverload)Path)datedatetime)	TypeGuard   )NotGiven	FileTypes
NotGivenOrHeadersLike)
parse_dateparse_datetime_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$   R/home/air/goalskill/back/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   r8   objobjectr7   Sequence[str]r2   intr3   
str | Nonec          	   
     s`  z }W nS t yY   t| trg  Y S ddlm}  d us"J t| rIg }| D ]}|| r4 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ro| |}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   []r1   z<array>c                   s,   g | ]}t | d ur d nddqS )Nr?   r1   )r5   r%   r'   r3   r2   r7   r$   r(   r)   w   s    z"_extract_items.<locals>.<listcomp>)
IndexError
isinstancer   _filesr>   is_listappendr   r   is_dictlenpopKeyErrorr5   r+   )	r9   r7   r2   r3   rA   r>   r6   entryr'   r$   rF   r(   r5   =   sX   
r5   NotGivenOr[_T]TypeGuard[_T]c                 C  s   t | t S NrH   r   r9   r$   r$   r(   is_given      rV   TypeGuard[tuple[object, ...]]c                 C  
   t | tS rS   rH   tuplerU   r$   r$   r(   is_tuple      
r\   _TupleT | objectTypeGuard[_TupleT]c                 C  rY   rS   rZ   rU   r$   r$   r(   
is_tuple_t   r]   r`   TypeGuard[Sequence[object]]c                 C  rY   rS   rH   r
   rU   r$   r$   r(   is_sequence   r]   rc   _SequenceT | objectTypeGuard[_SequenceT]c                 C  rY   rS   rb   rU   r$   r$   r(   is_sequence_t   r]   rf   TypeGuard[Mapping[str, object]]c                 C  rY   rS   rH   r   rU   r$   r$   r(   
is_mapping   r]   ri   _MappingT | objectTypeGuard[_MappingT]c                 C  rY   rS   rh   rU   r$   r$   r(   is_mapping_t   r]   rl   TypeGuard[dict[object, object]]c                 C  rY   rS   )rH   dictrU   r$   r$   r(   rL      r]   rL   TypeGuard[list[object]]c                 C  rY   rS   )rH   listrU   r$   r$   r(   rJ      r]   rJ   TypeGuard[Iterable[object]]c                 C  rY   rS   )rH   r	   rU   r$   r$   r(   is_iterable   r]   rr   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$   rs   )r%   rP   r$   r$   r(   r)          z$deepcopy_minimal.<locals>.<listcomp>)ri   r   r   itemsrJ   )r'   r$   r$   r(   rt      s
   rt   z, or)delimfinalseqr|   strr}   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@   rB   r    )rM   join)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>argsr:   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 rS   r$   )r%   r   given_paramsr$   r(   	<genexpr>  s    z@required_args.<locals>.inner.<locals>.wrapper.<locals>.<genexpr>rB   c                 S  s*   g | ]}d t dd |D dd d qS )(c                 S  rx   r$   r   r%   argr$   r$   r(   r)     ry   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  rx   r$   r   r   r$   r$   r(   r)     ry   zMissing required argument: )set	enumerateaddrG   	TypeError__name__rM   keysallr   rp   r   )
r   r   i_rA   r   matches
variationsmsgmissing)r   
positionalr   r   r(   wrapper   s@   
z-required_args.<locals>.inner.<locals>.wrapper)r   r:   r   r:   r"   r:   )inspect	signature
parametersrz   	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 rS   r$   rU   r$   r$   r(   strip_not_given*     r   Mapping[_K, _V | NotGiven]dict[_K, _V]c                 C  r   rS   r$   rU   r$   r$   r(   r   .  r   c                 C  r   rS   r$   rU   r$   r$   r(   r   2  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$   rT   r%   rA   valuer$   r$   r(   rw   >  s     z#strip_not_given.<locals>.<dictcomp>)ri   rz   rU   r$   r$   r(   r   6  s
   valc                 C  s   t | ddS )N
   )base)r<   r   r$   r$   r(   coerce_integerA  rW   r   floatc                 C  s   t | S rS   )r   r   r$   r$   r(   coerce_floatE  s   r   boolc                 C  s   | dkp| dkp| dkS )Ntrue1onr$   r   r$   r$   r(   coerce_booleanI  s   r   
int | Nonec                 C     | d u rd S t | S rS   )r   r   r$   r$   r(   maybe_coerce_integerM     r   float | Nonec                 C  r   rS   )r   r   r$   r$   r(   maybe_coerce_floatS  r   r   bool | Nonec                 C  r   rS   )r   r   r$   r$   r(   maybe_coerce_booleanY  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)
startswithrM   )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)endswithrM   )r   r   r$   r$   r(   removesuffixi  s   
r   r   c                 C  s    t |  }tj| }||fS rS   )r   
read_bytesosr7   basename)r7   contents	file_namer$   r$   r(   file_from_paths  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 )NrB   r   )groupupper)patr$   r$   r(   <lambda>  s    z%get_required_header.<locals>.<lambda>zCould not find z header)lowerrl   rz   rH   r   resub
capitalizer   get
ValueError)r   r   lower_headerru   rv   intercaps_headernormalized_headerr   r$   r$   r(   get_required_headery  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(   rw     s    zjson_safe.<locals>.<dictcomp>c                 S  rx   r$   r   rE   r$   r$   r(   r)     ry   zjson_safe.<locals>.<listcomp>)
ri   rz   rr   rH   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   rH   )r   r   r$   r$   r(   is_azure_client     
r  TypeGuard[AsyncAzureOpenAI]c                 C  r   )Nr   )r   )r  r   rH   )r   r   r$   r$   r(   is_async_azure_client  r  r  )r    r!   r"   r#   )r,   r-   r.   r/   r"   r0   )
r9   r:   r7   r;   r2   r<   r3   r=   r"   r0   )r9   rQ   r"   rR   )r9   r:   r"   rX   )r9   r^   r"   r_   )r9   r:   r"   ra   )r9   rd   r"   re   )r9   r:   r"   rg   )r9   rj   r"   rk   )r9   r:   r"   rm   )r9   r:   r"   ro   )r9   r:   r"   rq   )r'   r   r"   r   )r~   r;   r|   r   r}   r   r"   r   )r   r   r"   r   )r   r;   r"   r   )r9   r   r"   r   )r9   r   r"   r   )r9   r:   r"   r:   )r9   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   r   r"   r   )r7   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  )M
__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   _compatr   r   r   r:   r   r   r   r   r   r  r   r   r+   r8   r5   rV   r\   r`   rc   rf   ri   rl   rL   rJ   rr   rt   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



I











K
















