hyDddlZddlZddlmZddlmZmZddlmZm Z ddl m Z ddl m Z ddlmZddlmZdd lmZmZdd lmZdd lmZdd lmZdd lmZGddZy)N)ChatGoogleGenerativeAI) AgentExecutorcreate_react_agent)ChatPromptTemplateMessagesPlaceholder)SQLChatMessageHistory)RunnableWithMessageHistory)TavilySearchResults)ParentDocumentRetriever)LocalFileStoreEncoderBackedStore)RecursiveCharacterTextSplitter)Chroma)GoogleGenerativeAIEmbeddings)ToolcReZdZdZdZdZdZddZdZdde de fd Z d e d e fd Z y )CognitiveServiceu Il "cervello" di Jarvis. Gestisce l'agente conversazionale, la memoria, e l'accesso agli strumenti (RAG, ricerca web, ecc.). Questa versione è ottimizzata per l'interazione sincrona tramite API. cP||_||_d|_|jdy)Nz!Servizio cognitivo inizializzato.)coreconfigagent_executorlog)selfcore_apirs W/mnt/ssd/data/python-lab/Jarvis-Cognitive/services/cognitiveservice/cognitiveservice.py__init__zCognitiveService.__init__0s%  " 45c|jd |j|jdy#t$r}|jd|dYd}~yd}~wwxYw)u Avvia il servizio, preparando l'agente conversazionale. Questa versione è sincrona e non si basa più su eventi del filesystem. zAvvio servizio cognitivo...zAgente conversazionale pronto.z7ERRORE CRITICO durante l'inizializzazione dell'agente: errorN)r_initialize_agent Exception)res rstartzCognitiveService.start<s^ ./ ]  " " $ HH5 6  ] HHNqcRT[ \ \ ]s!5 AAAc&|jdy)zFerma il servizio.zServizio cognitivo fermato.N)r)rs rstopzCognitiveService.stopXs ./rcB|jjd||y)z+Metodo di logging standard per il servizio.z [COGNITIVE] N)rr)rmessagelevels rrzCognitiveService.log`s WI.6rc> tjjddjjdd}tjjdd_t d jjd d }jjd d }j j|}jjddj}|dk(r ddl m }|dk(r&jjdd}|} n%tjjd} j j|} tj dd} | dk(rtj j#|sNj jd } tj j#| rjdd| }tj j#| sNj jd } tj j#| rjdd| } tj j#|rtj j#| rjdt%d || !}t'| }t)|d"t*j,t*j.}t1||t3d#d$%&jjd'}d(_nzjd)d*jd+d*jd,d*jd-d*jd)d*d.t6d/t8fd0}|d1}d_d.t6d/t6ffd2 }t;jjd3d4||5} t;d7d8|5}td9drIfd:}t;jjd3d4||d;|5}t;d7d<|d=|5}||g}t?j@d>tCd?@dAdBgjEjjdCD}tG|||}tI||ttd9dd(dEdFdGttd9dH_%j jjjdIdJ}|_&jdKy#t$r#}jd|ddd}Yd}~^d}~wwxYw#t$rd} YwxYw#t<$rd.t6d/t6ffd6 }YwxYw)Lz] Costruisce l'intera catena dell'agente: LLM, strumenti, memoria e prompt. model_namezgemini-2.5-flash temperaturegffffff?)modelr+debug_intermediate_stepsF) max_resultsvectorstore_path chroma_db docstore_path doc_storeembedding_providergooglehfr)HuggingFaceEmbeddingsz*Errore caricamento HuggingFaceEmbeddings: z. Ricado su Google embeddings.warningNembedding_modelz&sentence-transformers/all-MiniLM-L6-v2)r*)r,active_profileaurelioz;Percorso vectorstore nuovo assente, uso legacy per Aurelio.z8Percorso docstore nuovo assente, uso legacy per Aurelio.zHTrovato database RAG esistente. Caricamento del ParentDocumentRetriever. split_parents)collection_namepersist_directoryembedding_functionc|SN)keys rz4CognitiveService._initialize_agent..ssri() chunk_size chunk_overlap) vectorstoredocstorechild_splitterrag_tool_descriptionTzP================================================================================)r(z$ATTENZIONE: DATABASE RAG NON TROVATOu'La memoria stoica di Aurelio è VUOTAz,Esegui indicizzazione di 'marco_aurelio.pdf'queryreturncgSrArB)rLs rdummy_retrieverz;CognitiveService._initialize_agent..dummy_retrievers rz@MEMORIA NON DISPONIBILE - database vuoto. Non usare questo tool.ctrtds |}nj|}|s yt}g}|D]i}|jxsd}dj |j j}|sC||vsH|j||j|kdj |S)NinvokezNessuna informazione trovata nella mia memoria per questa domanda. Suggerimento: riformula la domanda oppure indicizza i testi (scripts/indicizza_documenti.py). z --- ) callablehasattrrQset page_contentjoinsplitloweraddappend)rLdocsseenunique_contentsdoccontent content_norm retrievers rrun_rag_retrieverz=CognitiveService._initialize_agent..run_rag_retrievers "79h+G '!''.t5D O 4++1r"xx 8>>@ L$<HH\*#**73  4!%%o6 6r rag_tool_nameknowledge_base_search)name descriptionfuncc j|S#t$r }jd|d Yd}~yd}~wwxYw)Nz4Tavily non disponibile o errore durante la ricerca: r8z~Ricerca web non disponibile al momento. Suggerimenti: 1) verifica 'TAVILY_API_KEY'; 2) controlla la rete; 3) riprova tra poco.)runr!r)rLr"r tavily_tools r tavily_safez7CognitiveService._initialize_agent..tavily_safe0sK&??511 HHSTUSVWYbcqs =8=#Ricerca_Web_e_Calcolatrice_AvanzatauLa tua finestra sul mondo moderno. Usalo per trovare informazioni non presenti nei tuoi scritti. Essenziale per dati in tempo reale, news e calcoli. Include fallback con messaggi guidati quando il servizio non è disponibile.debug_intermediatecfd}|S)Nc ddl}|j} |i||j|z dz}jdd|dddS#|j|z dz}jdd|dddwxYw)Nrg@@zTool 'z' eseguito in z.0fz msinfo)time perf_counterr)argskwargsrst0dtfnrgrs r_wrappedzDCognitiveService._initialize_agent.._timed.._wrappedGs**,BS!4262"//1B6&@6$~bXS!I6R#//1B6&@6$~bXS!I6Rs A2BrB)rgryrzrs`` r_timedz2CognitiveService._initialize_agent.._timedFsS r rag_retrieverzLa tua finestra sul mondo moderno. Usalo per trovare informazioni non presenti nei tuoi scritti. Essenziale per dati in tempo reale, news e calcoli. Include fallback con messaggi guidati quando il servizio non ?? disponibile. tavily_search)systema{agent_prompt} Hai accesso ai seguenti strumenti: {tools} Usa ESATTAMENTE questo formato: Thought: [il tuo ragionamento su cosa fare] Action: [una tra: {tool_names}] Action Input: [l'input da passare allo strumento] Observation: [il risultato dello strumento verra inserito qui] ... (questo ciclo Thought/Action/Action Input/Observation puo ripetersi N volte) Thought: Ho trovato la risposta finale Final Answer: [la tua risposta completa in italiano] Begin! chat_history) variable_name)humanzDomanda: {input}) assistantz{agent_scratchpad} agent_prompt)r-generate)agenttoolsverbosehandle_parsing_errorsmax_iterationsmax_execution_timeearly_stopping_methodreturn_intermediate_stepschat_memory_dbzmemory/memoria_chat.sqlitez&AgentExecutor con prompt ReAct creato.)'rrgetboolror r get_data_pathrZlangchain_community.embeddingsr7r!rrgetattrospathexistsrr r pickledumpsloadsr rmemory_availablestrlistr NameErrorr from_messagesrpartialrrrchat_memory_path)rllmvectorstore_rel docstore_relr0embeddings_providerr7r"r* embeddingsr2active legacy_vec legacy_docrHfsstorerag_descriptionrOrdrag_toolrmtavily_safe_toolr{rprompt_templaterrrcrls` @@rr z"CognitiveService._initialize_agenths%++//,0BC  s;  #'t{{7QSX'Y"Z*a8 ++//*>"23!YY44[A 77>>*-HHZ\ef'1$77>>-0!YY44[A 77>>*-HHWYbc$.M 77>>* +}0M HH_ ` TdzDEK .B&r?FLL&,,WE0'=\^_ I#kkoo.DEO$(D ! HHXYH / HH;9H M HH>iH P HHCIH V HHXYH /  s t (I aO$)D !" 7S" 7S" 7R2IJ'"     6a  4-u 5 [[___6MN+O->?H $:cO[9  "8, -:: 4 n = ) /A"< " D 7  ?7 @E H#3?,';UCD"&!",&*749Mu+U&V . 99224;;??CSUq3rs 0 9:y /EaSHfgirs&.# /  F ^  3 3   s<>T;0U**U<; U'U""U'* U98U9<VVrL session_idc|js|jddy |j|rt|dds y t |d|j }t|j}|jj||d }t|d drht|trXd |vrT |jd g}t|d D]0\}} |\} } t| dd} |jd|d| d2 |j||j|jdd|jdd} t| t r5| j#j%} | j'dsd| vr y| S#t$rYZwxYw#t$r|d} } YwxYw#t$rYwxYw#t$r'}|jd|d|dd|cYd}~Sd}~wwxYw)z Metodo pubblico per interrogare l'agente. Punto di ingresso per le richieste API. Gestisce manualmente la memoria conversazionale. u(ERRORE: L'agente non è inizializzato.ruDMi dispiace, il mio nucleo cognitivo non è attualmente operativo.rFuLa mia memoria stoica non è disponibile o non è stata indicizzata. Esegui l'indicizzazione con: 'python scripts/indicizza_documenti.py data/marco_aurelio.pdf' e riprova.z sqlite:///)r connection)inputrrointermediate_steps)r#Ntoolunknownz [DEBUG] Step z: tool=rroutputrRz+Non sono riuscito a formulare una risposta.zagent stopped due to iterationz time limitufRisposta non conclusa per limite di passi/tempo. Riprova oppure riformula la domanda (più specifica).z:ERRORE durante l'invocazione dell'agente per la sessione 'z': u(Si è verificato un errore cognitivo: )rr_is_stoic_queryrr!rrrmessagesrQ isinstancedictr enumerateadd_user_messageadd_ai_messagerstriprZ startswith)rrLrrhistory_messagesresponsestepsistepaction observation tool_namerout_lr"s raskzCognitiveService.asks="" HH? IY ##E*74ASUZ3[!E B1%'(=(='>? L $L$9$9: **11 0 3Ht159jSW>X]qu}]} $LL)=rBE#,U!#<P4=26/FK%,FFI$F =79+!FO P  ) )% 0  ' ' Xr(B C\\(,YZF&#& ,,.$$%EF<[`K`P ME   P )=26KF=!0 B HHQR\Q]]`ab`cdfm n=aSA A  BsFA.G1%F2F'F2B G G FF F/,F2.F//F22 F>;G=F>>G G1 G,&G1,G1textrMcZ|sy|jgd}tfd|DS)NF) stoicstoicauvirtùvirtulogos meditazioniz marco aurelior;epittetosenecaz saggio stoicoc3&K|]}|v ywrArB).0kts r z3CognitiveService._is_stoic_query..s,a16,s)rZany)rrkeywordsrs @rrz CognitiveService._is_stoic_querys. JJL ,8,,,rN)rr)default) __name__ __module__ __qualname____doc__rr#r%rr rrrrrBrrrr$sP6]807B;L `B`B#`BP-C-D-rr)rrlangchain_google_genairlangchain.agentsrrlangchain_core.promptsrr.langchain_community.chat_message_histories.sqlr langchain_core.runnables.historyr 'langchain_community.tools.tavily_searchr langchain.retrieversr langchain.storager r langchain.text_splitterrlangchain_chromarrlangchain.toolsrrrBrrrs?  9>JPGG8@B$? z-z-r