
    i                    L    d dl mZ d dlmZ ddlmZmZmZ  G d d          ZdS )    )annotations)Any   )MemoryServicemake_idutcnowc                  H    e Zd ZddZddd
ZdddddZddZddZddZdS )MemoryEngineservicer   returnNonec                    || _         d S N)r   )selfr   s     >/Users/sebas/agents-database/src/shared_agent_memory/engine.py__init__zMemoryEngine.__init__	   s        Nlimit
int | Nonelist[dict[str, Any]]c           	        | j                                         }|
|d |         }g }|D ]}	 |                    |                     |                     | j                             |d         dd           O# t
          $ r:}| j                             |d         dt          |                     Y d }~d }~ww xY w|S )Nid	completed	extracted)outcomefailed)error_message)r   list_pending_eventsappend_process_event
mark_event	Exceptionstr)r   r   events	processedeventexcs         r   process_pendingzMemoryEngine.process_pending   s    1133FUF^F*,	 	W 	WEW  !4!4U!;!;<<<''d[+'VVVV W W W''dXSQTXX'VVVVVVVVWs   AA99
B=0B88B=)r   job_idr)   
str | Nonec               L   |r| j                             |          g}n| j                             |          }g }|D ]}| j                             |d                   }	 |                     |          }| j                             |d         d|d          d|           | j                             t                      |d         |                    d          |                    d	          |                    d
                    }| j         	                    |d         |t                      d|d          d           |
                    |d         d|d           *# t          $ r}	| j                             |d         d|d          di t          |	                     | j         	                    |d         t                      dt          |	                     |
                    |d         dt          |	          d           Y d }	~	d }	~	ww xY w|S )N)r   r   r   job_typez
 completed)statussummarystatscadenceinterval_minuteswindow_start
window_end)next_due_atlast_run_atlast_statuslast_summary)r)   r-   r/   r   z failed)r-   r.   r/   r   )r5   r6   r7   )r)   r-   error)r   get_maintenance_joblist_due_maintenance_jobscreate_maintenance_run_run_maintenance_jobfinish_maintenance_run_compute_next_duer   getupdate_maintenance_jobr   r"   r#   )
r   r   r)   jobsresultsjobrunr/   next_duer'   s
             r   run_due_maintenancez MemoryEngine.run_due_maintenance   sf    	GL44V<<=DD<999FFD(* '	] '	]C,55c$i@@C%]11#6633I&"::::	 4     <99HH	NGG.//GGN++GGL))  33I ( & +$'
O!?!?!? 4    #d){UZ[[\\\\ ] ] ]33I#":777"%c(( 4    33I & (!$S	 4    #d)xRUVYRZRZ[[\\\\\\\\] s   "DE((
H!2B$HH!rC   dict[str, Any]c                    |                     d          }|dk    r0| j                            |                     d          pi           S dd| dS )Nr,   consolidationmetadata)configTzunknown job_type )skippedreason)r?   r   consolidate_candidates)r   rC   r,   s      r   r<   z!MemoryEngine._run_maintenance_jobJ   s`    77:&&&&<66cggj>Q>Q>WUW6XXX+Ix+I+IJJJr   r&   c                   | j         j                                        5 }|                    d|d         f                                          }|t          |d                   t          |          }d d d            n# 1 swxY w Y   |d         }| j                             |          }| j                             t          d          d| 
                    |d                   d|d         |d	         ||d
d|d         |d         |d         | j                             |          d|d         t                      dd          }|d         |d         dS )Nz"SELECT * FROM sources WHERE id = ?	source_idcontentmemepisoderequested_scopeinboxsource_kindtitleg333333?g      ?
created_at
source_refr   zmemory-enginetrigger_type)ingested_byrZ   captured_at)r   typescoper-   rV   rW   rQ   r.   
confidence	freshnessobserved_atrY   evidence_ref	embeddingrJ   )event_id	memory_id)r   store
connectionexecutefetchoneKeyErrordict_make_summaryingestr   _normalize_scope_text_embeddingr   )r   r&   connsourcesource_dictrQ   r.   memorys           r   r    zMemoryEngine._process_eventP   s   \**,, 	'\\"F{I[H]^^ggiiF~u[1222v,,K		' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' i(,,,W55$$enn!..u5F/GHH!*=9$W-""! *<8),7 +D 1!\99'BB#2$).$9#)88  
 
. "$KfTlCCCs   ABBBrT   r#   c                    |dv r|S dS )N>   repoagentglobalprojectsessionry    )r   rT   s     r   rn   zMemoryEngine._normalize_scoper   s    OOO""yr   )r   r   r   r   r   )r   r   r   r   )r   r   r)   r*   r   r   )rC   rG   r   rG   )r&   rG   r   rG   )rT   r#   r   r#   )	__name__
__module____qualname__r   r(   rF   r<   r    rn   rz   r   r   r
   r
      s                :>TX . . . . . .`K K K K D  D  D  DD     r   r
   N)	
__future__r   typingr   r   r   r   r   r
   rz   r   r   <module>r      s    " " " " " "       3 3 3 3 3 3 3 3 3 3m m m m m m m m m mr   