§
    ™Štj<&  ã                   óê   — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZ dd	lmZmZmZ dd
lmZ ddlmZ defd„Z G d„ de¦  «        Zdee         fd„Z G d„ de¦  «        ZdS )z'Vectorstore stubs for the indexing api.é    )ÚAny)Ú
BaseLoader)ÚDocument)Ú
Embeddings)ÚBaseLanguageModel)ÚVectorStore)ÚRecursiveCharacterTextSplitterÚTextSplitter)Ú	BaseModelÚ
ConfigDictÚField)ÚRetrievalQAWithSourcesChain)ÚRetrievalQAÚreturnc                  ó$   — t          dd¬¦  «        S )z=Return the default text splitter used for chunking documents.iè  r   )Ú
chunk_sizeÚchunk_overlap)r	   © ó    úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_classic/indexes/vectorstore.pyÚ_get_default_text_splitterr      s   € å)°TÈÐKÑKÔKÐKr   c                   ó0  — e Zd ZU dZeed<    edd¬¦  «        Z	 	 ddede	dz  d	e
eef         dz  d
edef
d„Z	 	 ddede	dz  d	e
eef         dz  d
edef
d„Z	 	 ddede	dz  d	e
eef         dz  d
ede
f
d„Z	 	 ddede	dz  d	e
eef         dz  d
ede
f
d„ZdS )ÚVectorStoreIndexWrapperz/Wrapper around a `VectorStore` for easy access.ÚvectorstoreTÚforbid©Úarbitrary_types_allowedÚextraNÚquestionÚllmÚretriever_kwargsÚkwargsr   c           	      óÆ   — |€d}t          |¦  «        ‚|pi }t          j        |fd | j        j        di |¤Ži|¤Ž}|                     |j        |i¦  «        |j                 S )a¡  Query the `VectorStore` using the provided LLM.

        Args:
            question: The question or prompt to query.
            llm: The language model to use. Must not be `None`.
            retriever_kwargs: Optional keyword arguments for the retriever.
            **kwargs: Additional keyword arguments forwarded to the chain.

        Returns:
            The result string from the RetrievalQA chain.
        Nú¶This API has been changed to require an LLM. Please provide an llm to use for querying the vectorstore.
For example,
from langchain_openai import OpenAI
model = OpenAI(temperature=0)Ú	retrieverr   )ÚNotImplementedErrorr   Úfrom_chain_typer   Úas_retrieverÚinvokeÚ	input_keyÚ
output_key©Úselfr   r    r!   r"   ÚmsgÚchains          r   ÚqueryzVectorStoreIndexWrapper.query"   s”   € ð$ ˆ;ð0ð õ & cÑ*Ô*Ð*Ø+Ð1¨rÐÝÔ+Øð
ð 
à3�dÔ&Ô3ÐGÐGÐ6FÐGÐGð
ð ð
ð 
ˆð
 �|Š|˜Uœ_¨hÐ7Ñ8Ô8¸Ô9IÔJÐJr   c           	   ‹   óÖ   K  — |€d}t          |¦  «        ‚|pi }t          j        |fd | j        j        di |¤Ži|¤Ž}|                     |j        |i¦  «        ƒ d{V —†|j                 S )a½  Asynchronously query the `VectorStore` using the provided LLM.

        Args:
            question: The question or prompt to query.
            llm: The language model to use. Must not be `None`.
            retriever_kwargs: Optional keyword arguments for the retriever.
            **kwargs: Additional keyword arguments forwarded to the chain.

        Returns:
            The asynchronous result string from the RetrievalQA chain.
        Nr$   r%   r   )r&   r   r'   r   r(   Úainvoker*   r+   r,   s          r   ÚaqueryzVectorStoreIndexWrapper.aqueryE   sª   è è € ð$ ˆ;ð0ð õ & cÑ*Ô*Ð*Ø+Ð1¨rÐÝÔ+Øð
ð 
à3�dÔ&Ô3ÐGÐGÐ6FÐGÐGð
ð ð
ð 
ˆð
 —m’m U¤_°hÐ$?Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@À%ÔBRÔSÐSr   c           	      ó°   — |€d}t          |¦  «        ‚|pi }t          j        |fd | j        j        di |¤Ži|¤Ž}|                     |j        |i¦  «        S )aº  Query the `VectorStore` and retrieve the answer along with sources.

        Args:
            question: The question or prompt to query.
            llm: The language model to use. Must not be `None`.
            retriever_kwargs: Optional keyword arguments for the retriever.
            **kwargs: Additional keyword arguments forwarded to the chain.

        Returns:
            `dict` containing the answer and source documents.
        Nr$   r%   r   )r&   r   r'   r   r(   r)   Úquestion_keyr,   s          r   Úquery_with_sourcesz*VectorStoreIndexWrapper.query_with_sourcesh   s�   € ð$ ˆ;ð0ð õ & cÑ*Ô*Ð*Ø+Ð1¨rÐÝ+Ô;Øð
