
    Ig:                         d dl 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 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y)    )AnyDictListOptionalType)
BaseLoader)Document)
Embeddings)BaseLanguageModel)VectorStore)RecursiveCharacterTextSplitterTextSplitter)	BaseModel
ConfigDictField)RetrievalQAWithSourcesChain)RetrievalQAreturnc                      t        dd      S )Ni  r   )
chunk_sizechunk_overlap)r        Z/var/www/html/answerous/venv/lib/python3.12/site-packages/langchain/indexes/vectorstore.py_get_default_text_splitterr      s    )TKKr   c                      e Zd ZU dZeed<    edd      Z	 	 ddede	e
   d	e	eeef      d
edef
dZ	 	 ddede	e
   d	e	eeef      d
edef
dZ	 	 ddede	e
   d	e	eeef      d
edef
dZ	 	 ddede	e
   d	e	eeef      d
edef
dZy)VectorStoreIndexWrapperz-Wrapper around a vectorstore for easy access.vectorstoreTforbidarbitrary_types_allowedextraNquestionllmretriever_kwargskwargsr   c           	          |t        d      |xs i }t        j                  |fd | j                  j                  di |i|}|j                  |j                  |i      |j                     S )Query the vectorstore.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
llm = OpenAI(temperature=0)	retrieverr   )NotImplementedErrorr   from_chain_typer   as_retrieverinvoke	input_key
output_keyselfr#   r$   r%   r&   chains         r   queryzVectorStoreIndexWrapper.query   s     ;%.  ,1r++
84++88L;KL
PV
 ||U__h789I9IJJr   c           	         K   |t        d      |xs i }t        j                  |fd | j                  j                  di |i|}|j                  |j                  |i       d{   |j                     S 7 w)r(   Nr)   r*   r   )r+   r   r,   r   r-   ainvoker/   r0   r1   s         r   aqueryzVectorStoreIndexWrapper.aquery3   s      ;%.  ,1r++
84++88L;KL
PV
 mmU__h$?@@%BRBRSS@s   A&A<(A:)A<c           	          |t        d      |xs i }t        j                  |fd | j                  j                  di |i|}|j                  |j                  |i      S )+Query the vectorstore and get back sources.r)   r*   r   )r+   r   r,   r   r-   r.   question_keyr1   s         r   query_with_sourcesz*VectorStoreIndexWrapper.query_with_sourcesI   s~     ;%.  ,1r+;;
84++88L;KL
PV
 ||U//:;;r   c           	         K   |t        d      |xs i }t        j                  |fd | j                  j                  di |i|}|j                  |j                  |i       d{   S 7 w)r9   Nr)   r*   r   )r+   r   r,   r   r-   r6   r:   r1   s         r   aquery_with_sourcesz+VectorStoreIndexWrapper.aquery_with_sources_   s      ;%.  ,1r+;;
84++88L;KL
PV
 ]]E$6$6#ABBBBs   A&A/(A-)A/)NN)__name__
__module____qualname____doc__r   __annotations__r   model_configstrr   r   r   r   r4   r7   dictr;   r=   r   r   r   r   r      sm   7 $L ,059	KK '(K #4S>2	K
 K 
K2 ,059	TT '(T #4S>2	T
 T 
T2 ,059	<< '(< #4S>2	<
 < 
<2 ,059	CC '(C #4S>2	C
 C 
Cr   r   c                  n    ddl } 	 ddlm} | j	                  d       |S # t        $ r t        d      w xY w)zGet the InMemoryVectorStore.r   N)InMemoryVectorStorezBPlease install langchain-community to use the InMemoryVectorStore.zUsing InMemoryVectorStore as the default vectorstore.This memory store won't persist data. You should explicitlyspecify a vectorstore when using VectorstoreIndexCreator)warnings)langchain_community.vectorstores.inmemoryrG   ImportErrorwarn)rH   rG   s     r   _get_in_memory_vectorstorerL   v   sJ    
Q
 MM	C
   
P
 	

s    4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y)VectorstoreIndexCreatorzLogic for creating indexes.)default_factoryvectorstore_cls	embeddingtext_splittervectorstore_kwargsTr   r    loadersr   c                 t    g }|D ]!  }|j                  |j                                # | j                  |      S )(Create a vectorstore index from loaders.)extendloadfrom_documents)r2   rT   docsloaders       r   from_loadersz$VectorstoreIndexCreator.from_loaders   s9     	'FKK&	'""4((r   c                    K   g }|D ],  }|j                         2 3 d{   }|j                  |        | j                  |       d{   S 7 06 L7 w)rV   N)
alazy_loadappendafrom_documents)r2   rT   rZ   r[   docs        r   afrom_loadersz%VectorstoreIndexCreator.afrom_loaders   s`      	!F#..0 ! !cC 	! ))$///!0/s1   AAAA(A
AAAA	documentsc                     | j                   j                  |      } | j                  j                  || j                  fi | j
                  }t        |      S )*Create a vectorstore index from documents.r   )rR   split_documentsrP   rY   rQ   rS   r   r2   rc   sub_docsr   s       r   rY   z&VectorstoreIndexCreator.from_documents   sT    %%55i@9d**99dnn
(,(?(?
 ';??r   c                    K   | j                   j                  |      } | j                  j                  || j                  fi | j
                   d{   }t        |      S 7 w)re   Nrf   )rR   rg   rP   r`   rQ   rS   r   rh   s       r   r`   z'VectorstoreIndexCreator.afrom_documents   sd      %%55i@@D00@@dnn
(,(?(?
 
 ';??
s   AA&A$A&N)r>   r?   r@   rA   r   rL   rP   r   r   rB   r
   r   rR   r   rE   rS   r   rC   r   r   r   r\   rb   r	   rY   r`   r   r   r   rN   rN      s    %).2*OT+&  "'8R"SM<S$T:: $L
)D$4 )9P )04
+; 0@W 0@X @;R @@h@	 @r   rN   N)typingr   r   r   r   r   langchain_core.document_loadersr   langchain_core.documentsr	   langchain_core.embeddingsr
   langchain_core.language_modelsr   langchain_core.vectorstoresr   langchain_text_splittersr   r   pydanticr   r   r   *langchain.chains.qa_with_sources.retrievalr   "langchain.chains.retrieval_qa.baser   r   r   rL   rN   r   r   r   <module>ru      sg    2 2 6 - 0 < 3 Q 1 1 R :LL L`Ci `CFD$5 $.@i .@r   