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mZ d	gZejejejd
G dd	 d	eZdS )    )AnyDictUnion)	Pipelines)Model)
OutputKeys)Pipeline)	PIPELINES)Preprocessor)	ModelFileTasksFaqQuestionAnsweringPipeline)module_namec                	       s   e Zd Z				ddeeef dededef fdd	Zd
d ZdddZ	dee
eeef f deeef fddZdee
eeef f deeef fddZ  ZS )r   NgpuTmodelpreprocessorconfig_filedevicec                    sp   t  j|||||d t| jtsJ dtj |du r)tj| jj	fi || _
t| jdr6| j  dS dS )al  The faq question answering pipeline.

        Args:
            model (str or Model): A model instance or a model local dir or a model id in the model hub.
            preprocessor (Preprocessor, `optional`): a preprocessor instance
            kwargs (dict, `optional`):
                The preprocessor kwargs passed into the preprocessor's constructor.
        )r   r   r   r   auto_collatez,please check whether model config exists in Neval)super__init__
isinstancer   r   r   CONFIGURATIONr
   from_pretrained	model_dirr   hasattrr   )selfr   r   r   r   r   kwargs	__class__ l/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/pipelines/nlp/faq_question_answering_pipeline.pyr      s&   
z%FaqQuestionAnsweringPipeline.__init__c                 K   s
   |||fS Nr!   )r   pipeline_parametersr!   r!   r"   _sanitize_parameters1   s   
z1FaqQuestionAnsweringPipeline._sanitize_parametersc                 C   sP   | j s| jr| jd r| js|   | jj||d}| j |}| 	 }|S )Nr   )
max_length)
r   has_multiple_modelsmodels_model_prepareprepare_modelr   batch_encodeforward_sentence_embeddingdetachtolist)r   inputsmax_lensentence_vecsr!   r!   r"   get_sentence_embedding4   s   z3FaqQuestionAnsweringPipeline.get_sentence_embeddingr/   returnc                 K   s
   |  |S r#   )r   )r   r/   forward_paramsr!   r!   r"   forward=   s   
z$FaqQuestionAnsweringPipeline.forwardc              	      s   |d }g }|D ]} fddt t|D }|| qg }t| |D ])\}}	g }
t||	D ]\}}|
tj|tj|i q1|tt	|
dd dd q&tj
|iS )Nscoresc                    s   g | ]} j |qS r!   )r   	get_label).0label_idr   r!   r"   
<listcomp>F   s    
z<FaqQuestionAnsweringPipeline.postprocess.<locals>.<listcomp>c                 S   s
   | t j S r#   )r   SCORE)dr!   r!   r"   <lambda>X   s   
 z:FaqQuestionAnsweringPipeline.postprocess.<locals>.<lambda>T)keyreverse)rangelenappendzipr.   r   LABELr<   listsortedOUTPUT)r   r/   postprocess_paramsr6   labelsitem	tmplabelspredictions
tmp_scores
tmp_labels
predictionscorelabelr!   r:   r"   postprocessA   s2   


z(FaqQuestionAnsweringPipeline.postprocess)NNr   Tr#   )__name__
__module____qualname__r   strr   r
   r   r%   r2   rF   r   r   r5   rS   __classcell__r!   r!   r   r"   r      s,    

	


N)typingr   r   r   modelscope.metainfor   modelscope.modelsr   modelscope.outputsr   modelscope.pipelines.baser   modelscope.pipelines.builderr	   modelscope.preprocessorsr
   modelscope.utils.constantr   r   __all__register_modulefaq_question_answeringr   r!   r!   r!   r"   <module>   s   