§
    šŠtj–/  ã                  ó®   — 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dS )é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚDictÚIterableÚListÚOptionalÚTupleÚType)ÚDocument)Ú
Embeddings)Úget_from_env)ÚVectorStore)ÚClientÚclientúOptional[Client]ÚurlúOptional[str]Úapi_keyÚreturnr   c                óÈ  — 	 dd l }n# t          $ r t          d¦  «        ‚w xY w| sN|pt          dd¦  «        }	 |pt          dd¦  «        }n# t          $ r Y nw xY w|                     ||¬¦  «        } n4t          | |j        ¦  «        st          dt          | ¦  «        › �¦  «        ‚	 |                      ¦   «          n$# t          $ r}t          d	|› �¦  «        ‚d }~ww xY w| S )
Nr   z^Could not import meilisearch python package. Please install it with `pip install meilisearch`.r   ÚMEILI_HTTP_ADDRr   Ú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)r   r   r   r   Úes        új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/vectorstores/meilisearch.pyÚ_create_clientr#      sN  € ð

ØÐÐÐÐøÝð 
ð 
ð 
Ýð@ñ
ô 
ð 	
ð
øøøð
 ð 

ØÐ;•\ %Ð):Ñ;Ô;ˆð	ØÐL¥¨iÐ9KÑ!LÔ!LˆGˆGøÝð 	ð 	ð 	ØˆDð	øøøà×#Ò#¨°WÐ#Ñ=Ô=ˆˆÝ˜ Ô 2Ñ3Ô3ð 
ÝØUÅtÈFÁ|Ä|ÐUÐUñ
ô 
ð 	
ðCØ�ŠÑÔÐÐøÝð Cð Cð CÝÐA¸aÐAÐAÑBÔBÐBøøøøðCøøøà€Ms1   ‚ ‡!¹A Á
AÁAÂ)B> Â>
CÃCÃCc                  ó¬   — e Zd ZdZ	 	 	 	 	 	 d3ddœd4d„Z	 	 	 d5d6d!„Z	 	 	 d7d8d)„Z	 	 	 d7d9d+„Z	 	 	 d:d;d-„Z	 	 	 d7d<d.„Z	e
ddddddddi df
d=d2„¦   «         ZdS )>Ú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)Ú	embeddersÚ	embeddingr   r   r   r   r   r   Ú
index_nameÚstrÚtext_keyÚmetadata_keyr)   úOptional[Dict[str, Any]]c               ó  — t          |||¬¦  «        }|| _        || _        || _        || _        || _        || _        | j                             t          | j        ¦  «        ¦  «         	                    |¦  «        | _
        dS )z#Initialize with Meilisearch client.©r   r   r   N)r#   Ú_clientÚ_index_nameÚ
_embeddingÚ	_text_keyÚ_metadata_keyÚ
_embeddersÚindexr,   Úupdate_embeddersÚ_embedders_settings)	Úselfr*   r   r   r   r+   r-   r.   r)   s	            r"   Ú__init__zMeilisearch.__init__Q   sƒ   € õ   v°3ÀÐHÑHÔHˆàˆŒØ%ˆÔØ#ˆŒØ!ˆŒØ)ˆÔØ#ˆŒØ#'¤<×#5Ò#5Ý�Ô Ñ!Ô!ñ$
ô $
ç
Ò
˜9Ñ
%Ô
%ð 	Ô Ð Ð ó    ÚdefaultÚtextsúIterable[str]Ú	metadatasúOptional[List[dict]]ÚidsúOptional[List[str]]Úembedder_nameÚkwargsr   r   ú	List[str]c           	     óÈ  — t          |¦  «        }g }|€d„ |D ¦   «         }|€d„ |D ¦   «         }| j                             |¦  «        }t          |¦  «        D ]K\  }}	||         }
||         }|	|| j        <   ||         }|                     d|
d|› |i| j        › |i¦  «         ŒL| j                             t          | j
        ¦  «        ¦  «                             |¦  «         |S )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.
        Nc                ó>   — g | ]}t          j        ¦   «         j        ‘ŒS © )ÚuuidÚuuid4Úhex©Ú.0Ú_s     r"   ú
