
    i4                       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                   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d}dZ*d~d#Z+dd+Z,dd.Z-dd0Z.dd3Z/dd5Z0dd8Z1dd:Z2dd=Z3dd?Z4ddAZ5ddCZ6dDdEdFddJZ7ddLZ8ddOZ9 edP          Z: edQ          Z;eddS            Z<eddV            Z<eddW            Z<ddYZ<dd[Z=dd]Z>dd_Z?ddaZ@ddcZAddeZBddgZCddiZDddkZEddoZFddpZGdqdrddtZHddvZIddyZJdd{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                    d | D             S )Nc                    g | ]	}|D ]}|
S  r'   ).0sublistitems      [/home/piyush/.hermes/hermes-agent/venv/lib/python3.11/site-packages/openai/_utils/_utils.py
<listcomp>zflatten.<locals>.<listcomp>&   s%    666Wg66dD6666    r'   )r!   s    r+   flattenr.   %   s    666666r-   brackets)array_formatqueryMapping[str, object]pathsSequence[Sequence[str]]r0   r   list[tuple[str, FileTypes]]c          
     b    g }|D ])}|                     t          | |dd|                     *|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_keyr0   )extend_extract_items)r1   r3   r0   filespaths        r+   extract_filesr>   )   sH    $ *,E j j^E4q[ghhhiiiiLr-   array_indexintstrc           
         | 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   )r0   r?   s     r+   _array_suffixrL   A   s    z!!ty  !;!!!!x<7#:#: r
e|ee499XVaMbMbCcCcee  r-   objobjectr=   Sequence[str]r8   r9   
str | Nonec          	     P   	          }n# t           $ r t          |           sg cY S ddlm} J t	          |           rkg }t          |           D ]U\  }}	t          |          }
r|
z   n|
} ||	|           |                    |t          t          |	          f           V|cY S  ||            t          t          |           fgcY S w xY wdz  t          |           ru	 t          d d          D                       r|                     |          }n| |         }n# t          $ r g cY S w xY w|n	d| dz  t          |          S t	          |           r3|d	k    rg S t          fd
t          |           D                       S g S )Nr   )assert_is_file_content)key   c              3  "   K   | ]
}|d k    V  dS )<array>Nr'   )r(   ps     r+   	<genexpr>z!_extract_items.<locals>.<genexpr>u   s&      88a1	>888888r-   rD   rE   r7   rV   c                h    g | ].\  }}t          |ndt          |          z             /S )NrH   r7   )r;   rL   )r(   r?   r*   r0   r9   r8   r=   s      r+   r,   z"_extract_items.<locals>.<listcomp>   sg        &K *7*C}]ikvOwOww!-    r-   )
IndexErroris_given_filesrR   is_list	enumeraterL   appendr   r   is_dictallpopKeyErrorr;   r.   )rM   r=   r8   r9   r0   rS   rR   r<   r?   entrysuffixemitted_keyr*   s    ````        r+   r;   r;   O   sx   75k 7 7 7}} 	III 	433333 (((3<< 	13E&/nn D D"U&|[AA:GS}v55V&&u+>>>>k4	5+A+ABCCCCLLLs6666Y 4 456666+7. 
QJEs|| )
	 884<88888  wws||3x 	 	 	 III		
  MMZZZZ'M'%
 
 
 	
 
 
)I       *33  
 
 	
  Is-    CBC0%CC0?D0 0D?>D?_T | NotGiven | OmitTypeGuard[_T]c                Z    t          | t                     ot          | t                     S N)
isinstancer   r   rM   s    r+   r[   r[      s'    #x(((FC1F1F-FFr-   TypeGuard[tuple[object, ...]]c                ,    t          | t                    S rj   rk   tuplerl   s    r+   is_tuplerq          c5!!!r-   _TupleT | objectTypeGuard[_TupleT]c                ,    t          | t                    S rj   ro   rl   s    r+   
is_tuple_trv      rr   r-   TypeGuard[Sequence[object]]c                ,    t          | t                    S rj   rk   r   rl   s    r+   is_sequencerz          c8$$$r-   _SequenceT | objectTypeGuard[_SequenceT]c                ,    t          | t                    S rj   ry   rl   s    r+   is_sequence_tr      r{   r-   TypeGuard[Mapping[str, object]]c                ,    t          | t                    S rj   rk   r   rl   s    r+   
is_mappingr          c7###r-   _MappingT | objectTypeGuard[_MappingT]c                ,    t          | t                    S rj   r   rl   s    r+   is_mapping_tr      r   r-   TypeGuard[dict[object, object]]c                ,    t          | t                    S rj   )rk   dictrl   s    r+   r`   r`          c4   r-   TypeGuard[list[object]]c                ,    t          | t                    S rj   )rk   listrl   s    r+   r]   r]      r   r-   TypeGuard[Iterable[object]]c                ,    t          | t                    S rj   )rk   r
   rl   s    r+   is_iterabler      r{   r-   rI   or)delimfinalseqr   r   c                   t          |           }|dk    rdS |dk    r| d         S |dk    r| d          d| d| d          S |                    | d d                   d| d| d          z   S )Nr   rH   rT   r    )lenrK   )r   r   r   sizes       r+   
