
    g0                       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         Z" ede
e#e!f         Z$ edee!         Z% ededef         Z&erddl'm(Z(m)Z) d=dZ*	 	 	 	 	 	 d>dZ+	 	 	 	 	 	 	 	 	 	 d?dZ,d@dZ-dAdZ.dBdZ/dCdZ0dDdZ1dEdZ2dFdZ3dGdZ4dHdZ5dIdZ6dJdZ7d d!d"dKd#Z8dLd$Z9dMd%Z: ed&      Z; ed'      Z<edNd(       Z=edOd)       Z=edPd*       Z=dQd+Z=dRd,Z>dSd-Z?dTd.Z@dUd/ZAdVd0ZBdWd1ZCdXd2ZDdYd3ZEdZd4ZFd[d5ZGd\d6ZHd7d8d]d9ZId^d:ZJd_d;ZKd`d<ZLy)a    )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AsyncAzureOpenAIc                @    | D cg c]  }|D ]  }|  c}}S c c}}w N )tsublistitems      I/var/www/openai/venv/lib/python3.12/site-packages/openai/_utils/_utils.pyflattenr(   &   s"     !6WgdDgD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_filesr3   *   s/     *,E^E4qMN 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   _filesr6   r   r   is_dictlenpopKeyErrorr.   is_listr(   )objr2   r+   r,   r7   r6   r&   s          r'   r.   r.   =   sX   75k 
QJEs|
	D	e#wws|3x  MqQZ'M'	
 	
 
)I    D :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   rC   s    r'   is_givenrF   ~   s    #x(((r4   c                "    t        | t              S r"   r<   tuplerE   s    r'   is_tuplerJ          c5!!r4   c                "    t        | t              S r"   rH   rE   s    r'   
is_tuple_trM      rK   r4   c                "    t        | t              S r"   r<   r   rE   s    r'   is_sequencerP          c8$$r4   c                "    t        | t              S r"   rO   rE   s    r'   is_sequence_trS      rQ   r4   c                "    t        | t              S r"   r<   r   rE   s    r'   
is_mappingrV          c7##r4   c                "    t        | t              S r"   rU   rE   s    r'   is_mapping_trY      rW   r4   c                "    t        | t              S r"   )r<   dictrE   s    r'   r>   r>          c4  r4   c                "    t        | t              S r"   )r<   listrE   s    r'   rB   rB      r\   r4   c                "    t        | t              S r"   )r<   r
   rE   s    r'   is_iterabler`      rQ   r4   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.
    )rV   r   r   itemsdeepcopy_minimalrB   )r&   kventrys       r'   rc   rc      st     $BDJJLILDAq,Q//LIJJt}BdCdU)%0d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    r8   r    )r?   join)seqrh   ri   sizes       r'   
human_joinrq      sv    s8Dqyqy1vqya&5'3q6(++::c#2hAeWAc"gY"777r4   c                    d|  dS )zOAdd single quotation marks around the given string. Does *not* do any escaping.'r#   )strings    r'   quoteru      s    vha=r4   c                      d f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: ...
    ```
    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                 l   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              dkD  sJ t        t        d         z
        }
t        |
      dkD  r0dt        |
D cg c]  }t        |       c}       }	t	        |	      dt        |
d          }	t	        |	       | i |S # t        $ r2 t	        j
                   dt               dt        |        d      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's   r8   (and)ri   )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allrq   ru   r^   )argskwargsi_r7   variantmatchesarg
variationsmsgmissingr|   func
positionalvariantss              @r'   wrapperz-required_args.<locals>.inner.<locals>.wrapper   s   %(UL!$1  $$Z]3 ( {{}  % % $J'JK $
 x=1$!+muvmubiz*I#5:*IQVWWZ]]muv"J ITjkC  n$ x=1,,, #3x{#3l#BCG7|a' <Z_fHg_fX[s_fHg=h<ij  n$ !<E'!*<M;NOn$(((9 "  #==/3z?2CCTUXY]U^T__jk   +Jv Ihs)   E(F+
!F&3F+
F1
(;F#&F+
)r   objectr   r   returnr   )	inspect	signature
parametersrb   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%%++ -

 
	!	) 
!	)F ]
s   0B)r   r   r   r   r#   )r   r   s   ` r'   required_argsr      s    ,0d Lr4   _K_Vc                     y r"   r#   rE   s    r'   strip_not_givenr   "  s    (+r4   c                     y r"   r#   rE   s    r'   r   r   &  s    FIr4   c                     y r"   r#   rE   s    r'   r   r   *  s    ,/r4   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)rV   rb   r<   r   )rC   r7   values      r'   r   r   .  sE    
{c?
),X:3Juh<WCJXXXs
   AAc                    t        | d      S )N
   )base)intvals    r'   coerce_integerr   9  s    sr4   c                    t        |       S r"   )floatr   s    r'   coerce_floatr   =  s    :r4   c                (    | dk(  xs | dk(  xs | dk(  S )Ntrue1onr#   r   s    r'   coerce_booleanr   A  s    &=5C3J5#+5r4   c                    | y t        |       S r"   )r   r   s    r'   maybe_coerce_integerr   E      
{#r4   c                    | y t        |       S r"   )r   r   s    r'   maybe_coerce_floatr   K  s    
{r4   c                    | y t        |       S r"   )r   r   s    r'   maybe_coerce_booleanr   Q  r   r4   c                D    | j                  |      r| t        |      d S | S )zXRemove a prefix from a string.

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

    Backport of `str.removesuffix` for Python < 3.9
    N)endswithr?   )rt   suffixs     r'   removesuffixr   a  s(    
 vnV%%Mr4   c                z    t        |       j                         }t        j                  j	                  |       }||fS r"   )r   
read_bytesosr2   basename)r2   contents	file_names      r'   file_from_pathr   k  s3    Dz$$&H  &Ix  r4   c                   |j                         }t        |       r@| 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 )Nr8   r   )groupupper)pats    r'   <lambda>z%get_required_header.<locals>.<lambda>z  s#    #))A,STI[I[I]:]r4   zCould not find z header)lowerrY   rb   r<   strresub
capitalizer   get
ValueError)headersheaderlower_headerrd   re   intercaps_headernormalized_headerr   s           r'   get_required_headerr   q  s    <<>LGMMODAqwwyL(Z3-? $
 vvn.]_e_p_p_rs$lFLLNDTU-.L V
 vhg6
