o
    di                     @   s   d dl mZ d dlmZmZmZmZ d dlmZ d dl	m
Z
 er&d dlmZ d dlmZmZmZ e
eZG dd deZG d	d
 d
eZdS )    OrderedDict)TYPE_CHECKINGAnyDictOptional)
TensorType)logging)PreTrainedTokenizerBase)
OnnxConfigOnnxConfigWithPastOnnxSeq2SeqConfigWithPastc                   @   sP   e Zd Zedeeeeef f fddZedeeeeef f fddZdS )EncoderOnnxConfigreturnc                 C   s    t ddddfddddfgS )N	input_idsbatchsequencer      attention_maskr   self r   h/lsinfo/ai/hellotax_ai/llm_service/venv_embed/lib/python3.10/site-packages/optimum/onnx/configuration.pyinputs    s
   zEncoderOnnxConfig.inputsc                 C   s   t ddddiS )Nlast_hidden_stater   r   r   r   r   r   r   r   outputs)   s   zEncoderOnnxConfig.outputsN)	__name__
__module____qualname__propertyr   strintr   r   r   r   r   r   r      s
     $r   c                       s   e Zd Zedeeeeef f fddZ				dddd	ed
edede	e
 deeef f fddZedeeeeef f f fddZdeeeeef f defddZ  ZS )DecoderOnnxConfigr   c                 C   sD   t ddddfddddfddddfg}| jr | j|dd	 |S )
Nr   r    past_decoder_sequence + sequencer   encoder_hidden_statesencoder_sequenceencoder_attention_maskr   	direction)r   use_pastfill_with_past_key_values_)r   common_inputsr   r   r   r   /   s   zDecoderOnnxConfig.inputsFN	tokenizerr
   
batch_size
seq_lengthis_pair	frameworkc                    s   dd l }i }t j|||||d}|d j\}	}
|	|
| jjf}|d|d< |||d< |d|d< d|v r?|d|d< |S )	Nr   )r/   r0   r1   r2   r   decoder_input_idsr%   r   r'   past_key_values)torchsupergenerate_dummy_inputsshape_confighidden_sizepopzeros)r   r.   r/   r0   r1   r2   r5   r,   dummy_inputr   encoder_seq_lengthencoder_hidden_states_shape	__class__r   r   r7   =   s   
z'DecoderOnnxConfig.generate_dummy_inputsc                    s   t t| j}| j|dd |S )Nr   r(   )r6   r   r   r+   )r   common_outputsr@   r   r   r   V   s   zDecoderOnnxConfig.outputsinputs_or_outputsr)   c           	      C   s\   d}| j \}}|dkrdnd}|dkrdnd}t|| D ]}d|d|| d	| < qd S )
N   r   pastpresentpast_decoder_sequencer$   r   )r      _key_values_)
num_layersrange)	r   rC   r)   num_pkv_per_layer_num_decoder_layersnamedecoder_sequenceir   r   r   r+   \   s   
z,DecoderOnnxConfig.fill_with_past_key_values_)r-   r-   FN)r   r   r   r    r   r!   r"   r   boolr   r   r   r7   r   r+   __classcell__r   r   r@   r   r#   .   s.     
$*r#   N)collectionsr   typingr   r   r   r   transformers.file_utilsr   transformers.utilsr	   $transformers.tokenization_utils_baser
   transformers.onnxr   r   r   
get_loggerr   loggerr   r#   r   r   r   r   <module>   s   
