o
    *j                     @   s   d dl Z d dlZd dlmZmZmZmZmZ d dlZ	d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ 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 e Zde fddZ!ej"ej#dG dd deZ$dS )    N)CallableDictOptionalTupleUnion)Trainers)SpaceGenerator)SpaceModelBase)MultiWOZBPETextField)BaseTrainer)TRAINERS)MultiWOZEvaluator)MultiWOZTrainer)Config	ModelFile)
get_loggerseedc                 C   sJ   dd l }dd l}||  |j|  tj |  ||  d|jj_	d S )Nr   T)
randomtorchZmanual_seedcudaZmanual_seed_allnpr   backendsZcudnnZdeterministic)r   r   r    r   v/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/trainers/nlp/space/dialog_modeling_trainer.py
setup_seed   s   

r   )module_namec                       st   e Zd Z		ddee dee f fddZdd Zdefd	d
Z	dd Z
	ddee deeef fddZ  ZS )DialogModelingTrainerNcfg_filecfg_modify_fnc                    s   t  tj|d |d  || _| | j| _t| jj	j
 t| jfi || _| jj| jj_| jjd | jj_d|v rF|d | jj	_nd| jj	_| jd| _| jd| _td
d| ji|| _tj| j| jd	| _| jd
i | d S )N	model_dirZcfg_name   Zwork_dirz./default_save_dirtraindevreader)r#   r   )super__init__ospathjoinr   rebuild_configcfgr   Trainerr   r
   bpeZ
vocab_sizeZModelZnum_token_embeddingsZmax_ctx_turnZnum_turn_embeddingssave_dirZget_batches
train_datadev_datar   	evaluatorr   create	generator_load_model)selfr   r   argskwargs	__class__r   r   r%   $   s   
zDialogModelingTrainer.__init__c                    s    fdd}d|v r|d  _ ntj|d  j j jd _ dd l} jjjdkr9|j	
 dkr9|j j  _ t j | j j jd _ j   j  d S )	Nc                    s0   ddl }|| }  jjr|j r|  S | S )z/
            numpy array -> tensor
            r   N)r   Ztensorr*   Zuse_gpur   Zis_available)arrayr   r4   r   r   	to_tensorG   s   

z4DialogModelingTrainer._load_model.<locals>.to_tensormodelr   )r#   r2   r   r    )r#   r0   )r<   r	   r1   r*   r,   r2   r   r+   Zgpur   Zdevice_countnnZDataParallelr   r0   trainerZset_optimizersload)r4   r6   r;   r   r   r:   r   r3   E   s*   

z!DialogModelingTrainer._load_modelr*   c                 C   s   | j d ur
|  |S |S N)r   )r4   r*   r   r   r   r)   j   s   

z$DialogModelingTrainer.rebuild_configc                 O   s"   t d | jj| j| jd d S )NZTrain)r.   r/   )loggerinfor>   r!   r.   r/   )r4   r5   r6   r   r   r   r!   o   s   
zDialogModelingTrainer.traincheckpoint_pathreturnc                 O   sp   t d d| j_|d}||d d  }|d | }|tjks#J ||d< | jdi | | jj	dd d S )	NZEvaluateT/r    r   test)Z	data_typer   )
rA   rB   r*   Zdo_inferrfindr   ZTORCH_MODEL_BIN_FILEr3   r>   Zinfer)r4   rC   r5   r6   posZcheckpoint_nameZcheckpoint_dirr   r   r   evaluatet   s   

zDialogModelingTrainer.evaluate)NNr@   )__name__
__module____qualname__r   strr   r%   r3   r   r)   r!   r   floatrI   __classcell__r   r   r7   r   r   !   s"    !%
r   )%r&   timetypingr   r   r   r   r   numpyr   Zmodelscope.metainfor   Z+modelscope.models.nlp.space.model.generatorr   Z,modelscope.models.nlp.space.model.model_baser	   Zmodelscope.preprocessors.nlpr
   Zmodelscope.trainers.baser   Zmodelscope.trainers.builderr   Z"modelscope.trainers.nlp.space.evalr   Z1modelscope.trainers.nlp.space.trainer.gen_trainerr   Zmodelscope.utils.configr   r   Zmodelscope.utils.loggerr   rA   intr   Zregister_moduleZdialog_modeling_trainerr   r   r   r   r   <module>   s$   
