o
    ॵi                     @   sn   d dl mZm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 ejejdG dd	 d	e
ZdS )
    )AnyDictN)MetricsTrainers)ModelOutputBase)NlpEpochBasedTrainer)TRAINERS)module_namec                   @   s2   e Zd Zdd Zdd Zdeeef fddZdS )	TextGenerationTrainerc                 C   s   | j j| ddS )NT)skip_special_tokens)eval_preprocessordecodetolist)selftokens r   c/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/trainers/nlp/text_generation_trainer.py_decode   s   zTextGenerationTrainer._decodec                 C   s   | j r| jjn| j}|  t }t 7 tj| j	v r%|
| || tj| j	v s1tj| j	v rD|
|jdi | W d    |S W d    |S 1 sOw   Y  |S )Nr   )_distmodelmoduleevaldicttorchno_gradr   text_gen_metricmetricsupdate_eval_genaratePPLloss_metricforward)r   datar   outputr   r   r   evaluation_step   s   


z%TextGenerationTrainer.evaluation_stepreturnc                    sp   | |}t|tr| } fdd|d D |d<  fdd|d D |d< t|d t|d ks6J |S )Nc                       g | ]}  |qS r   r   .0seqr   r   r   
<listcomp>$       z8TextGenerationTrainer._eval_genarate.<locals>.<listcomp>	sequencespredsc                    r&   r   r'   r(   r+   r   r   r,   %   r-   labelstgts)generate
isinstancer   to_dictlen)r   r   r"   resultr   r+   r   r       s   

z$TextGenerationTrainer._eval_genarateN)	__name__
__module____qualname__r   r$   r   strr   r   r   r   r   r   r
      s    r
   )typingr   r   r   modelscope.metainfor   r   modelscope.outputs.outputsr   modelscope.trainersr   modelscope.trainers.builderr   register_moduletext_generation_trainerr
   r   r   r   r   <module>   s   