
    љi                         S SK r S SKrS SKrS SKJrJrJr  S SKJrJr  S SK	J
r
JrJr  \R                  " \5      r " S S\5      r " S S\5      rg)	    N)datetimetimezone	timedelta)ABCabstractmethod)ListDictUnionc            	           \ rS rSr\SS\\\\   4   S\S\\	   4S jj5       r
\SS\S\\	   S\4S	 jj5       r\S\S\4S
 j5       rSrg)ContextManager   
context_idlimitreturnc                    #    g 7fN )selfr   r   s      _/home/james-whalen/.local/lib/python3.13/site-packages/aiavatar/sts/llm/context_manager/base.pyget_historiesContextManager.get_histories           N	data_listcontext_schemac                    #    g 7fr   r   )r   r   r   r   s       r   add_historiesContextManager.add_histories   r   r   c                    #    g 7fr   r   )r   r   s     r   get_last_created_at"ContextManager.get_last_created_at   r   r   r   d   r   )__name__
__module____qualname____firstlineno__r   r
   strr   intr	   r   r   r   r    __static_attributes__r       r   r   r      s    eCcN.C C Z^_cZd   c d4j Z]   C H  r+   r   c                       \ rS rSrSS jrS rSS\\\\   4   S\	S\\
   4S jjrSS\S	\\
   S
\4S jjrS\S\4S jrSrg)SQLiteContextManager   c                 <    Xl         X l        U R                  5         g r   )db_pathcontext_timeoutinit_db)r   r0   r1   s      r   __init__SQLiteContextManager.__init__   s    .r+   c                 j   [         R                  " U R                  5      n U   UR                  S5        UR                  S5        S S S 5        UR                  5         g ! , (       d  f       N= f! [         a"  n[
        R                  SU 35         S nANIS nAff = f! UR                  5         f = f)Nau  
                    CREATE TABLE IF NOT EXISTS chat_histories (
                        id INTEGER PRIMARY KEY AUTOINCREMENT,
                        created_at TIMESTAMP NOT NULL,
                        context_id TEXT NOT NULL,
                        serialized_data JSON NOT NULL,
                        context_schema TEXT
                    )
                    z
                    CREATE INDEX IF NOT EXISTS idx_chat_histories_context_id_created_at
                    ON chat_histories (context_id, created_at)
                    zError at init_db: )sqlite3connectr0   execute	Exceptionlogger	exceptionclose)r   connexs      r   r2   SQLiteContextManager.init_db   s    t||,	 
 ! 4 JJL5 .  	81"677	8 JJLsL   A1 #A A1  
A.*A1 -B  .A1 1
B;BB  BB   B2r   r   r   c                 ^  #    [         R                  " U R                  5      n U(       d  [        S5      e/ n/ n[	        U[
        [        45      (       aE  SR                  S/[        U5      -  5      nUR                  SU S35        UR                  U5        O"UR                  S5        UR                  U5        U R                  S:  aZ  UR                  S5        [        R                  " [        R                  5      [!        U R                  S	9-
  nUR                  U5        UR                  U5        S
SR                  U5       S3nUR#                  5       n	U	R%                  U[        U5      5        U	R'                  5       n
U
R)                  5         U
 Vs/ s H  n[*        R,                  " US   5      PM     nnUUR/                  5         $ s  snf ! [0         a4  n[2        R5                  SU 35        / s S nAUR/                  5         $ S nAff = f! UR/                  5         f = f7f)Nzcontext_id is required,?zcontext_id IN ()zcontext_id = ?r   zcreated_at >= ?)secondszV
            SELECT serialized_data
            FROM chat_histories
            WHERE z AND z>
            ORDER BY id DESC
            LIMIT ?
            zError at get_histories: )r6   r7   r0   
ValueError
isinstancelisttuplejoinlenappendextendr1   r   nowr   utcr   cursorr8   fetchallreversejsonloadsr<   r9   r:   r;   )r   r   r   r=   where_clausesparamsplaceholderscutoff_timesqlrO   rowsrowresultsr>   s                 r   r   "SQLiteContextManager.get_histories>   s    t||,-	 !9::MF*tUm44"xxJ(?@$$|nA%FGj)$$%56j)##a'$$%67&ll8<<89TMaMa;bbk*MM%  <<./ 0C [[]FNN3f.??$D LLN59:Tctzz#a&)TG: JJL ;  	7t<=I JJL	
 JJLsY   !H-E7G #G>G H-G 
H!H:H;H ?H-HH H**H-Nr   r   c                   #    U(       d  g [         R                  " U R                  5      n / SQnS/[        U5      -  nSSR	                  U5       SSR	                  U5       S3n[
        R                  " [        R                  5      n/ n	U H-  n
UU[        R                  " U
SS9U4nU	R                  U5        M/     UR                  Xy5        UR                  5         UR%                  5         g ! [         a2  n[        R!                  S	U 35        UR#                  5          S nANHS nAff = f! UR%                  5         f = f7f)
N)
created_atr   serialized_datar   rB   z-
                INSERT INTO chat_histories (z, z) 
                VALUES (z)
            T)ensure_asciizError at add_histories: )r6   r7   r0   rJ   rI   r   rM   r   rN   rR   dumpsrK   executemanycommitr9   r:   r;   rollbackr<   )r   r   r   r   r=   columnsrV   rX   now_utcrecords	data_itemrecordr>   s                r   r   "SQLiteContextManager.add_historieso   s    t||,	WG53w</L--1YYw-?,@ A<01 2C
 ll8<<0GG&	JJyt<"	 v& ' S*KKM JJL  	7t<=MMOO	
 JJLs;   )EB4C1  E1
D-;(D(#D0 (D--D0 0EEc                 n  #    [         R                  " U R                  5      n SnUR                  5       nUR	                  X145        UR                  5       nU(       a  [        R                  " US   5      nO[        R                  nUR                  [        R                  S9UR                  5         $ ! [         a]  n[        R                  SU 35        [        R                  R                  [        R                  S9s S nAUR                  5         $ S nAff = f! UR                  5         f = f7f)Nz
            SELECT created_at
            FROM chat_histories
            WHERE context_id = ?
            ORDER BY id DESC
            LIMIT 1
            r   )tzinfozError at get_last_created_at: )r6   r7   r0   rO   r8   fetchoner   fromisoformatminreplacer   rN   r<   r9   r:   r;   )r   r   r=   rX   rO   rZ   last_created_atr>   s           r   r    (SQLiteContextManager.get_last_created_at   s     t||,	C [[]FNN3.//#C"*"8"8Q"@"*,,"**(,,*? JJL  	==bTBC<<''x||'<< JJL	=
 JJLsH   !D5BB6 %D56
D ADDD  D5DD   D22D5)r1   r0   )zaiavatar.dbi  r"   r   )r$   r%   r&   r'   r3   r2   r
   r(   r   r)   r	   r   r   r   r    r*   r   r+   r   r-   r-      sn    
>/eCcN.C /C /Z^_cZd /b#c #d4j #Z] #JC H r+   r-   )r6   rR   loggingr   r   r   abcr   r   typingr   r	   r
   	getLoggerr$   r:   r   r-   r   r+   r   <module>rw      sG       2 2 # $ $			8	$S T> Tr+   