
    h                         S SK r S SKrS SKJs  Jr  S SKJr   S SKJ	r	  S SK
Jr  S SKJr   " S S\5      r " S	 S
\5      r\rg!   S SK JrJrJr  \R$                  r\R                  r\R                  r	 NK= f)    N)MultiTensorInputRecorder)evaluate)HFLM)get_task_dict)base	evaluatortasksc                      ^  \ rS rSrSr SU 4S jjrS rS r\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       rS rS\4S jrSrU =r$ )TransformerEvalWrapper   z\
A wrapper class for GPTFast, providing integration with the lm-evaluation-harness library.
c                    >  [         TU ]  US9  Xl        X l        [
        R                  " U5      U l        X0l        Ub  UU l	        g S U l	        g ! [         a    [         TU ]  SSS9   N[f = f)N)devicegpt2cpuc                     U 4$ N )xs    O/home/james-whalen/.local/lib/python3.13/site-packages/torchao/_models/_eval.py<lambda>1TransformerEvalWrapper.__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   TransformerEvalWrapper.__init__"   sz    	3GF+
 "||F+-
  /:O 	@N 	  	3GVE2	3s   A A,+A,c                    U R                  U5      n[        [        UR                  5       5      U R                  5      n[
        R                  " U R                  5         [        U R                  S5      (       a&  U R                  R                  U R                  U5        S S S 5        U R                  " U6 nSSKJn  SSKJn  [!        XEU45      (       a  UR"                  nU$ UnU$ ! , (       d  f       NM= f)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*   r4   s           r   _model_call"TransformerEvalWrapper._model_call6   s    $$T*S-t?\\$,,'t{{N33((.I ( e$H	
 f7STUU]]F  F ('s   AC((
C6c                 L    [         R                  R                  5         [        U5      n[	        SU5        [
        R                  " 5          [        U UUS9nS S S 5        WS   R                  5        H  u  pV[	        U SU 35        M     U$ !    Nr= f! , (       d  f       NC= f)NzEvaluating Model On: limitresultsz: )	lm_evalr	   initialize_tasksr   printr   no_gradr   items)r"   r	   r<   	task_dictresulttaskress          r   run_evalTransformerEvalWrapper.run_evalJ   s    	MM**, "%(	%y1]]_F   	*002IDTF"SE"# 3	 _s   B BB
B#c                     U R                   R                  5       $ !    U R                   R                  s $ !   U R                   R                  R                  S5      nU R                   R                  U   s s $ = f= f)Nz<|endoftext|>)r   eos_idall_special_tokensindexall_special_ids)r"   idxs     r   eot_token_id#TransformerEvalWrapper.eot_token_id\   sk    	;>>((**	;;~~,,,;nn77==oN~~55c::s$    A>7A>A A;7A>;A>c                     U R                   $ r   )r    r"   s    r   r.   !TransformerEvalWrapper.max_lengthg   s    ###r   c                     g)N2   r   rR   s    r   max_gen_toks#TransformerEvalWrapper.max_gen_toksk   s    r   c                     g)N   r   rR   s    r   r0   !TransformerEvalWrapper.batch_sizeo   s    r   c                     U R                   $ r   )r   rR   s    r   r   TransformerEvalWrapper.devices   s    ||r   c                 @    U R                   R                  " U40 UD6nU$ r   )r   decode)r"   tokenskwargsdecodeds       r   
tok_decode!TransformerEvalWrapper.tok_decodew   s     ..''9&9r   stringc                     U R                   R                  U5      n[        U R                   S5      (       a!   U R                   R                  5       /U-   nU$ U$ !   U R                   R                  /U-   n U$ = f)Nbos_id)r   encoder/   rf   )r"   rd   r`   r_   s       r   
tok_encode!TransformerEvalWrapper.tok_encode{   st    &&v.4>>8,,:..//12V; v:..//069s   A A9)r   r    r   r!   r   )Ncuda)__name__
__module____qualname____firstlineno____doc__r   r8   rG   propertyrO   r.   rV   r0   r   rb   strrh   __static_attributes____classcell__r%   s   @r   r   r      s    
 NT
(($ ; ; $ $        r   r   c                   V   ^  \ rS rSrSSSSS\4U 4S jjrS rS	 rS
 rS r	S r
SrU =r$ )LMEvalInputRecorder   Ni }  Fr   r   c	                 p   > [         T	U ]  S UUUUS9  X@l        X l        XPl        X`l        U" 5       U l        g )N)r#   r   r$   r!   r   )r   r   
vocab_sizecalibration_seq_lengthpad_calibration_inputs	pad_tokenbase_input_recorder)
r"   r   rz   r!   ry   r{   r|   r   base_input_recorder_classr%   s
            r   r   LMEvalInputRecorder.__init__   sK     	1+ 	 	
 %&<#&<#" $=#> r   c                      [         R                  R                  5         [        U5      n[	        SU5        [        U UUS9  U $ !    N(= f)Nz&Obtaining GPTQ calibration inputs on: r;   )r>   r	   r?   r   r@   r   )r"   calibration_taskscalibration_limitrC   s       r   record_inputs!LMEvalInputRecorder.record_inputs   sR    	MM**, ""34	68IJ#	

 	s   A Ac                 "    U R                  5       $ r   )get_recorded_inputsrR   s    r   
get_inputsLMEvalInputRecorder.get_inputs   s    ''))r   c                 6    U R                   R                  5       $ r   )r}   r   rR   s    r   r   'LMEvalInputRecorder.get_recorded_inputs   s    '';;==r   c                 6    U R                   R                  5       $ r   )r}   get_recorded_args_and_kwargsrR   s    r   r   0LMEvalInputRecorder.get_recorded_args_and_kwargs   s    ''DDFFr   c                    UR                  S5      n[        U5      nX R                  :  a  U R                  (       a!  U R                  (       aJ  U R                  U;   a:  [
        R                  " SX R                  4[
        R                  U R                  S9$ X R                  :  a  US U R                   nO/[        R                  " USU R                  U-
  4U R                  S9nUR                  S5      nU R                  U5      nU R                  " U6   [
        R                  " SX R                  4[
        R                  U R                  S9$ )Nr   rY   )dtyper   )value)squeezelenrz   r{   r|   r   randnry   bfloat16r   Fpad	unsqueezer!   r}   )r"   r5   Tmodel_ins       r   r8   LMEvalInputRecorder._model_call   s   ||AI ,,,T5P5P ((T^^t-C ;;A'u~~dll 
 +++5$556D55q$559:$..D ~~a ''-  (+ {{??#5>>$,,
 	
r   )r}   rz   r{   r|   ry   )rk   rl   rm   rn   r   r   r   r   r   r   r8   rr   rs   rt   s   @r   rv   rv      s;    
 $":?6 *>G
 
r   rv   )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   rv   InputRecorderr   r   r   <module>r      sw        >	"*?+e\ ePT
0 T
n $O"..;;L''M!!Hs   A 0A6