Ë
    µŒj–/  ã                  ó´   — d dl mZ d dlZd dlmZmZmZmZmZ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 erd dlmZ 	 	 	 d	 	 	 	 	 	 	 dd	„Z G d
„ de«      Zy)é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚDictÚIterableÚListÚOptionalÚTupleÚType)ÚDocument)Ú
Embeddings)Úget_from_env)ÚVectorStore)ÚClientc                ó†  — 	 dd l }| s5|xs t        dd«      }	 |xs t        dd«      }|j	                  ||¬«      } n-t        | |j                  «      st        dt        | «      › �«      ‚	 | j                  «        | S # t        $ r t        d«      ‚w xY w# t        $ r Y Œww xY w# t        $ r}t        d	|› �«      ‚d }~ww xY w)
Nr   z^Could not import meilisearch python package. Please install it with `pip install meilisearch`.ÚurlÚMEILI_HTTP_ADDRÚapi_keyÚMEILI_MASTER_KEY)r   r   z8client should be an instance of meilisearch.Client, got z"Failed to connect to Meilisearch: )	ÚmeilisearchÚImportErrorr   Ú	Exceptionr   Ú
isinstanceÚ
ValueErrorÚtypeÚversion)Úclientr   r   r   Úes        úv/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/vectorstores/meilisearch.pyÚ_create_clientr       sî   € ð

Ûñ ØÒ;”\ %Ð):Ó;ˆð	ØÒL¤¨iÐ9KÓ!LˆGð ×#Ñ#¨°WÐ#Ó=‰Ü˜ × 2Ñ 2Ô3ÜØFÄtÈFÃ|ÀnÐUó
ð 	
ðCØ�‰Ôð €Møô) ò 
Üð@ó
ð 	
ð
ûô ò 	Ùð	ûô ò CÜÐ=¸a¸SÐAÓBÐBûðCús4   ‚A= ™B Á+B$ Á=BÂ	B!Â B!Â$	C Â-B;Â;C c                  ój  — e Zd ZdZ	 	 	 	 	 	 dddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd	„Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd
„Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Z	e
ddddddddi df
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Zy)ÚMeilisearcha  `Meilisearch` vector store.

    To use this, you need to have `meilisearch` python package installed,
    and a running Meilisearch instance.

    To learn more about Meilisearch Python, refer to the in-depth
    Meilisearch Python documentation: https://meilisearch.github.io/meilisearch-python/.

    See the following documentation for how to run a Meilisearch instance:
    https://www.meilisearch.com/docs/learn/getting_started/quick_start.

    Example:
        .. code-block:: python

            from langchain_community.vectorstores import Meilisearch
            from langchain_community.embeddings.openai import OpenAIEmbeddings
            import meilisearch

            # api_key is optional; provide it if your meilisearch instance requires it
            client = meilisearch.Client(url='http://127.0.0.1:7700', api_key='***')
            embeddings = OpenAIEmbeddings()
            embedders = {
                "theEmbedderName": {
                    "source": "userProvided",
                    "dimensions": "1536"
                }
            }
            vectorstore = Meilisearch(
                embedding=embeddings,
                embedders=embedders,
                client=client,
                index_name='langchain_demo',
                text_key='text')
    Núlangchain-demoÚtextÚmetadata)Ú	embeddersc               óø   — t        |||¬«      }|| _        || _        || _        || _        || _        || _        | j                  j                  t        | j                  «      «      j                  |«      | _
        y)z#Initialize with Meilisearch client.©r   r   r   N)r    Ú_clientÚ_index_nameÚ
