a
    ~g]                     @   s   d Z ddlmZ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 e	d	d
ddG dd deZdS )z-Class for a VectorStore-backed memory object.    )AnyDictListOptionalSequenceUnion)
deprecated)Document)VectorStoreRetriever)Field)
BaseMemory)get_prompt_input_keyz0.3.1z1.0.0z_Please see the migration guide at: https://python.langchain.com/docs/versions/migrating_memory/)sinceremovalmessagec                   @   s  e Zd ZU dZeddZeed< dZe	ed< dZ
ee	 ed< d	Zeed
< eedZee	 ed< eee	 dddZee	ef e	dddZee ee	eee e	f f dddZee	ef ee	eee e	f f dddZee	ef ee	eee e	f f dddZee	ef ee	e	f ee dddZee	ef ee	e	f ddddZee	ef ee	e	f dddd Zddd!d"Zddd#d$Z dS )%VectorStoreRetrieverMemoryzStore the conversation history in a vector store and retrieves the relevant
    parts of past conversation based on the input.
    Texclude	retrieverhistory
memory_keyN	input_keyFreturn_docs)default_factoryexclude_input_keys)returnc                 C   s   | j gS )z?The list of keys emitted from the load_memory_variables method.)r   self r   a/var/www/html/emsaiapi.evdpl.com/venv/lib/python3.9/site-packages/langchain/memory/vectorstore.pymemory_variables*   s    z+VectorStoreRetrieverMemory.memory_variables)inputsr   c                 C   s   | j du rt|| jS | j S )z!Get the input key for the prompt.N)r   r   r    )r   r!   r   r   r   _get_prompt_input_key/   s    
z0VectorStoreRetrieverMemory._get_prompt_input_key)docsr   c                 C   s*   | j sddd |D }n|}| j|iS )N
c                 S   s   g | ]
}|j qS r   page_content).0docr   r   r   
<listcomp>:       zMVectorStoreRetrieverMemory._documents_to_memory_variables.<locals>.<listcomp>)r   joinr   )r   r#   resultr   r   r   _documents_to_memory_variables5   s    z9VectorStoreRetrieverMemory._documents_to_memory_variablesc                 C   s(   |  |}|| }| j|}| |S )Return history buffer.)r"   r   invoker-   r   r!   r   queryr#   r   r   r   load_memory_variables?   s    
z0VectorStoreRetrieverMemory.load_memory_variablesc                    s.   |  |}|| }| j|I dH }| |S )r.   N)r"   r   ainvoker-   r0   r   r   r   aload_memory_variablesH   s    
z1VectorStoreRetrieverMemory.aload_memory_variables)r!   outputsr   c                    sd   t | j  | j  fdd| D }dd t| t|  D }d|}t|dgS )z0Format context from this conversation to buffer.c                    s   i | ]\}}| vr||qS r   r   r'   kvr   r   r   
<dictcomp>X   r*   z>VectorStoreRetrieverMemory._form_documents.<locals>.<dictcomp>c                 S   s   g | ]\}}| d | qS )z: r   r6   r   r   r   r)   Y   s   z>VectorStoreRetrieverMemory._form_documents.<locals>.<listcomp>r$   r%   )setr   addr   itemslistr+   r	   )r   r!   r5   Zfiltered_inputstextsr&   r   r   r   _form_documentsQ   s    

z*VectorStoreRetrieverMemory._form_documentsc                 C   s   |  ||}| j| dS z.Save context from this conversation to buffer.N)r?   r   add_documentsr   r!   r5   	documentsr   r   r   save_context`   s    z'VectorStoreRetrieverMemory.save_contextc                    s"   |  ||}| j|I dH  dS r@   )r?   r   aadd_documentsrB   r   r   r   asave_contexte   s    z(VectorStoreRetrieverMemory.asave_contextc                 C   s   dS zNothing to clear.Nr   r   r   r   r   clearl   s    z VectorStoreRetrieverMemory.clearc                    s   dS rG   r   r   r   r   r   aclearo   s    z!VectorStoreRetrieverMemory.aclear)!__name__
__module____qualname____doc__r   r   r
   __annotations__r   strr   r   r   booltupler   r   propertyr   r    r   r   r"   r	   r   r-   r2   r4   r?   rD   rF   rH   rI   r   r   r   r   r      s6   
	



"r   N)rM   typingr   r   r   r   r   r   langchain_core._apir   langchain_core.documentsr	   langchain_core.vectorstoresr
   pydanticr   langchain.memory.chat_memoryr   langchain.memory.utilsr   r   r   r   r   r   <module>   s    