
    Pi                         d dl Z d dlZd dlmc mZ d dlmZ 	 d dlm	Z	 d dl
mZ d dlmZ n&#  d dl mZmZmZ ej        Zej        Zej	        Z	Y nxY w G d de          Z G d	 d
e          ZeZdS )    N)MultiTensorInputRecorder)evaluate)HFLM)get_task_dict)base	evaluatortasksc                        e Zd ZdZ	 d fd	Zd Zd Zed             Zed             Z	ed	             Z
ed
             Zed             Zd ZdefdZ xZS )TransformerEvalWrapperzd
    A wrapper class for GPTFast, providing integration with the lm-evaluation-harness library.
    Ncudac                 *   	 t                                          |           n3# t          $ r& t                                          dd           Y nw xY w|| _        || _        t          j        |          | _        || _        ||nd | _	        d S )N)devicegpt2cpuc                     | fS N )xs    i/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torchao/_models/_eval.py<lambda>z1TransformerEvalWrapper.__init__.<locals>.<lambda>3   s    1$     )
super__init__	TypeError_model	tokenizertorchr   _device_max_seq_lengthinput_prep_func)selfmodelr   max_seq_lengthr    r   	__class__s         r   r   zTransformerEvalWrapper.__init__"   s    	3GGF++++ 	3 	3 	3GGVE22222	3 "|F++-
  /:OO 	s   "& -AAc                    |                      |          }t          t          |                                          | j                  }t          j        | j                  5  t          | j	        d          r | j	        
                    | j        |           d d d            n# 1 swxY w Y    | j	        | }ddlm} ddlm} t!          |||f          r|j        }n|}|S )Nsetup_cachesr   )CausalLMOutputWithPast)Gemma3CausalLMOutputWithPast)r    minmaxsize
max_lengthr   r   r   hasattrr   r&   
batch_sizetransformers.modeling_outputsr'   *transformers.models.gemma3.modeling_gemma3r(   
isinstancelogits)r!   inpsinputr#   outputr'   r(   r2   s           r   _model_callz"TransformerEvalWrapper._model_call6   sK   $$T**S--t??\$,'' 	J 	Jt{N33 J((.III	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J e$HHHHHH	
 	
 	
 	
 	
 	
 f57STUU 	]FFFs   #6B%%B),B)c                 t   	 t           j                                         n#  Y nxY wt          |          }t	          d|           t          j                    5  t          | ||          }d d d            n# 1 swxY w Y   |d                                         D ]\  }}t	          | d|            |S )NzEvaluating Model On: limitresultsz: )	lm_evalr	   initialize_tasksr   printr   no_gradr   items)r!   r	   r9   	task_dictresulttaskress          r   run_evalzTransformerEvalWrapper.run_evalJ   s   	M**,,,,	D!%((	%y111]__ 	 	  F	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  	*0022 	$ 	$ID#T""S""####s   ! %A99A= A=c                     	 | j                                         S #  	 | j         j        cY S #  | j         j                            d          }| j         j        |         cY cY S xY wxY w)Nz<|endoftext|>)r   eos_idall_special_tokensindexall_special_ids)r!   idxs     r   eot_token_idz#TransformerEvalWrapper.eot_token_id\   sw    	;>((***	;;~,,,,;n7==oNN~5c::::::s#    A&,A&3A#A&#A&c                     | j         S r   )r   r!   s    r   r,   z!TransformerEvalWrapper.max_lengthg   s    ##r   c                     dS )N2   r   rM   s    r   max_gen_toksz#TransformerEvalWrapper.max_gen_toksk   s    rr   c                     dS )N   r   rM   s    r   r.   z!TransformerEvalWrapper.batch_sizeo   s    qr   c                     | j         S r   )r   rM   s    r   r   zTransformerEvalWrapper.devices   s
    |r   c                 ,     | j         j        |fi |}|S r   )r   decode)r!   tokenskwargsdecodeds       r   