_embeddingÚ	_text_keyÚ_metadata_keyÚ
_embeddersÚindexÚstrÚupdate_embeddersÚ_embedders_settings)	ÚselfÚ	embeddingr   r   r   Ú
index_nameÚtext_keyÚmetadata_keyr&   s	            r   Ú__init__zMeilisearch.__init__Q   sq   € ô   v°3ÀÔHˆàˆŒØ%ˆÔØ#ˆŒØ!ˆŒØ)ˆÔØ#ˆŒØ#'§<¡<×#5Ñ#5Ü�× Ñ Ó!ó$
ç
Ñ
˜9Ó
%ð 	Õ ó    Údefaultc           	     ó  — t        |«      }g }|€+|D �cg c]   }t        j                  «       j                  ‘Œ" }}|€|D �cg c]  }i ‘Œ }}| j                  j                  |«      }t        |«      D ]H  \  }	}
||	   }||	   }|
|| j                  <   ||	   }|j                  d|d|› |i| j                  › |i«       ŒJ | j                  j                  t        | j                  «      «      j                  |«       |S c c}w c c}w )a!  Run more texts through the embedding and add them to the vector store.

        Args:
            texts (Iterable[str]): Iterable of strings/text to add to the vectorstore.
            embedder_name: Name of the embedder. Defaults to "default".
            metadatas (Optional[List[dict]]): Optional list of metadata.
                Defaults to None.
            ids Optional[List[str]]: Optional list of IDs.
                Defaults to None.

        Returns:
            List[str]: List of IDs of the texts added to the vectorstore.
        ÚidÚ_vectors)ÚlistÚuuidÚuuid4Úhexr+   Úembed_documentsÚ	enumerater,   Úappendr-   r)   r/   r0   r*   Úadd_documents)r3   ÚtextsÚ	metadatasÚidsÚembedder_nameÚkwargsÚdocsÚ_Úembedding_vectorsÚir$   r<   r%   r4   s                 r   Ú	add_textszMeilisearch.add_textsj   s  € ô* �U“ˆð ˆØˆ;Ù-2Ó3©U¨”4—:‘:“<×#Ó#¨UˆCÐ3ØÐÙ%*Ó+¡U š UˆIÐ+Ø ŸO™O×;Ñ;¸EÓBÐä  Ö'‰GˆAˆtØ�Q‘ˆBØ  ‘|ˆHØ'+ˆH�T—^‘^Ñ$Ø)¨!Ñ,ˆIØ�K‰Kà˜"Ø M ?°YÐ ?Ø×)Ñ)Ð*¨Xðõð (ð 	�‰×Ñœ3˜t×/Ñ/Ó0Ó1×?Ñ?ÀÔEØˆ
ùò) 4ùâ+s   ”%C<Á	Dc                ód   — | j                  |||||¬«      }|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )a  Return meilisearch documents most similar to the query.

        Args:
            query (str): Query text for which to find similar documents.
            embedder_name: Name of the embedder to be used. Defaults to "default".
            k (int): Number of documents to return. Defaults to 4.
            filter (Optional[Dict[str, str]]): Filter by metadata.
                Defaults to None.

        Returns:
            List[Document]: List of Documents most similar to the query
            text and score for each.
        )ÚqueryrI   ÚkÚfilterrJ   )Úsimilarity_search_with_score)	r3   rQ   rR   rS   rI   rJ   Údocs_and_scoresÚdocrL   s	            r   Úsimilarity_searchzMeilisearch.similarity_searchš   sF   € ð* ×;Ñ;ØØ'ØØØð <ó 
ˆñ #2Ô2¡/™˜˜Q’ /Ò2Ð2ùÓ2ó   œ,c                óh   — | j                   j                  |«      }| j                  |||||¬«      }|S )a%  Return meilisearch documents most similar to the query, along with scores.

        Args:
            query (str): Query text for which to find similar documents.
            embedder_name: Name of the embedder to be used. Defaults to "default".
            k (int): Number of documents to return. Defaults to 4.
            filter (Optional[Dict[str, str]]): Filter by metadata.
                Defaults to None.

        Returns:
            List[Document]: List of Documents most similar to the query
            text and score for each.
        ©r4   rI   rR   rS   rJ   )r+   Úembed_queryÚ'similarity_search_by_vector_with_scores)r3   rQ   rR   rS   rI   rJ   Ú_queryrK   s           r   rT   z(Meilisearch.similarity_search_with_score¸   sC   € ð* —‘×,Ñ,¨UÓ3ˆà×;Ñ;ØØ'ØØØð <ó 
ˆð ˆr9   c           	     ód  — g }| j                   j                  t        | j                  «      «      j	                  d|d|dœ||ddœ«      }|d   D ]^  }|| j
                     }	| j                  |	v sŒ!|	j                  | j                  «      }