human_joinr      s    s88Dqyyrqyy1vqyya&++5++3q6+++::c#2#h"7e"7"7c"g"7"777r-   stringc                    d|  dS )zOAdd single quotation marks around the given string. Does *not* do any escaping.'r'   )r   s    r+   quoter      s    v===r-   variants Callable[[CallableT], CallableT]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: ...
    ```
    funcr   r#   c                     t          j                   j        }d |                                D             t	          j                   d fd            }|S )Nc                B    g | ]\  }}|j         |j        |j        hv |S r'   )kindPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORD)r(   nameparams      r+   r,   z0required_args.<locals>.inner.<locals>.<listcomp>   sL     
 
 
ez%+    r-   argsrN   kwargsr#   c                 H  
 t                      
t          |           D ]g\  }}	 
                    |                    "# t          $ r9 t	          j         dt                     dt          |            d          d w xY w|                                D ]}
                    |           D ]!}t          
fd|D                       }|r nŌ"t                    dk    r t          d D                       }d| d}nt                    d	k    sJ t          t          d	                   
z
            }	t          |	          dk    rd
t          d |	D                        }ndt          |	d	                    }t	          |           | i |S )Nz	() takes z argument(s) but z were givenc              3      K   | ]}|v V  	d S rj   r'   )r(   r   given_paramss     r+   rX   z@required_args.<locals>.inner.<locals>.wrapper.<locals>.<genexpr>  s(      JJu4JJJJJJr-   rT   c                P    g | ]#}d t          d |D             d          z   dz   $S )(c                ,    g | ]}t          |          S r'   r   r(   args     r+   r,   zLrequired_args.<locals>.inner.<locals>.wrapper.<locals>.<listcomp>.<listcomp>  s    *I*I*I#5::*I*I*Ir-   and)r   ))r   )r(   variants     r+   r,   zArequired_args.<locals>.inner.<locals>.wrapper.<locals>.<listcomp>  sA    vvvbiz*I*I*I*I*IQVWWWWZ]]vvvr-   z,Missing required arguments; Expected either z arguments to be givenr   zMissing required arguments: c                ,    g | ]}t          |          S r'   r   r   s     r+   r,   zArequired_args.<locals>.inner.<locals>.wrapper.<locals>.<listcomp>&  s    HgHgHgX[sHgHgHgr-   zMissing required argument: )setr^   addrZ   	TypeError__name__r   keysra   r   r   r   )r   r   i_rS   r   matches
variationsmsgmissingr   r   
positionalr   s             @r+   wrapperz-required_args.<locals>.inner.<locals>.wrapper  s	   %(UUL!$    1  $$Z]3333!      #=kk3z??kkUXY]U^U^kkk   
 {{}} & &  %%%%# % %JJJJ'JJJKK E x==1$$!+vvmuvvv" "J lkkkCCx==1,,,, #3x{#3#3l#BCCG7||a''jZHgHg_fHgHgHg=h=hjjOE'!*<M<MOOnn$4((((s   AAB)r   rN   r   rN   r#   rN   )inspect	signature
parametersitems	functoolswraps)r   paramsr   r   r   s   `  @r+   innerzrequired_args.<locals>.inner   s    "4((3
 
%||~~
 
 

 
		!	) !	) !	) !	) !	) !	) !	) 
	!	)F r-   )r   r   r#   r   r'   )r   r   s   ` r+   required_argsr      s)    ,0 0 0 0 0 0d Lr-   _K_VNonec                    d S rj   r'   rl   s    r+   strip_not_givenr   5  s    (+r-   Mapping[_K, _V | NotGiven]dict[_K, _V]c                    d S rj   r'   rl   s    r+   r   r   9  s    FIcr-   c                    d S rj   r'   rl   s    r+   r   r   =  s    ,/Cr-   object | Nonec                h    | dS t          |           s| S d |                                 D             S )zHRemove all top-level keys where their values are instances of `NotGiven`Nc                D    i | ]\  }}t          |t                    ||S r'   )rk   r   r(   rS   values      r+   
<dictcomp>z#strip_not_given.<locals>.<dictcomp>I  s-    XXX:3Juh<W<WXCXXXr-   )r   r   rl   s    r+   r   r   A  s;    
{tc?? 
XXXXXXr-   valc                $    t          | d          S )N
   )base)r@   r   s    r+   coerce_integerr   L  s    sr-   floatc                     t          |           S rj   )r   r   s    r+   coerce_floatr   P  s    ::r-   boolc                &    | dk    p| dk    p| dk    S )Ntrue1onr'   r   s    r+   coerce_booleanr   T  s    &=5C3J5#+5r-   
int | Nonec                (    | d S t          |           S rj   )r   r   s    r+   maybe_coerce_integerr   X      
{t#r-   float | Nonec                (    | d S t          |           S rj   )r   r   s    r+   maybe_coerce_floatr   ^  s    
{tr-   bool | Nonec                (    | d S t          |           S rj   )r   r   s    r+   maybe_coerce_booleanr   d  r   r-   prefixc                ^    |                      |          r| t          |          d         S | S )zXRemove a prefix from a string.

    Backport of `str.removeprefix` for Python < 3.9
    N)
