§
    šžj]  ã                   ó|   — d Z ddlZddlZddlZddlZddlmZmZmZm	Z	  ej
        d¦  «        Z G d„ d¦  «        ZdS )uË   
Bá»™ TÆ° Duy Pháº£n TÆ° & Háº­u Kiá»ƒm Chiáº¿n Thuáº­t (Post-Encounter Reflection Critic)
PhÃ¢n tÃ­ch nguyÃªn nhÃ¢n gá»‘c rá»… (Root Cause Analysis) sau má»—i láº§n tá»­ tráº­n hoáº·c hoÃ n thÃ nh map.
é    N)ÚAnyÚDictÚListÚOptionalÚReflectionCriticc                   ó$  — e Zd ZdZ	 	 	 ddedee         defd„Zd	ed
ededee	ee
f                  de	ee
f         f
d„Zdee	ee
f                  de	ee
f         fd„Zd	ededede	ee
f         fd„Zddedee	ee
f                  fd„Zdd„Zdd„ZdS )r   uº   
    Bá»™ nÃ£o pháº£n tÆ° cáº¥p cao (Slow-Path Critic).
    Ä�Ã¡nh giÃ¡ sai láº§m, phÃ¡t hiá»‡n Ä‘iá»ƒm yáº¿u cá»§a build/chiáº¿n thuáº­t vÃ  tá»± Ä‘á»™ng Ä‘Ãºc káº¿t kinh nghiá»‡m.
    úcaptures/agent_memory.jsonNúgemini-3.8-flashÚmemory_fileÚapi_keyÚ
model_namec                 ó�   — || _         |pt          j        dd¦  «        | _        || _        g | _        |                      ¦   «          d S )NÚGEMINI_API_KEYÚ )r   ÚosÚgetenvr   r   Úlessons_historyÚ_load_memory)Úselfr   r   r   s       ú<C:\Projects\AutoPOE2\src\agentic_engine\reflection_critic.pyÚ__init__zReflectionCritic.__init__   sL   € ð 'ˆÔØÐA¥"¤)Ð,<¸bÑ"AÔ"AˆŒØ$ˆŒØ57ˆÔØ×ÒÑÔÐÐÐó    Ú	area_nameÚ
area_levelÚkiller_infoÚblackbox_ticksÚreturnc           
      óN  — |                       |¦  «        }t          j        d¦  «        d|||||                     dd¦  «        ddœ}| j                             |¦  «         |                      ¦   «          t                               d|                     d¦  «        › �¦  «         |S )	Nú%Y/%m/%d %H:%M:%SÚPLAYER_DEATHÚrecommendationu   Cáº©n trá»�ng duy trÃ¬ cá»± ly.T)Ú	timestampÚ
event_typer   r   r   Úlocal_diagnosisÚtactical_adjustmentÚverified_in_liveu@   [ReflectionCritic] Ä�Ã£ Ä‘Ãºc káº¿t bÃ i há»�c sau tá»­ tráº­n: Úsummary)	Ú_diagnose_blackbox_ticksÚtimeÚstrftimeÚgetr   ÚappendÚ_save_memoryÚloggerÚinfo)r   r   r   r   r   Ú
local_diagÚlessons          r   Úanalyze_death_eventz$ReflectionCritic.analyze_death_event!   s³   € ð ×2Ò2°>ÑBÔBˆ
õ œÐ':Ñ;Ô;Ø(Ø"Ø$Ø&Ø)Ø#-§>¢>Ð2BÐDeÑ#fÔ#fØ $ð	
ð 	
ˆð 	Ô×#Ò# FÑ+Ô+Ð+Ø×ÒÑÔÐÝ�ŠÐrÐWa×WeÒWeÐfoÑWpÔWpÐrÐrÑsÔsÐsØˆr   Úticksc                 ó,  — |rt          |¦  «        dk     rddddœS |d         }|d         }|                     dd¦  «        |                     dd¦  «        z
  }t          d	|                     d
d¦  «        |                     d
d¦  «        z
  dz  ¦  «        }||z  }t          d„ |D ¦   «         ¦  «        }|dk    s+|t          d|                     dd¦  «        ¦  «        z  dk    rd|› d|d›d|d›d�dddœS |dk    r
