o
    ߥi
                     @   s   d dl mZ d dlmZ d dlm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 )    )Dict)BertTokenizer)Models)Tensor
TorchModel)MODELS)GPTMoEModel)TasksGPTMoEForTextGeneration)module_namec                       sf   e Zd Zdef fddZdeeef deeef fddZdeeef deeef fdd	Z  Z	S )
r
   	model_dirc                    s`   t  j|g|R i | d|v r"ddlm} ||fi || _dS t|| _t|| _dS )zinitialize the text generation model from the `model_dir` path.

        Args:
            model_dir (str): the model path.
        model_parallel_sizer   )DistributedGPTMoEN)	super__init__modelscope.models.nlpr   modelr   from_pretrainedr   	tokenizer)selfr   argskwargsr   	__class__ a/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/nlp/gpt_moe/text_generation.pyr      s   z GPTMoEForTextGeneration.__init__inputreturnc                 C   s   | j di |S )a8  return the result by the model

        Args:
            input (Dict[str, Tensor]): the preprocessed data

        Returns:
            Dict[str, Tensor]: results
                Example:
                    {
                        'logits': Tensor([[0.54, 0.32...])]), # logits
                    }
        Nr   )r   )r   r   r   r   r   forward$   s   zGPTMoEForTextGeneration.forwardc                 C   s   t | jts| jjdi |S d|v sJ d|d }d|v r2|d }|d |d    d}|d d d df }t }||d< |dd|d< |d	d
|d	< |dd|d< |dd |d< | jjdi |}d|d iS )N	input_idsz-generate function must accept 'input_ids' keyattention_maskr   inputs	do_sampleT
max_length   top_k
   top_p	sequencesr   )	
isinstancer   r   generatenonzerosqueeze	unsqueezedictpop)r   r   r   r    
gen_paramssample_outputr   r   r   r+   3   s$   
z GPTMoEForTextGeneration.generate)
__name__
__module____qualname__strr   r   r   r   r+   __classcell__r   r   r   r   r
      s    "*N)typingr   transformersr   modelscope.metainfor   modelscope.models.baser   r   modelscope.models.builderr   modelscope.models.nlp.gpt_moer   modelscope.utils.constantr	   __all__register_moduletext_generationgpt_moer
   r   r   r   r   <module>   s   