Ë
    ´ŒjFA  ã                  ó>  — d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZmZmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZmZmZm Z  ddl!m"Z" e
rddlm#Z#m$Z$ e%Z&e'e   Z(ee&e(f   Z)eee(f   Z* G d„ ded¬«      Z+ G d„ dee&e(f   e«      Z,y)a„  **Retriever** class returns Documents given a text **query**.

It is more general than a vector store. A retriever does not need to be able to
store documents, only to return (or retrieve) it. Vector stores can be used as
the backbone of a retriever, but there are other types of retrievers as well.

**Class hierarchy:**

.. code-block::

    BaseRetriever --> <name>Retriever  # Examples: ArxivRetriever, MergerRetriever

**Main helpers:**

.. code-block::

    RetrieverInput, RetrieverOutput, RetrieverLike, RetrieverOutputLike,
    Document, Serializable, Callbacks,
    CallbackManagerForRetrieverRun, AsyncCallbackManagerForRetrieverRun
é    )ÚannotationsN)ÚABCÚabstractmethod)Ú	signature)ÚTYPE_CHECKINGÚAnyÚOptional)Ú
ConfigDict)ÚSelfÚ	TypedDictÚoverride)Ú
deprecated)Ú	Callbacks)ÚAsyncCallbackManagerÚCallbackManager)ÚDocument)ÚRunnableÚRunnableConfigÚRunnableSerializableÚensure_config)Úrun_in_executor)Ú#AsyncCallbackManagerForRetrieverRunÚCallbackManagerForRetrieverRunc                  ó@   — e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   y)	ÚLangSmithRetrieverParamsz!LangSmith parameters for tracing.ÚstrÚls_retriever_nameúOptional[str]Úls_vector_store_providerÚls_embedding_providerÚls_embedding_modelN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    úc/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_core/retrievers.pyr   r   8   s)   … Ù+àÓØØ+Ó+Ø Ø(Ó(ØØ%Ó%Ør(   r   F)Útotalc                  ó”  ‡ — e Zd ZU dZ ed¬«      ZdZded<   dZded<   dZ	d	ed
<   	 dZ
ded<   	 edˆ fd„«       Zdd„Ze	 d	 	 	 	 	 	 	 dd„«       Ze	 d	 	 	 	 	 	 	 dd„«       Ze	 	 	 	 	 	 dd„«       Z	 	 	 	 	 	 d d„Z eddd¬«      dddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 d!d„«       Z eddd¬«      dddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 d!d„«       Zˆ xZS )"ÚBaseRetrieveraK	  Abstract base class for a Document retrieval system.

    A retrieval system is defined as something that can take string queries and return
    the most 'relevant' Documents from some source.

    Usage:

    A retriever follows the standard Runnable interface, and should be used
    via the standard Runnable methods of `invoke`, `ainvoke`, `batch`, `abatch`.

    Implementation:

    When implementing a custom retriever, the class should implement
    the `_get_relevant_documents` method to define the logic for retrieving documents.

    Optionally, an async native implementations can be provided by overriding the
    `_aget_relevant_documents` method.

    Example: A retriever that returns the first 5 documents from a list of documents

        .. code-block:: python

            from langchain_core.documents import Document
            from langchain_core.retrievers import BaseRetriever

            class SimpleRetriever(BaseRetriever):
                docs: list[Document]
                k: int = 5

                def _get_relevant_documents(self, query: str) -> list[Document]:
                    """Return the first k documents from the list of documents"""
                    return self.docs[:self.k]

                async def _aget_relevant_documents(self, query: str) -> list[Document]:
                    """(Optional) async native implementation."""
                    return self.docs[:self.k]

    Example: A simple retriever based on a scikit-learn vectorizer

        .. code-block:: python

            from sklearn.metrics.pairwise import cosine_similarity


            class TFIDFRetriever(BaseRetriever, BaseModel):
                vectorizer: Any
                docs: list[Document]
                tfidf_array: Any
                k: int = 4

                class Config:
                    arbitrary_types_allowed = True

                def _get_relevant_documents(self, query: str) -> list[Document]:
                    # Ip -- (n_docs,x), Op -- (n_docs,n_Feats)
                    query_vec = self.vectorizer.transform([query])
                    # Op -- (n_docs,1) -- Cosine Sim with each doc
                    results = cosine_similarity(self.tfidf_array, query_vec).reshape(
                        (-1,)
                    )
                    return [self.docs[i] for i in results.argsort()[-self.k :][::-1]]

    T)Úarbitrary_types_allowedFÚboolÚ_new_arg_supportedÚ_expects_other_argsNúOptional[list[str]]ÚtagsúOptional[dict[str, Any]]Úmetadatac                ó   •— t        ‰| �  d