d|› d�dddœS d|› d|d›d�d d!dœS )"Né   uB   KhÃ´ng Ä‘á»§ dá»¯ liá»‡u telemetry há»™p Ä‘en Ä‘á»ƒ cháº©n Ä‘oÃ¡n.ÚUNKNOWNu    Duy trÃ¬ phÃ²ng thá»§ cÆ¡ báº£n.)r'   Ú
root_causer!   r   éÿÿÿÿÚhpg      à?Útimestamp_msg     @�@c              3   óB   K  — | ]}|                      d d¦  «        V — ŒdS )Úmonsters_countr   N)r+   )Ú.0Úts     r   ú	<genexpr>z<ReflectionCritic._diagnose_blackbox_ticks.<locals>.<genexpr>G   s1   è è € ÐEÐE¸!˜1Ÿ5š5Ð!1°1Ñ5Ô5ÐEÐEÐEÐEÐEÐEr   iÜ  é   Úmax_hpg333333ã?u3   Cháº¿t do Sá»�C SÃ�T THÆ¯Æ NG Ä�á»˜T NGá»˜T (Sá»¥t z
 HP trong z.1fu   s, DPS nháº­n vÃ o: z.0fz).ÚBURST_SLAM_DAMAGEur   TÄƒng Ä‘á»™ nháº¡y nÃ© Iframe Dodge (háº¡ burst_dodge_threshold xuá»‘ng 18%) vÃ  bá»• sung 100% Spell Suppression.é   u+   Cháº¿t do Bá»Š Báº¦Y QUÃ�I Ã�P Báº¢O VÃ‚Y (u    quÃ¡i váº­t xung quanh).ÚSWARM_SURROUNDEDus   KÃ­ch hoáº¡t KITE_STABILIZE sá»›m hÆ¡n khi sá»‘ lÆ°á»£ng quÃ¡i >= 5, ná»›i cá»± ly tháº£ diá»�u lÃªn 42 Ä‘Æ¡n vá»‹.u4   Cháº¿t do SÃ�T THÆ¯Æ NG DUY TRÃŒ / BÃ€O MÃ’N (Sá»¥t zs).ÚATTRITION_OR_DOTue   Kiá»ƒm tra KhÃ¡ng Há»—n Loáº¡n (Chaos Res) vÃ  nÃ¢ng ngÆ°á»¡ng tá»± Ä‘á»™ng bÆ¡m bÃ¬nh mÃ¡u lÃªn 65%.)Úlenr+   Úmax)r   r3   Ú
first_tickÚ	last_tickÚhp_dropÚ
duration_sÚ	dps_takenÚmonsters_maxs           r   r(   z)ReflectionCritic._diagnose_blackbox_ticks:   sÅ  € Øð 	�˜E™
œ
 Qš˜à_Ø'Ø"Dðð ð ð ˜1”Xˆ