<listcomp>z)Meilisearch.add_texts.<locals>.<listcomp>„   s!   € Ð3Ð3Ð3¨•4”:‘<”<Ô#Ð3Ð3Ð3r=   c                ó   — g | ]}i ‘ŒS rJ   rJ   rN   s     r"   rQ   z)Meilisearch.add_texts.<locals>.<listcomp>†   s   € Ð+Ð+Ð+ ˜Ð+Ð+Ð+r=   ÚidÚ_vectors)Úlistr4   Úembed_documentsÚ	enumerater5   Úappendr6   r2   r8   r,   r3   Úadd_documents)r;   r?   rA   rC   rE   rF   ÚdocsÚembedding_vectorsÚir'   rS   r(   r*   s                r"   Ú	add_textszMeilisearch.add_textsj   s  € õ* �U‘”ˆð ˆØˆ;Ø3Ð3¨UÐ3Ñ3Ô3ˆCØÐØ+Ð+ UÐ+Ñ+Ô+ˆIØ œO×;Ò;¸EÑBÔBÐå  Ñ'Ô'ð 	ð 	‰GˆAˆtØ�Q”ˆBØ  ”|ˆHØ'+ˆH�T”^Ñ$Ø)¨!Ô,ˆIØ�KŠKà˜"Ø MÐ!3°YÐ ?ØÔ)Ð+¨Xðñô ð ð ð 	Œ×Ò�3˜tÔ/Ñ0Ô0Ñ1Ô1×?Ò?ÀÑEÔEÐEØˆ
r=   é   ÚqueryÚkÚintÚfilterúOptional[Dict[str, str]]úList[Document]c                óN   — |                       |||||¬¦  «        }d„ |D ¦   «         S )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.
        )r_   rE   r`   rb   rF   c                ó   — g | ]\  }}|‘ŒS rJ   rJ   ©rO   ÚdocrP   s      r"   rQ   z1Meilisearch.similarity_search.<locals>.<listcomp>¶   s   € Ð2Ð2Ð2™˜˜Q�Ð2Ð2Ð2r=   )Úsimilarity_search_with_score)r;   r_   r`   rb   rE   rF   Údocs_and_scoress          r"   Úsimilarity_searchzMeilisearch.similarity_searchš   sC   € ð* ×;Ò;ØØ'ØØØð <ñ 
ô 
ˆð 3Ð2 /Ð2Ñ2Ô2Ð2r=   úList[Tuple[Document, float]]c                ón   — | 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.
        ©r*   rE   r`   rb   rF   )r4   Úembed_queryÚ'similarity_search_by_vector_with_scores)r;   r_   r`   rb   rE   rF   Ú_queryrZ   s           r"   ri   z(Meilisearch.similarity_search_with_score¸   sI   € ð* ”×,Ò,¨UÑ3Ô3ˆà×;Ò;ØØ'ØØØð <ñ 
ô 
ˆð ˆr=   úList[float]c           	     ón  — g }| j                              t          | j        ¦  «        ¦  «                             d|d|dœ||ddœ¦  «        }|d         D ]`}|| j                 }	| j        |	v rH|	                     | j        ¦  «        }
|d         }|                     t          |
|	¬¦  «        |f¦  «         Œa|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Úlimitrb   ÚshowRankingScoreÚhitsÚ_rankingScore)Úpage_contentr(   )
r2   r8   r,   r3   Úsearchr6   r5   ÚpoprX   r   )r;   r*   rE   r`   rb   rF   rZ   ÚresultsÚresultr(   r'   Úsemantic_scores               r"   rp   z3Meilisearch.similarity_search_by_vector_with_scoresØ   sß   € ð* ˆØ”,×$Ò$¥S¨Ô)9Ñ%:Ô%:Ñ;Ô;×BÒBØà#Ø,/¸]ÐKÐKØØ Ø$(ðð ñ	
ô 	
ˆð ˜f”oð 
	ð 
	ˆFØ˜dÔ0Ô1ˆHØŒ~ Ð)Ð)Ø—|’| D¤NÑ3Ô3�Ø!'¨Ô!8�Ø—’å ¨d¸XÐFÑFÔFØ&ðñô ð øð ˆr=   c                óN   — |                       |||||¬¦  «        }d„ |D ¦   «         S )rt   rn   c                ó   — g | ]\  }}|‘ŒS rJ   rJ   rg   s      r"   rQ   z;Meilisearch.similarity_search_by_vector.<locals>.<listcomp>#  s   € Ð'Ð'Ð'™˜˜Q�Ð'Ð'Ð'r=   )rp   )r;   r*   r`   rb   rE   rF   rZ   s          r"   Úsimilarity_search_by_vectorz'Meilisearch.similarity_search_by_vector  sC   € ð* ×;Ò;ØØ'ØØØð <ñ 