i |¤Ž | j                  t        j                  k7  rDt	        j
                  dt        d¬«       | j                  }t        j                  | _        || _        t        | d«      ra| j                  t        j                  k7  rDt	        j
                  dt        d¬«       | j                  }t        j                  | _	        || _
        t        | j                  «      j                  }|j                  d«      d u| _        | j                  s.| j                  t        j                  k(  r	 	 	 	 	 	 dd„}|| _
        t        t!        |j#                  «       «      h d£z
  «      d	kD  | _        y )NzgRetrievers must implement abstract `_get_relevant_documents` method instead of `get_relevant_documents`é   )Ú
stacklevelÚaget_relevant_documentsziRetrievers must implement abstract `_aget_relevant_documents` method instead of `aget_relevant_documents`Úrun_managerc              “  óL   K  — t        d | j                  |«      ƒ d {  –—† S 7 Œ­w©N)r   Ú_get_relevant_documents)ÚselfÚquerys     r)   Ú_aget_relevant_documentszABaseRetriever.__init_subclass__.<locals>._aget_relevant_documentsÂ   s$   è ø€ ô -¨T°4×3OÑ3OÐQVÓW×WÐWÐWús   ‚$�"ž$>   r=   r>   r9   r   r'   )r=   r   r>   r   Úreturnúlist[Document])ÚsuperÚ__init_subclass__Úget_relevant_documentsr,   ÚwarningsÚwarnÚDeprecationWarningr<   Úhasattrr8   r?   r   Ú
parametersÚgetr/   ÚlenÚsetÚkeysr0   )ÚclsÚkwargsÚswapÚaswaprI   r?   Ú	__class__s         €r)   rC   zBaseRetriever.__init_subclass__›   sd  ø€ ä‰Ñ!Ñ+ FÒ+ð ×%Ñ%¬×)MÑ)MÒMÜ�M‰Mð7ä"Øõ	ð ×-Ñ-ˆDä×4Ñ4ð Ô&ð +/ˆCÔ'ä�CÐ2Ô3Ø×+Ñ+¬}×/TÑ/TÒTä�M‰Mð8ä"Øõ	ð ×/Ñ/ˆEä×5Ñ5ð Ô'ð ,1ˆCÔ(Ü˜s×:Ñ:Ó;×FÑFˆ
Ø!+§¡°Ó!>ÀdÐ!JˆÔà×&Ò&Ø×,Ñ,´×0VÑ0VÒVðXØðXØ#&ðXàóXð
 ,DˆCÔ(ô ”�J—O‘OÓ%Ó&Ò)IÑIÓJÈQÑNð 	Õr(   c                ó´   — | j                  «       }|j                  d«      r|dd }n|j                  d«      r|dd }|j                  «       }t	        |¬«      S )z Get standard params for tracing.Ú	Retrieveré	   Ni÷ÿÿÿ)r   )Úget_nameÚ
