
    Lh<                        S r SSKrSSKrSSKrSSKrSSKJrJrJrJ	r	J
r
  SSKJr  SSKJrJr  SSKr\ " S S5      5       r " S S	5      r " S
 S5      r " S S5      r " S S5      r\S:X  Gak  \" 5       r\R.                  R1                  SS5        \R.                  R1                  SS5        \R.                  R1                  S/ SQ5        \R2                  R5                  SSSSS.5        \R.                  R7                  SSS.S9r\" S \R<                   35        \R.                  R1                  SS!5        \R.                  R1                  SS"5        \" S#5        \R.                  R?                  \R<                  5        \" S$\R.                  RA                  S5       35        \" S%\RC                  5       -   5        \RD                  RG                  5         gg)&z
Eden Core - State Management & Persistence System
Addresses: State consistency, crash recovery, data persistence, rollback capabilities
    N)AnyCallableDictListOptional)datetime)	dataclassasdictc                   n    \ rS rSr% Sr\\S'   \\S'   \\\4   \S'   \\\4   \S'   \\S'   S\	4S	 jr
S
rg)StateSnapshot   zImmutable state snapshotsnapshot_id	timestamp
state_datametadatachecksumreturnc                     [         R                  " U R                  SS9n[        R                  " UR                  5       5      R                  5       nX R                  :H  $ )z(Verify snapshot integrity using checksumT	sort_keys)jsondumpsr   hashlibsha256encode	hexdigestr   )selfdata_strcomputed_checksums      </home/james-whalen/eden-agi-project/eden_state_management.pyverify_integrityStateSnapshot.verify_integrity   sB    ::doo>#NN8??+<=GGI MM11     N)__name__
__module____qualname____firstlineno____doc__str__annotations__r   r   boolr!   __static_attributes__r$   r#   r    r   r      s=    "NS#X38nM2$ 2r#   r   c                       \ rS rSrSrSS\4S jjrSS\S\S\4S jjr	SS\S
\S\4S jjr
SS\\   S\4S jjrS\S\4S jrSS\S\4S jjrS\4S jrS rS\\   4S jrSrg	)StateManager    z;Comprehensive state management with versioning and recovery	state_dirc                     Xl         0 U l        / U l        SU l        [        R
                  " USS9  U R                  5         g )Nd   Texist_ok)r1   current_statestate_historymax_historyosmakedirs_load_latest_state)r   r1   s     r    __init__StateManager.__init__#   s=    "-/24 	I- 	!r#   keyvaluecreate_snapshotc                     U R                   R                  U5      nX R                   U'   U(       a   U R                  SU[        U5      SS S.S9  gg)zUpdate a state valueupdateNr3   )	operationr>   	old_valuer   )r6   getr@   r*   )r   r>   r?   r@   rD   s        r    update_stateStateManager.update_state/   sX    &&**3/	"'3  % ^DS1+   r#   Ndefaultr   c                 8    U R                   R                  X5      $ )zGet a state value)r6   rF   )r   r>   rI   s      r    	get_stateStateManager.get_state;   s    !!%%c33r#   r   c                    [         R                  " [        R                  " 5       R	                  5        [        U R                  5       3R                  5       5      R                  5       SS n[        R                  " U R                  SS9n[         R                  " UR                  5       5      R                  5       n[        U[        R                  " 5       R	                  5       U R                  R                  5       U=(       d    0 US9nU R                  R                  U5        [        U R                  5      U R                  :  a  U R                  U R                  * S U l        U R!                  U5        U$ )z-Create an immutable snapshot of current stateNr   Tr   r   r   r   r   r   )r   r   r   now	isoformatlenr7   r   r   r   r   r6   r   copyappendr8   _save_snapshot)r   r   r   	state_strr   snapshots         r    r@   StateManager.create_snapshot?   s)   nn||~'')*3t/A/A+B*CDKKM

)+cr
 JJt11TB	>>)"2"2"45??A #lln..0))..0^
 	!!(+ t!!"T%5%55!%!3!3T5E5E4E4F!GD 	H%r#   r   c                 
   [        U R                  5       Hj  nUR                  U:X  d  M  UR                  5       (       d  [	        SU S35      eUR
                  R                  5       U l        U R                  SUS.S9    g   g)zRollback to a specific snapshotz	Snapshot  failed integrity checkrollback)rC   target_snapshotrE   TF)	reversedr7   r   r!   
ValueErrorr   rR   r6   r@   )r   r   rV   s      r    rollback_to_snapshot!StateManager.rollback_to_snapshot\   s     !3!34H##{20022$y=T%UVV%-%8%8%=%=%?"$$!+'2/$   5 r#   stepsc                     U[        U R                  5      :  a  gU R                  US-   *    nU R                  UR                  5      $ )z#Rollback a specific number of stepsF   )rQ   r7   r^   r   )r   r`   r[   s      r    rollback_stepsStateManager.rollback_stepsl   sE    C**++,,uqy\:(()D)DEEr#   rV   c           	      \   [         R                  R                  U R                  SUR                   S35      n[        US5       n[        R                  " UR                  UR                  UR                  UR                  UR                  S.USS9  SSS5        g! , (       d  f       g= f)zSave snapshot to disk	snapshot_z.jsonwrN      indentN)r9   pathjoinr1   r   openr   dumpr   r   r   r   )r   rV   filepathfs       r    rT   StateManager._save_snapshott   s    77<<)H<P<P;QQV0WX(C AII'33%//&11$--$--  !  s   AB
B+c                 z  ^  [         R                  R                  T R                  5      (       d  g[         R                  " T R                  5       Vs/ s H  oR                  S5      (       d  M  UPM     nnU(       d  gUR                  U 4S jS9  US   n [        [         R                  R                  T R                  U5      S5       n[        R                  " U5      n[        S0 UD6nUR                  5       (       aS  UR                  R                  5       T l        T R                   R#                  U5        [%        SUR&                   35        O[%        SUR(                   S	35        SSS5        gs  snf ! , (       d  f       g= f! [*         a!  n[%        S
[-        U5       35         SnAgSnAff = f)z$Load the most recent state from diskNrf   c                    > [         R                  R                  [         R                  R                  TR                  U 5      5      $ N)r9   rk   getmtimerl   r1   )xr   s    r    <lambda>1StateManager._load_latest_state.<locals>.<lambda>   s(    "''*:*:277<<XY;Z*[r#   )r>   rzLoaded state from zWarning: Snapshot rY   zError loading state: r$   )r9   rk   existsr1   listdir
startswithsortrm   rl   r   loadr   r!   r   rR   r6   r7   rS   printr   r   	Exceptionr*   )r   rp   snapshot_fileslatest_filedatarV   es   `      r    r;   StateManager._load_latest_state   sX   ww~~dnn--%'ZZ%?]%?<<P[C\!%?] 	 [\$R(	4bggll4>>;?Eyy|(040,,..)1)<)<)A)A)CD&&&--h7.x/A/A.BCD.x/C/C.DD[\] FE ^ FE  	4)#a&233	4sC   E90E94F B#E>0F >
FF F 
F:F55F:c                     U R                    Vs/ s H'  nUR                  UR                  UR                  S.PM)     sn$ s  snf )zGet history of state snapshots)r   r   r   )r7   r   r   r   )r   ss     r    get_state_historyStateManager.get_state_history   sJ     %%	' &a ==


 &	' 	' 's   .A )r6   r8   r1   r7   )z./eden_states)Trt   )rb   )r%   r&   r'   r(   r)   r*   r<   r   r,   rG   rK   r   r   r   r@   r^   intrc   rT   r;   r   r   r-   r$   r#   r    r/   r/       s    E
"# 
"
 
C 
$ 
4S 43 4# 4 - :   FC F F} 48'4: 'r#   r/   c            	           \ rS rSrSrSS\4S jjrSS\S\S\4S jjrSS\S\S
\S\4S jjr	S\S\S\
\   4S jrSS\S\S\4S jjrSrg	)PersistenceManager   z<Manage persistence of critical data with backup and recoverydata_dirc                     Xl         [        R                  R                  US5      U l        [        R
                  " USS9  [        R
                  " U R                  SS9  g )NbackupsTr4   )r   r9   rk   rl   
backup_dirr:   )r   r   s     r    r<   PersistenceManager.__init__   s=     '',,x;
Ht,
DOOd3r#   namer   formatc                    [         R                  R                  U R                  U SU 35      n[         R                  R	                  U5      (       a}  U S[
        R                  " 5       R                  S5       SU 3n[         R                  R                  U R                  U5      n[        R                  " XF5        U R                  X5        US:X  a+  [        US5       n[        R                  " X'SS9  SSS5        gUS	:X  a,  [        US
5       n[        R                  " X'5        SSS5        g[!        SU 35      e! , (       d  f       g= f! , (       d  f       g= f)z
Save data with automatic backup of previous version

Args:
    name: Data identifier
    data: Data to save
    format: 'json' or 'pickle'
._z%Y%m%d_%H%M%Sr   rg   rh   ri   NpicklewbzUnsupported format: )r9   rk   rl   r   r{   r   rO   strftimer   shutilcopy2_prune_backupsrm   r   rn   r   r]   )r   r   r   r   ro   backup_namebackup_pathrp   s           r    	save_dataPersistenceManager.save_data   s    77<<$q/AB 77>>(##!F!HLLN$;$;O$L#MQvhWK'',,tDKLL/ - Vh$		$!, %$xh%D$ &% 3F8<== %$ &%s   #EE
E
E!NrI   r   c           	      .   [         R                  R                  U R                  U SU 35      n US:X  a,  [	        US5       n[
        R                  " U5      sSSS5        $ US:X  a,  [	        US5       n[        R                  " U5      sSSS5        $  U$ ! , (       d  f       U$ = f! , (       d  f       U$ = f! [         aN  n[        SU S[        U5       35        U R                  X5      nUb  [        S	U 35        Us SnA$  SnAU$ SnAff = f)
z8Load data with automatic fallback to backup if corruptedr   r   rz   Nr   rbzError loading z: zLoaded from backup for )r9   rk   rl   r   rm   r   r   r   r   r   r*   _load_latest_backup)r   r   r   rI   ro   rp   r   backups           r    	load_dataPersistenceManager.load_data   s   77<<$q/AB	(C(A99Q< )(8#(D)Q!;;q> *) $  )(  *)   	N4&3q6(34 --d;F!/v67 " 	s_   B< B	B< #B< 5B*	B< 
B'"B< 'B< *
B94B< 9B< <
D=DDDc                    [         R                  " U R                  5       Vs/ s H8  nUR                  U5      (       d  M  UR	                  SU 35      (       d  M6  UPM:     nnU(       d  gUR                  SS9  [         R                  R                  U R                  US   5      n US:X  a,  [        US5       n[        R                  " U5      sSSS5        $ US:X  a,  [        US	5       n[        R                  " U5      sSSS5        $ gs  snf ! , (       d  f       g= f! , (       d  f       g= f! [         a!  n[        S
[        U5       35         SnAgSnAff = f)zLoad most recent backupr   NT)reverser   r   rz   r   r   zError loading backup: )r9   r|   r   r}   endswithr~   rk   rl   rm   r   r   r   r   r   r*   )r   r   r   rp   backup_fileslatest_backupr   s          r    r   &PersistenceManager._load_latest_backup   s     zz$//2
2!||D! &'jj1VH&> 2 	 

  	$'T__l1oF		--99Q< .-8#-.!!;;q> /. $!
 .- /. 	*3q6(34	sk   DDD)D5 ;D	D5 D5 -D$	D5 
D!D5 !D5 $
D2.D5 2D5 5
E ?EE keepc                    [         R                  " U R                  5       Vs/ s H8  nUR                  U5      (       d  M  UR	                  SU 35      (       d  M6  UPM:     nn[        U5      U:  a\  UR                  5         USU*   HA  n[         R                  " [         R                  R                  U R                  U5      5        MC     ggs  snf )z#Keep only the most recent N backupsr   N)
r9   r|   r   r}   r   rQ   r~   removerk   rl   )r   r   r   r   rp   r   
old_backups          r    r   !PersistenceManager._prune_backups   s     zz$//2
2!||D! &'jj1VH&> 2 	 

 |t#*6TE2
		"'',,t
CD 3 $
s   CCC)r   r   )z./eden_data)r   )r   N)
   )r%   r&   r'   r(   r)   r*   r<   r   r   r   r   r   r   r   r-   r$   r#   r    r   r      s    F4 4>c > >c ><c 3 # QT . S Xc] 2
E3 
E 
E3 
E 
Er#   r   c                   Z    \ rS rSrSrS\S\4S jrS\4S jr	S r
S	\4S
 jrS	\4S jrSrg)CrashRecoveryManageri  z+Handle crash recovery and graceful shutdownstate_managerpersistence_managerc                 8    Xl         X l        / U l        / U l        g rt   )r   r   recovery_logshutdown_hooks)r   r   r   s      r    r<   CrashRecoveryManager.__init__  s    *#6 (*.0r#   hookc                 :    U R                   R                  U5        g)z4Register a function to call during graceful shutdownN)r   rS   )r   r   s     r    register_shutdown_hook+CrashRecoveryManager.register_shutdown_hook  s    ""4(r#   c                    [        S5        U R                  R                  SSS.S9nU R                   H  n U" 5         M     U R                  R                  S[        R                  " 5       R                  5       UR                  SS	.5        [        S
5        g! [         a"  n[        S[        U5       35         SnAM  SnAff = f)z1Perform graceful shutdown with state preservationzInitiating graceful shutdown...shutdowngraceful)rC   reasonrE   zShutdown hook failed: Nlast_shutdown)r   r   typezShutdown complete)r   r   r@   r   r   r*   r   r   r   rO   rP   r   )r   rV   r   r   s       r    graceful_shutdown&CrashRecoveryManager.graceful_shutdown  s    /0 %%55# @
5  ''D9 ( 	  **?!113#//=
 	 	!"  9.s1vh7889s   B
C$CCr   c                     U R                   R                  S0 S9nU(       d  gUR                  S5      S:X  a  [        S5        g[        S5        g)	z$Check if system needs crash recoveryr   rI   Fr   r   z/Last shutdown was graceful - no recovery neededz'Crash detected - initiating recovery...T)r   r   rF   r   )r   r   s     r    check_crash_recovery)CrashRecoveryManager.check_crash_recovery2  sO    00::?TV:WV$
2CD78r#   c           	      T    U R                   R                  S0 S9nUR                  S5      nU(       ar  U R                  R	                  U5      nU(       aP  U R
                  R                  [        R                  " 5       R                  5       SUSS.5        [        SU 35        g[        S5        g	! [         ak  nU R
                  R                  [        R                  " 5       R                  5       SS	[        U5      S
.5        [        S[        U5       35         SnAg	SnAff = f)z+Perform crash recovery from last good stater   r   r   crash_recoveryT)r   r   r   successz#Successfully recovered to snapshot z Could not find recovery snapshotF)r   r   r   errorzRecovery failed: N)r   r   rF   r   r^   r   rS   r   rO   rP   r   r   r*   )r   r   r   r   r   s        r    perform_crash_recovery+CrashRecoveryManager.perform_crash_recovery@  s   	 44>>XZ>[M'++M:K,,AA+N%%,,%-\\^%=%=%? 0'2#'	.  ?}MN45 	$$%\\^557( Q	&  %c!fX./	s   B#B2 &B2 2
D'<A!D""D')r   r   r   r   N)r%   r&   r'   r(   r)   r/   r   r<   r   r   r   r,   r   r   r-   r$   r#   r    r   r     sB    51l 1I[ 1)8 )#4d  r#   r   c                   ,    \ rS rSrSrS rS\4S jrSrg)RobustStateSystemia  z4Unified state management system with full robustnessc                     [        5       U l        [        5       U l        [	        U R                  U R                  5      U l        U R
                  R                  5       (       a  U R
                  R                  5         g g rt   )r/   r   r   r   r   r   r   r   )r   s    r    r<   RobustStateSystem.__init__d  sd    )^#5#7 2$$
 3355668 6r#   r   c                 $   U R                   R                  5       nSS S[        R                  " 5       R	                  5        SS S[        U R                   R                  5       S[        U5       S3nUS	S
  H=  nUSUS    SUS    S3-  nUS   (       d  M!  USUS   R                  SS5       S3-  nM?     USS S3-  nU R                  R                  S	S
  H0  nUR                  S5      (       a  SOSnX% SUS    SUS    S3-  nM2     U$ )z$Generate comprehensive system reportz%
Eden Core - State Management Report
z2==================================================z
Generated: z

STATE MANAGEMENT:
z2--------------------------------------------------z
Current State Keys: z
State History: z snapshots

Recent Snapshots:
Nz  [r   z] r   
r   z    Operation: rC   zN/Az
RECOVERY LOG:
r   u   ✓u   ✗z [r   )
r   r   r   rO   rP   rQ   r6   rF   r   r   )r   historyreportrV   logstatuss         r    get_system_report#RobustStateSystem.get_system_reportp  sZ   $$668 	LLN$$&' (  	++99:; <G~   HH[12"Xm5L4MRPPF
##OHZ,@,D,D[RW,X+YY[\\ %
 	%fXR00&&33BC8C!ggi00UeF3{#3"4Bs6{m2FFF 9 r#   )r   r   r   N)	r%   r&   r'   r(   r)   r<   r*   r   r-   r$   r#   r    r   r   a  s    >
93 r#   r   __main__learning_rategMbP?model_versionzv2.5capabilities)	reasoninglearningplanningconfigi gffffff?high)
max_tokenstemperaturesafety_leveltraining_checkpoint*   )rC   epochrE   zCreated snapshot: gMb@?zv2.6z%
Rolling back to previous snapshot...zLearning rate after rollback: r   )$r)   r   r   r9   r   typingr   r   r   r   r   r   dataclassesr	   r
   r   r   r/   r   r   r   r%   systemr   rG   r   r   r@   rV   r   r   r^   rK   r   r   r   r$   r#   r    <module>r      s  
   	  6 6  )  2 2 2C' C'LbE bEJS Sl) )Z z F %%ou=
%%ov>
%%n6[\ ((4  ##33*>3 H
 
x334
56 %%ov>
%%ov> 
24
--h.B.BC	*6+?+?+I+I/+Z*[
\] 
$))+
+, ++-I r#   