o
    ॵip                     @   s   d dl mZmZmZm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 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OptionalUnionN)	Pipelines)Model)
OutputKeys)Pipeline)	PIPELINES)Preprocessor)	ModelFileTasksSentenceEmbeddingPipeline)module_namec                	       s   e Zd Z					ddeeef dee dedef fd	d
Zde	ee
f de	e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                    sr   t  j||||||dd|di d t| jts#J dtj |du r7tj	| jj
fd|i|| _dS dS )a1  Use `model` and `preprocessor` to create a nlp text dual encoder then generates the text representation.
        Args:
            model (str or Model): Supply either a local model dir which supported the WS task,
            or a model id from the model hub, or a torch model instance.
            preprocessor (Preprocessor): An optional preprocessor instance, please make sure the preprocessor fits for
            the model if supplied.
            kwargs (dict, `optional`):
                Extra kwargs passed into the preprocessor's constructor.
        compileFcompile_options)r   r   r   r   auto_collater   r   z,please check whether model config exists in Nsequence_length)super__init__pop
isinstancer   r   r   CONFIGURATIONr   from_pretrained	model_dirr   )selfr   r   r   r   r   r   kwargs	__class__ h/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/pipelines/nlp/sentence_embedding_pipeline.pyr      s*   

	
z"SentenceEmbeddingPipeline.__init__inputsreturnc                 K   s   | j di ||S )Nr%   )r   )r!   r'   forward_paramsr%   r%   r&   forward:   s   z!SentenceEmbeddingPipeline.forwardc                 C   s   |d }|d }|durt j||fdd}|   }|dur:t|ddf t|ddf d d }ng }t	j
|t	j|iS )zprocess the prediction results

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

        Returns:
            Dict[str, Any]: the predicted text representation
        query_embeddingsdoc_embeddingsNr   )dim   )r.   r   )torchcatdetachcpunumpynpdot	transposetolistr   TEXT_EMBEDDINGSCORES)r!   r'   
embeddingsr,   scoresr%   r%   r&   postprocess>   s   	z%SentenceEmbeddingPipeline.postprocess)NNr   Tr   )__name__
__module____qualname__r   r   strr   r   r   r   r   r*   r<   __classcell__r%   r%   r#   r&   r      s&    
#

*)typingr   r   r   r   r3   r4   r/   modelscope.metainfor   modelscope.modelsr   modelscope.outputsr   modelscope.pipelines.baser	   modelscope.pipelines.builderr
   modelscope.preprocessorsr   modelscope.utils.constantr   r   __all__register_modulesentence_embeddingr   r%   r%   r%   r&   <module>   s   