§
    
eôjÐ,  ã                   ó^  — d Z ddlZddlZddlZddlZddlZddlZddlmZm	Z	 ddl
Zej                             d¦  «        Zej                             edd¦  «        Zej                             edd¦  «        ZdZd	Zd
Zg d¢Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#dS )ut  é”€å”®æ—¥æŠ¥ AI é‡�ç‚¹æ��ç‚¼ï¼ˆæœ¬åœ° Ollama qwen3:8bï¼Œæ•°æ�®ä¸�å‡ºæœ¬æœºï¼‰

å¯¹æŸ�ä¸€å¤©ã€�æŸ�ä¸ªæ�ƒé™�èŒƒå›´çš„æ´»åŠ¨åŽŸæ–‡å�šå››ç±»æ��ç‚¼ï¼š
  1 optimization   ä¼˜åŒ–é¡¹ç›®è¿›åº¦
  2 key_tests      å¤§å®¢æˆ·/é‡�ç‚¹å®¢æˆ·æµ‹è¯•è¿›åº¦å�Šå��é¦ˆ
  3 complaints     å®¢è¯‰è¿›åº¦
  4 opportunities  æ–°å•†æœºæ��ç‚¼

è¾“å‡ºï¼šæ•°æ�®/daily_review_digests/<date>_<scope>.json
é    N)ÚdatetimeÚ	timedeltau    ~/Desktop/Hermesè¾“å‡º-å·¥ä½œç±»u   æ•°æ�®Údaily_review_digestszcustomer_360.jsonzhttp://127.0.0.1:11434/api/chatzqwen3:8bzdaily-review-digest-v1))Úoptimizationu   ä¼˜åŒ–é¡¹ç›®è¿›åº¦)Ú	key_testsu-   å¤§å®¢æˆ· / é‡�ç‚¹å®¢æˆ·æµ‹è¯•è¿›åº¦å�Šå��é¦ˆ)Ú
complaintsu   å®¢è¯‰è¿›åº¦)Úopportunitiesu   æ–°å•†æœºæ��ç‚¼c                 ó,  — |                       d¦  «        pd                     ¦   «         }|                       d¦  «        pd}|dv rdS |dk    r.dt          j        dd	|                       d
¦  «        pd¦  «        z   S dt          j        dd	|pd¦  «        z   S )NÚroleÚ Úname©ÚadminÚgmÚdirectorÚreadonlyÚallÚmanagerÚdept_z[^0-9A-Za-z\u4e00-\u9fa5]+Ú_ÚdeptÚunknownÚsales_)ÚgetÚlowerÚreÚsub)Úaur   r   s      õN   /Users/liuxinyuan/Desktop/Hermesè¾“å‡º-å·¥ä½œç±»/è„šæœ¬/daily_review_digest.pyÚ
_scope_keyr    !   s›   € Ø�FŠF�6‰NŒNÐ ˜b×'Ò'Ñ)Ô)€DØ�6Š6�&‰>Œ>Ð˜R€DØÐ6Ð6Ð6ØˆuØˆyÒÐØ�œÐ =¸sÀBÇFÂFÈ6ÁNÄNÐD_ÐV_Ñ`Ô`Ñ`Ð`Ø•b”fÐ:¸CÀÐARÈÑSÔSÑSÐSó    c                 óÔ   — |                       d¦  «        pd                     ¦   «         }|dv rdS |dk    r|                       d¦  «        pddz   S |                       d¦  «        pdd	z   S )
Nr   r   r   u   å…¨é‡�r   r   u   ï¼ˆæœ¬éƒ¨é—¨ï¼‰r   u   ï¼ˆæœ¬äººï¼‰©r   r   )r   r   s     r   Ú_scope_labelr$   +   ss   € Ø�FŠF�6‰NŒNÐ ˜b×'Ò'Ñ)Ô)€DØÐ6Ð6Ð6ØˆxØˆyÒÐØ—’�v‘”Ð$ "Ð(9Ñ9Ð9Ø�FŠF�6‰NŒNÐ ˜b NÑ2Ð2r!   c                 óX   — |                       d¦  «        pd                     ¦   «         dv S )Nr   r   )r   r   r   r   Úsalesr#   )r   s    r   Ú_can_generater'   4   s)   € Ø�FŠF�6‰NŒNÐ ˜b×'Ò'Ñ)Ô)Ð-\Ð\Ð\r!   c                 ó¨   — t          j        t          d¬¦  «         t           j                             t          |›dt          | ¦  «        ›d�¦  «        S )NT)Úexist_okr   z.json)ÚosÚmakedirsÚ
DIGEST_DIRÚpathÚjoinr    )r   Údays     r   Ú_pathr0   8   s@   € Ý„K•
 TÐ*Ñ*Ô*Ð*ÝŒ7�<Š<�
