o
    ॵi                     @   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   	model_dirr   	tokenizerconfig)selfr   r   r   r   r   kwargs	__class__ k/home/ubuntu/.local/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#   outputs
unique_idsinput_ids_unmaskedvaluesinformprefixds            )predict_and_formatr   r   r   OUTPUT)
r   r#   _inputs_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   r4   __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_id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_%sdontcare
copy_value    z(^| )## truefalser)   zslot_prediction_%szslot_groundtruth_%srefer)rerangelenintsplitdst_slot_listtolistargmaxdst_class_typesindexconvert_ids_to_tokensjoinsub
isinstancer8   listupdateappend)"r   r   featuresper_slot_class_logitsper_slot_start_logitsper_slot_end_logitsper_slot_refer_logitsidsr'   r(   r)   r*   r+   rM   prediction_listdialog_statei
predictionprediction_addendumr=   class_logitsstart_logits
end_logitsrefer_logitsr?   r@   rA   rB   rC   class_predictionstart_predictionend_predictionrefer_predictioninput_tokensr!   r!   r"   r0   R   s   





r0   N)typingr   r   r   modelscope.metainfor   modelscope.modelsr   modelscope.models.nlpr   modelscope.outputsr   modelscope.pipelines.baser	   modelscope.pipelines.builderr
   modelscope.preprocessorsr   modelscope.utils.constantr   __all__register_moduletask_oriented_conversationdialog_state_trackingr   r0   r!   r!   r!   r"   <module>   s    >