ð 
à3�dÔ&Ô3ÐGÐGÐ6FÐGÐGð
ð ð
ð 
ˆð
 �|Š|˜UÔ/°Ð:Ñ;Ô;Ð;r   c           	   ‹   óÀ   K  — |€d}t          |¦  «        ‚|pi }t          j        |fd | j        j        di |¤Ži|¤Ž}|                     |j        |i¦  «        ƒ d{V —†S )aÂ  Asynchronously query the `VectorStore` and retrieve the answer and sources.

        Args:
            question: The question or prompt to query.
            llm: The language model to use. Must not be `None`.
            retriever_kwargs: Optional keyword arguments for the retriever.
            **kwargs: Additional keyword arguments forwarded to the chain.

        Returns:
            `dict` containing the answer and source documents.
        Nr$   r%   r   )r&   r   r'   r   r(   r2   r5   r,   s          r   Úaquery_with_sourcesz+VectorStoreIndexWrapper.aquery_with_sources‹   s£   è è € ð$ ˆ;ð0ð õ & cÑ*Ô*Ð*Ø+Ð1¨rÐÝ+Ô;Øð
ð 
à3�dÔ&Ô3ÐGÐGÐ6FÐGÐGð
ð ð
ð 
ˆð
 —]’] EÔ$6¸Ð#AÑBÔBÐBÐBÐBÐBÐBÐBÐBr   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   Úmodel_configÚstrr   Údictr   r0   r3   r6   r8   r   r   r   r   r      só  € € € € € € Ø9Ð9àÐÐÑà�:Ø $Øðñ ô €Lð )-Ø26ð	!Kð !Kàð!Kð  Ñ%ð!Kð ˜s C˜xœ.¨4Ñ/ð	!Kð
 ð!Kð 
ð!Kð !Kð !Kð !KðL )-Ø26ð	!Tð !Tàð!Tð  Ñ%ð!Tð ˜s C˜xœ.¨4Ñ/ð	!Tð
 ð!Tð 
ð!Tð !Tð !Tð !TðL )-Ø26ð	!<ð !<àð!<ð  Ñ%ð!<ð ˜s C˜xœ.¨4Ñ/ð	!<ð
 ð!<ð 
ð!<ð !<ð !<ð !<ðL )-Ø26ð	!Cð !Càð!Cð  Ñ%ð!Cð ˜s C˜xœ.¨4Ñ/ð	!Cð
 ð!Cð 
ð!Cð !Cð !Cð !Cð !Cð !Cr   r   c                  ó”   — ddl } 	 ddlm} n$# t          $ r}d}t          |¦  «        |‚d}~ww xY w|                      dd¬¦  «         |S )zGet the `InMemoryVectorStore`.r   N)ÚInMemoryVectorStorezBPlease install langchain-community to use the InMemoryVectorStore.z¨Using InMemoryVectorStore as the default vectorstore.This memory store won't persist data. You should explicitlyspecify a VectorStore when using VectorstoreIndexCreatoré   )Ú
stacklevel)ÚwarningsÚ)langchain_community.vectorstores.inmemoryrB   ÚImportErrorÚwarn)rE   rB   Úer.   s       r   Ú_get_in_memory_vectorstorerJ   ¯   s‰   € à€O€O€Oð&ØQÐQÐQÐQÐQÐQÐQøÝð &ð &ð &ØRˆÝ˜#ÑÔ AÐ%øøøøð&øøøð ‡M‚Mð	Cð ð	 ñ ô ð ð Ðs   † �
.—)©.c                   ó  — e Zd ZU dZ ee¬¦  «        Zee         e	d<   e
e	d<    ee¬¦  «        Zee	d<    ee¬¦  «        Zee	d<    edd¬	¦  «        Zd
ee         defd„Zd
ee         defd„Zdee         defd„Zdee         defd„ZdS )ÚVectorstoreIndexCreatorzLogic for creating indexes.)Údefault_factoryÚvectorstore_clsÚ	embeddingÚtext_splitterÚvectorstore_kwargsTr   r   Úloadersr   c                 óˆ   — g }|D ])}|                      |                     ¦   «         ¦  «         Œ*|                      |¦  «        S )z÷Create a `VectorStore` index from a list of loaders.

        Args:
            loaders: A list of `BaseLoader` instances to load documents.

        Returns:
            A `VectorStoreIndexWrapper` containing the constructed vectorstore.
        )ÚextendÚloadÚfrom_documents©r-   rR   ÚdocsÚloaders       r   Úfrom_loadersz$VectorstoreIndexCreator.from_loadersÐ   sI   € ð ˆØð 	'ð 	'ˆFØ�KŠK˜Ÿš™œÑ&Ô&Ð&Ð&Ø×"Ò" 4Ñ(Ô(Ð(r   c              ƒ   ó¸   K  — g }|D ]9}|                      d„ |                     ¦   «         2 ¦   «         ƒ d{V —†¦  «         Œ:|                      |¦  «        ƒ d{V —†S )a  Asynchronously create a `VectorStore` index from a list of loaders.

        Args:
            loaders: A list of `BaseLoader` instances to load documents.

        Returns:
            A `VectorStoreIndexWrapper` containing the constructed vectorstore.
        c              “   ó"   K  — g | 3 d {V —†}|‘Œ
6 S )Nr   )Ú.0Údocs     r   ú
<listcomp>z9VectorstoreIndexCreator.afrom_loaders.<locals>.<listcomp>é   s.   è è € ÐBÐBÐBÐBÐBÐBÐBÐB s˜ÐBÐBÐBÐBs   …N)rT   Ú
alazy_loadÚafrom_documentsrW   s       r   Úafrom_loadersz%VectorstoreIndexCreator.afrom_loadersÞ   s†   è è € ð ˆØð 	Dð 	DˆFØ�KŠKÐBÐB¨f×.?Ò.?Ñ.AÔ.AÐBÑBÔBÐBÐBÐBÐBÐBÐBÑCÔCÐCÐCØ×)Ò)¨$Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/r   Ú	documentsc                 ó’   — | j                              |¦  «        } | j        j        || j        fi | j        ¤Ž}t          |¬¦  «        S )zåCreate a `VectorStore` index from a list of documents.

        Args:
            documents: A list of `Document` objects.

        Returns:
            A `VectorStoreIndexWrapper` containing the constructed vectorstore.
        ©r   )rP   Úsplit_documentsrN   rV   rO   rQ   r   ©r-   rc   Úsub_docsr   s       r   rV   z&VectorstoreIndexCreator.from_documentsì   s^   € ð Ô%×5Ò5°iÑ@Ô@ˆØ9�dÔ*Ô9ØØŒNð
