
     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	       S               SS jjr
g)    )annotations)AnySequenceNc
                   [         R                  R                  R                  X/U5      n
S nU(       a*  [        R
                  " [        R                  " X5      5      nS nU(       a8  US:  d   S5       e[         R                  R                  R                  X/U5      nS nS nS nU	(       a  US:  d   S5       eUS:  d   S5       eUS:  d   S5       e[         R                  R                  R                  U /U5      n[         R                  R                  R                  X/U5      n[         R                  R                  R                  U /U5      nU
UUUUU4$ )Nr   ztype_vocab_size is nullz type_sequence_label_size is nullznum_labels is nullznum_choices is null)
onnxscripttoolstransformers_models
ids_tensortorchtrilones)
batch_size
seq_length
vocab_sizetype_sequence_label_sizetype_vocab_size
num_labelsnum_choicesuse_input_maskuse_token_type_ids
use_labels	input_ids
input_masktoken_type_idssequence_labelstoken_labelschoice_labelss                   k/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/onnxscript/tools/transformers_models/mistral.py_prepare_config_and_inputsr      sb      44??	 *I JZZ

: BC
N"=$=="#))==HH$o
 OLM'!+O-OO+A~333~Q5 55$**>>IIL2
 "'';;FF$j
 #((<<GGL+

 	     c                  ^ SSK Jn  SSKJm  U" UUUUUUUUS9nSSSS.0nU
(       a  UR	                  SSSS.05        U	(       a  Xl        SS	 jnU
(       aX   " U4S
 jS[        R                  R                  5      n/ nU  H  u  nnUR                  U" UUX:5      5        M!     U" U5      UU4$  " U4S jS[        R                  R                  5      n/ nU  H  u  nnUR                  U" UUX:5      5        M!     U" U5      UU4$ )z
Returns a model.
See `MistralConfig
<https://huggingface.co/docs/transformers/main/en/model_doc/mistral#transformers.MistralConfig>`_.
The parameters are chosen for a unit test configuration.
r   )MistralConfig)MistralModel)num_hidden_layersr   hidden_sizeintermediate_sizemax_position_embeddingsnum_attention_headsnum_key_value_headssliding_windowbatchlength)r      r-   c                B    [        U UUUS9u  nnnnnnU(       a  XF4$ U4$ )N)r   r   r   r   )r   )r+   seqr   	with_maskr   _r   s          r   generate_example_inputs2get_mistral_model.<locals>.generate_example_inputsm   sE     '!$	
	
 ((|r    c                  2   >^  \ rS rSrUU 4S jrS rSrU =r$ )6get_mistral_model.<locals>.MistralModelWrapperWithMask   c                <   > [         TU ]  5         T" U5      U l        g Nsuper__init__modelselfconfigr#   	__class__s     r   r;   ?get_mistral_model.<locals>.MistralModelWrapperWithMask.__init__   s     ")&1
r    c                B    U R                  XSS9nUR                  5       $ )NF)attention_mask	use_cacher<   to_tuple)r>   r   rC   model_outputs       r   forward>get_mistral_model.<locals>.MistralModelWrapperWithMask.forward   s+    #zz  *   $,,..r    r<   __name__
__module____qualname____firstlineno__r;   rH   __static_attributes____classcell__r@   r#   s   @r   MistralModelWrapperWithMaskr5      s    2/ /r    rS   c                  2   >^  \ rS rSrUU 4S jrS rSrU =r$ ).get_mistral_model.<locals>.MistralModelWrapper   c                <   > [         TU ]  5         T" U5      U l        g r8   r9   r=   s     r   r;   7get_mistral_model.<locals>.MistralModelWrapper.__init__   s    G%f-DJr    c                B    U R                  USS9nUR                  5       $ )NF)rD   rE   )r>   r   rG   s      r   rH   6get_mistral_model.<locals>.MistralModelWrapper.forward   s#    ::i5:AL((**r    rJ   rK   rR   s   @r   MistralModelWrapperrU      s    	.	+ 	+r    r[   )r+   intr/   r\   r   r\   r0   bool)
transformersr"   ,transformers.models.mistral.modeling_mistralr#   update_attn_implementationr   nnModuleappend)
input_dimsr%   r$   r   r&   r'   r(   r)   r*   ra   r0   r"   r?   dynamic_shapesr2   rS   example_args_collectionbsr[   r#   s                       @r   get_mistral_modelrj   E   s   & +I++ 7//%	F W23Nqg(";<=&:#$ 		/%((// 		/ #%DAq#**'1jD 
 +624K^[[+ehhoo + !1&&'>q!Z'[\  v&(?OOr    c                   US:X  a;  [        [        R                  R                  R	                  XPU5      SUSSSSSUUS9
nOUS	:X  a<  [        [        R                  R                  R	                  XPU5      S
US
S
SSS
SUUS9nORUS;   a<  [        [        R                  R                  R	                  XPU5      SUSSSSSSUUS9nO[        SU< S35      e[        S0 UD6$ )ay  
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    c               )
re   r%   r$   r   r&   r'   r(   r)   ra   r0   mediumi      )re   r%   r$   r   r&   r(   r)   r'   r*   ra   r0   )largedefaulti }  i 8     i   zUnexpected configuration . )dictr   r   r	   get_input_dims_for_llm
ValueErrorrj   )warmuprepeatr?   r$   implementationrf   r0   	conf_dicts           r   get_mistral_model_from_configr      s   0 !'';;RR / $' ! !!/
	 
8	!'';;RR /" ! !$(!/
	 
'	'!'';;RR /# " !$*!/
	  4VJa@AA)y))r    )rr   ro      rq   FFF)r   r\   r   r\   r   r\   r   r\   r   r\   r   r\   r   r\   r   r]   r   r]   r   r]   returnztuple[Any, ...])))      )   r   )   rw   rm   rr   rn   ro   rp   rr   rr   rt   eagerT)re   zSequence[tuple[int, int]]r0   r]   r   0tuple[Any, list[tuple[torch.Tensor, ...]], dict])   
   rl   r-   r   FT)r}   r\   r~   r\   r?   strr$   r\   r   r   rf   r]   r0   r]   r   r   )
__future__r   typingr   r   r   $onnxscript.tools.transformers_modelsr   r   rj   r   ry   r    r   <module>r      sY   #    + %& $333 3 "	3
 3 3 3 3 3 3 3n -H \P)\P \P 6\P@ ! J*J*J* J* 	J*
 J* J* J* 6J*r    