startswithr   )r   r   s     r+   removeprefixr   j  s4    
    %c&kkmm$$Mr-   re   c                `    |                      |          r| dt          |                    S | S )zXRemove a suffix from a string.

    Backport of `str.removesuffix` for Python < 3.9
    N)endswithr   )r   re   s     r+   removesuffixr   t  s4    
 v &nVn%%Mr-   r   c                    t          |                                           }t          j                            |           }||fS rj   )r   
read_bytesosr=   basename)r=   contents	file_names      r+   file_from_pathr  ~  s9    Dzz$$&&H  &&Ix  r-   headersr   headerc                   |                                 }t          |           rK|                                 D ]6\  }}|                                 |k    rt          |t                    r|c S 7t          j        dd |                                          }|||                                |fD ]}| 	                    |          }|r|c S t          d| d          )Nz([^\w])(\w)c                |    |                      d          |                      d                                          z   S )NrT   r   )groupupper)pats    r+   <lambda>z%get_required_header.<locals>.<lambda>  s,    #))A,,STI[I[I]I]:] r-   zCould not find z header)lowerr   r   rk   rA   resub
capitalizer  get
ValueError)r  r  lower_headerkvintercaps_headernormalized_headerr   s           r+   get_required_headerr    s    <<>>LG MMOO 	 	DAqwwyyL((Z3-?-?( vn.].]_e_p_p_r_rss$lFLLNNDTU  -.. 	LLL	 6v666
7
77r-   c                 L    	 t          j                    S # t          $ r Y dS w xY w)Nfalse)sniffiocurrent_async_library	Exceptionr'   r-   r+   get_async_libraryr     s8    ,...   wws    
##   maxsizer#  c                V    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%    s0     !  G Wr-   datac                :   t          |           rd |                                 D             S t          |           r.t          | t          t
          t          f          s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                N    i | ]"\  }}t          |          t          |          #S r'   	json_safer   s      r+   r   zjson_safe.<locals>.<dictcomp>  s,    PPPZS%	#	% 0 0PPPr-   c                ,    g | ]}t          |          S r'   r)  )r(   r*   s     r+   r,   zjson_safe.<locals>.<listcomp>  s    111D	$111r-   )
r   r   r   rk   rA   bytes	bytearrayr   r   	isoformat)r&  s    r+   r*  r*    s     $ QPP4::<<PPPP4 2D3y2I!J!J 211D1111$4())  ~~Kr-   clientTypeGuard[AzureOpenAI]c                .    ddl m} t          | |          S )Nr   )r   )	lib.azurer   rk   )r/  r   s     r+   is_azure_clientr3    s$    ''''''fk***r-   TypeGuard[AsyncAzureOpenAI]c                .    ddl m} t          | |          S )Nr   )r    )r2  r    rk   )r/  r    s     r+   is_async_azure_clientr6    s%    ,,,,,,f.///r-   )r!   r"   r#   r$   )r1   r2   r3   r4   r0   r   r#   r5   )r0   r   r?   r@   r#   rA   )rM   rN   r=   rO   r8   r@   r9   rP   r0   r   r#   r5   )rM   rg   r#   rh   )rM   rN   r#   rm   )rM   rs   r#   rt   )rM   rN   r#   rw   )rM   r|   r#   r}   )rM   rN   r#   r   )rM   r   r#   r   )rM   rN   r#   r   )rM   rN   r#   r   )rM   rN   r#   r   )r   rO   r   rA   r   rA   r#   rA   )r   rA   r#   rA   )r   rO   r#   r   )rM   r   r#   r   )rM   r   r#   r   )rM   rN   r#   rN   )rM   r   r#   rN   )r   rA   r#   r@   )r   rA   r#   r   )r   rA   r#   r   )r   rP   r#   r   )r   rP   r#   r   )r   rP   r#   r   )r   rA   r   rA   r#   rA   )r   rA   re   rA   r#   rA   )r=   rA   r#   r   )r  r   r  rA   r#   rA   )r#   rA   )r#  r   r#   r   )r&  rN   r#   rN   )r/  rN   r#   r0  )r/  rN   r#   r4  )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   rN   r   rA   r   r   r   r2  r   r    r.   r>   rL   r;   r[   rq   rv   rz   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*  r3  r6  r'   r-   r+   <module>r<     s   " " " " " " 				 				                                   # # # # # # # # 1 1 1 1 1 1 1 1  H H H H H H H H H H H H H HWT]]
')5#5
6
6
6GKwsF{';<<<	W\&)9:::
GKxS'9:::	 :999999997 7 7 7 !+     0   N N N NbG G G G" " " "" " " "% % % %% % % %$ $ $ $$ $ $ $! ! ! !! ! ! !% % % %
 48d 8 8 8 8 8 8   
H H H HV WT]]WT]] 
 + + + 
 + 
 I I I 
 I 
 / / / 
 /Y Y Y Y      6 6 6 6               ! ! ! !8 8 8 8&    (+          + + + +0 0 0 0 0 0r-   