Ø˜"”Iˆ	Ø—.’.  qÑ)Ô)¨I¯MªM¸$ÀÑ,BÔ,BÑBˆÝ˜˜yŸ}š}¨^¸QÑ?Ô?À*Ç.Â.ÐQ_ÐabÑBcÔBcÑcÐgmÑmÑnÔnˆ
Ø˜jÑ(ˆ	ÝÐEÐE¸uÐEÑEÔEÑEÔEˆà�tÒÐ ­#¨a°·²ÀÈ!Ñ1LÔ1LÑ*MÔ*MÑ MÐPSÒ SÐ Sð ZÐQXð  Zð  ZÐdnð  Zð  Zð  Zð  IRð  Zð  Zð  Zð  ZØ1ð #Wðð ð ð
 ˜QÒÐàpÈÐpÐpÐpØ0ð #Xðð ð ð yÐRYÐxÐxÐeoÐxÐxÐxÐxØ0ð #Jðð ð r   rK   Úpeak_dpsc                 óÎ   — |dk    rdn	|dk    rdnd}t          j        d¦  «        d|||||dk    rdnd	d
œ}| j                             |¦  «         |                      ¦   «          |S )NéZ   u   XUáº¤T Sáº®Cé´   u   TRUNG BÃŒNHu   CHáº¬Mr   ÚMAP_COMPLETEDu1   Duy trÃ¬ cáº¥u hÃ¬nh chiáº¿n Ä‘áº¥u hiá»‡n táº¡i.u>   Táº­p trung nÃ¢ng DPS Ä‘á»ƒ rÃºt ngáº¯n thá»�i gian clear map.)r"   r#   r   Úduration_secondsrN   Úefficiency_tierr!   )r)   r*   r   r,   r-   )r   r   rK   rN   Ú
efficiencyr1   s         r   Úanalyze_map_completionz'ReflectionCritic.analyze_map_completion\   s—   € Ø'1°RÒ'7Ð'7�^�^ÈzÐ]`ÒO`ÐO`¸m¸mÐfnˆ
åœÐ':Ñ;Ô;Ø)Ø"Ø *Ø Ø)ØU_ÐcqÒUqÐUqÐQÐQð  xxð
ð 
ˆð 	Ô×#Ò# FÑ+Ô+Ð+Ø×ÒÑÔÐØˆr   é   Úlimitc                 ó"   — | j         | d …         S )N)r   )r   rX   s     r   Úget_recent_lessonsz#ReflectionCritic.get_recent_lessonsk   s   € ØÔ# U F G GÔ,Ð,r   c                 óP  — t           j                             | j        ¦  «        r�	 t	          | j        dd¬¦  «        5 }t          j        |¦  «        | _        d d d ¦  «         d S # 1 swxY w Y   d S # t          $ r(}t           
                    d|› �¦  «         Y d }~d S d }~ww xY wd S )NÚrúutf-8©Úencodingu.   [ReflectionCritic] Lá»—i Ä‘á»�c agent_memory: )r   ÚpathÚexistsr   ÚopenÚjsonÚloadr   Ú	Exceptionr.   Úerror©r   ÚfÚes      r   r   zReflectionCritic._load_memoryn   s  € ÝŒ7�>Š>˜$Ô*Ñ+Ô+ð 	SðSÝ˜$Ô*¨C¸'ÐBÑBÔBð 8ÀaÝ+/¬9°Q©<¬<�DÔ(ð8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8ð 8ð 8øåð Sð Sð SÝ—’ÐQÈaÐQÐQÑRÔRÐRÐRÐRÐRÐRÐRÐRøøøøðSøøøð		Sð 	Ss:   ¦A1 ½A$ÁA1 Á$A(Á(A1 Á+A(Á,A1 Á1
B#Á;BÂB#c                 ó�  — t          j        t           j                             | j        ¦  «        pdd¬¦  «         	 t          | j        dd¬¦  «        5 }t          j        | j        dd …         |dd	¬
¦  «         d d d ¦  «         d S # 1 swxY w Y   d S # t          $ r(}t                               d|› �¦  «         Y d }~d S d }~ww xY w)Nú.T)Úexist_okÚwr]   r^   iœÿÿÿr5   F)ÚindentÚensure_asciiu,   [ReflectionCritic] Lá»—i lÆ°u agent_memory: )r   Úmakedirsr`   Údirnamer   rb   rc   Údumpr   re   r.   rf   rg   s      r   r-   zReflectionCritic._save_memoryv   s5  € Ý
Œ•B”G—O’O DÔ$4Ñ5Ô5Ð<¸ÀtÐLÑLÔLÐLð	MÝ�dÔ&¨°gÐ>Ñ>Ô>ð XÀ!Ý”	˜$Ô.¨t¨u¨uÔ5°qÀÐQVÐWÑWÔWÐWðXð Xð Xñ Xô Xð Xð Xð Xð Xð Xð Xð Xøøøð Xð Xð Xð Xð Xð Xøåð 	Mð 	Mð 	MÝ�LŠLÐKÈÐKÐKÑLÔLÐLÐLÐLÐLÐLÐLÐLøøøøð	Møøøs;   ¼B Á&BÁ9B ÂB
Â
B ÂB
ÂB Â
CÂC Ã C)r	   Nr
   )rW   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   r   Úintr   r   r   r2   r(   ÚfloatrV   rZ   r   r-   © r   r   r   r      s˜  € € € € € ðð ð 8Ø!%Ø,ð	
ð 
àð
ð ˜#”ð
ð ð	
ð 
ð 
ð 
ðàðð ðð ð	ð
 ˜T # s (œ^Ô,ðð 
ˆc�3ˆhŒðð ð ð ð2 ¨d°4¸¸S¸´>Ô.Bð  ÀtÈCÐQTÈHÄ~ð  ð  ð  ð  ðD°ð Àð ÐRWð Ð\`ÐadÐfiÐaiÔ\jð ð ð ð ð-ð -¨ð -°D¸¸cÀ3¸h¼Ô4Hð -ð -ð -ð -ðSð Sð Sð SðMð Mð Mð Mð Mð Mr   )rv   rc   Úloggingr   r)   Útypingr   r   r   r   Ú	getLoggerr.   r   rz   r   r   ú<module>r~      s²   ððð ð
 €€€Ø €€€Ø 	€	€	€	Ø €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à	ˆÔ	Ð-Ñ	.Ô	.€ðmMð mMð mMð mMð mMñ mMô mMð mMð mMð mMr   