
    -`i                     v    d dl Z d dlZd dlmZ  G d ded                   Z G d deeef                   Z	dS )    N)Anyc                       e Zd Zedej        fd            Zedeeeee	f         f         fd            Z
edeeee	f                  fd            ZdS )ParameterSweepfilepathc                     t          |d          5 }t          j        |          }d d d            n# 1 swxY w Y   t          |t                    r|                     |          S |                     |          S )Nrb)openjsonload
isinstancedictread_from_dictfrom_records)clsr   fdatas       u/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/benchmarks/sweep/param_sweep.py	read_jsonzParameterSweep.read_json	   s    (D!! 	 Q9Q<<D	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  dD!! 	,%%d+++%%%s   266r   c                 h    d |                                 D             }|                     |          S )a  
        Read parameter sweep from a dict format where keys are names.

        Example:
            {
                "experiment1": {"max_tokens": 100, "temperature": 0.7},
                "experiment2": {"max_tokens": 200, "temperature": 0.9}
            }
        c                      g | ]\  }}d |i|S _benchmark_name ).0nameparamss      r   
<listcomp>z1ParameterSweep.read_from_dict.<locals>.<listcomp>   s'    XXX<4%t6v6XXX    )itemsr   )r   r   recordss      r   r   zParameterSweep.read_from_dict   s4     YX4::<<XXX(((r   r    c                 h   t          |t                    st          dt          |                     d |D             r[t	                    t	          t                              k    r.fdD             }t          dt          |           d           | d |D                       S )NzFThe parameter sweep should be a list of dictionaries, but found type: c                 &    g | ]}d |v |d          S r   r   )r   rs     r   r   z/ParameterSweep.from_records.<locals>.<listcomp>+   s)    QQQ!:Kq:P:P$%:P:P:Pr   c                 F    g | ]}                     |          d k    |S )   )count)r   r   namess     r   r   z/ParameterSweep.from_records.<locals>.<listcomp>-   s/    JJJ4EKK4E4E4I4I$4I4I4Ir   z(Duplicate _benchmark_name values found: z,. All _benchmark_name values must be unique.c              3   J   K   | ]}t                               |          V  d S N)ParameterSweepItemfrom_record)r   records     r   	<genexpr>z.ParameterSweep.from_records.<locals>.<genexpr>3   s1      PPf%11&99PPPPPPr   )r   list	TypeErrortypelenset
ValueError)r   r    
duplicatesr'   s      @r   r   zParameterSweep.from_records"   s    '4(( 	3#'==3 3   RQwQQQ 	SZZ3s5zz??22JJJJ5JJJJ>3z?? > > >  
 sPPPPPPPPr   N)__name__
__module____qualname__classmethodosPathLiker   r   strobjectr   r.   r   r   r   r   r   r      s        & & & & [& )$sDf,='="> ) ) ) [) Q4S&[(9#: Q Q Q [Q Q Qr   r   r*   c                   
    e Zd Zedeeef         fd            Zdeeef         f fdZ	e
defd            ZdefdZdefd	Zdefd
ZdedefdZdededee         fdZdee         dee         fdZddedefdZ xZS )r*   r,   c                     t          |t                    st          dt          |                      | |          S )NzIEach item in the parameter sweep should be a dictionary, but found type: )r   r   r/   r0   )r   r,   s     r   r+   zParameterSweepItem.from_record7   sN    &$'' 	2#'<<2 2  
 s6{{r   otherc                 r     t          |           t                                          |                    S r)   )r0   super__or__)selfr?   	__class__s     r   rB   zParameterSweepItem.__or__A   s)    tDzz%''..//000r   returnc                 `    d| v rt          | d                   S |                     d          S )z
        Get the name for this parameter sweep item.

        Returns the '_benchmark_name' field if present, otherwise returns a text
        representation of all parameters.
        r   -)sep)r;   as_text)rC   s    r   r   zParameterSweepItem.nameD   s7     $$t-.///|||$$$r   	param_keyc              #      K   d|v r=|                     dd          \  }}|                     |          D ]}|dz   |z   V  d S |V  |                    dd          V  |                    dd          V  d S )N.r%   rG   _)split_iter_param_key_candidatesreplace)rC   rJ   prefixrestprefix_candidates        r   rO   z-ParameterSweepItem._iter_param_key_candidatesR   s      )$??322LFD$($C$CF$K$K 4 4 &,t33333FS)))))S)))))))r   c              #   |   K   t          t          |                     |                              D ]	}d|z   V  
