U
    h	                     @   sB   d dl mZmZmZ d dlmZ d dlmZ G dd deeZdS )    )AnyListOptional)
Embeddings)	BaseModelc                       s   e Zd ZU dZeed< dZeed< dZe	e ed< ed fdd	Z
G d
d dZee eee  dddZeee dddZ  ZS )ModelScopeEmbeddingsa  ModelScopeHub embedding models.

    To use, you should have the ``modelscope`` python package installed.

    Example:
        .. code-block:: python

            from langchain_community.embeddings import ModelScopeEmbeddings
            model_id = "damo/nlp_corom_sentence-embedding_english-base"
            embed = ModelScopeEmbeddings(model_id=model_id, model_revision="v1.0.0")
    embedz.damo/nlp_corom_sentence-embedding_english-basemodel_idNmodel_revision)kwargsc              
      sr   t  jf | zddlm} ddlm} W n, tk
rV } ztd|W 5 d}~X Y nX ||j| j| j	d| _
dS )zInitialize the modelscoper   )pipeline)TaskszVCould not import some python packages.Please install it with `pip install modelscope`.N)modelr
   )super__init__Zmodelscope.pipelinesr   Zmodelscope.utils.constantr   ImportErrorZsentence_embeddingr	   r
   r   )selfr   r   r   e	__class__ Q/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/embeddings/modelscope_hub.pyr      s    zModelScopeEmbeddings.__init__c                   @   s   e Zd ZdZdS )zModelScopeEmbeddings.ConfigZforbidN)__name__
__module____qualname__extrar   r   r   r   Config*   s   r   )textsreturnc                 C   s2   t tdd |}d|i}| j|dd }| S )zCompute doc embeddings using a modelscope embedding model.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        c                 S   s   |  ddS )N
 )replace)xr   r   r   <lambda>6       z6ModelScopeEmbeddings.embed_documents.<locals>.<lambda>source_sentenceinputtext_embedding)listmapr   tolist)r   r   inputsZ
embeddingsr   r   r   embed_documents-   s    	z$ModelScopeEmbeddings.embed_documents)textr   c                 C   s2   | dd}d|gi}| j|dd d }| S )zCompute query embeddings using a modelscope embedding model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   r    r%   r&   r(   r   )r!   r   r+   )r   r.   r,   Z	embeddingr   r   r   embed_query;   s    	
z ModelScopeEmbeddings.embed_query)r   r   r   __doc__r   __annotations__r	   strr
   r   r   r   r   floatr-   r/   __classcell__r   r   r   r   r      s   
r   N)	typingr   r   r   Zlangchain_core.embeddingsr   Zlangchain_core.pydantic_v1r   r   r   r   r   r   <module>   s   