°C°C°C½ÀB¹¼¸¸Ð$HÑIÔIÐIr!   c                  ó4  — 	 t          j        t          t          d¬¦  «        ¦  «        } t	          ¦   «         }|                      d¦  «        pg D ]I}|                     d¦  «        dv r0|                     d¦  «        r|                     |d         ¦  «         ŒJ|                      d¦  «        pg D ]I}|                     d¦  «        dv r0|                     d¦  «        r|                     |d         ¦  «         ŒJ|S # t          $ r t	          ¦   «         cY S w xY w)Núutf-8©ÚencodingÚ	customersÚlevel)u	   å¤§å®¢æˆ·u   é‡�ç‚¹å®¢æˆ·r   Úgroups)ÚjsonÚloadÚopenÚCUSTOMER360Úsetr   ÚaddÚ	Exception)ÚdÚoutÚcÚgs       r   Ú_key_customer_namesrC   =   s  € ðÝŒI•d�;°Ð9Ñ9Ô9Ñ:Ô:ˆÝ‰eŒeˆØ—%’%˜Ñ$Ô$Ð*¨ð 	#ð 	#ˆAØ�uŠu�W‰~Œ~Ð!>Ð>Ð>À1Ç5Â5ÈÁ=Ä=Ð>Ø—’˜˜&œ	Ñ"Ô"Ð"øØ—%’%˜‘/”/Ð' Rð 	#ð 	#ˆAØ�uŠu�W‰~Œ~Ð!>Ð>Ð>À1Ç5Â5ÈÁ=Ä=Ð>Ø—’˜˜&œ	Ñ"Ô"Ð"øØˆ
øÝð ð ð Ý‰uŒuˆˆˆðøøøs   ‚C9C< Ã<DÄDc                 óÄ   — t          j        | d|i¦  «        }g }|                     d¦  «        pg D ],}|                     |                     d¦  «        pg ¦  «         Œ-||fS )NÚdater7   Ú
activities)ÚdrÚlist_payloadr   Úextend)r   r/   ÚpayloadÚrowsrB   s        r   Ú_activity_rowsrL   L   sl   € ÝŒo˜b 6¨3 -Ñ0Ô0€GØ€DØ�kŠk˜(Ñ#Ô#Ð) rð /ð /ˆØ�Š�A—E’E˜,Ñ'Ô'Ð-¨2Ñ.Ô.Ð.Ð.Ø�Dˆ=Ðr!   c                 ó´  ‡
— t          ¦   «         Š
t          ˆ
fd„|D ¦   «         ¦  «        }g }|D ]Ï}|                     d¦  «        pd                     ¦   «                              dd¦  «        }t          |¦  «        dk    r|d d…         dz   }|                     d|                     d¦  «        ›d	|                     d
¦  «        ›d|                     d¦  «        ›d|                     d¦  «        ›d|›�
¦  «         ŒÐd                     |¦  «        }t          |¦  «        dk    r|d d…         dz   }d}d|›dd                     |¦  «        pd›d|›�}	||	fS )Nc                 óh   •— h | ].}|                      d ¦  «        ‰v ¯|                      d ¦  «        ’Œ/S )Úcustomer©r   )Ú.0ÚrÚ	key_namess     €r   ú	<setcomp>z_prompt.<locals>.<setcomp>V   s<   ø€ Ð[Ð[Ð[¨q¸A¿EºEÀ*Ñ<MÔ<MÐQZÐ<ZÐ<Z˜Ÿš˜zÑ*Ô*Ð<ZÐ<ZÐ<Zr!   Útextr   úéð   u   â€¦ú[Úidu   ] é”€å”®ï¼šr&   u   ï½œå®¢æˆ·ï¼šrO   u   ï½œç±»åž‹ï¼šÚtypeú
z

i N  u7   
â€¦ï¼ˆå�Žé�¢å†…å®¹å·²æˆªæ–­ï¼Œä»…ç”¨äºŽæœ¬æœŸæ��ç‚¼ï¼‰uŽ  ä½ æ˜¯å®�é”�ç”Ÿç‰©é”€å”®ç®¡ç�†åˆ†æž�å‘˜ã€‚ä½ å�ªä¾�æ�®ç”¨æˆ·æ��ä¾›çš„æ´»åŠ¨åŽŸæ–‡å�šæ��ç‚¼ï¼Œä¸�è¡¥å……åŽŸæ–‡æ²¡æœ‰çš„ä¿¡æ�¯ï¼Œä¸�ç¼–é€ å®¢æˆ·ã€�é‡‘é¢�ã€�æ—¥æœŸã€�ç»“è®ºã€‚
æŠŠå�Œä¸€å¤©çš„æ´»åŠ¨æŒ‰å››ç±»æ•´ç�†ï¼Œæ¯�æ�¡å¿…é¡»å¸¦ evidence_idsï¼ˆå¯¹åº”è¾“å…¥é‡Œçš„æ´»åŠ¨ IDï¼‰ã€‚æ²¡æœ‰è¯�æ�®å°±ä¸�è¦�è¾“å‡ºè¯¥æ�¡ã€‚
å››ç±»å®šä¹‰ï¼š
1 optimizationï¼šé…�æ–¹/ä½“ç³»/å·¥è‰º/æ€§èƒ½ä¼˜åŒ–ã€�è¿­ä»£ã€�æ”¹å–„ã€�ç¨³å®šæ€§ã€�ç�µæ•�åº¦ã€�LODã€�æ£€å‡ºé™�ç­‰è¿›å±•ï¼Œå†™æ¸…å®¢æˆ·ã€�é¡¹ç›®ã€�å½“å‰�è¿›å±•ã€�ä¸‹ä¸€æ­¥ã€‚
2 key_testsï¼šå¤§å®¢æˆ·/é‡�ç‚¹å®¢æˆ·çš„æµ‹è¯•ã€�éªŒè¯�ã€�è¯•ç”¨ã€�å¯¹æ¯”ã€�å��é¦ˆï¼›å†™æ¸…æµ‹è¯•å¯¹è±¡ã€�ç»“æžœã€�å®¢æˆ·å��é¦ˆã€�ä¸‹ä¸€æ­¥ã€‚
3 complaintsï¼šå®¢è¯‰ã€�æŠ•è¯‰ã€�å¼‚å¸¸ã€�é€€æ�¢ã€�æ‰¹é€€ã€�æ±¡æŸ“ã€�èµ·çº¿ã€�ç¿˜å°¾ã€�é�žç‰¹å¼‚ã€�ä¸�å�ˆæ ¼ç­‰å¤„ç�†è¿›åº¦ï¼›å†™æ¸…é—®é¢˜ã€�å½“å‰�çŠ¶æ€�ã€�è´£ä»»åŠ¨ä½œã€‚
4 opportunitiesï¼šæ–°å‡ºçŽ°çš„é¡¹ç›®éœ€æ±‚ã€�é‡‡è´­æ„�å�‘ã€�ç«‹é¡¹ã€�æ›¿æ�¢ã€�æ‰©å±•ã€�å�ˆä½œæœºä¼šï¼›å†™æ¸…å®¢æˆ·ã€�éœ€æ±‚ã€�é˜¶æ®µã€�ä¸‹ä¸€æ­¥ã€‚å¸¸è§„å¯’æš„å’Œé‡�å¤�è·Ÿè¿›ä¸�è¦�ç®—æ–°å•†æœºã€‚
è¾“å‡ºä¸¥æ ¼ JSONï¼Œä¸�è¦� markdownï¼Œä¸�è¦�è§£é‡Šã€‚ç»“æž„ï¼š
{"optimization":[{"title":"","customer":"","project":"","progress":"","next_action":"","sales":"","evidence_ids":[""],"confidence":"high|medium|low"}],
 "key_tests":[...], "complaints":[...], "opportunities":[...]}
æ¯�ç±»æœ€å¤š 4 æ�¡ï¼Œå�ªä¿�ç•™æœ€é‡�è¦�çš„ï¼›å�ˆå¹¶å�Œä¸€å®¢æˆ·å�Œä¸€é¡¹ç›®çš„é‡�å¤�ä¿¡æ�¯ï¼›confidence å�ªèƒ½æ˜¯ high/medium/lowã€‚u	   æ—¥æœŸï¼šuW   

å±žäºŽå¤§å®¢æˆ·/é‡�ç‚¹å®¢æˆ·çš„å½“æ—¥å®¢æˆ·ï¼ˆä¾›åˆ¤æ–­ï¼Œä¸�è¦�ä»…å‡­æ­¤å½’ç±»ï¼‰ï¼šu   ã€�u   æ— u   

æ´»åŠ¨åŽŸæ–‡ï¼š
)rC   Úsortedr   ÚstripÚreplaceÚlenÚappendr.   )r   r/   rK   Ú
key_in_dayÚlinesrR   ÚtxtÚbodyÚsystemÚuserrS   s             @r   Ú_promptrg   T   s}  ø€ Ý#Ñ%Ô%€IÝÐ[Ð[Ð[Ð[°DÐ[Ñ[Ô[Ñ\Ô\€JØ€EØð Qð QˆØ�uŠu�V‰}Œ}Ð" ×)Ò)Ñ+Ô+×3Ò3°D¸"Ñ=Ô=ˆÝˆs‰8Œ8�cŠ>ˆ>Ø�d�s�d”)˜eÑ#ˆCØ�ŠˆØ�EŠE�$‰KŒKˆKˆK˜Ÿš˜w™œ˜˜¨¯ª¨zÑ):Ô):Ð):Ð):¸A¿EºEÀ&¹M¼M¸M¸MÈ3È3ðPñ 	Qô 	Qð 	Qð 	Qà�;Š;�uÑÔ€DÝ
ˆ4�y„y�5ÒÐØ�F�U�FŒ|ÐXÑXˆð
H€F€Fð ˆSˆS�%—*’*˜ZÑ(Ô(Ð1¨EÐ1Ð1°4°4ð9€Dà�4ˆ<Ðr!   c                 ó  — t           d| dœd|dœgddddddœd	d
œ}t          j                             t          t          j        |¦  «                             d¦  «        ddid¬¦  «        }t          j                             |d¬¦  «        5 }t          j	        | 
                    ¦   «         ¦  «        }d d d ¦  «         n# 1 swxY w Y   |                     d¦  «        pi }|                     d¦  «        pd                     ¦   «         S )Nre   )r   Úcontentrf   Fgš™™™™™¹?i  i `  )ÚtemperatureÚnum_predictÚnum_ctxr8   )ÚmodelÚmessagesÚstreamÚthinkÚoptionsÚformatr2   zContent-Typezapplication/jsonÚPOST)ÚdataÚheadersÚmethodrW   )ÚtimeoutÚmessageri   r   )ÚMODELÚurllibÚrequestÚRequestÚOLLAMAr8   ÚdumpsÚencodeÚurlopenÚloadsÚreadr   r]   )re   rf   rd   ÚreqrR   r?   Úmsgs          r   Ú_call_ollamar…   q   sE  € åØ&°6Ð:Ð:ÀVÐX\Ð<]Ð<]Ð^ØØØ#&°tÈÐNÐNØðð €Dõ Œ.×
 Ò
 ¥­d¬j¸Ñ.>Ô.>×.EÒ.EÀgÑ.NÔ.NØ*8Ð:LÐ)MÐV\ð !ñ ^ô ^€Cå	Œ×	Ò	 ¨SÐ	Ñ	1Ô	1ð !°QÝŒJ�q—v’v‘x”xÑ Ô ˆð!ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !à�5Š5�ÑÔÐ!˜r€CØ�GŠG�IÑÔÐ$ "×+Ò+Ñ-Ô-Ð-s   Â'B>Â>CÃCc                 ót  — | sd S |                       ¦   «         } t          j        dd| t          j        ¬¦  «        } t          j        dd| ¦  «        } |                      d¦  «        |                      d¦  «        }}|dk     s||k    rd S 	 t          j        | ||dz   …         ¦  «        S # t          $ r Y d S w xY w)	Nz^```(?:json)?\s*r   )Úflagsz\s*```$ú{ú}r   é   )	r]   r   r   ÚIÚfindÚrfindr8   r�   r>   )ÚsÚaÚbs      r   Ú_parse_jsonr‘   ‚   sÀ   € Øð ØˆtØ	�Š‰	Œ	€AÝ