ð 
ð Ô%ð
ð 
ˆõ
 '°;Ð?Ñ?Ô?Ð?r   c              ƒ   ó¢   K  — | j                              |¦  «        } | j        j        || j        fi | j        ¤Žƒ d{V —†}t          |¬¦  «        S )zôAsynchronously create a `VectorStore` index from a list of documents.

        Args:
            documents: A list of `Document` objects.

        Returns:
            A `VectorStoreIndexWrapper` containing the constructed vectorstore.
        Nre   )rP   rf   rN   ra   rO   rQ   r   rg   s       r   ra   z'VectorstoreIndexCreator.afrom_documentsý   s€   è è € ð Ô%×5Ò5°iÑ@Ô@ˆØ@˜DÔ0Ô@ØØŒNð
ð 
ð Ô%ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ˆõ
 '°;Ð?Ñ?Ô?Ð?r   N)r9   r:   r;   r<   r   rJ   rN   Útyper   r=   r   r   rP   r
   r@   rQ   r   r>   Úlistr   r   rZ   rb   r   rV   ra   r   r   r   rL   rL   Á   s`  € € € € € € Ø%Ð%à).¨Ø2ð*ñ *ô *€O�T˜+Ô&ð ð ñ ð ÐÐÑØ"' %Ð8RÐ"SÑ"SÔ"S€M�<ÐSÐSÑSØ$˜u°TÐ:Ñ:Ô:Ð˜Ð:Ð:Ñ:à�:Ø $Øðñ ô €Lð
) D¨Ô$4ð )Ð9Pð )ð )ð )ð )ð0¨4°
Ô+;ð 0Ð@Wð 0ð 0ð 0ð 0ð@¨¨X¬ð @Ð;Rð @ð @ð @ð @ð"@à˜”>ð@ð 
!ð@ð @ð @ð @ð @ð @r   rL   N)r<   Útypingr   Úlangchain_core.document_loadersr   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.language_modelsr   Úlangchain_core.vectorstoresr   Úlangchain_text_splittersr	   r
   Úpydanticr   r   r   Ú2langchain_classic.chains.qa_with_sources.retrievalr   Ú*langchain_classic.chains.retrieval_qa.baser   r   r   rj   rJ   rL   r   r   r   ú<module>rv      s£  ðØ -Ð -à Ð Ð Ð Ð Ð à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø <Ð <Ð <Ð <Ð <Ð <Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1ðð ð ð ð ð ð CÐ BÐ BÐ BÐ BÐ BðL Lð Lð Lð Lð Lð
TCð TCð TCð TCð TC˜iñ TCô TCð TCðn D¨Ô$5ð ð ð ð ð$N@ð N@ð N@ð N@ð N@˜iñ N@ô N@ð N@ð N@ð N@r   