
    -`ik1                        d Z ddlZddlZddl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 ddl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 ddlZddlZddl m!Z! ddl"m#Z# dd	l$m%Z%  e%e&          Z'erdd
l(m)Z) neZ)e*e)         Z+ ede+          Z,de,de,fdZ-de+de.defdZ/	 	 	 d0de0de
e.         dedz  de	g ef         dz  de1defdZ2de.de1fdZ3de.de1fdZ4de*e         de5e.e.f         fdZ6de+de.de1fdZ7e# G d de                      Z8 G d  d!e          Z9d"e,d#e5e.ef         de,fd$Z:d% Z;d"e,d&e<e.         de5e.e0f         fd'Z=d(e5e.e0f         de.fd)Z>d"e,d*e.d+e.e?e.         z  d,e.ddf
d-Z@e G d. d/                      ZAdS )1z.Utility functions for vLLM config dataclasses.    N)CallableIterableMappingSequenceSet)MISSINGField	dataclassfieldfieldsis_dataclassreplace)pairwise)TYPE_CHECKINGAnyProtocolTypeVar)	FieldInfo)runtime_checkable)init_logger)DataclassInstanceConfigT)boundclsreturnc                     | S )a	  
    A decorator that ensures all fields in a dataclass have default values
    and that each field has a docstring.

    If a `ConfigT` is used as a CLI argument itself, the `type` keyword argument
    provided by `get_kwargs` will be
    `pydantic.TypeAdapter(ConfigT).validate_json(cli_arg)` which treats the
    `cli_arg` as a JSON string which gets validated by `pydantic`.

    Config validation is performed by the tools/pre_commit/validate_config.py
    script, which is invoked during the pre-commit checks.
     )r   s    e/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/config/utils.pyconfigr   #   s	     J    namec                    t          |           st          d          d t          |           D             }||vrt          d| d| j         d          ||         }|j        x}t          urt          |          S |j        x}t          urHt          |t                    r#|j        t          |j                  S |j        }t          |          S t          | j         d| d	          )
zrGet the default factory field of a dataclass by name. Used for getting
    default factory fields in `EngineArgs`.z#The given class is not a dataclass.c                     i | ]
}|j         |S r   r!   ).0fs     r   
<dictcomp>zget_field.<locals>.<dictcomp>8   s    111!&!111r    zField 'z' not found in .)default_factoryN)defaultz. must have a default value or default factory.)r   	TypeErrorr   
ValueError__name__r)   r   r   r*   
isinstancer   )r   r!   
cls_fieldsnamed_fieldr)   r*   s         r   	get_fieldr1   3   s     ?=>>>11VC[[111J:G4GGGGGHHH#D)K&66wFF_5555&&w66gy)) 	*&2W-DEEEE!/W%%%%
<NN$NNN  r    Fobjectnamesr*   r)   warnc                    t          |          D ]d\  }}t          | |          rO|r;|dk    r5t                              dt	          |           j        ||d                    t          | |          c S e|
 |            n|S )a  
    A helper function that retrieves an attribute from an object which may
    have multiple possible names. This is useful when fetching attributes from
    arbitrary `transformers.PretrainedConfig` instances.

    In the case where the first name in `names` is the preferred name, and
    any other names are deprecated aliases, setting `warn=True` will log a
    warning when a deprecated name is used.
    r   zc%s contains a deprecated attribute name '%s'. Please use the preferred attribute name '%s' instead.)	enumeratehasattrloggerwarning_oncetyper-   getattr)r2   r3   r*   r)   r4   ir!   s          r   getattr_iterr=   L   s      U## 
) 
)464   		) A##LLL)!H   64(((((		) !0 ;??Hr    textc                 8    d}t          j        ||           }|duS )ak  
    Check if the text looks like a printed Python object, e.g.
    contains any substring matching the pattern: "at 0xFFFFFFF>"
    We match against 0x followed by 2-16 hex chars (there's
    a max of 16 on a 64-bit system).

    Args:
        text (str): The text to check

    Returns:
        result (bool): `True` if a match is found, `False` otherwise.
    zat 0x[a-fA-F0-9]{2,16}>N)research)r>   patternmatchs      r   contains_object_printrD   j   s%     )GIgt$$Er    c                 H    t          |           sdS t          d|            )NTzvLLM tried to hash some configs that may have Python objects ids in them. This is a bug, please file an issue. Text being hashed: )rD   AssertionError)r>   s    r   assert_hashablerG   |   s;     && t
	%"	% 	%  r    c                    t          j        t          j        t	          j        |                               j        d         }t          |t           j                  st          d          i }t          |j                  D ]\  }}t          |t           j        t           j        f          rXt          |t           j                  r>t          |j        t           j                  rt          |j        j        t                     st	          j        |j        j                  }t          |t           j                  r|j        n|j        g}|D ]'}t          |t           j                  s|||j        <   (|S )zw
    Get any docstrings placed after attribute assignments in a class body.

    https://davidism.com/mit-license/
    r   zGiven object was not a class.)astparsetextwrapdedentinspect	getsourcebodyr.   ClassDefr+   r   Assign	AnnAssignExprvalueConstantstrcleandoctargetstargetNameid)r   cls_nodeoutabdocrX   rY   s           r   get_attr_docsra      sR    y):3)?)?@@AAFqIHh-- 97888
C '' ! !1 1sz3=9::	a**	 ags|44	 agmS11		 qw}--  *!SZ88H!))qxj 	! 	!Ffch//  C	NN	! Jr    c                 ^    t          fdt          |           D                       j        S )Nc              3   2   K   | ]}|j         k    |V  d S Nr$   )r%   r&   r!   s     r   	<genexpr>z is_init_field.<locals>.<genexpr>   s)      99a!&D......99r    )nextr   init)r   r!   s    `r   is_init_fieldrh      s/    99996#;;99999>>r    c                       e Zd ZdefdZdS )SupportsHashr   c                     d S rd   r   selfs    r   compute_hashzSupportsHash.compute_hash         r    N)r-   
__module____qualname__rV   rn   r   r    r   rj   rj      s!        &c&&&&&&r    rj   c                   *    e Zd Zdeeef         fdZdS )SupportsMetricsInfor   c                     d S rd   r   rl   s    r   metrics_infoz SupportsMetricsInfo.metrics_info   ro   r    N)r-   rp   rq   dictrV   ru   r   r    r   rs   rs      s)        1d38n111111r    rs   r   	overridesc                    i }|                                 D ]\  }}t          | |          sJ t          |            d| d            t          | |          }t	          |          rqt	          |          sbt          |t                    s=J dt          |            d| dt          |           dt          |                       t          ||          }|||<   t          | fi |S )Nz has no field ``zOverrides to r(   z must be a dict  or z
, but got )	itemsr7   r:   r;   r   r.   rv   update_configr   )r   rw   processed_overrides
field_namerT   current_values         r   r{   r{      sJ   &__.. 0 0
Evz** 	
 	
F||99J999	
 	
*  
33&& 	|E/B/B 	eT**  EV E Ez E E]++E E7;E{{E E * " E +0J''6110111r    c           	      `     (t           t          t          t          t          f          r S t           t
          j                  r1 j        j         d j        j	         }|t           j                  fS t           t                    rat           dd          }t           dt           dd                    }d                    d ||fD                       pt                     S t!           d          r2t#          t           dd                    r                                 S t#                     rt'          d	          t           t(          j                  rt	                     S t           t,          t.          f          r                                 S t           t2          j                  rS	 t	                                                                                     S # t:          $ r t	                     cY S w xY wt=                     rW j        j         d j        j	         }t?           fd
