a
    ag]                     @   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/)ZsinceZ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   j/var/www/html/cobodadashboardai.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   Z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   Zainvoker+   r-   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   r2   r   r   r   r'   Y   s   z>VectorStoreRetrieverMemory._form_documents.<locals>.<listcomp>r"   r#   )setr   addr   itemslistr)   r	   )r   r   r1   Zfiltered_inputsZ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   Zadd_documentsr   r   r1   Z	documentsr   r   r   save_context`   s    z'VectorStoreRetrieverMemory.save_contextc                    s"   |  ||}| j|I dH  dS r;   )r:   r   Zaadd_documentsr<   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 r?   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+   r/   r0   r:   r=   r>   r@   rA   r   r   r   r   r      s6   
	


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