
    Mxit                     r    d Z ddlZddlZddlmZ ddlmZmZmZ dZdZ	d Z
ddZdd	Zdd
Zd Zd ZddZy)u   
The Hippocampus — Memory Encoding, Retrieval & Consolidation
Episodic memory for events, semantic memory for facts, retrieval for context.
    N)datetime)load_memorysave_memoryABSENCE_CATEGORIESd   333333?c                 r    t        j                  |  | j                               j                         d d S )N   )hashlibmd5encode	hexdigest)content	timestamps     6/home/workspace/ghojualamanchu-v3/brain/hippocampus.pymake_memory_idr      s3    ;;'9+.5578BBDSbII    c                 b   t               }t        | d   | d         | d   | d   | d   t        | d         dkD  r| d   dd dz   n| d   | d   d   | d   d	   | d
   d   | d
   d   t        |d      dddd}|d   j	                  d|       |d   dt
         |d<   |d   | d   d<   t        |       |S )zo
    Encode a signal as an episodic memory.
    Higher encoding_strength = stronger initial consolidation.
    	raw_inputreceived_at	signal_idP   Nz...amygdalaemotional_tagssaliencecortextopicsintent      ?r   F)idr   r   r   content_previewr   r   r   r   	retentionaccess_countconsolidateddecayedepisodicr    hippocampus	memory_id)r   r   lenmininsertMAX_EPISODICr   )signalencoding_strengthmemoryentrys       r   encode_episodicr1      s   
 ]F VK0&2GHK(M*+&?B6+CV?WZ\?\6+.s3e;bhitbu ,-=>:&z2"8,"8,*C0E  :a'
+M\:F: */tF=+&Lr   c                 &    t               }|d   d|  S )zGet last n episodic memories.r&   N)r   )nr/   s     r   retrieve_recentr4   2   s    ]F*bq!!r   c                   
 t               }| j                         
g }|d   D ]  }|j                  d      rd}
|d   j                         v r|dz  }t        
fd|j                  dg       D              r|dz  }t        
fd	|j                  d
g       D              r|dz  }|dkD  s|j	                  ||f        |j                  di       j                         D ]5  \  }}
|j                         v s|D ]  }|j	                  dd|df        7 |j                  d d       |d| D 	cg c]  }	|	d   	 c}	S c c}	w )zs
    Search episodic + semantic memory for relevance.
    Returns: list of (score, entry) sorted by relevance.
    r&   r%   r   r      c              3   &   K   | ]  }|v  
 y wN ).0tquery_lowers     r   	<genexpr>z search_memory.<locals>.<genexpr>F   s     IAqKI   r      c              3   &   K   | ]  }|v  
 y wr8   r9   )r:   topicr<   s     r   r=   z search_memory.<locals>.<genexpr>H   s     Iu#Ir>   r      semantic)typer   c                     | d   S )Nr   r9   )xs    r   <lambda>zsearch_memory.<locals>.<lambda>S   s
    qt r   T)keyreverseN)r   lowergetanyappenditemssort)queryr3   r/   resultsr0   scorecategoryfactsfactrr<   s             @r   search_memoryrW   7   sP   
 ]F++-KG
# +99Y%	*0022QJEI3CR)HIIQJEI8R1HIIQJE19NNE5>*+ "::j"5;;= K%(..** KJ4#HIJKK
 LL^TL2!"1+&QAaD&&&s   4Ec                    t               }| j                         }|d   dd D ]  }|j                  d      r|d   j                         |k(  r%|j                  dd      dz   |d<   t        |        y	||d   j                         v s|d   j                         |v s{|j                  dd      dz   |d<   t        |        y
 y)ul   
    How confident is the hippocampus that it has seen this exact signal before?
    Returns 0.0–1.0.
    r&   N   r%   r   r#   r   r?   gffffff?ffffff?g        )r   rJ   rK   r   )rP   r/   r<   r0   s       r   match_confidencer[   V   s    
 ]F++-K
#CR( 99Y!!#{2$)IIna$@1$DE.!%	*0022eI6F6L6L6NR]6]$)IIna$@1$DE.! r   c                     t               } g }g }| d   D ]  }|j                  d      r|j                  dd      dk\  rL|j                  d      s;d|d<   t        |j                  dd	      d
z   d      |d<   |j                  |d          |j                  dd	      dz
  |d<   |d   t        k  sd|d<   |j                  |d           t        |        ||dS )zk
    Daily consolidation pass: decay old memories, promote strong ones.
    Called by scheduled agent.
    r&   r%   r#   r   r6   r$   Tr"         ?g?r   r    g{Gz?)promotedr%   )r   rK   r*   rM   RETENTION_THRESHOLDr   )r/   r^   r%   r0   s       r   consolidater`   n   s    
 ]FHG
# (99Y 99^Q'1,UYY~5N$(E.!!$UYY{C%@3%F!LE+OOE$K( #YY{C84?k!44#E)NN5;'(   W55r   c                    | d   }| d   }|d   }t        d |d   D              }t        |j                               dkD  }|xs |dk\  xs |xr |}|dk  rdn|d	k  rd
nd}| j                  di       j                  dd      }	|	dk\  r|dz  }|| d   d<   t	        |d      | d   d<   t	        t        |      d      | d   d<   t        d      | d   d<   |rt        | |       | S )z
    Process a signal through hippocampus.
    Reads: signal['raw_input'], signal['amygdala'], signal['cortex']
    Writes: signal['hippocampus'] block
    Returns: modified signal
    r   r   r   c              3   $   K   | ]  }|d v 
 yw))neutralpeacefulNr9   )r:   r;   s     r   r=   zprocess.<locals>.<genexpr>   s     \Aq 77\s   r      r]   r   rZ   g?r   rcomplexk_indexr      r'   should_encoder6   r.   r[   retrieved_context)r.   )rL   r)   splitrK   roundr[   r4   r1   )
r-   force_encoderawr   r   high_emotionsubstantiveri   base_strengthrg   s
             r   processrr      s    
Cj!H 
#H\JZA[\\Lciik"R'K UHOU8TM $c>Cx#~3MjjR(,,Y:G!|-:F=/*16}a1HF=-.056Fs6KQ0OF=,-1@1CF=-.-@Mr   )r   )   )F)__doc__r   jsonr   brain.stater   r   r   r,   r_   r   r1   r4   rW   r[   r`   rr   r9   r   r   <module>rw      sK       D D JB"
'>068r   