
    +hy.                       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 d dlmZ d dlmZmZmZmZmZ d dlZddlmZmZmZmZmZ ddlm Z! dd	lm"Z" dd
lm#Z#  e
d      Z$ e
dee%df         Z& e
de	e'e%f         Z( e
dee%         Z) e
dedef         Z*d<dZ+	 	 	 	 	 	 d=dZ,	 	 	 	 	 	 	 	 	 	 d>dZ-d?dZ.d@dZ/dAdZ0dBdZ1dCdZ2dDdZ3dEdZ4dFdZ5dGdZ6dHdZ7dHdZ8dHd Z9dHd!Z:dId"Z;dJd#Z<dKd$Z=d%d&d'dLd(Z>dMd)Z?dNd*Z@ e
d+      ZA e
d,      ZBedOd-       ZCedPd.       ZCedQd/       ZCdRd0ZCdSd1ZDdTd2ZEdUd3ZFdVd4ZGdWd5ZHdXd6ZIdYd7ZJdZd8ZKd[d9ZLd\d:ZMd]d;ZNy)^    )annotationsN)	AnyTupleMappingTypeVarCallableIterableSequencecastoverload)Path)Required	Annotated	TypeGuardget_args
get_origin   )HeadersNotGiven	FileTypes
NotGivenOrHeadersLike)is_union)
parse_date)parse_datetime_T_TupleT.)bound	_MappingT
_SequenceT	CallableTc                @    | D cg c]  }|D ]  }|  c}}S c c}}w N )tsublistitems      G/var/www/html/venv/lib/python3.12/site-packages/openai/_utils/_utils.pyflattenr)   #   s"     !6Wg6dD6D666s   c          	     T    g }|D ]   }|j                  t        | |dd             " |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)querypathsfilespaths       r(   extract_filesr4   '   s6     *,E O^E4qMNOL    c                  	 ||   }|dz  }t        |       rC	 t        |      |k(  r| j                  |      }n| |   }||}n	|d| dz  }t        ||||      S t        |       r4|dk7  rg S t        | D cg c]  }t        |||||d	z   nd	       c}      S g S # t         $ r> t        | t              rg cY S ddlm}  || |       |J |t        t        |       fgcY S w xY w# t        $ r g cY S w xY wc c}w )
Nr   )assert_is_file_content)key   []r+   z<array>z[])
IndexError
isinstancer   _filesr7   r   r   is_dictlenpopKeyErrorr/   is_listr)   )objr3   r,   r-   r8   r7   r'   s          r(   r/   r/   :   sQ   75k 
QJEs|
	D	e#wws|3x  MqQZ'M'	
 	
 
)I    :G:S-$"6Y]	

 
	
 Ik  7c8$I 	4 	s6(((Y 45667*  	 I		(s.   B %C% 5C6C"8'C"!C"%C32C3c                $    t        | t               S r#   )r=   r   rD   s    r(   is_givenrG   {   s    #x(((r5   c                "    t        | t              S r#   r=   tuplerF   s    r(   is_tuplerK          c5!!r5   c                "    t        | t              S r#   rI   rF   s    r(   
is_tuple_trN      rL   r5   c                "    t        | t              S r#   r=   r
   rF   s    r(   is_sequencerQ          c8$$r5   c                "    t        | t              S r#   rP   rF   s    r(   is_sequence_trT      rR   r5   c                "    t        | t              S r#   r=   r   rF   s    r(   
is_mappingrW          c7##r5   c                "    t        | t              S r#   rV   rF   s    r(   is_mapping_trZ      rX   r5   c                "    t        | t              S r#   )r=   dictrF   s    r(   r?   r?          c4  r5   c                "    t        | t              S r#   )r=   listrF   s    r(   rC   rC      r]   r5   c                &    t        |       t        k(  S r#   )r   r   typs    r(   is_annotated_typerc      s    c?i''r5   c                .    t        |       xs | t        k(  S r#   )r   r_   ra   s    r(   is_list_typere      s    sO"st++r5   c                *    t        t        |             S r#   )	_is_unionr   ra   s    r(   is_union_typerh      s    Z_%%r5   c                &    t        |       t        k(  S r#   )r   r   ra   s    r(   is_required_typerj      s    c?h&&r5   c                |    t        |       st        |       r%t        t        t        t        |       d               S | S )Nr   )rj   rc   strip_annotated_typer   typer   ra   s    r(   rl   rl      s2     1# 6#Dx}Q/?$@AAJr5   c                ~    t        |       }	 t        t        ||         S # t        $ r t	        d|  d| d      w xY w)NzExpected type z" to have a type argument at index z but it did not)r   r   rm   r<   RuntimeError)rb   r,   argss      r(   extract_type_argrq      sQ    C=DkD$u+&& k^C50RSXRYYhijjks     <c                   t        |       r;t        t        | j                         D ci c]  \  }}|t	        |       c}}      S t        |       r't        t        | D cg c]  }t	        |       c}      S | S c c}}w c c}w )zMinimal reimplementation of copy.deepcopy() that will only copy certain object types:

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

    This is done for performance reasons.
    )rW   r   r   itemsdeepcopy_minimalrC   )r'   kventrys       r(   rt   rt      sl     $BDJJLIDAq,Q//IJJt}BdCU)%0CDDK JCs   A; B
z, or)delimfinalc                   t        |       }|dk(  ry|dk(  r| d   S |dk(  r| d    d| d| d    S |j                  | d d       d| d| d    z   S )Nr    r9   r    )r@   join)seqry   rz   sizes       r(   
human_joinr      sv    s8Dqyqy1vqya&5'3q6(++::c#2hAeWAc"gY"777r5   c                    d|  dS )zOAdd single quotation marks around the given string. Does *not* do any escaping.'r$   )strings    r(   quoter      s    vha=r5   c                      d fd}|S )aJ  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:
        ...
    ```
    c                $    t        j                         j                  }|j                         D cg c]+  \  }}|j                  |j
                  |j                  hv r|- c}}t        j                         d fd       }|S c c}}w )Nc                 J   t               t        |       D ]  \  }}	 j                  |           |j                         D ]  }j                  |        D ]  }t        fd|D              }|s n t              dkD  rTt        D cg c],  }dt        |D cg c]  }t        |       c}d      z   d	z   . c}}      }d
| d}	t	        |	      t        t        d         z
        }
t        |
      dkD  r0dt        |
D cg c]  }t        |       c}       }	t	        |	      dt        |
d          }	t	        |	       | i |S # t        $ r1 t	        j
                   dt               dt        |        d      w xY wc c}w c c}}w c c}w )Nz	() takes z argument(s) but z were givenc              3  &   K   | ]  }|v  
 y wr#   r$   ).0paramgiven_paramss     r(   	<genexpr>z@required_args.<locals>.inner.<locals>.wrapper.<locals>.<genexpr>  s     Ju4Js   r9   (and)rz   )z,Missing required arguments; Expected either z arguments to be givenr   zMissing required arguments: zMissing required argument: )set	enumerateaddr<   	TypeError__name__r@   keysallr   r   r_   )rp   kwargsi_r8   variantmatchesarg
variationsmsgmissingr   func
positionalvariantss              @r(   wrapperz-required_args.<locals>.inner.<locals>.wrapper  s   %(UL!$ y1y $$Z]3y {{} &  %& $ %J'JK%
 x=1$!+muvbiz*I#5:*IQVWWZ]]v"J ITjkC  n$ #3x{#3l#BCG7|a' <Z_fHgX[sHg=h<ij  n$ !<E'!*<M;NOn$(((1 " y#t}}oYs:>OO`adeiaj`kkv$wxxy +Jv Ihs)   EF
!F3F
F 
:FF
)rp   objectr   r   returnr   )	inspect	signature
parametersrs   kindPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORD	functoolswraps)r   paramsnamer   r   r   r   s   `    @r(   innerzrequired_args.<locals>.inner  s    ""4(33  &||~
ezz%%++ 

 
		) 
	)> U
