
    dh/                        S SK Jr  S SKrS SKJrJrJrJrJrJ	r	J
r
Jr  S SKJr  S SKJr  S SKJr  S SKJr  \(       a  S SKJr     S       SS	 jjr " S
 S\5      rg)    )annotationsN)TYPE_CHECKINGAnyDictIterableListOptionalTupleType)Document)
Embeddings)get_from_env)VectorStore)Clientc                    SS K nU (       d;  U=(       d    [        SS5      n U=(       d    [        SS5      nUR	                  XS9n O1[        XR                  5      (       d  [        S[        U 5       35      e U R                  5         U $ ! [         a    [        S5      ef = f! [         a     Nyf = f! [         a  n[        S	U 35      eS nAff = f)
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        d/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/vectorstores/meilisearch.py_create_clientr       s    

 ;\%):;	Li9K!LG ###= 2 233FtF|nU
 	
C M)  
@
 	

  		  C=aSABBCs4   B B% :B5 B"%
B21B25
C?CCc                     \ rS rSrSr      SSS.               SS jjjr   S           SS
 jjr   S           SS jjr   S           SS jjr   S           SS jjr	   S           SS jjr
\SSSSSSSS0 S	4
                             SS jj5       rSrg)Meilisearch-   a  `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                   [        X#US9nX l        XPl        Xl        X`l        Xpl        Xl        U R                  R                  [        U R                  5      5      R                  U5      U l
        g)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__Meilisearch.__init__Q   sc      vH%#!)##'<<#5#5  !$


9
% 	     defaultc           	        [        U5      n/ nUc.  U Vs/ sH"  n[        R                  " 5       R                  PM$     nnUc  U Vs/ sH  n0 PM     nnU R                  R                  U5      n[        U5       HD  u  pX9   nX)   nXU R                  '   X   nUR                  SUSU U0U R                   U05        MF     U R                  R                  [        U R                  5      5      R                  U5        U$ s  snf s  snf )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*   r0   r1   r+   add_documents)r4   texts	metadatasidsembedder_namekwargsdocs_embedding_vectorsir%   r>   r&   r5   s                 r   	add_textsMeilisearch.add_textsj   s   * U ;-23U4::<##UC3%*+UUI+ OO;;EB 'GAB |H'+T^^$),IKK"M?Y ?))*X ( 	3t//01??E
) 4+s   (D Dc                `    U R                  UUUUUS9nU VVs/ sH  u  pxUPM	     snn$ s  snnf )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.
)queryrK   kfilterrL   )similarity_search_with_score)	r4   rT   rU   rV   rK   rL   docs_and_scoresdocrN   s	            r   similarity_searchMeilisearch.similarity_search   sD    * ;;' < 
 #22//222   *c                b    U R                   R                  U5      nU R                  UUUUUS9nU$ )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.
r5   rK   rU   rV   rL   )r,   embed_query'similarity_search_by_vector_with_scores)r4   rT   rU   rV   rK   rL   _queryrM   s           r   rW   (Meilisearch.similarity_search_with_score   sC    * ,,U3;;' < 
 r;   c           	     d   / nU R                   R                  [        U R                  5      5      R	                  SUSUS.UUSS.5      nUS    H]  nXR
                     n	U R                  U	;   d  M#  U	R                  U R                  5      n
US   nUR                  [        XS9U45        M_     U$ )	  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limitrV   showRankingScorehits_rankingScore)page_contentr&   )
r*   r0   r1   r+   searchr.   r-   poprF   r   )r4   r5   rK   rU   rV   rL   rM   resultsresultr&   r%   semantic_scores               r   r`   3Meilisearch.similarity_search_by_vector_with_scores   s    * ,,$$S)9)9%:;BB#,/]K $(	
 foF001H~~)||DNN3!'!8 dF& & r;   c                `    U R                  UUUUUS9nU VVs/ sH  u  pxUPM	     snn$ s  snnf )rd   r^   )r`   )	r4   r5   rU   rV   rK   rL   rM   rY   rN   s	            r   similarity_search_by_vector'Meilisearch.similarity_search_by_vector  sD    * ;;' < 
 #''$$'''r\   c           	     T    [        XEUS9nU " UUUUS9nUR                  UUUUU	U
S9  U$ )as  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)   )r5   r'   r   r6   )rH   rK   rI   rJ   r7   r8   )r    rQ   )clsrH   r5   rI   r   r   r   r6   rJ   r7   r8   r'   rK   rL   vectorstores                  r   
from_textsMeilisearch.from_texts%  sV    V  vH!	
 	'% 	 	
 r;   )r*   r/   r3   r,   r+   r.   r-   )NNNr$   r%   r&   )r5   r   r   Optional[Client]r   Optional[str]r   r~   r6   r1   r7   r1   r8   r1   r'   Optional[Dict[str, Any]])NNr<   )rH   zIterable[str]rI   Optional[List[dict]]rJ   Optional[List[str]]rK   r~   rL   r   return	List[str])   Nr<   )rT   r1   rU   intrV   Optional[Dict[str, str]]rK   r~   rL   r   r   List[Document])rT   r1   rU   r   rV   r   rK   r~   rL   r   r   List[Tuple[Document, float]])r<   r   N)r5   List[float]rK   r~   rU   r   rV   r   rL   r   r   r   )r5   r   rU   r   rV   r   rK   r~   rL   r   r   r   )ry   zType[Meilisearch]rH   r   r5   r   rI   r   r   r}   r   r~   r   r~   r6   r1   rJ   r   r7   r~   r8   r~   r'   zDict[str, Any]rK   r~   rL   r   r   r"   )__name__
__module____qualname____firstlineno____doc__r9   rQ   rZ   rW   r`   rv   classmethodr{   __static_attributes__ r;   r   r"   r"   -   s   !L $(!!%*&& /3&& !& 	&
 & & & & ,&8 +/#''0.. (. !	.
 %. . 
.f +/'033 3 )	3
 %3 3 
3B +/'0  )	
 %  
&F (1+/-- %- 	-
 )- - 
&-d +/'0(( ( )	(
 %( ( 
(< 
 +/#'!!%*#'"(&0$&'0::: : (	:
 !: : : : !:  : $: ": %: : 
: :r;   r"   )NNN)r   r}   r   r~   r   r~   r   r   )
__future__r   rA   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   r;   r   <module>r      sh    "  R R R - 0 - 3"  $!	  	<s+ sr;   