ŒÐ" B¨µ´Ð6Ñ6Ô6€AÝ
Œˆz˜2˜qÑ!Ô!€AØ�6Š6�#‰;Œ;˜Ÿš ™œ€q€AØˆ1‚u€u��Q’�ØˆtðÝŒz˜!˜A˜a !™e˜Gœ*Ñ%Ô%Ð%øÝð ð ð Øˆtˆtðøøøs   Â
B) Â)
B7Â6B7c                 ó   — d„ | D ¦   «         S )Nc                 ód   — i | ]-}|                      d ¦  «        ¯|                      d ¦  «        |“Œ.S )rY   rP   )rQ   rR   s     r   ú
<dictcomp>z!_evidence_map.<locals>.<dictcomp>’   s3   € Ð8Ð8Ð8˜q¨A¯EªE°$©K¬KÐ8ˆA�EŠE�$‰KŒK˜Ð8Ð8Ð8r!   © )rK   s    r   Ú_evidence_mapr–   ‘   s   € Ø8Ð8 DÐ8Ñ8Ô8Ð8r!   c                 óÈ  ‡— t          |¦  «        Ši }t          D �]F\  }}t          | t          ¦  «        r|                      |¦  «        nd }t          |t
          ¦  «        sg }g }|D �]ê}t          |t          ¦  «        sŒt          |                     d¦  «        t
          ¦  «        r|                     d¦  «        ng }ˆfd„|D ¦   «         }t          t                               |¦  «        ¦  «        d d…         }|sŒ˜g }	|D ]k}