startswithÚendswithÚlowerr   )r=   Ú_kwargsÚdefault_retriever_names      r)   Ú_get_ls_paramszBaseRetriever._get_ls_paramsÎ   s_   € à!%§¡£ÐØ!×,Ñ,¨[Ô9Ø%;¸A¸BÐ%?Ñ"Ø#×,Ñ,¨[Ô9Ø%;¸C¸RÐ%@Ð"Ø!7×!=Ñ!=Ó!?Ðä'Ð:PÔQÐQr(   c           	     óª  — t        |«      }i |j                  d«      xs i ¥ | j                  di |¤Ž¥}t        j                  |j                  d«      d|j                  dd«      |j                  d«      | j
                  || j                  ¬«      }|j                  d||j                  d«      xs | j                  «       |j                  d	d«      ¬
«      }	 | j                  r|ni }| j                  r | j                  |fd|i|¤Ž}n | j                  |fi |¤Ž}|j                  |«       |S # t        $ r}	|j                  |	«       ‚ d}	~	ww xY w)aÌ  Invoke the retriever to get relevant documents.

        Main entry point for synchronous retriever invocations.

        Args:
            input: The query string.
            config: Configuration for the retriever. Defaults to None.
            kwargs: Additional arguments to pass to the retriever.

        Returns:
            List of relevant documents.

        Examples:

        .. code-block:: python

            retriever.invoke("query")

        r4   Ú	callbacksNÚverboseFr2   ©r_   Úinheritable_tagsÚ
local_tagsÚinheritable_metadataÚlocal_metadataÚrun_nameÚrun_id©Únamerf   r9   r'   )r   rJ   r\   r   Ú	configurer2   r4   Úon_retriever_startrV   Úpopr0   r/   r<   Úon_retriever_endÚ	ExceptionÚon_retriever_error©
r=   ÚinputÚconfigrO   rc   Úcallback_managerr9   Úkwargs_ÚresultÚes
             r)   ÚinvokezBaseRetriever.invokeÙ   sk  € ô. ˜vÓ&ˆð 
Ø�z‰z˜*Ó%Ò+¨ð 
à!ˆd×!Ñ!Ñ+ FÑ+ð 
Ðô +×4Ñ4Ø�J‰J�{Ó#ØØ—J‘J˜y¨%Ó0Ø#ŸZ™Z¨Ó/Ø—y‘yØ!5ØŸ=™=ô
Ðð '×9Ñ9ØØØ—‘˜JÓ'Ò:¨4¯=©=«?Ø—:‘:˜h¨Ó-ð	 :ó 
ˆð	Ø $× 8Ò 8‘f¸bˆGØ×&Ò&Ø5˜×5Ñ5ØñØ'2ðØ6=ñ‘ð 6˜×5Ñ5°eÑG¸wÑG�ð
 ×(Ñ(Øôð ˆMøô ò 	Ø×*Ñ*¨1Ô-Øûð	ús   ÃAD2 Ä2	EÄ;EÅEc           	   ‹  ó  K  — t        |«      }i |j                  d«      xs i ¥ | j                  di |¤Ž¥}t        j                  |j                  d«      d|j                  dd«      |j                  d«      | j
                  || j                  ¬«      }|j                  d||j                  d«      xs | j                  «       |j                  d	d«      ¬