77r4   c                 J    	 t        j                         S # t        $ r Y yw xY w)Nfalse)sniffiocurrent_async_library	Exceptionr#   r4   r'   get_async_libraryr     s(    ,,.. s    	""   maxsizec                N    t        j                  |       }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   s     r'   r   r     s&     !!G Wr4   c                h   t        |       r6| j                         D ci c]  \  }}t        |      t        |       c}}S t        |       r4t	        | t
        t        t        f      s| D cg c]  }t        |       c}S t	        | t        t        f      r| j                         S | S c c}}w c c}w )zvTranslates a mapping / sequence recursively in the same fashion
    as `pydantic` v2's `model_dump(mode="json")`.
    )rV   rb   	json_safer`   r<   r   bytes	bytearrayr   r   	isoformat)datar7   r   r&   s       r'   r   r     s     $CG::<P<ZS%	#	% 00<PP4D3y2I!J,01DD	$D11$4()~~K Q 2s   B),B/c                &    ddl m} t        | |      S )Nr   )r   )	lib.azurer   r<   )clientr   s     r'   is_azure_clientr     s    'fk**r4   c                &    ddl m} t        | |      S )Nr   )r    )r   r    r<   )r   r    s     r'   is_async_azure_clientr     s    ,f.//r4   )r$   zIterable[Iterable[_T]]r   zlist[_T])r/   zMapping[str, object]r0   zSequence[Sequence[str]]r   list[tuple[str, FileTypes]])
rC   r   r2   Sequence[str]r+   r   r,   
str | Noner   r   )rC   zNotGivenOr[_T]r   zTypeGuard[_T])rC   r   r   zTypeGuard[tuple[object, ...]])rC   z_TupleT | objectr   zTypeGuard[_TupleT])rC   r   r   zTypeGuard[Sequence[object]])rC   z_SequenceT | objectr   zTypeGuard[_SequenceT])rC   r   r   zTypeGuard[Mapping[str, object]])rC   z_MappingT | objectr   zTypeGuard[_MappingT])rC   r   r   zTypeGuard[dict[object, object]])rC   r   r   zTypeGuard[list[object]])rC   r   r   zTypeGuard[Iterable[object]])r&   r   r   r   )ro   r   rh   r   ri   r   r   r   )rt   r   r   r   )r   r   r    Callable[[CallableT], CallableT])rC   Noner   r   )rC   zMapping[_K, _V | NotGiven]r   zdict[_K, _V])rC   r   r   r   )rC   zobject | Noner   r   )r   r   r   r   )r   r   r   r   )r   r   r   bool)r   r   r   
int | None)r   r   r   zfloat | None)r   r   r   zbool | None)rt   r   r   r   r   r   )rt   r   r   r   r   r   )r2   r   r   r   )r   r   r   r   r   r   )r   r   )r   r  r   r   )r   r   r   r   )r   r   r   zTypeGuard[AzureOpenAI])r   r   r   zTypeGuard[AsyncAzureOpenAI])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(   r3   r.   rF   rJ   rM   rP   rS   rV   rY   r>   rB   r`   rc   rq   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   r4   r'   <module>r     s   " 	 	      # '  A A PT]
)5#5
6KwsF{';<	\&)9:
KxS'9:	97  
 # !&>	>
> 	>
 > !>B)""%%$$!!%  48d 8
HV T]T] 
 + 
 + 
 I 
 I 
 / 
 /Y6!8& (+  +0r4   