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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   ZCONFIGURATIONr
   Zfrom_pretrainedZ	model_dirr   hasattrr   )selfr   r   r   r   r   kwargs	__class__ y/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/nlp/faq_question_answering_pipeline.pyr      s&   
z%FaqQuestionAnsweringPipeline.__init__c                 K   s
   |||fS Nr   )r   Z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   Zhas_multiple_modelsmodelsZ_model_prepareZprepare_modelr   Zbatch_encodeZforward_sentence_embeddingdetachtolist)r   inputsmax_lenZsentence_vecsr   r   r   get_sentence_embedding4   s   z3FaqQuestionAnsweringPipeline.get_sentence_embeddingr&   returnc                 K   s
   |  |S r    )r   )r   r&   Z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   Z	get_label).0Z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   ZLABELr/   listsortedZOUTPUT)r   r&   Zpostprocess_paramsr+   labelsitemZ	tmplabelsZpredictionsZ
tmp_scoresZ
tmp_labelsZ
predictionZscorelabelr   r-   r   postprocessA   s2   


z(FaqQuestionAnsweringPipeline.postprocess)NNr   Tr    )__name__
__module____qualname__r   strr   r
   r   r!   r(   r8   r   r   r*   r=   __classcell__r   r   r   r   r      s,    

	


N)typingr   r   r   Zmodelscope.metainfor   Zmodelscope.modelsr   Zmodelscope.outputsr   Zmodelscope.pipelines.baser   Zmodelscope.pipelines.builderr	   Zmodelscope.preprocessorsr
   Zmodelscope.utils.constantr   r   __all__Zregister_moduleZfaq_question_answeringr   r   r   r   r   <module>   s   