
    Fd8
                    ~    d dl mZ d dlmZ d dlmZ d dlZd dlmZ d dl	m
Z
 ddlmZ d	d
lmZ  G d de          ZdS )    )annotations)Path)IteratorN)Config)logger   )
MemoryItem   )VectorMemoryProviderc                       e Zd ZU dZej        ej        z  Zded<   ded<   d fd
Z	ddZ
ddZddZddZddZd Zd Zd Z xZS )JSONFileMemoryz2Memory backend that stores memories in a JSON filer   	file_pathzlist[MemoryItem]memoriesconfigr   returnNonec                   t          |j                  }||j         dz  | _        | j                                         t          j        dj         d| j                    g | _        	 | 	                                 t          j        dt          | j                   d           dS # t          $ r6}t          j        d|            |                                  Y d}~dS d}~ww xY w)zxInitialize a class instance

        Args:
            config: Config object

        Returns:
            None
        z.jsonzInitialized z with index path zLoaded z MemoryItems from filez&Could not load MemoryItems from file: N)r   workspace_pathmemory_indexr   touchr   debug__name__r   
load_indexlen	Exceptionwarn
save_index)selfr   r   e	__class__s       ]C:\Users\Administrator\Downloads\Auto-GPT-master\autogpt\memory\vector\providers\json_file.py__init__zJSONFileMemory.__init__   s    f344'V-@*G*G*GGP9-PPPP	
 	
 	
 	OOLM3t}#5#5MMMNNNNN 	 	 	KDDDEEEOO	s   ->B- -
C-7+C((C-Iterator[MemoryItem]c                *    t          | j                  S N)iterr   r   s    r!   __iter__zJSONFileMemory.__iter__/   s    DM"""    xr	   boolc                    || j         v S r%   )r   )r   r*   s     r!   __contains__zJSONFileMemory.__contains__2   s    DM!!r)   intc                *    t          | j                  S r%   )r   r   r'   s    r!   __len__zJSONFileMemory.__len__5   s    4=!!!r)   itemc                    | j                             |           t          j        d|                                            |                                  t          | j                   S )NzAdding item to memory: )r   appendr   r   dumpr   r   r   r1   s     r!   addzJSONFileMemory.add8   sY    T"""<tyy{{<<===4=!!!r)   c                B    	 |                      |           d S #  Y d S xY wr%   )remover5   s     r!   discardzJSONFileMemory.discard>   s/    	KK	DDs    c                `    | j                                          |                                  dS )zClears the data in memory.N)r   clearr   r'   s    r!   r;   zJSONFileMemory.clearD   s,    r)   c           	        | j                                         st          j        d| j          d           dS | j                             d          5 }t          j        d| j          d           t          j        |                                          }|D ]&}| j        	                    t          di |           '	 ddd           dS # 1 swxY w Y   dS )z&Loads all memories from the index filezIndex file 'z' does not existNrz"Loading memories from index file '' )r   is_filer   r   openorjsonloadsreadr   r3   r	   )r   f
json_indexmemory_item_dicts       r!   r   zJSONFileMemory.load_indexI   s:   ~%%'' 	LHHHHIIIF^  %% 	ELOdnOOOPPPaffhh//J$. E E $$Z%C%C2B%C%CDDDDE	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   A-CCCc                   t          j        d| j                    | j                            d          5 }|                    t          j        | j        | j                            cd d d            S # 1 swxY w Y   d S )NzSaving memory index to file wb)option)	r   r   r   rA   writerB   dumpsr   SAVE_OPTIONS)r   rE   s     r!   r   zJSONFileMemory.save_indexT   s    DDNDDEEE^  && 	R!776<d>OPPPQQ	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	Rs   3A77A;>A;)r   r   r   r   )r   r#   )r*   r	   r   r+   )r   r.   )r1   r	   )r   
__module____qualname____doc__rB   OPT_SERIALIZE_NUMPYOPT_SERIALIZE_DATACLASSrM   __annotations__r"   r(   r-   r0   r6   r9   r;   r   r   __classcell__)r    s   @r!   r   r      s        <<-0NNLOOO     0# # # #" " " "" " " "" " " "     
	E 	E 	ER R R R R R Rr)   r   )
__future__r   pathlibr   typingr   rB   autogpt.configr   autogpt.logsr   memory_itemr	   baser   r   r?   r)   r!   <module>r\      s    " " " " " "              ! ! ! ! ! !       $ $ $ $ $ $ & & & & & &HR HR HR HR HR) HR HR HR HR HRr)   