§
    ˜Štj„+  ã                  ó@  — d 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
 ddlmZ ddlmZmZ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&dS )a5  **Retriever** class returns `Document` objects 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.
é    )Úannotations)ÚABCÚabstractmethod)Ú	signature)ÚTYPE_CHECKINGÚAny)Ú
ConfigDict)ÚSelfÚ	TypedDictÚoverride)ÚAsyncCallbackManagerÚCallbackManager)ÚDocument)ÚRunnableÚRunnableConfigÚRunnableSerializableÚensure_config)Úrun_in_executor)Ú#AsyncCallbackManagerForRetrieverRunÚCallbackManagerForRetrieverRunc                  óB   — e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   dS )	ÚLangSmithRetrieverParamsz!LangSmith parameters for tracing.ÚstrÚls_retriever_namez
str | NoneÚls_vector_store_providerÚls_embedding_providerÚls_embedding_modelN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    úW/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_core/retrievers.pyr   r   '   sQ   € € € € € € Ø+Ð+àÐÐÑØà(Ð(Ð(Ñ(Ø à%Ð%Ð%Ñ%Øà"Ð"Ð"Ñ"ØÐ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ˆ xZS )(ÚBaseRetrievera¾  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 "Retriever that returns the first 5 documents from a list of documents"

        ```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 "Simple retriever based on a scikit-learn vectorizer"

        ```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_argsNzlist[str] | NoneÚtagszdict[str, Any] | NoneÚmetadataÚkwargsr   ÚreturnÚNonec                ój  •—  t          ¦   «         j        di |¤Ž t          | j        ¦  «        j        }|                     d¦  «        d u| _        | j        s | j        t          j        k    rdd„}|| _        t          t          |                     ¦   «         ¦  «        h d	£z
  ¦  «        d
k    | _        d S )NÚrun_managerÚselfr
   Úqueryr   r0   úlist[Document]c              “  ó>   K  — t          d | j        |¦  «        ƒ d {V —†S ©N)r   Ú_get_relevant_documents)r4   r5   s     r%   Ú_aget_relevant_documentszABaseRetriever.__init_subclass__.<locals>._aget_relevant_documents›   s0   è è € õ -¨T°4Ô3OÐQVÑWÔWÐWÐWÐWÐWÐWÐWÐWr$   >   r4   r5   r3   r   r#   )r4   r
   r5   r   r0   r6   )ÚsuperÚ__init_subclass__r   r9   Ú
parametersÚgetr+   r:   r(   ÚlenÚsetÚkeysr,   )Úclsr/   r=   r:   Ú	__class__s       €r%   r<   zBaseRetriever.__init_subclass__‘   sÊ   ø€ à!�‰ŒÔ!Ð+Ð+ FÐ+Ð+Ð+Ý˜sÔ:Ñ;Ô;ÔFˆ
Ø!+§¢°Ñ!>Ô!>ÀdÐ!JˆÔàÔ&ð
	DàÔ,µÔ0VÒVÐVðXð Xð Xð Xð
 ,DˆCÔ(õ •�J—O’OÑ%Ô%Ñ&Ô&Ð)IÐ)IÐ)IÑIÑJÔJÈQÒNð 	ÔÐÐr$   Ú_kwargsr   c                óð   — |                       ¦   «         }|                     d¦  «        r|dd…         }n|                     d¦  «        r
|dd…         }|                     ¦   «         }t	          |¬¦  «        S )z Get standard params for tracing.Ú	Retrieveré	   Ni÷ÿÿÿ)r   )Úget_nameÚ
startswithÚendswithÚlowerr   )r4   rD   Údefault_retriever_names      r%   Ú_get_ls_paramszBaseRetriever._get_ls_params§   sƒ   € à!%§¢¡¤ÐØ!×,Ò,¨[Ñ9Ô9ð 	AØ%;¸A¸B¸BÔ%?Ð"Ð"Ø#×,Ò,¨[Ñ9Ô9ð 	AØ%;¸C¸R¸CÔ%@Ð"Ø!7×!=Ò!=Ñ!?Ô!?Ðå'Ð:PÐQÑQÔQÐQr$   Úinputr   ÚconfigúRunnableConfig | Noner6   c           	     ó´  — t          |¦  «        }i |                     d¦  «        pi ¥ | j        di |¤Ž¥}t          j        |                     d¦  «        d|                     dd¦  «        |                     d¦  «        | j        || j        ¬¦  «        }|                     d||                     d¦  «        p|                      ¦   «         | 	                    d	d¦  «        ¬
¦  «        }	 | j
        r|ni }| j        r | j        |fd|i|¤Ž}n | j        |fi |¤Ž}|                     |¦  «         |S # t          $ r}	|                     |	¦  «         ‚ 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.
            **kwargs: Additional arguments to pass to the retriever.

        Returns:
            List of relevant documents.

        Examples:
        ```python
        retriever.invoke("query")
        ```
        r.   Ú	callbacksNÚverboseFr-   ©rS   Úinheritable_tagsÚ
local_tagsÚinheritable_metadataÚlocal_metadataÚrun_nameÚrun_id©ÚnamerZ   r3   r#   )r   r>   rM   r   Ú	configurer-   r.   Úon_retriever_startrH   Úpopr,   r+   r9   Úon_retriever_endÚ	ExceptionÚon_retriever_error©
r4   rN   rO   r/   rW   Úcallback_managerr3   Úkwargs_ÚresultÚes
             r%   ÚinvokezBaseRetriever.invoke²   s½  € õ* ˜vÑ&Ô&ˆð 
