QRi )~dZddlmZmZmZmZmZmZmZm Z ddl m Z ddl m Z ddlmZddlmZddlZGdd eZy) zC ChatWidget - Interfaccia chat per conversazioni con Marco Aurelio )QWidget QVBoxLayout QHBoxLayout QTextEdit QLineEdit QPushButtonQLabel QMessageBox)Qt) QTextCursor)InferenceWorker)GreetingWorkerNcfeZdZdZfdZdZdZdZdZddZ dZ d Z d Z d Z d Zd ZxZS) ChatWidgetz$Widget per la chat con Marco Aurelioct|||_d|_d|_|jj d|_ddddddddd |_|jj|jj |jj jd d d}|d |_ |d |_ |d|_ |j|jd|jy)N_desktop_session Marco Aureliou🏛️z#4CAF50)nameiconcolor Warren Mentoru💰z#006400aureliowarrenu🤖z#666rrrT)super__init__kernelworkergreeting_workeractive_profile session_idassistant_metadataget capitalizeassistant_nameassistant_iconassistant_colorinit_uisetAcceptDropsgenerate_dynamic_greeting)selfr profile_meta __class__s C/mnt/ssd/data/python-lab/Jarvis-Cognitive/desktop/ui/chat_widget.pyrzChatWidget.__init__s   #![[7788HI!0YW.S# ..22 KK & &[[//:: &&..t/@/@At//0&w/   (():):;t//0&% 67 !!$//2  +!!#( vr/cL|jjj}|sy|jd||jj |j d|j|j ddt|j||j|_ |jjj|j|jjj|j|jj!y)z"Invia il messaggio a Marco AurelioNTuF...[riflettendo]...T)is_temp)r7textstrip add_messageclearset_input_enabledr%r rr!rfinishedr9on_response_receivederroron_errorstart)r+ user_inputs r.r:zChatWidget.send_messagens%%**,224   z*   u% ,,.CTR&dkk:tO  $$T%>%>? !!$--0 r/c|j|j|j||jd|jj y)zGestisce la risposta ricevutaTN)remove_temp_messagerRr%rTr7setFocus)r+answers r.rVzChatWidget.on_response_receivedsJ   " ,,f5 t$ !!#r/cp|j|jdd||jdy)z#Gestisce errori durante l'inferenzaSistemau⚠️ TN)r\rRrT)r+ error_msgs r.rXzChatWidget.on_errors3   " gi[$9: t$r/c |jj}|jtjj |dk(r d|d|d}nN||j k(r6|jdd}d|jd|jd|d |d }n d |d|d}|j||jj||jjy ) zAggiunge un messaggio alla chatrMu$
🧑 z: z
 z
 z :
z
N) r4 textCursor movePositionr MoveOperationEndr%replacer'r& insertHtml setTextCursorensureCursorVisible)r+sendermessagerOcursor formatted message_htmls r.rRzChatWidget.add_messages""--/K5599: T>>vhfWIUYZI t** *#??48L/0D0D/ESI\I\H]]^_e^ffop|o}~BCI6vhfWITRI)$ ''/ --/r/c|jj}ddg}|D]}||vs|j|}|dk7s|jdd|}|dk7r|jdd|}nd}|jd|}|dk7se|dz}|dk7sp|dk7sv|d|||dz}|jj |yy)zBRimuove l'ultimo messaggio temporaneo COMPLETO (etichetta + testo)rN...[preparando il benvenuto]...z
rN)r4toHtmlrfindfindsetHtml) r+html temp_messagestemp_msgidxfirst_br label_startend_tagends r.r\zChatWidget.remove_temp_messages  '')/0QR % "H4jj*"9 $zz(As;H 2~&*jj1h&G &( #ii#6G"}%k&",#' #5ST #BD --55d;!5 "r/cBtj|ddtjjtjjz}|tjjk(r7|j j |j|jdyy)zPulisce la cronologia chatConfermaz-Vuoi davvero pulire la cronologia della chat?u4La conversazione è stata reimpostata. Ricominciamo.N) r questionStandardButtonYesNor4rSrRr%)r+replys r.r>zChatWidget.clear_chats$$   ;  & & * *[-G-G-J-J J   K..22 2    # # %   T002h i 3r/cp|jj||jj|y)z/Abilita/disabilita l'input durante elaborazioneN)r7 setEnabledr;)r+enableds r.rTzChatWidget.set_input_enableds* ##G, ##G,r/cv|j|jdt|j|j|_|j j j|j|j jj|j|j jy)z_Genera e mostra saluto dinamico usando Claude con consapevolezza delle conversazioni precedentirsN) rRr%rrr!rrUr9on_greeting_receivedrWon_greeting_errorrY)r+s r.r*z$ChatWidget.generate_dynamic_greetings ,,.OP .dkk4??K %%--d.G.GH ""**4+A+AB ""$r/c\|j|j|j|y)z"Gestisce saluto generato da ClaudeN)r\rRr%)r+greetings r.rzChatWidget.on_greeting_receiveds(   " ,,h7r/c~|jd}|j|j|td|dy)zBFallback a saluto statico in caso di errore durante la generazioneuAve, anima curiosa. Sono Marco Aurelio Antonino, Imperatore di Roma e filosofo stoico. Poni le tue domande sulla virtù, la ragione, e sulla vita saggia. Sarò lieto di condividere la mia saggezza con te.z[CHAT] Errore saluto dinamico: z. Uso fallback statico.N)r\rRr%print)r+rafallback_greetings r.rzChatWidget.on_greeting_errorsG   " A  ,,.?@ / {:QRSr/)F)__name__ __module__ __qualname____doc__rr(r:rVrXrRr\r>rTr*rr __classcell__)r-s@r.rrsF.)::|* $% 0(""H j- %8Tr/r)rPyQt6.QtWidgetsrrrrrrr r PyQt6.QtCorer PyQt6.QtGuir desktop.ui.inference_workerr desktop.ui.greeting_workerrosrr/r.rs:#75 qTqTr/