
     Ti[                        S SK Jr  S SKJrJr  S SKrS SKr         S                   SS jjr       S               S	S jjr	g)
    )annotations)AnySequenceNc	           	       ^ SSK Jn	  SSKJm  SSSS.0n
U(       a  U
R	                  SSSS.05        U	" UUUUUUS9nU(       a  X{l        U(       a\   " U4S	 jS
[        R                  R                  5      nSS jn/ nU  H  u  nnUR                  U" UUU5      5        M!     U" U5      X4$  " U4S jS[        R                  R                  5      nSS jn/ nU  H  u  nnUR                  U" UUU5      5        M!     U" U5      X4$ )z
Returns a model.
See `LlamaConfig
<https://huggingface.co/docs/transformers/main/en/model_doc/llama#transformers.LlamaConfig>`_.
The parameters are chosen for a unit test configuration.
r   )LlamaConfig)
LlamaModelbatchlength)r      r   )num_hidden_layers
vocab_sizehidden_sizeintermediate_sizemax_position_embeddingsnum_attention_headsc                  2   >^  \ rS rSrUU 4S jrS rSrU =r$ ).get_llama_model.<locals>.LlamaModelWrapperMask4   c                <   > [         TU ]  5         T" U5      U l        g Nsuper__init__modelselfconfigr   	__class__s     i/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/onnxscript/tools/transformers_models/llama.pyr   7get_llama_model.<locals>.LlamaModelWrapperMask.__init__5   s     "'/
    c                B    U R                  XSS9nUR                  5       $ )NF)attention_mask	use_cacher   to_tuple)r   	input_idsr#   model_outputs       r   forward6get_llama_model.<locals>.LlamaModelWrapperMask.forward9   s+    #zz  *   $,,..r!   r   __name__
__module____qualname____firstlineno__r   r)   __static_attributes____classcell__r   r   s   @r   LlamaModelWrapperMaskr   4   s    0/ /r!   r4   c                   [         R                  R                  R                  X/U5      n[        R
                  " [        R                  " X[        R                  S95      nUR                  [        R                  :X  d   eX44$ )N)dtype)	
onnxscripttoolstransformers_models
ids_tensortorchtrilonesfloat32r6   )r	   seqr   r'   
input_masks        r   generate_example_inputs_mask5get_llama_model.<locals>.generate_example_inputs_mask?   se    "((<<GGjI EJJu$OPJ##u}}444((r!   c                  2   >^  \ rS rSrUU 4S jrS rSrU =r$ )*get_llama_model.<locals>.LlamaModelWrapperO   c                <   > [         TU ]  5         T" U5      U l        g r   r   r   s     r   r   3get_llama_model.<locals>.LlamaModelWrapper.__init__P   s    G#F+DJr!   c                B    U R                  USS9nUR                  5       $ )NF)r$   r%   )r   r'   r(   s      r   r)   2get_llama_model.<locals>.LlamaModelWrapper.forwardT   s#    ::i5:AL((**r!   r+   r,   r3   s   @r   LlamaModelWrapperrD   O   s    	,	+ 	+r!   rJ   c                ^    [         R                  R                  R                  X/U5      nU4$ r   )r7   r8   r9   r:   )r	   r?   r   r'   s       r   generate_example_inputs0get_llama_model.<locals>.generate_example_inputsX   s+    $$88CCULR\]	|r!   )r	   intr?   rN   r   rN   )
transformersr   (transformers.models.llama.modeling_llamar   update_attn_implementationr;   nnModuleappend)
input_dimsr   r   r   r   r   r   rR   	with_maskr   dynamic_shapesr   r4   rA   example_args_collectionbsrJ   rL   r   s                      @r   get_llama_modelr\      s   " )CW23Nqg(";<=++ 7/F &:#		/EHHOO 		/	) #%DAq#**+G1j+YZ  %V,.EUU+EHHOO + !1&&'>q!Z'PQ  V$&=MMr!   c                   US:X  a:  [        [        R                  R                  R	                  XPU5      SUSSSSUUS9	nOUS:X  a:  [        [        R                  R                  R	                  XPU5      SUSSSSUUS9	nOPUS;   a:  [        [        R                  R                  R	                  XPU5      SUS	S
SSUUS9	nO[        SU< S35      e[        S0 UD6$ )az  
Returns a model Phi to test or benchmark.

Args:
    warmup: Number of inputs to generate.
    repeat: Number of inputs to generate for repeat.
    config: small, medium or large
    num_hidden_layers: Number of hidden layers.
    implementation: eager or sdpa
    with_mask: One or two inputs.
    dynamic_shapes: dynamic shapes or not

Returns:
    Model and list of inputs.
small         )	rV   r   r   r   r   r   r   rR   rW   medium)largedefaulti   i }  i +  i       zUnexpected configuration . )dictr7   r8   r9   get_input_dims_for_llm
ValueErrorr\   )warmuprepeatr   r   implementationrX   rW   	conf_dicts           r   get_llama_model_from_configro   c   s   0 !'';;RR / $( !!/
	 
8	!'';;RR /"$( !!/
	 
'	'!'';;RR /#$( "!/
	 4VJa@AA'Y''r!   )	))ra      )      )	      r_   r   r`   r_   r`   ra   eagerT)rV   zSequence[tuple[int, int]]r   rN   r   rN   r   rN   r   rN   r   rN   r   rN   rR   strrW   boolreturn0tuple[Any, list[tuple[torch.Tensor, ...]], dict])   
   r^   r   ru   FT)rk   rN   rl   rN   r   rv   r   rN   rm   rv   rX   rw   rW   rw   rx   ry   )

__future__r   typingr   r   r;   $onnxscript.tools.transformers_modelsr7   r\   ro   rg   r!   r   <module>r      s   #    + -F#'  'QN)QNQN QN 	QN
 QN !QN QN QN QN 6QNj ! E(E(E( E( 	E(
 E( E( E( 6E(r!   