
    h                        S r SSKrSSKJr  SSKJr   " S S5      r\S:X  a  \" S5        \" S	5        \" S5        \" 5       r\R                  S
SSS5        \R                  S
SSS5        \R                  S
SSS5        \R                  SSSS5        \" S\R                  S    35        \R                  S
5      r\(       a   \" S\S    35        \" S\S   S   S 35        \" S5        gg)z>
Learning Loops - Learn from experience and improve over time
    N)Path)datetimec                   <    \ rS rSrS
S jrS rS rS rS rS r	Sr
g	)LearningLoop	   c                     [        U5      U l        U R                  R                  SSS9  / U l        U R	                  5       U l        g )NT)parentsexist_ok)r   data_dirmkdirexperiencesload_knowledge	knowledge)selfr   s     C/home/james-whalen/eden-agi-project/core/autonomy/learning_loops.py__init__LearningLoop.__init__
   s<    XD48,,.    c                     U R                   S-  nUR                  5       (       a,  [        US5       n[        R                  " U5      sSSS5        $ 0 0 SSS.$ ! , (       d  f       N= f)zLoad accumulated knowledgeknowledge_base.jsonrN        r   )successful_patternsfailed_patternsimprovement_ratetotal_experiences)r   existsopenjsonloadr   kb_filefs      r   r   LearningLoop.load_knowledge   s^    --"77>>gs#qyy| $# $&! #!"	
 	
 $#s   A
A&c                     U R                   S-  n[        US5       n[        R                  " U R                  USS9  SSS5        g! , (       d  f       g= f)zPersist learned knowledger   w   )indentN)r   r   r   dumpr   r!   s      r   save_knowledgeLearningLoop.save_knowledge   s=    --"77'31IIdnna2  s   !A
Ac                    [         R                  " 5       R                  5       UUUUS.nU R                  R	                  U5        U R
                  S==   S-  ss'   U SU 3nU(       a?  X`R
                  S   ;  a  SU R
                  S   U'   U R
                  S   U==   S-  ss'   O>X`R
                  S   ;  a  SU R
                  S   U'   U R
                  S   U==   S-  ss'   U R                  5         U$ )z!Record an experience for learning)	timestamp	task_typeapproachsuccessoutcomer      :r   r   r   )r   now	isoformatr   appendr   r*   )r   r.   r/   r0   r1   
experiencepattern_keys          r   record_experienceLearningLoop.record_experience#   s     "113" 

 	
+*+q0+ #1XJ/..1F"GGEF45kBNN01+>!C>..1B"CCAB01+>NN,-k:a?:r   c                 z   0 nU R                   S   R                  5        Hm  u  p4UR                  US-   5      (       d  M   UR                  SS5      S   nU R                   S   R	                  US5      nXF-   S:  a  XDU-   -  OSnUUUS.X%'   Mo     U(       d  g[        UR                  5       S S	9nUS   US   S
.$ )z0Get the most successful approach for a task typer   r3   r2   r   r   )	successesfailuressuccess_rateNc                 "    U S   S   U S   S   4$ )Nr2   r>   r<    )xs    r   <lambda>0LearningLoop.get_best_approach.<locals>.<lambda>P   s    ad>6JAaDQ\L]5^r   )key)r/   stats)r   items
startswithsplitgetmax)	r   r.   
candidatespatterncountr/   r=   r>   bests	            r   get_best_approachLearningLoop.get_best_approach=   s    
"nn-BCIIKNG!!)c/22"==a03>>*;<@@!L>C>NRS=Su(89YZ!& ($0(
$ L  :##%+^_ Gd1g66r   c                 2   [        U R                  5      S:  a  gU R                  SS nU R                  SS n[        S U 5       5      [        U5      -  n[        S U 5       5      [        U5      -  nXC-
  nXPR                  S'   U R	                  5         U$ )z(Calculate learning improvement over time
   r   Nic              3   <   #    U  H  oS    (       d  M  Sv   M     g7fr0   r2   Nr@   .0es     r   	<genexpr>5LearningLoop.calculate_improvement.<locals>.<genexpr>\   s      EHq)H   	c              3   <   #    U  H  oS    (       d  M  Sv   M     g7frT   r@   rU   s     r   rX   rY   ]   s     C7a	l7rZ   r   )lenr   sumr   r*   )r   first_10last_10first_success_ratelast_success_rateimprovements         r   calculate_improvement"LearningLoop.calculate_improvementS   s    t 2% ##CR(""34(  EH EEHUC7CCc'lR'<-8)*r   )r   r   r   N)zdata/learning)__name__
__module____qualname____firstlineno__r   r   r*   r9   rO   rc   __static_attributes__r@   r   r   r   r   	   s     /
347,r   r   __main__zF======================================================================zLEARNING LOOPS TESTfile_creationdirect_writeTzFile created successfullytemplate_useFzTemplate not foundcode_generation	iterativez
Code worksu   
📊 Total experiences: r   u'   
🎯 Best approach for file_creation: r/   z   Success rate: rE   r>   z.1%u   
✅ LEARNING LOOPS OPERATIONAL)__doc__r   pathlibr   r   r   re   printloopr9   r   rO   rN   r@   r   r   <module>rt      s     Z Zx z	(O	
 	(O>D 	?NDB]^?NECWX?NDB]^,k4N	&t~~6I'J&K
LM!!/2D8j9I8JKL!$w-"?!DEF	
,-) r   