o
    *j5                     @   s   d dl Z d dl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mZ d dlmZ d d	lmZ d
dlmZ d
dlmZ dZdZG dd de
ZG dd dejjZejej ej!dG dd deZ"dS )    N)Seq2SeqLMOutput)Models)Model)
TorchModel)MODELS)TextGenerationModelOutputTokenGeneratorOutput)logger)Tasks   )PlugForConditionalGeneration)
PlugConfigzconfig.jsonzpytorch_model.binc                       s2   e Zd Z fddZdddZ	dddZ  ZS )	
PlugV2Chatc                    s\  t  j|g|R i | tj|t}t|}t|| _	tj|t
}t|dy}tj|dd}d|v r;|d }t| D ]J}	|	drN||	 qA|	drb||	 ||	dd< ||	 |	drw||	 ||	dd	< ||	 qA|	d
r||	 ||	d
d< ||	 qA| j	jj|dd}
td|
  W d    d S 1 sw   Y  d S )Nrbcpu)Zmap_locationmodelZ
translatorzmodule. zbackbone.plug.bert.bert.zbert.zbackbone.plug.F)strictz| )super__init__ospathjoinCONFIG_NAMEr   Zfrom_json_filer   backboneWEIGHTS_NAMEioopentorchloadlistkeys
startswithpopreplaceplugZload_state_dictprint)self	model_dirargskwargsZplug_config_fileZplug_configpretrained_model_pathf
checkpointkeymsg	__class__ o/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/models/nlp/fid_plug/text_generation.pyr      s@   








"zPlugV2Chat.__init__Nc                 O   s8   | j j|||d|d }dd |D }t|}|S )N)	input_idstoken_type_idsZpredictionsc                 S   s   g | ]}|d    qS )r   )tolist).0xr2   r2   r3   
<listcomp>>   s    z'PlugV2Chat.generate.<locals>.<listcomp>)r   	translater   Ztensor)r'   r4   r5   r)   r*   Zpred_resultresponser2   r2   r3   generate8   s   
zPlugV2Chat.generatec                 O   s.   | j jd|||d|}t|d |d dS )N)srcZtgtr5   r   r   losslogitsr2   )r   forwardr   )r'   r4   decoder_input_idsr5   r)   r*   r?   r2   r2   r3   rA   B   s   zPlugV2Chat.forwardN)__name__
__module____qualname__r   r<   rA   __classcell__r2   r2   r0   r3   r      s
    
r   c                       s4   e Zd Z fddZdd Z			dddZ  ZS )	PlugV2EncoderWrapperc                    s   t    || _d | _d S rC   )r   r   bert
n_passages)r'   rI   r0   r2   r3   r   R   s   

zPlugV2EncoderWrapper.__init__c                 C   s
   || _ d S rC   )rJ   )r'   rJ   r2   r2   r3   set_n_passagesX   s   
z#PlugV2EncoderWrapper.set_n_passagesNc           
      O   s   |j \}}|| j }||| j |}|d ur ||| j |}|d ur-||| j |}| j||g|R d|i|}	t|	trV|	d || j| df|	dd   }	|	S |	j|| j| d|	_|	S )Nr5   r   r   )shaperJ   viewrI   
isinstancetupleZlast_hidden_state)
r'   r4   Zattention_maskr5   r)   r*   Zbsztotal_lengthZpassage_lengthZoutputsr2   r2   r3   rA   [   s@   



zPlugV2EncoderWrapper.forward)NNN)rD   rE   rF   r   rK   rA   rG   r2   r2   r0   r3   rH   P   s    rH   )module_namec                       sX   e Zd Z fddZdd Zdd Z	d fdd		Z fd
dZ	d fdd	Z  Z	S )PlugV2FidChatc                    s&   t  j|g|R i | |   d S rC   )r   r   wrap_encoder)r'   r(   r)   r*   r0   r2   r3   r   }   s   zPlugV2FidChat.__init__c                 C   s   t | jjj| jj_d S rC   )rH   r   r%   rI   r'   r2   r2   r3   rT      s   zPlugV2FidChat.wrap_encoderc                 C   s   | j jjj| j j_d S rC   )r   r%   rI   rU   r2   r2   r3   unwrap_encoder   s   zPlugV2FidChat.unwrap_encoderFc                    s    |    t | |   d S rC   )rV   r   r   rT   )r'   r+   Zfrom_tfr0   r2   r3   r      s   zPlugV2FidChat.loadc                    s   | d}| dd }|d}| jjj| ||dd}|d ur.||dd}t j|g|R d|i|}t	|dS )Nr4   r5   r   r   rL   )	sequences)
getsizer   r%   rI   rK   rN   r   r<   r   )r'   Zinputsr)   r*   r4   r5   rJ   r;   r0   r2   r3   r<      s"   


zPlugV2FidChat.generateNc                    s   |d ur-|  dkr|d}| jjj| ||dd}|d ur-||dd}t j|g|R ||d|}t	|j
|jdS )N   r   r   rL   )rB   r5   r>   )dimrY   r   r%   rI   rK   rN   r   rA   r   r?   r@   )r'   r4   rB   r5   r)   r*   rJ   Zseq2seq_lm_outputr0   r2   r3   rA      s(   
zPlugV2FidChat.forward)FrC   )
rD   rE   rF   r   rT   rV   r   r<   rA   rG   r2   r2   r0   r3   rS   z   s    rS   )#r   r   r   Ztransformers.modeling_outputsr   Zmodelscope.metainfor   Zmodelscope.modelsr   Zmodelscope.models.baser   Zmodelscope.models.builderr   Zmodelscope.outputsr   r   Zmodelscope.utilsr	   loggingZmodelscope.utils.constantr
   r   r   configurationr   r   r   r   nnModulerH   Zregister_moduleZfid_dialogueZfid_plugrS   r2   r2   r2   r3   <module>   s&   9*