tA          tC                     d           D                       }||fS t           tD                    r8t?          tA          d  #                                D                                 S t           tH                    r&t?          tA          d  D                                 S t           tJ                    r;t           t          t,          t.          f          st?          d  D                       S t!           d          r(t#           j&                  r &                                S t'          dt                     j'         d          )zReturn a stable, JSON-serializable canonical form for hashing.
    Order: primitives, special types (Enum, callable, torch.dtype, Path), then
    generic containers (Mapping/Set/Sequence) with recursion.
    Nr(   rp    rq   r-   c                     g | ]}||S r   r   )r%   ps     r   
<listcomp>z#normalize_value.<locals>.<listcomp>   s    888qa8888r    uuidz:normalize_value: function or callable instance unsupportedc              3   j   K   | ]-}|j         t          t          |j                             fV  .d S rd   )r!   normalize_valuer;   )r%   r&   xs     r   re   z"normalize_value.<locals>.<genexpr>  sR       
 
 V_WQ%7%7889
 
 
 
 
 
r    c                     | j         S rd   r$   )r&   s    r   <lambda>z!normalize_value.<locals>.<lambda>	  s    QV r    )keyc              3   X   K   | ]%\  }}t          |          t          |          fV  &d S rd   )rV   r   )r%   kvs      r   re   z"normalize_value.<locals>.<genexpr>  s9      OOTQSVV_Q%7%78OOOOOOr    c              3   N   K   | ] }t          t          |                    V  !d S rd   )reprr   r%   r   s     r   re   z"normalize_value.<locals>.<genexpr>  s2      @@D!3!344@@@@@@r    c              3   4   K   | ]}t          |          V  d S rd   )r   r   s     r   re   z"normalize_value.<locals>.<genexpr>  s*      33A_Q''333333r    to_json_stringz#normalize_value: unsupported type 'zi'. Ensure config values use supported primitives/containers or add a stable representation for this type.)(r.   boolintfloatrV   enumEnum	__class__rp   rq   r   rT   r:   r;   joinr   r7   callabler   r+   torchdtypebytes	bytearrayhexpathlibPath
expanduserresolve	Exceptionr   tuplesortedr   r   rz   r   r   r   r-   )r   	enum_typemodulequaltype_fqnrz   s   `     r   r   r      s    	yJq4eS"9::y !TY 5{-JJ0HJJ	?173344 !T EL"--q.'!Z*D*DEExx88VTN88899DT!WWD q& hwq&$'?'?@@ vvxx{{ VTUUU
 !U[!! 1vv !eY'(( uuww !W\"" 	q||~~--//000 	 	 	q66MMM	 A !k,IIq{/GII 
 
 
 
F1II+;+;<<<
 
 
 
 
 %   !W QVOOQWWYYOOOOOPPP!S BV@@a@@@@@AAA!X 4z!c5)5L'M'M 433333333 q"## "1A(B(B "!!! 	/d1gg.> 	/ 	/ 	/  s   2G6 6HHignored_factorsc           
         i }t          |           D ]m}|j        }||v rt          | |d          }	 t          |          ||<   3# t          $ r.}t	          d| dt          |          j         d          |d}~ww xY w|S )zGets the factors used for hashing a config class.
    - Includes all dataclass fields not in `ignored_factors`.
    - Errors on non-normalizable values.
    Nz,get_hash_factors: unsupported type for key 'z' ())r   r!   r;   r   r+   r:   r-   )r   r   factorsdc_fieldfactorrT   es          r   get_hash_factorsr   &  s    
 "$G6NN  _$$--	-e44GFOO 	 	 	,v , ,KK(, , ,  	
 Ns   A
A=)A88A=rz   c                     t          j        t          j        | d                                                                                    S )z=Return a SHA-256 hex digest of the canonical items structure.T)	sort_keys)hashlibsha256jsondumpsencode	hexdigest)rz   s    r   hash_factorsr   ;  s9    >$*Ud;;;BBDDEEOOQQQr    old_namenew_name_or_namesremoval_versionc                     t          | |          }|d S t          |t                    r|g}n|}| d| dd                    |           d}t                              |           |D ]}t          | ||           d S )Nz& is deprecated and will be removed in z. Use , z	 instead.)r;   r.   rV   r   r8   warningsetattr)r   r   r   r   old_val	new_namesmsgnew_names           r   handle_deprecatedr   @  s     fh''G#S)) &&'		%	  	/ 	/? 	/ 	/yy##	/ 	/ 	/  NN3 + +'****+ +r    c                   x    e Zd ZU dZeed<   eed<   defdZdedefdZde	defd	Z
defd
ZdefdZdefdZdS )RangezG
    A range of numbers.
    Inclusive of start, inclusive of end.
    startendr   c                 "    | j         | j        k    S rd   r   r   rl   s    r   is_single_sizezRange.is_single_sizec  s    zTX%%r    sizec                 6    | j         |cxk    o
| j        k    nc S rd   r   )rm   r   s     r   __contains__zRange.__contains__f  s(    zT----TX-----r    otherc                 p    t          |t                    sdS | j        |j        k    o| j        |j        k    S )NF)r.   r   r   r   )rm   r   s     r   __eq__zRange.__eq__j  s6    %'' 	5zU[(BTX-BBr    c                 8    t          | j        | j        f          S rd   )hashr   r   rl   s    r   __hash__zRange.__hash__o  s    TZ*+++r    c                 (    d| j          d| j         dS )N(r   r   r   rl   s    r   __str__zRange.__str__r  s    ,4:,,,,,,r    c                 *    |                                  S rd   )r   rl   s    r   __repr__zRange.__repr__u  s    ||~~r    N)r-   rp   rq   __doc__r   __annotations__r   r   r   r2   r   r   rV   r   r   r   r    r   r   r   Y  s          
 JJJ	HHH& & & & &. . . . . .CF Ct C C C C
,# , , , ,- - - - -#      r    r   )NNF)Br   rI   r   r   rM   r   r   rK   collections.abcr   r   r   r   r   dataclassesr   r	   r
   r   r   r   r   	itertoolsr   typingr   r   r   r   regexr@   r   pydantic.fieldsr   typing_extensionsr   vllm.loggerr   r-   r8   	_typeshedr   r:   
ConfigTyper   r   rV   r1   r2   r   r=   rD   rG   rv   ra   rh   rj   rs   r{   r   setr   r   listr   r   r   r    r   <module>r      sv   5 4 



       F F F F F F F F F F F F F F W W W W W W W W W W W W W W W W W W       8 8 8 8 8 8 8 8 8 8 8 8      % % % % % % / / / / / / # # # # # #	X		 +++++++#$

'):
.
.
. G     : S U    8 04I IIC=I 4ZI b#g&-	I
 I 	I I I I<     $# $    &tCy &T#s(^ & & & &R?z ? ? ? ? ? ? ' ' ' ' '8 ' ' '2 2 2 2 2( 2 2 22' 2d38n 2 2 2 2 2(S S SlW s3x DfDU    *RS&[) Rc R R R R
+++ T#Y+ 	+
 
+ + + +2          r    