s   0B)r   r!   r   r!   r$   )r   r   s   ` r(   required_argsr      s    .,\ Lr5   _K_Vc                     y r#   r$   rF   s    r(   strip_not_givenr   8      r5   c                     y r#   r$   rF   s    r(   r   r   =  r   r5   c                     y r#   r$   rF   s    r(   r   r   B  r   r5   c                    | yt        |       s| S | j                         D ci c]  \  }}t        |t              r|| c}}S c c}}w )zHRemove all top-level keys where their values are instances of `NotGiven`N)rW   rs   r=   r   )rD   r8   values      r(   r   r   G  sA    
{c?
),X:3Juh<WCJXXXs
   AAc                    t        | d      S )N
   )base)intvals    r(   coerce_integerr   R  s    sr5   c                    t        |       S r#   )floatr   s    r(   coerce_floatr   V  s    :r5   c                (    | dk(  xs | dk(  xs | dk(  S )Ntrue1onr$   r   s    r(   coerce_booleanr   Z  s    &=5C3J5#+5r5   c                    | y t        |       S r#   )r   r   s    r(   maybe_coerce_integerr   ^      
{#r5   c                    | y t        |       S r#   )r   r   s    r(   maybe_coerce_floatr   d  s    
{r5   c                    | y t        |       S r#   )r   r   s    r(   maybe_coerce_booleanr   j  r   r5   c                D    | j                  |      r| t        |      d S | S )zXRemove a prefix from a string.

    Backport of `str.removeprefix` for Python < 3.9
    N)
startswithr@   )r   prefixs     r(   removeprefixr   p  s(    
  c&km$$Mr5   c                F    | j                  |      r| dt        |        S | S )zXRemove a suffix from a string.

    Backport of `str.removesuffix` for Python < 3.9
    N)endswithr@   )r   suffixs     r(   removesuffixr   z  s(    
 vnV%%Mr5   c                z    t        |       j                         }t        j                  j	                  |       }||fS r#   )r   
read_bytesosr3   basename)r3   contents	file_names      r(   file_from_pathr     s3    Dz$$&H  &Ix  r5   c                   |j                         }t        | t              rPt        t        |       } | j                         D ]-  \  }}|j                         |k(  st        |t              s+|c S  	 t        j                  dd |j                               }|||j                         |fD ]  }| j                  |      }|s|c S  t        d| d      )Nz([^\w])(\w)c                d    | j                  d      | j                  d      j                         z   S )Nr9   r   )groupupper)pats    r(   <lambda>z%get_required_header.<locals>.<lambda>  s%    #))A,STI[I[I]:] r5   zCould not find z header)lowerr=   r   r   r   rs   strresub
capitalizer   get
ValueError)headersheaderlower_headerru   rv   intercaps_headernormalized_headerr   s           r(   get_required_headerr     s    <<>L'7#w(MMO 	DAqwwyL(Z3-?	 Qvvn.]_e_p_p_rs$lFLLNDTU -.L
 vhg6
77r5   c                 J    	 t        j                         S # t        $ r Y yw xY w)Nfalse)sniffiocurrent_async_library	Exceptionr$   r5   r(   get_async_libraryr     s(    ,,.. s    	"")r%   zIterable[Iterable[_T]]r   zlist[_T])r0   zMapping[str, object]r1   zSequence[Sequence[str]]r   list[tuple[str, FileTypes]])
rD   r   r3   Sequence[str]r,   r   r-   
str | Noner   r   )rD   zNotGivenOr[_T]r   zTypeGuard[_T])rD   r   r   zTypeGuard[tuple[object, ...]])rD   z_TupleT | objectr   zTypeGuard[_TupleT])rD   r   r   zTypeGuard[Sequence[object]])rD   z_SequenceT | objectr   zTypeGuard[_SequenceT])rD   r   r   zTypeGuard[Mapping[str, object]])rD   z_MappingT | objectr   zTypeGuard[_MappingT])rD   r   r   zTypeGuard[dict[object, object]])rD   r   r   zTypeGuard[list[object]])rb   rm   r   bool)rb   rm   r   rm   )rb   rm   r,   r   r   rm   )r'   r   r   r   )r   r   ry   r   rz   r   r   r   )r   r   r   r   )r   r   r   z Callable[[CallableT], CallableT])rD   Noner   r   )rD   zMapping[_K, _V | NotGiven]r   zdict[_K, _V])rD   r   r   r   )rD   zobject | Noner   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   z
int | None)r   r   r   zfloat | None)r   r   r   zbool | None)r   r   r   r   r   r   )r   r   r   r   r   r   )r3   r   r   r   )r   r   r   r   r   r   )r   r   )O
__future__r   r   r   r   r   typingr   r   r   r   r   r	   r
   r   r   pathlibr   typing_extensionsr   r   r   r   r   r   _typesr   r   r   r   r   _compatr   rg   r   r   r   r   r   r   r   r    r!   r)   r4   r/   rG   rK   rN   rQ   rT   rW   rZ   r?   rC   rc   re   rh   rj   rl   rq   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r5   r(   <module>r     s   " 	 	  
 
 
  R R  J J + . 6T]
)5#5
6KwsF{';<	\&)9:
KxS'9:	7  
 # !&>	>
> 	>
 > !>B)""%%$$!!(,&'
k  48d 8
EP T]T] 
 
 
 
 
 
Y6!8&r5   