Ø�zŠz˜*Ñ%Ô%Ð+¨ð 
à!ˆdÔ!Ð+Ð+ FÐ+Ð+ð 
Ðõ +Ô4Ø�JŠJ�{Ñ#Ô#ØØ—J’J˜y¨%Ñ0Ô0Ø#ŸZšZ¨Ñ/Ô/Ø”yØ!5Øœ=ð
ñ 
ô 
Ðð '×9Ò9ØØØ—’˜JÑ'Ô'Ð:¨4¯=ª=©?¬?Ø—:’:˜h¨Ñ-Ô-ð	 :ñ 
ô 
ˆð	Ø $Ô 8Ð@�f�f¸bˆGØÔ&ð HØ5˜Ô5Øðð Ø'2ðØ6=ðð ��ð 6˜Ô5°eÐGÐG¸wÐGÐG�ð
 ×(Ò(Øñô ð ð ˆMøõ ð 	ð 	ð 	Ø×*Ò*¨1Ñ-Ô-Ð-Øøøøøð	øøøs   Ã*1D2 Ä2
EÄ<EÅEc           	   ‹  óô  K  — t          |¦  «        }i |                     d¦  «        pi ¥ | j        di |¤Ž¥}t          j        |                     d¦  «        d|                     dd¦  «        |                     d¦  «        | j        || j        ¬¦  «        }|                     d||                     d¦  «        p|                      ¦   «         | 	                    d	d¦  «        ¬
¦  «        ƒ d{V —†}	 | j
        r|ni }| j        r | j        |fd|i|¤Žƒ d{V —†}n | j        |fi |¤Žƒ d{V —†}|                     |¦  «        ƒ d{V —† |S # t          $ r!}	|                     |	¦  «        ƒ d{V —† ‚ d}	~	ww xY 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.
            **kwargs: Additional arguments to pass to the retriever.

        Returns:
            List of relevant documents.

        Examples:
        ```python
        await retriever.ainvoke("query")
        ```
        r.   rR   NrS   Fr-   rT   rY   rZ   r[   r3   r#   )r   r>   rM   r   r]   r-   r.   r^   rH   r_   r,   r+   r:   r`   ra   rb   rc   s
             r%   ÚainvokezBaseRetriever.ainvokeì   s@  è è € õ0 ˜vÑ&Ô&ˆð 
Ø�zŠz˜*Ñ%Ô%Ð+¨ð 
à!ˆdÔ!Ð+Ð+ FÐ+Ð+ð 
Ðõ 0Ô9Ø�JŠJ�{Ñ#Ô#ØØ—J’J˜y¨%Ñ0Ô0Ø#ŸZšZ¨Ñ/Ô/Ø”yØ!5Øœ=ð
ñ 
ô 
Ðð -×?Ò?ØØØ—’˜JÑ'Ô'Ð:¨4¯=ª=©?¬?Ø—:’:˜h¨Ñ-Ô-ð	 @ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð	Ø $Ô 8Ð@�f�f¸bˆGØÔ&ð OØ<˜tÔ<Øð ð  Ø'2ð Ø6=ð ð  ð ð ð ð ð ð ��ð  =˜tÔ<¸UÐNÐNÀgÐNÐNÐNÐNÐNÐNÐNÐN�ð
 ×.Ò.Øñô ð ð ð ð ð ð ð ð ˆMøõ ð 	ð 	ð 	Ø×0Ò0°Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Øøøøøð	øøøs   Ã2=E Å
E7ÅE2Å2E7r5   r3   r   c               ó   — dS )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#   ©r4   r5   r3   s      r%   r9   z%BaseRetriever._get_relevant_documents)  s   € € € r$   r   c             ƒ  óf   K  — t          d| j        ||                     ¦   «         ¬¦  «        ƒ d{V —†S )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)r3   )r   r9   Úget_syncrl   s      r%   r:   z&BaseRetriever._aget_relevant_documents7  sX   è è € õ %ØØÔ(ØØ#×,Ò,Ñ.Ô.ð	
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 	
r$   )r/   r   r0   r1   )rD   r   r0   r   r8   )rN   r   rO   rP   r/   r   r0   r6   )r5   r   r3   r   r0   r6   )r5   r   r3   r   r0   r6   )r   r   r    r!   r	   Úmodel_configr+   r"   r,   r-   r.   r   r<   rM   rh   rj   r   r9   r:   Ú__classcell__)rC   s   @r%   r(   r(   7   se  ø€ € € € € € ð;ð ;ðz �:Ø $ðñ ô €Lð  %ÐÐ$Ð$Ð$Ñ$à %ÐÐ%Ð%Ð%Ñ%à!€DÐ!Ð!Ð!Ñ!ðð '+€HÐ*Ð*Ð*Ñ*ðð ð
ð 
ð 
ð 
ð 
ñ „Xð
ð*	Rð 	Rð 	Rð 	Rð à:>ð7ð 7ð 7ð 7ñ „Xð7ðr ð )-ð:ð :ð :ð :ñ „Xð:ðx ðð ð ñ „^ðð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r$   r(   N)'r!   Ú
__future__r   Úabcr   r   Úinspectr   Útypingr   r   Úpydanticr	   Útyping_extensionsr
   r   r   Ú 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Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ð ð ð ð <Ð ;Ð ;Ð ;Ð ;Ð ;àð ðð ð ð ð ð ð ð ð
 €Ø�x”.€Ø˜¨Ð8Ô9€Ø˜s OÐ3Ô4Ð ðð ð ð ð ˜y°ð ñ ô ð ð Q
ð Q
ð Q
ð Q
ð Q
Ð(¨¸Ð)HÔIÈ3ñ Q
ô Q
ð Q
ð Q
ð Q
r$   