o
    *j                     @   s   d dl mZ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 dl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d ZdS )    )AnyDictUnion)	Pipelines)Model)SpaceForDST)
OutputKeys)Pipeline)	PIPELINES)DialogStateTrackingPreprocessor)TasksDialogStateTrackingPipeline)module_namec                	       sb   e Zd Z				ddeeef dededef fdd	Zd
eee	f deeef fddZ
  ZS )r   NgpuTmodelpreprocessorconfig_filedevicec                    s`   t  j||||||dd|di d |du r$t| jjfi || _| jj| _| jj| _dS )a<  use `model` and `preprocessor` to create a dialog state tracking pipeline for
        observation of dialog states tracking after many turns of open domain dialogue

        Args:
            model (str or SpaceForDialogStateTracking): Supply either a local model dir or a model id
            from the model hub, or a SpaceForDialogStateTracking instance.
            preprocessor (DialogStateTrackingPreprocessor): An optional preprocessor instance.
            kwargs (dict, `optional`):
                Extra kwargs passed into the preprocessor's constructor.
        compileFcompile_options)r   r   r   r   auto_collater   r   N)	super__init__popr   r   Z	model_dirr   	tokenizerconfig)selfr   r   r   r   r   kwargs	__class__ x/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/nlp/dialog_state_tracking_pipeline.pyr      s"   

	
z$DialogStateTrackingPipeline.__init__inputsreturnc           
      C   s~   |d }|d }|d }|d }|d }|d }|d }|d }	t | j| j||d	 |d
 |d |d ||||||	}	tj|	iS )zprocess the prediction results

        Args:
            inputs (Dict[str, Any]): _description_

        Returns:
            Dict[str, str]: the prediction results
        r"   Zoutputs
unique_idsinput_ids_unmaskedvaluesinformprefixds            )predict_and_formatr   r   r   ZOUTPUT)
r   r"   Z_inputsZ_outputsr$   r%   r&   r'   r(   r)   r    r    r!   postprocess8   s   


z'DialogStateTrackingPipeline.postprocess)NNr   T)__name__
__module____qualname__r   r   strr   r   r   r   r/   __classcell__r    r    r   r!   r      s    
*"c           "      C   s|  dd l }g }|}tt|D ]}t|| dd dkr&dd | jD }i }i }| jD ]A}|| | }|| | }|| | }|| | }|d |  }t|d | | }t|d | | }t|d	 | | }t|d
 | | }t| }t| }t| }t| } || d|d< ||d| < ||d| < ||d| < ||d| < ||d| < ||d| < | |d| < ||d| < ||d| < || j	dkrd||< n|| j	dkr|
|| }!d|!||d  ||< |dd|| ||< nXd| jv r|| j	dkrd||< nDd| jv r-|| j	dkr-d||< n0|| j	dkr]t|
| | trI|
| | ||< nt|
| | tr]|
| | d ||< || |d| < |	| | |d| < q-| jD ]=}|| | }|| | }t| }t| } d | jv r|| j	d kr|| j| d   ||< || |d| < qs|| || q|S )!Nr   -r*   c                 S   s   i | ]}|d qS )noner    ).0slotr    r    r!   
<dictcomp>\   s    z&predict_and_format.<locals>.<dictcomp>	input_idsclass_label_id	start_posend_posrefer_idZguidzclass_prediction_%szclass_label_id_%szstart_prediction_%szstart_pos_%szend_prediction_%sz
end_pos_%szrefer_prediction_%szrefer_id_%szinput_ids_%sZdontcareZ
copy_value    z(^| )## truefalser'   zslot_prediction_%szslot_groundtruth_%sZrefer)rerangelenintsplitZdst_slot_listtolistZargmaxZdst_class_typesindexZconvert_ids_to_tokensjoinsub
isinstancer3   listupdateappend)"r   r   featuresZper_slot_class_logitsZper_slot_start_logitsZper_slot_end_logitsZper_slot_refer_logitsZidsr%   r&   r'   r(   r)   rD   Zprediction_listZdialog_stateiZ
predictionZprediction_addendumr8   Zclass_logitsZstart_logitsZ
end_logitsZrefer_logitsr:   r;   r<   r=   r>   Zclass_predictionZstart_predictionZend_predictionZrefer_predictionZinput_tokensr    r    r!   r.   R   s   





r.   N)typingr   r   r   Zmodelscope.metainfor   Zmodelscope.modelsr   Zmodelscope.models.nlpr   Zmodelscope.outputsr   Zmodelscope.pipelines.baser	   Zmodelscope.pipelines.builderr
   Zmodelscope.preprocessorsr   Zmodelscope.utils.constantr   __all__Zregister_moduleZtask_oriented_conversationZdialog_state_trackingr   r.   r    r    r    r!   <module>   s    >