o
    Zh]                     @   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dee	 fddZdee	ef de	fddZdee dee	eee e	f f fddZdee	ef dee	eee e	f f fddZdee	ef dee	eee e	f f fddZdee	ef dee	e	f dee fddZdee	ef dee	e	f ddfddZdee	ef dee	e	f ddfdd Zd%d!d"Z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   S/var/www/html/lang_env/lib/python3.10/site-packages/langchain/memory/vectorstore.pymemory_variables*   s   z+VectorStoreRetrieverMemory.memory_variablesinputsc                 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docsc                 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>:   s    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                    s0   |  |}|| }| j|I dH }| |S )r+   N)r    r   Zainvoker*   r,   r   r   r   aload_memory_variablesH   s
   

z1VectorStoreRetrieverMemory.aload_memory_variablesoutputsc                    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   s    z>VectorStoreRetrieverMemory._form_documents.<locals>.<dictcomp>c                 S   s   g | ]\}}| d | qS )z: r   r1   r   r   r   r'   Y   s    z>VectorStoreRetrieverMemory._form_documents.<locals>.<listcomp>r"   r#   )setr   addr   itemslistr(   r	   )r   r   r0   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)r9   r   Zadd_documentsr   r   r0   Z	documentsr   r   r   save_context`   s   z'VectorStoreRetrieverMemory.save_contextc                    s$   |  ||}| j|I dH  dS r:   )r9   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)r   N)!__name__
__module____qualname____doc__r   r   r
   __annotations__r   strr   r   r   booltupler   r   propertyr   r   r   r   r    r	   r   r*   r.   r/   r9   r<   r=   r?   r@   r   r   r   r   r      s^   
 	



	

	


&



r   N)rD   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     