BRi HdZddlZddlZddlmZddlmZmZGddZy)zZ UserProfileManager - Gestisce il profilo utente persistente estratto dalle conversazioni N)datetime)DictAnycpeZdZdZdefdZdeeeffdZdeeeffdZ dZ defdZ d eeeffd Z y ) UserProfileManagerzCGestisce il profilo utente persistente estratto dalle conversazioni profile_pathc<||_|j|_y)N)r_load_or_createprofile)selfrs S/mnt/ssd/data/python-lab/Jarvis-Cognitive/services/cognitiveservice/user_profile.py__init__zUserProfileManager.__init__ s(++- returnctjj|jr8 t |jdd5}t j |cdddS|jS#1swYnxYwy#t jtf$r)}td|d|jcYd}~Sd}~wwxYw)z%Carica profilo esistente o crea nuovorutf-8encodingNz&[WARNING] Errore caricamento profilo: z. Creo nuovo profilo.) ospathexistsropenjsonloadJSONDecodeErrorIOErrorprint_create_empty_profiler fes r r z"UserProfileManager._load_or_creates 77>>$++ , 4$++S7C(q99Q<(( --/ / ((((('2 4>qcAVWX1133 4s5A?A2 A?2A;7A??CB<6C<CcdiddddgdgddtjjtjjdddS)zCrea struttura profilo vuotoN)namefamily residence)companyrole colleagues)topics_of_interestconversation_styler) created_at last_updatedtotal_conversations)personal professional preferencesmetadata)rnow isoformat)r s r rz(UserProfileManager._create_empty_profilesg!    ')&* 'lln668 (  8 8 :'(  rc tjj|jdd<t j tj j|jdt|jdd5}tj|j|dd d d d y #1swYy xYw#t$r}td |Yd }~y d }~wwxYw) zPersiste il profilo su discor2r-T)exist_okwrrF)indent ensure_asciiNz%[ERROR] Impossibile salvare profilo: )rr3r4r rmakedirsrdirnamerrrdumprrr s r savezUserProfileManager.save4s ?7?||~7O7O7QDLL $^ 4 KK(9(9:T Jd''w? I1 $,,!%H I I I ? 9!= > > ?s6BC $B7.C7C<CC C$ CC$c:g}|jddr$|jd|jdd|jddrg}|jddjD]Q\}}t|tr&|j|ddj |<|j|d|S|r#|jddj ||jdd r$|jd |jdd |jd d rM|jd d r|jd d nd}|jd|d|jd d |jd dr5dj |jd d}|jd||jddr5dj |jdd}|jd||sydj |S)z>Genera rappresentazione testuale del profilo per system promptr/r$z Nome utente: r%z: z, z Famiglia: z; r&z Residenza: r0r'r(zruolo non specificatozLavoro: z presso r)z Colleghi: r1r*z Interessi: z4Nessuna informazione sul profilo utente disponibile. )r appenditems isinstancelistjoin)r parts family_itemskv role_textcolleagues_str topics_strs r get_profile_summaryz&UserProfileManager.get_profile_summaryBs << #F + LL=j)A&)I(JK L << #H -L Z0:@@B 51a& ''1#R ! ~(>? ''1#Rs 4  5  z$))L*A)BCD << #K 0 LL;t||J'? 'L&MN O << ' 2@D ^@\]c@d ^4V<kBI LL8I;ht||N7ST]7^6_` a << ' 5!YYt||N'CL'QRN LL:n%56 7 << &'; <4<< #>?S#TUJ LL;zl3 4Iyyrextracted_infocd}d|vr4|dr/|jdd|dk7r|d|jdd<d}d|vrg|drb|djD]L\}}|s ||jddvs|jdd||k7s6||jdd|<d}Nd|vr4|dr/|jdd|dk7r|d|jdd<d}d|vr4|dr/|jdd|dk7r|d|jdd<d}d |vr4|d r/|jdd |d k7r|d |jdd <d}d |vrJ|d rE|d D]=}|s||jdd vs|jdd j|d}?d |vrJ|d rE|d D]=}|s||jd d vs|jd d j|d}?|r|j|S)z,Aggiorna profilo con info estratte da ClaudeFr$r/Tr%r&r'r0r(r) interestsr1r*)r rBrAr>)r rNupdatedkeyvalue colleagueinterests r update_from_extractionz)UserProfileManager.update_from_extractionks ^ #v(>||J'/>&3II3A&3I Z(0 ~ %.*B,X6<<> ' U$,,z":8"DD U_H`aiHjknHosxHxBG Z0:3?"&  ' . (^K-H||J' 4{8SS8F{8S Z(5  &>)+D||N+I6.:SS:H:S ^,Y7 ^ #v(>||N+F3~f7MM7Ef7M ^,V4 > )n\.J+L9 # $,,~2N|2\!\LL0>EEiP"G # . (^K-H*;7 # ]0KL`0a aLL/0DELLXV"G #  IIKrN) __name__ __module__ __qualname____doc__strrrrr rr>rMrVrr rr s_M.S. 0c3h 0 tCH~ 0 ?' S' R6T#s(^6rr)rZrrrtypingrrrr\rr r^s$ XXr