tok_decodez!TransformerEvalWrapper.tok_decodew   s#    '$.'99&99r   stringc                     | j                             |          }t          | j         d          r6	 | j                                         g|z   }n#  | j         j        g|z   }Y nxY w|S )Nbos_id)r   encoder-   r\   )r!   rZ   rW   rV   s       r   
tok_encodez!TransformerEvalWrapper.tok_encode{   sq    &&v..4>8,, 	::.//112V;:./069s   A A#)Nr   )__name__
__module____qualname____doc__r   r6   rD   propertyrK   r,   rP   r.   r   rY   strr^   __classcell__r$   s   @r   r   r      s        
 NT
 
 
 
 
 
(  (  $ ; ; X; $ $ X$   X   X   X          r   r   c                   J     e Zd Zdddddef fd	Zd Zd Zd	 Zd
 Zd Z	 xZ
S )LMEvalInputRecorderNi }  Fr   r   c	                     t                                          d ||||           || _        || _        || _        || _         |            | _        d S )N)r"   r   r#   r    r   )r   r   
vocab_sizecalibration_seq_lengthpad_calibration_inputs	pad_tokenbase_input_recorder)
r!   r   rk   r    rj   rl   rm   r   base_input_recorder_classr$   s
            r   r   zLMEvalInputRecorder.__init__   sn     	1+ 	 	
 	
 	
 %&<#&<#" $=#<#>#>   r   c                     	 t           j                                         n#  Y nxY wt          |          }t	          d|           t          | ||           | S )Nz&Obtaining GPTQ calibration inputs on: r8   )r;   r	   r<   r   r=   r   )r!   calibration_taskscalibration_limitr@   s       r   record_inputsz!LMEvalInputRecorder.record_inputs   ss    	M**,,,,	D!"344	68IJJJ#	
 	
 	
 	

 s   ! %c                 *    |                                  S r   )get_recorded_inputsrM   s    r   
get_inputszLMEvalInputRecorder.get_inputs   s    '')))r   c                 4    | j                                         S r   )rn   ru   rM   s    r   ru   z'LMEvalInputRecorder.get_recorded_inputs   s    ';;===r   c                 4    | j                                         S r   )rn   get_recorded_args_and_kwargsrM   s    r   ry   z0LMEvalInputRecorder.get_recorded_args_and_kwargs   s    'DDFFFr   c                 0   |                     d          }t          |          }|| j        k     r| j        r| j        r7| j        |v r.t          j        d|| j        ft
          j        | j	                  S || j        k    r|d | j                 }n&t          j        |d| j        |z
  f| j                  }|                    d          }|                     |          } | j        |  t          j        d|| j        ft
          j        | j	                  S )Nr   rR   )dtyper   )value)squeezelenrk   rl   rm   r   randnrj   bfloat16r   Fpad	unsqueezer    rn   )r!   r3   Tmodel_ins       r   r6   zLMEvalInputRecorder._model_call   s5   ||AII ,,,T5P, ( - .2^t-C-C ;At'u~dl   
 +++5$556DD5q$59:$.  D ~~a  ''--  (++ {4?#5>$,
 
 
 	
r   )r_   r`   ra   r   r   rs   rv   ru   ry   r6   re   rf   s   @r   rh   rh      s        
 $":? ? ? ? ? ?6   * * *> > >G G G
 
 
 
 
 
 
r   rh   )r;   r   torch.nn.functionalnn
functionalr   torchao.quantization.GPTQr   lm_eval.evaluatorr   lm_eval.models.huggingfacer   eval_wrapperlm_eval.tasksr   r   r   r	   BaseLMr   rh   InputRecorderr   r   r   <module>r      s8              > > > > > >	"******??????+++++++"..........;L'M!HHHe e e e e\ e e ePT
 T
 T
 T
 T
0 T
 T
 T
n $s	   , !A