«      ƒ d{  –—† }	 | j                  r|ni }| j                  r | j                  |fd|i|¤Žƒ d{  –—† }n | j                  |fi |¤Žƒ d{  –—† }|j                  |«      ƒ d{  –—†  |S 7 Œu7 Œ=7 Œ#7 Œ# t        $ r }	|j                  |	«      ƒ d{  –—†7   ‚ d}	~	ww xY w­w)aã  Asynchronously invoke the retriever to get relevant documents.

        Main entry point for asynchronous retriever invocations.

        Args:
            input: The query string.
            config: Configuration for the retriever. Defaults to None.
            kwargs: Additional arguments to pass to the retriever.

        Returns:
            List of relevant documents.

        Examples:

        .. code-block:: python

            await retriever.ainvoke("query")

        r4   r^   Nr_   Fr2   r`   re   rf   rg   r9   r'   )r   rJ   r\   r   ri   r2   r4   rj   rV   rk   r0   r/   r?   rl   rm   rn   ro   s
             r)   ÚainvokezBaseRetriever.ainvoke  s¤  è ø€ ô4 ˜vÓ&ˆð 
Ø�z‰z˜*Ó%Ò+¨ð 
à!ˆd×!Ñ!Ñ+ FÑ+ð 
Ðô 0×9Ñ9Ø�J‰J�{Ó#ØØ—J‘J˜y¨%Ó0Ø#ŸZ™Z¨Ó/Ø—y‘yØ!5ØŸ=™=ô
Ðð -×?Ñ?ØØØ—‘˜JÓ'Ò:¨4¯=©=«?Ø—:‘:˜h¨Ó-ð	 @ó 
÷ 
ˆð	Ø $× 8Ò 8‘f¸bˆGØ×&Ò&Ø<˜t×<Ñ<Øñ Ø'2ð Ø6=ñ ÷ ‘ð  =˜t×<Ñ<¸UÑNÀgÑN×N�ð
 ×.Ñ.Øó÷ ð ð ˆMð+
øðøð Oøð
ùô	 ò 	Ø×0Ñ0°Ó3×3Ñ3Øûð	üsx   ‚CFÃEÃFÃ$4E ÄEÄE Ä4EÄ5E Ä9FÅEÅFÅE ÅE ÅFÅ	FÅ%F Å9E<Å:F Æ FÆFc                ó   — y)zäGet documents relevant to a query.

        Args:
            query: String to find relevant documents for.
            run_manager: The callback handler to use.

        Returns:
            List of relevant documents.
        Nr'   ©r=   r>   r9   s      r)   r<   z%BaseRetriever._get_relevant_documentsT  s   � r(   c             ƒ  ól   K  — t        d| j                  ||j                  «       ¬«      ƒ d{  –—† S 7 Œ­w)zðAsynchronously get documents relevant to a query.

        Args:
            query: String to find relevant documents for
            run_manager: The callback handler to use

        Returns:
            List of relevant documents
        N)r9   )r   r<   Úget_syncrz   s      r)   r?   z&BaseRetriever._aget_relevant_documentsb  s:   è ø€ ô %ØØ×(Ñ(ØØ#×,Ñ,Ó.ô	
÷ 
ð 	
ð 
ús   ‚+4­2®4z0.1.46rv   z1.0)ÚsinceÚalternativeÚremoval)r^   r2   r4   re   c               óf   — i }|r||d<   |r||d<   |r||d<   |r||d<    | j                   ||fi |¤ŽS )a  Retrieve documents relevant to a query.

        Users should favor using `.invoke` or `.batch` rather than
        `get_relevant_documents directly`.

        Args:
            query: string to find relevant documents for.
            callbacks: Callback manager or list of callbacks. Defaults to None.
            tags: Optional list of tags associated with the retriever.
                These tags will be associated with each call to this retriever,
                and passed as arguments to the handlers defined in `callbacks`.
                Defaults to None.
            metadata: Optional metadata associated with the retriever.
                This metadata will be associated with each call to this retriever,
                and passed as arguments to the handlers defined in `callbacks`.
                Defaults to None.
            run_name: Optional name for the run. Defaults to None.
            kwargs: Additional arguments to pass to the retriever.

        Returns:
            List of relevant documents.
        r^   r2   r4   re   )rv   ©r=   r>   r^   r2   r4   re   rO   rq   s           r)   rD   z$BaseRetriever.get_relevant_documentsu  sU   € ðB "$ˆÙØ"+ˆF�;ÑÙØ!ˆF�6‰NÙØ!)ˆF�:ÑÙØ!)ˆF�:ÑØˆt�{‰{˜5 &Ñ3¨FÑ3Ð3r(   rx   c             ‹  ó‚   K  — i }|r||d<   |r||d<   |r||d<   |r||d<    | j                   ||fi |¤Žƒ d{  –—† S 7 Œ­w)a  Asynchronously get documents relevant to a query.

        Users should favor using `.ainvoke` or `.abatch` rather than
        `aget_relevant_documents directly`.

        Args:
            query: string to find relevant documents for.
            callbacks: Callback manager or list of callbacks.
            tags: Optional list of tags associated with the retriever.
                These tags will be associated with each call to this retriever,
                and passed as arguments to the handlers defined in `callbacks`.
                Defaults to None.
            metadata: Optional metadata associated with the retriever.
                This metadata will be associated with each call to this retriever,
                and passed as arguments to the handlers defined in `callbacks`.
                Defaults to None.
            run_name: Optional name for the run. Defaults to None.
            kwargs: Additional arguments to pass to the retriever.

        Returns:
            List of relevant documents.
        r^   r2   r4   re   N)rx   r�   s           r)   r8   z%BaseRetriever.aget_relevant_documents¡  s_   è ø€ ðB "$ˆÙØ"+ˆF�;ÑÙØ!ˆF�6‰NÙØ!)ˆF�:ÑÙØ!)ˆF�:ÑØ!�T—\‘\ %¨Ñ:°6Ñ:×:Ð:Ð:ús   ‚6?¸=¹?)rO   r   r@   ÚNone)rZ   r   r@   r   r;   )rp   r   rq   zOptional[RunnableConfig]rO   r   r@   rA   )r>   r   r9   r   r@   rA   )r>   r   r9   r   r@   rA   )r>   r   r^   r   r2   r1   r4   r3   re   r   rO   r   r@   rA   )r"   r#   r$   r%   r
   Úmodel_configr/   r&   r0   r2   r4   r   rC   r\   rv   rx   r   r<   r?   r   rD   r8   Ú__classcell__)rR   s   @r)   r,   r,   E   s  ø… ñ>ñ@ Ø $ô€Lð  %Ð˜Ó$Ø %Ð˜Ó%Ø $€DÐ
Ó$ðð *.€HÐ&Ó-ðð ô0
ó ð0
ód	Rð à=Að9Øð9Ø":ð9ØMPð9à	ò9ó ð9ðv ð ,0ð<àð<ð )ð<ð ð	<ð
 
ò<ó ð<ð| ðØðØ*Hðà	òó ðð
Øð
Ø*Mð
à	ó
ñ& �h¨H¸eÔDð
  $Ø$(Ø-1Ø"&ñ)4àð)4ð ð	)4ð
 "ð)4ð +ð)4ð  ð)4ð ð)4ð 
ò)4ó Eð)4ñV �h¨I¸uÔEð
  $Ø$(Ø-1Ø"&ñ);àð);ð ð	);ð
 "ð);ð +ð);ð  ð);ð ð);ð 
ò);ó Fô);r(   r,   )-r%   Ú
__future__r   rE   Úabcr   r   Úinspectr   Útypingr   r   r	   Úpydanticr
   Útyping_extensionsr   r   r   Úlangchain_core._apir   Úlangchain_core.callbacksr   Ú langchain_core.callbacks.managerr   r   Úlangchain_core.documentsr   Úlangchain_core.runnablesr   r   r   r   Úlangchain_core.runnables.configr   r   r   r   ÚRetrieverInputÚlistÚRetrieverOutputÚRetrieverLikeÚRetrieverOutputLiker   r,   r'   r(   r)   Ú<module>r—      s¢   ðñõ* #ã ß #Ý ß /Ñ /å ß 7Ñ 7å *Ý .ß RÝ -÷ó õ <á÷ð
 €Ø�x‘.€Ø˜¨Ð8Ñ9€Ø˜s OÐ3Ñ4Ð ô
˜y°õ 
ôF;Ð(¨¸Ð)HÑIÈ3õ F;r(   