d S )Nz--)reversedtuplerO   )rC   rJ   ks      r   _iter_cmd_key_candidatesz+ParameterSweepItem._iter_cmd_key_candidates`   sL      % ? ?	 J JKKLL 	 	A(NNNN	 	r   c                 F    t          |                     |                    S r)   )nextrX   rC   rJ   s     r   _normalize_cmd_keyz%ParameterSweepItem._normalize_cmd_keyd   s    D11)<<===r   c                 `     t           fd                     |          D                       S )Nc              3       K   | ]}|v V  	d S r)   r   )r   rW   rC   s     r   r-   z/ParameterSweepItem.has_param.<locals>.<genexpr>h   s'      QQ19QQQQQQr   )anyrO   r[   s   ` r   	has_paramzParameterSweepItem.has_paramg   s4    QQQQd&E&Ei&P&PQQQQQQr   rW   vc                     t          |t                    r@d|v r|                     |           d|rdnd gS |                     |r|nd|z             gS |                     |          t          |          gS )a  
        Normalize a key-value pair into command-line arguments.

        Returns a list containing either:
        - A single element for boolean flags (e.g., ['--flag'] or ['--flag=true'])
        - Two elements for key-value pairs (e.g., ['--key', 'value'])
        rL   =truefalsezno-)r   boolr\   r;   )rC   rW   ra   s      r   _normalize_cmd_kv_pairz)ParameterSweepItem._normalize_cmd_kv_pairj   s     a 	8axx22155RR!8PRRSS//Q0EEAIFFGG++A..A77r   cmdc                 $   t          |          }|                                 D ]\  }}|dk    rt          |t                    rt	          j        |          }|                     |          D ]w}	 |                    |          }|                     ||          }t          |          dk    r|d         ||<   n|d         ||<   |d         ||dz   <    n9# t          $ r Y tw xY w|                    |                     ||                     |S )Nr   r%   r   )r.   r   r   r   r
   dumpsrX   indexrg   r1   r3   extend)rC   rh   rW   ra   k_candidatek_idx
normalizeds          r   apply_to_cmdzParameterSweepItem.apply_to_cmd{   s1   3iiJJLL 	> 	>DAq%%% !T"" "JqMM#<<Q?? > >IIk22E "&!<!<Q!B!BJ:!++%/]E

 &0]E
)3AEAIE!   H 

466q!<<===
s   1A#C
C#"C#, rH   c                 d    |                     d |                                 D                       S )Nc              3   6   K   | ]\  }}|d k    | d| V  dS )r   rc   Nr   )r   rW   ra   s      r   r-   z-ParameterSweepItem.as_text.<locals>.<genexpr>   s;      VVtq!qDU?U?U1

q

?U?U?U?UVVr   )joinr   )rC   rH   s     r   rI   zParameterSweepItem.as_text   s+    xxVVtzz||VVVVVVr   )rq   )r5   r6   r7   r8   r   r;   r<   r+   r   rB   propertyr   rO   rX   r\   rf   r`   r.   rg   rp   rI   __classcell__)rD   s   @r   r*   r*   6   s       c6k!2    [1DcN 1 1 1 1 1 1 
%c 
% 
% 
% X
%*C * * * *#    >C > > > >R3 R4 R R R R8 8 849 8 8 8 8"!S	 !d3i ! ! ! !FW W3 W# W W W W W W W Wr   )
r
   r9   typingr   r.   r   r   r;   r<   r*   r   r   r   <module>rx      s     				      +Q +Q +Q +Q +QT./ +Q +Q +Q\iW iW iW iW iWc6k* iW iW iW iW iWr   