U
    h
                     @   sb   d Z ddlZddlmZmZ ddlZddlmZ ddlm	Z	m
Z
 dZdZdZG d	d
 d
e	eZdS )z+Wrapper around Bookend AI embedding models.    N)AnyList)
Embeddings)	BaseModelFieldzhttps://api.bookend.ai/Z
embeddingsz/models/predictc                       s   e Zd ZU dZeed< eed< eed< eedZeed< e	d fdd	Z
ee eee  d
ddZeee dddZ  ZS )BookendEmbeddingsa  Bookend AI sentence_transformers embedding models.

    Example:
        .. code-block:: python

            from langchain_community.embeddings import BookendEmbeddings

            bookend = BookendEmbeddings(
                domain={domain}
                api_token={api_token}
                model_id={model_id}
            )
            bookend.embed_documents([
                "Please put on these earmuffs because I can't you hear.",
                "Baby wipes are made of chocolate stardust.",
            ])
            bookend.embed_query(
                "She only paints with bold colors; she does not like pastels."
            )
    domain	api_tokenmodel_id)default_factoryauth_header)kwargsc                    s$   t  jf | dd| ji| _d S )NAuthorizationzBasic {})super__init__formatr	   r   )selfr   	__class__ J/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/embeddings/bookend.pyr   -   s    zBookendEmbeddings.__init__)textsreturnc                 C   st   g }| j }d|d< | jtd}|D ]L}t|dddd}tjdt| j t	 |||d}|
| d d	  q"|S )
zEmbed documents using a Bookend deployed embeddings model.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        zapplication/json; charset=utf-8zContent-Type)r
   ZtaskN)textZquestioncontextZinstructionPOST)headersparamsdatar   r   )r   r
   DEFAULT_TASKjsondumpsrequestsrequestAPI_URLr   PATHappend)r   r   resultr   r   r   r   rr   r   r   embed_documents1   s&    	z!BookendEmbeddings.embed_documents)r   r   c                 C   s   |  |gd S )zEmbed a query using a Bookend deployed embeddings model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   )r)   )r   r   r   r   r   embed_queryQ   s    	zBookendEmbeddings.embed_query)__name__
__module____qualname____doc__str__annotations__r   dictr   r   r   r   floatr)   r*   __classcell__r   r   r   r   r      s   
 r   )r.   r    typingr   r   r"   Zlangchain_core.embeddingsr   Zlangchain_core.pydantic_v1r   r   r$   r   r%   r   r   r   r   r   <module>   s   