Ë
    µŒj  ã                   ód   — d dl 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mZ  G d„ de	e«      Zy)	é    )ÚAnyÚListÚOptional)ÚCallbackManagerForRetrieverRun)ÚDocument)ÚBaseRetriever)Ú	BaseModelÚFieldc                   óÌ   — e Zd ZU dZdZee   ed<   	  edd¬«      Z	ee
   ed<    edd¬«      Zee
   ed	<    edd
¬«      Zee   ed<   dd„Zde
dee   fd„Zde
dedee   fd„Zy)ÚNeedleRetrieveraY  
    NeedleRetriever retrieves relevant documents or context from a Needle collection
    based on a search query.

    Setup:
        Install the `needle-python` library and set your Needle API key.

        .. code-block:: bash

            pip install needle-python
            export NEEDLE_API_KEY="your-api-key"

    Key init args:
        - `needle_api_key` (Optional[str]): The API key for authenticating with Needle.
        - `collection_id` (str): The ID of the Needle collection to search in.
        - `client` (Optional[NeedleClient]): An optional instance of the NeedleClient.
        - `top_k` (Optional[int]): Maximum number of results to return.

    Usage:
        .. code-block:: python

            from langchain_community.retrievers.needle import NeedleRetriever

            retriever = NeedleRetriever(
                needle_api_key="your-api-key",
                collection_id="your-collection-id",
                top_k=10  # optional
            )

            results = retriever.retrieve("example query")
            for doc in results:
                print(doc.page_content)
    NÚclientzNeedle API Key)ÚdescriptionÚneedle_api_key.z,The ID of the Needle collection to search inÚcollection_idz*Maximum number of search results to return)Údefaultr   Útop_kÚreturnc                 óŒ   — 	 ddl m} | j                  s || j                  ¬«      | _        yy# t        $ r t        d«      ‚w xY w)z•
        Initialize the NeedleClient with the provided API key.

        If a client instance is already provided, this method does nothing.
        r   )ÚNeedleClientz0Please install with `pip install needle-python`.)Úapi_keyN)Ú	needle.v1r   ÚImportErrorr   r   )Úselfr   s     úo/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/retrievers/needle.pyÚ_initialize_clientz"NeedleRetriever._initialize_client6   sJ   € ð	RÝ.ð �{Š{Ù&¨t×/BÑ/BÔCˆD�Kð øô ò 	RÜÐPÓQÐQð	Rús	   ‚. ®AÚqueryc                 ó  — | j                  «        | j                  €t        d«      ‚| j                  j                  j	                  | j
                  || j                  ¬«      }|D �cg c]  }t        |j                  ¬«      ‘Œ }}|S c c}w )zý
        Search the Needle collection for relevant documents.

        Args:
            query (str): The search query used to find relevant documents.

        Returns:
            List[Document]: A list of documents matching the search query.
        z4NeedleClient is not initialized. Provide an API key.)r   Útextr   )Úpage_content)	r   r   Ú
ValueErrorÚcollectionsÚsearchr   r   r   Úcontent)r   r   ÚresultsÚresultÚdocss        r   Ú_search_collectionz"NeedleRetriever._search_collectionD   s‚   € ð 	×ÑÔ!Ø�;‰;ÐÜÐSÓTÐTà—+‘+×)Ñ)×0Ñ0Ø×,Ñ,°5ÀÇ
Á
ð 1ó 
ˆñ ELÓLÁG¸&” f§n¡nÖ5ÀGˆÐLØˆùò Ms   Á(B	Úrun_managerc                ó$   — | j                  |«      S )zñ
        Retrieve relevant documents based on the query.

        Args:
            query (str): The query string used to search the collection.
        Returns:
            List[Document]: A list of documents relevant to the query.
        )r'   )r   r   r(   s      r   Ú_get_relevant_documentsz'NeedleRetriever._get_relevant_documentsX   s   € ð ×&Ñ& uÓ-Ð-ó    )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   Ú__annotations__r
   r   Ústrr   r   Úintr   r   r   r'   r   r*   © r+   r   r   r   	   s§   … ñ ðD !€FˆH�S‰MÓ Ø,Ù$)¨$Ð<LÔ$M€N�H˜S‘MÓMÙ#(ØÐGô$€M�8˜C‘=ó ñ !ØÐ"Nô€Eˆ8�C‰=ó óDð¨ð °°X±ó ð(.Øð.Ø*Hð.à	ˆh‰ô.r+   r   N)Útypingr   r   r   Úlangchain_core.callbacksr   Úlangchain_core.documentsr   Úlangchain_core.retrieversr   Úpydanticr	   r
   r   r3   r+   r   Ú<module>r9      s'   ðß &Ñ &å CÝ -Ý 3ß %ô\.�m Yõ \.r+   