‰|
         }|	                     |
|                     d¦  «        pd|                     d¦  «        pd|                     d¦  «        pdd d…         d	œ¦  «         Œlt          |                     d
¦  «        pd¦  «         	                    ¦   «         d d…         t          |                     d¦  «        pd¦  «         	                    ¦   «         d d…         t          |                     d¦  «        pd¦  «         	                    ¦   «         d d…         t          |                     d¦  «        pd¦  «         	                    ¦   «         d d…         t          |                     d¦  «        pd¦  «         	                    ¦   «         d d…         t          |                     d¦  «        pd¦  «         	                    ¦   «         d d…         |                     d¦  «        dv r|                     d¦  «        nd|	|dœ	}|d
         s%|d         p|	r|	d         d         d d…         nd|d
<   |                     |¦  «         �Œì|d d…         ||<   �ŒH|S )NÚevidence_idsc                 óP   •— g | ]"}t          |¦  «        ‰v ¯t          |¦  «        ‘Œ#S r•   )Ústr)rQ   ÚxÚemaps     €r   ú
<listcomp>z_normalize.<locals>.<listcomp>¡   s*   ø€ Ð9Ð9Ð9˜a­#¨a©&¬&°D¨.¨.•3�q‘6”6¨.¨.¨.r!   é   r&   r   rO   rU   é´   ©rY   r&   rO   ÚsnippetÚtitleéP   Úprojectéd   Úprogressi�  Únext_actionrW   é(   Ú
confidence)ÚhighÚmediumÚlowr«   ©	r¢   rO   r¤   r¦   r§   r&   r©   Úevidencer˜   r   r¡   é$   u	   æœªå‘½å��é   )
r–   ÚCATSÚ
isinstanceÚdictr   ÚlistÚfromkeysr`   rš   r]   )ÚrawrK   r@   ÚkeyÚ_labelÚitemsÚcleanÚitÚidsÚevÚirR   Úrecrœ   s                @r   Ú
_normalizerÀ   •   s\  ø€ Ý˜ÑÔ€DØ
€CÝð !ñ !‰ˆˆVÝ *¨3µÑ 5Ô 5Ð?�—’˜‘”�¸4ˆÝ˜%¥Ñ&Ô&ð 	ØˆEØˆØð 	ñ 	ˆBÝ˜b¥$Ñ'Ô'ð ØÝ,6°r·v²v¸nÑ7MÔ7MÍtÑ,TÔ,TÐ\�"—&’&˜Ñ(Ô(Ð(ÐZ\ˆCØ9Ð9Ð9Ð9 3Ð9Ñ9Ô9ˆCå•t—}’} SÑ)Ô)Ñ*Ô*¨2¨A¨2Ô.ˆCØð ØØˆBØð Dð D�Ø˜”G�Ø—	’	 ¨Q¯UªU°7©^¬^Ð-A¸rÈqÏuÊuÐU_ÑO`ÔO`ÐOfÐdfØ'(§u¢u¨V¡}¤}Ð':¸¸D¸S¸DÔ&AðCð Cñ Dô Dð Dð Dõ ˜RŸVšV G™_œ_Ð2°Ñ3Ô3×9Ò9Ñ;Ô;¸C¸R¸CÔ@Ý §¢ zÑ 2Ô 2Ð 8°bÑ9Ô9×?Ò?ÑAÔAÀ#À2À#ÔFÝ˜rŸvšv iÑ0Ô0Ð6°BÑ7Ô7×=Ò=Ñ?Ô?ÀÀÀÔEÝ §¢ zÑ 2Ô 2Ð 8°bÑ9Ô9×?Ò?ÑAÔAÀ$À3À$ÔGÝ" 2§6¢6¨-Ñ#8Ô#8Ð#>¸BÑ?Ô?×EÒEÑGÔGÈÈÈÔMÝ˜RŸVšV G™_œ_Ð2°Ñ3Ô3×9Ò9Ñ;Ô;¸C¸R¸CÔ@Ø68·f²f¸\Ñ6JÔ6JÐNgÐ6gÐ6g˜bŸfšf \Ñ2Ô2Ð2ÐmuØØ #ð
ð 
ˆCð �w”<ð aØ" :œÐ`ÈBÐ3_°2°a´5¸Ô3CÀCÀRÀCÔ3HÐ3HÐT_��G‘Ø�LŠL˜ÑÔÐÑØ˜˜!˜”9ˆˆC‰‰Ø€Jr!   c                 óð  — d„ }g d¢g d¢g d¢g d¢dœ}d„ t           D ¦   «         }|                     ¦   «         D �]<\  }}| D �]2}|                     d¦  «        pd	} |||¦  «        sŒ'|                     d
¦  «        pd	dz   |                     d¦  «        pdz   }||                              |dd…         |                     d
¦  «        pd	d	|dd…         d	|                     d¦  «        pd	d|                     d¦  «        |                     d¦  «        pd	|                     d
¦  «        pd	|dd…         dœg|                     d¦  «        gdœ	¦  «         t	          ||         ¦  «        dk    r n�Œ4�Œ>|S )uK   æœ¬åœ°æ¨¡åž‹ä¸�å�¯ç”¨æ—¶çš„ä¿�å®ˆæŠ½å�–ï¼šå�ªæ‘˜åŽŸæ–‡ï¼Œä¸�ç”Ÿæˆ�ç»“è®ºã€‚c                 ó:   ‡ — t          ˆ fd„|D ¦   «         ¦  «        S )Nc              3   ó    •K  — | ]}|‰v V — Œ	d S )Nr•   )rQ   ÚwÚts     €r   ú	<genexpr>z._rule_fallback.<locals>.has.<locals>.<genexpr>À   s'   øè è € Ð)Ð)˜a�1˜�6Ð)Ð)Ð)Ð)Ð)Ð)r!   )Úany)rÅ   Úwordss   ` r   Úhasz_rule_fallback.<locals>.has¿   s&   ø€ ÝÐ)Ð)Ð)Ð) 5Ð)Ñ)Ô)Ñ)Ô)Ð)r!   )u   ä¼˜åŒ–u   è¿­ä»£u   æ”¹å–„u   è°ƒæ•´u   æ��å�‡u	   ç�µæ•�åº¦ÚLODu	   æ£€å‡ºé™�u   é…�æ–¹u   ä½“ç³»u	   ç¨³å®šæ€§u   æ€§èƒ½)u   æµ‹è¯•u   éªŒè¯�u   è¯•ç”¨u   å¯¹æ¯”u   å��é¦ˆu   ç»“æžœu   ä¸Šæœºu   è¯„ä¼°)u   å®¢è¯‰u   æŠ•è¯‰u   å¼‚å¸¸u   é€€æ�¢u   é€€è´§u	   æ‰¹é—´å·®u   æ±¡æŸ“u   èµ·çº¿u   ç¿˜å°¾u	   é�žç‰¹å¼‚u	   ä¸�å�ˆæ ¼u   æ¼�æ£€u   å�¬å›ž)u	   æ–°é¡¹ç›®u   éœ€æ±‚u   å•†æœºu   æœºä¼šu   é‡‡è´­u   ç«‹é¡¹u   è®¡åˆ’u   å‡†å¤‡u   å�ˆä½œu   æ›¿æ�¢u   æ‰©å±•u   å¯¼å…¥)r   r   r   r	   c                 ó   — i | ]\  }}|g “Œ	S r•   r•   )rQ   Úkr   s      r   r”   z"_rule_fallback.<locals>.<dictcomp>Ç   s   € Ð
"Ð
"Ð
"‘T�Q˜ˆ1ˆbÐ
"Ð
"Ð
"r!   rU   r   rO   u    Â· rZ   u   æ´»åŠ¨Nr£   éx   r&   r¬   rY   rŸ   r    r­   é   )r±   r¹   r   r`   r_   )	rK   rÉ   Úruler@   r·   rÈ   rR   rÅ   r¢   s	            r   Ú_rule_fallbackrÐ   ½   sù  € ð*ð *ð *ð Wð  Wð  WØeÐeÐeð bð  bð  bð Uð  Uð  Uð	ð €Dð #Ð
"�TÐ
"Ñ
"Ô
"€CØ—j’j‘l”lð ñ ‰
ˆˆUØð 	ñ 	ˆAØ—’�f‘”Ð# ˆAØ�3�q˜%‘=”=ð Øà—U’U˜:Ñ&Ô&Ð,¨"°Ñ6¸!¿%º%À¹-¼-Ð:SÈ8ÑTˆEØ�ŒH�OŠOØ˜s ˜sœ°·²°zÑ1BÔ1BÐ1HÀbØ¨1¨T¨c¨T¬7À2ØŸš˜w™œÐ-¨2¸UØ$%§E¢E¨$¡K¤K¸!¿%º%À¹.¼.Ð:NÈBÐ\]×\aÒ\aÐblÑ\mÔ\mÐ\sÐqsð  ABð  CGð  DGð  CGô  AHð  Ið  Ið  JØ!"§¢ t¡¤ ðð ñ ô ð õ �3�s”8‰}Œ} Ò!Ð!Ø�ñ "ùà€Jr!   c                 óŒ  — t          | |¦  «        }t          j                             |¦  «        s"dd|t	          | ¦  «        t          | ¦  «        dœS 	 t          j        t          |d¬¦  «        ¦  «        }d|d<   d|d<   t          | ¦  «        |d<   |S # t          $ r% dd|t	          | ¦  «        t          | ¦  «        dœcY S w xY w)	NTF)ÚokÚexistsrE   Úscope_labelÚcan_generater2   r3   rÒ   rÓ   rÕ   )
r0   r*   r-   rÓ   r$   r'   r8   r9   r:   r>   )r   r/   r-   r?   s       r   Ú
get_digestrÖ   Û   sì   € Ý��S‰>Œ>€DÝŒ7�>Š>˜$ÑÔð 3Ø e°SÍÐVXÑIYÔIYÝ -¨bÑ 1Ô 1ð3ð 3ð 	3ð3ÝŒI•d˜4¨'Ð2Ñ2Ô2Ñ3Ô3ˆØˆˆ$‰Øˆˆ(‰Ý)¨"Ñ-Ô-ˆˆ.ÑØˆøÝð 3ð 3ð 3Ø e°SÍÐVXÑIYÔIYÝ -¨bÑ 1Ô 1ð3ð 3ð 	3ð 	3ð 	3ð3øøøs   ÁA B Â,CÃCc                 ó  — t          | ¦  «        sdS t          | |¦  «        \  }}|sdS t          | ||¦  «        \  }}d\  }}	 t          ||¦  «        }t	          |¦  «        }|sd}n1# t
          $ r$}	dt          |	¦  «        d d…         z   }Y d }	~	nd }	~	ww xY w|rt          ||¦  «        }