ô 
ˆð (Ð' $Ð'Ñ'Ô'Ð'r=   ÚclsúType[Meilisearch]úDict[str, Any]c                ó~   — t          |||¬¦  «        } | ||||¬¦  «        }|                     |||||	|
¬¦  «         |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,
                )
        r1   )r*   r)   r   r+   )r?   rE   rA   rC   r-   r.   )r#   r]   )r‡   r?   r*   rA   r   r   r   r+   rC   r-   r.   r)   rE   rF   Úvectorstores                  r"   Ú
from_textszMeilisearch.from_texts%  st   € õV   v°3ÀÐHÑHÔHˆà�cØØØØ!ð	
ñ 
ô 
ˆð 	×ÒØØ'ØØØØ%ð 	ñ 	
ô 	
ð 	
ð Ðr=   )NNNr&   r'   r(   )r*   r   r   r   r   r   r   r   r+   r,   r-   r,   r.   r,   r)   r/   )NNr>   )r?   r@   rA   rB   rC   rD   rE   r   rF   r   r   rG   )r^   Nr>   )r_   r,   r`   ra   rb   rc   rE   r   rF   r   r   rd   )r_   r,   r`   ra   rb   rc   rE   r   rF   r   r   rl   )r>   r^   N)r*   rr   rE   r   r`   ra   rb   r/   rF   r   r   rl   )r*   rr   r`   ra   rb   rc   rE   r   rF   r   r   rd   )r‡   rˆ   r?   rG   r*   r   rA   rB   r   r   r   r   r   r   r+   r,   rC   rD   r-   r   r.   r   r)   r‰   rE   r   rF   r   r   r%   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r<   r]   rk   ri   rp   r†   ÚclassmethodrŒ   rJ   r=   r"   r%   r%   -   sX  € € € € € ð!ð !ðL $(Ø!Ø!%Ø*ØØ&ð&ð /3ð&ð &ð &ð &ð &ð &ð8 +/Ø#'Ø'0ð.ð .ð .ð .ð .ðf Ø+/Ø'0ð3ð 3ð 3ð 3ð 3ðB Ø+/Ø'0ðð ð ð ð ðF (1ØØ+/ð-ð -ð -ð -ð -ðd Ø+/Ø'0ð(ð (ð (ð (ð (ð< ð
 +/Ø#'Ø!Ø!%Ø*Ø#'Ø"(Ø&0Ø$&Ø'0ð:ð :ð :ð :ñ „[ð:ð :ð :r=   r%   )NNN)r   r   r   r   r   r   r   r   )Ú
__future__r   rK   Útypingr   r   r   r   r   r	   r
   r   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.utilsr   Úlangchain_core.vectorstoresr   r   r   r#   r%   rJ   r=   r"   ú<module>r˜      s   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ Rà -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø -Ð -Ð -Ð -Ð -Ð -Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3àð #Ø"Ð"Ð"Ð"Ð"Ð"ð  $ØØ!ðð ð ð ð ð<sð sð sð sð s�+ñ sô sð sð sð sr=   