|d   }|j                  t        |
|	¬«      |f«       Œ` |S )	á#  Return meilisearch documents most similar to embedding vector.

        Args:
            embedding (List[float]): Embedding to look up similar documents.
            embedder_name: Name of the embedder to be used. Defaults to "default".
            k (int): Number of documents to return. Defaults to 4.
            filter (Optional[Dict[str, str]]): Filter by metadata.
                Defaults to None.

        Returns:
            List[Document]: List of Documents most similar to the query
                vector and score for each.
        Ú g      ð?)ÚsemanticRatioÚembedderT)ÚvectorÚhybridÚlimitrS   ÚshowRankingScoreÚhitsÚ_rankingScore)Úpage_contentr%   )
r)   r/   r0   r*   Úsearchr-   r,   ÚpoprD   r   )r3   r4   rI   rR   rS   rJ   rK   ÚresultsÚresultr%   r$   Úsemantic_scores               r   r\   z3Meilisearch.similarity_search_by_vector_with_scoresØ   s¼   € ð* ˆØ—,‘,×$Ñ$¤S¨×)9Ñ)9Ó%:Ó;×BÑBØà#Ø,/¸]ÑKØØ Ø$(ñó	
ˆð ˜f”oˆFØ˜d×0Ñ0Ñ1ˆHØ�~‰~ Ò)Ø—|‘| D§N¡NÓ3�Ø!'¨Ñ!8�Ø—‘ä ¨d¸XÔFØ&ðõð &ð ˆr9   c                ód   — | j                  |||||¬«      }|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )r_   rZ   )r\   )	r3   r4   rR   rS   rI   rJ   rK   rV   rL   s	            r   Úsimilarity_search_by_vectorz'Meilisearch.similarity_search_by_vector  sF   € ð* ×;Ñ;ØØ'ØØØð <ó 
ˆñ #'Ô'¡$™˜˜Q’ $Ò'Ð'ùÓ'rX   c                óh   — t        |||¬«      } | ||||¬«      }|j                  |||||	|
¬«       |S )a  Construct Meilisearch wrapper from raw documents.

        This is a user-friendly interface that:
            1. Embeds documents.
            2. Adds the documents to a provided Meilisearch index.

        This is intended to be a quick way to get started.

        Example:
            .. code-block:: python

                from langchain_community.vectorstores import Meilisearch
                from langchain_community.embeddings import OpenAIEmbeddings
                import meilisearch

                # The environment should be the one specified next to the API key
                # in your Meilisearch console
                client = meilisearch.Client(url='http://127.0.0.1:7700', api_key='***')
                embedding = OpenAIEmbeddings()
                embedders: Embedders index setting.
                embedder_name: Name of the embedder. Defaults to "default".
                docsearch = Meilisearch.from_texts(
                    client=client,
                    embedding=embedding,
                )
        r(   )r4   r&   r   r5   )rF   rI   rG   rH   r6   r7   )r    rO   )ÚclsrF   r4   rG   r   r   r   r5   rH   r6   r7   r&   rI   rJ   Úvectorstores                  r   Ú
from_textszMeilisearch.from_texts%  sX   € ôV   v°3ÀÔHˆáØØØØ!ô	
ˆð 	×ÑØØ'ØØØØ%ð 	ô 	
ð Ðr9   )NNNr#   r$   r%   )r4   r   r   úOptional[Client]r   úOptional[str]r   rv   r5   r0   r6   r0   r7   r0   r&   úOptional[Dict[str, Any]])NNr:   )rF   zIterable[str]rG   úOptional[List[dict]]rH   úOptional[List[str]]rI   rv   rJ   r   Úreturnú	List[str])é   Nr:   )rQ   r0   rR   ÚintrS   úOptional[Dict[str, str]]rI   rv   rJ   r   rz   úList[Document])rQ   r0   rR   r}   rS   r~   rI   rv   rJ   r   rz   úList[Tuple[Document, float]])r:   r|   N)r4   úList[float]rI   rv   rR   r}   rS   rw   rJ   r   rz   r€   )r4   r�   rR   r}   rS   r~   rI   rv   rJ   r   rz   r   )rr   zType[Meilisearch]rF   r{   r4   r   rG   rx   r   ru   r   rv   r   rv   r5   r0   rH   ry   r6   rv   r7   rv   r&   zDict[str, Any]rI   rv   rJ   r   rz   r"   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r8   rO   rW   rT   r\   rp   Úclassmethodrt   © r9   r   r"   r"   -   sµ  „ ñ!ðL $(Ø!Ø!%Ø*ØØ&ð&ð /3ñ&àð&ð !ð&ð ð	&ð
 ð&ð ð&ð ð&ð ð&ð ,ó&ð8 +/Ø#'Ø'0ð.àð.ð (ð.ð !ð	.ð
 %ð.ð ð.ð 
ó.ðf Ø+/Ø'0ð3àð3ð ð3ð )ð	3ð
 %ð3ð ð3ð 
ó3ðB Ø+/Ø'0ðàðð ðð )ð	ð
 %ðð ðð 
&óðF (1ØØ+/ð-àð-ð %ð-ð ð	-ð
 )ð-ð ð-ð 
&ó-ðd Ø+/Ø'0ð(àð(ð ð(ð )ð	(ð
 %ð(ð ð(ð 
ó(ð< ð
 +/Ø#'Ø!Ø!%Ø*Ø#'Ø"(Ø&0Ø$&Ø'0ð:Øð:àð:ð ð:ð (ð	:ð
 !ð:ð ð:ð ð:ð ð:ð !ð:ð  ð:ð $ð:ð "ð:ð %ð:ð ð:ð 
ò:ó ñ:r9   r"   )NNN)r   ru   r   rv   r   rv   rz   r   )Ú
__future__r   r?   Útypingr   r   r   r   r   r	   r
   r   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.utilsr   Úlangchain_core.vectorstoresr   r   r   r    r"   r‡   r9   r   Ú<module>rŽ      sh   ðÝ "ã ß R× RÓ Rå -Ý 0Ý -Ý 3áÝ"ð  $ØØ!ðØðà	ðð ðð ó	ô<s�+õ sr9   