o
    ߥi
                     @   s   d dl mZmZ d dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZ d dlmZ dgZe
jejejdG d	d deZdS )
    )AnyDictN)Heads
TaskModels)MODELS)EncoderModel)TasksModelForFillMask)module_namec                       sh   e Zd ZejZejZdgZddgZ											d fdd	Z
dd Zd	d
 Z	dddZ  ZS )r	   poolerposition_idszpredictions.decoder.biasNc              
      s.   t  j|||||||||	f	i |}||_|S N)superforward	input_ids)selfr   attention_masktoken_type_idsr   	head_maskinputs_embedslabelsoutput_attentionsoutput_hidden_statesreturn_dictkwargsoutputs	__class__ _/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/nlp/task_models/fill_mask.pyr      s   zModelForFillMask.forwardc                 C   s   | j jjjS r   headclspredictionsdecoder)r   r   r   r   get_output_embeddings/   s   z&ModelForFillMask.get_output_embeddingsc                 C   s   || j jj_d S r   r    )r   new_embeddingsr   r   r   set_output_embeddings2   s   z&ModelForFillMask.set_output_embeddingsc                 K   s   |j }|d }| jjd u rtd|j d }tj|||dfgdd}tj|df| jjtj|j	d}tj||gdd}||dS )Nr   z.The PAD token should be defined for generation   )dim)dtypedevice)r   r   )
shapeconfigpad_token_id
ValueErrortorchcat	new_zerosfulllongr,   )r   r   r   model_kwargsinput_shapeeffective_batch_sizeattention_shape0dummy_tokenr   r   r   prepare_inputs_for_generation5   s$   


z.ModelForFillMask.prepare_inputs_for_generation)
NNNNNNNNNNr   )__name__
__module____qualname__r   	fill_masktaskr   	head_type"_keys_to_ignore_on_load_unexpected_keys_to_ignore_on_load_missingr   r%   r'   r;   __classcell__r   r   r   r   r	      s*    )typingr   r   numpynpr1   modelscope.metainfor   r   modelscope.models.builderr   ,modelscope.models.nlp.task_models.task_modelr   modelscope.utils.constantr   __all__register_moduler?   r	   r   r   r   r   <module>   s   