dt          z   }nt          |¦  «        }
d}t          |t          | ¦  «        t          | ¦  «        t          j        ¦   «                              d	¬
¦  «        ||                     d¦  «        rt          ndt#          |¦  «        t%          j        |›dt#          |¦  «        ›�                     ¦   «         ¦  «                             ¦   «         d d…         |pd|
ddœ}t-          | |¦  «        }|dz   }t/          |dd¬¦  «        5 }t1          j        ||dd¬¦  «         d d d ¦  «         n# 1 swxY w Y   t5          j        ||¦  «         |d fS )N)Nu6   æ— ç”Ÿæˆ�æ�ƒé™�ï¼ˆä»…ä¸»ç®¡/ç»�ç�†/æ€»ç›‘/ç®¡ç�†å‘˜ï¼‰)Nu   è¯¥æ—¥æœŸæ²¡æœ‰æ´»åŠ¨åŽŸæ–‡)NNu#   æœ¬åœ°æ¨¡åž‹è¿”å›žä¸�æ˜¯å�ˆæ³• JSONu   æœ¬åœ°æ¨¡åž‹è°ƒç”¨å¤±è´¥ï¼šé    zollama:zrule-fallbackÚseconds)Útimespecr   ú|é   uR   AI æ��ç‚¼ä»…ä½œå¯¼èˆªï¼Œäº‹å®žä»¥æ´»åŠ¨åŽŸæ–‡ä¸ºå‡†ï¼›æ¯�æ�¡å�‡é™„ evidence_idsã€‚)ÚversionrE   ÚscoperÔ   Úgenerated_atÚenginerm   Úsource_countÚsource_hashÚerrorÚ
categoriesÚnotez.tmprÄ   r2   r3   FrŠ   )Úensure_asciiÚindent)r'   rL   rg   r…   r‘   r>   rš   rÀ   ry   rÐ   ÚVERSIONr    r$   r   ÚnowÚ	isoformatÚ
startswithr_   ÚhashlibÚmd5r   Ú	hexdigestr0   r:   r8   Údumpr*   r^   )r   r/   rJ   rK   re   rf   r¶   Úerrri   ÚeÚcatsrà   r?   r-   ÚtmpÚfs                   r   Úgenerate_digestrõ   ë   se  € Ý˜ÑÔð NØMÐMÝ" 2 sÑ+Ô+�M€GˆTØð 3Ø2Ð2Ý˜2˜s DÑ)Ô)�L€FˆDØ�H€Cˆð;Ý˜v tÑ,Ô,ˆÝ˜'Ñ"Ô"ˆØð 	8Ø7ˆCøøÝð ;ð ;ð ;Ø+­c°!©f¬f°T°c°T¬lÑ:ˆˆˆˆˆˆøøøøð;øøøà
ð !Ý˜#˜tÑ$Ô$ˆØ�UÑ"ˆˆå˜dÑ#Ô#ˆØ ˆåØÝ˜B‘”Ý# BÑ'Ô'Ý œ™œ×0Ò0¸)Ð0ÑDÔDØØ ×+Ò+¨IÑ6Ô6Ð>•�¸BÝ˜D™	œ	Ý”{¨s¨s¨sµC¸±I´I°IÐ$>×#FÒ#FÑ#HÔ#HÑIÔI×SÒSÑUÔUÐVYÐWYÐVYÔZØ�˜ØØdð	ð 	€Aõ ��S‰>Œ>€DØ
�‰-€CÝ	ˆc�3 Ð	)Ñ	)Ô	)ð 6¨QÝŒ	�!�Q U°1Ð5Ñ5Ô5Ð5ð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6å„Jˆs�DÑÔÐØˆdˆ7€Ns*   Á#A' Á'
BÁ1BÂBÆ;G Ç G$Ç'G$)$Ú__doc__r*   r   r8   ÚtimeÚurllib.requestrz   rì   r   r   Údaily_review_apirG   r-   Ú
expanduserÚROOTr.   r,   r;   r}   ry   rè   r±   r    r$   r'   r0   rC   rL   rg   r…   r‘   r–   rÀ   rÐ   rÖ   rõ   r•   r!   r   ú<module>rü      sÉ  ðð	ð 	ð 3Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (à Ð Ð Ð à	„w×ÒÐ<Ñ=Ô=€ØŒW�\Š\˜$ Ð*@ÑAÔA€
ØŒg�lŠl˜4 Ð+>Ñ?Ô?€Ø	*€Ø€Ø
"€ðð ð €ðTð Tð Tð3ð 3ð 3ð]ð ]ð ]ðJð Jð Jð
ð ð ðð ð ðð ð ð:.ð .ð .ð"ð ð ð9ð 9ð 9ð%ð %ð %ðPð ð ð<3ð 3ð 3ð (ð (ð (ð (ð (r!   