KRii|dZddlZddlZddlmZmZddlmZddlm Z ddl m Z m Z ddl mZddlmZGd d Zy) u RAG Retriever - Ricerca semantica nelle Meditazioni di Marco Aurelio Questo modulo gestisce il retrieval semantico dai documenti indicizzati, isolando la complessità di LangChain e fornendo un'API semplice. N)ListOptional)Chroma)ParentDocumentRetriever)LocalFileStoreEncoderBackedStore)RecursiveCharacterTextSplitter)HuggingFaceEmbeddingscReZdZdZdededefdZdefdZd ded edefd Z defd Z y ) RAGRetrieverz9Gestisce il retrieval semantico dai documenti indicizzativectorstore_path docstore_pathembedding_modelcJ||_||_||_d|_d|_y)z Inizializza RAGRetriever. Args: vectorstore_path: Path al database Chroma docstore_path: Path al docstore locale embedding_model: Nome del modello HuggingFace per embeddings NF)r rr retriever available)selfr rrs T/mnt/ssd/data/python-lab/Jarvis-Cognitive/services/cognitiveservice/rag_retriever.py__init__zRAGRetriever.__init__s*!1*.returnc"tjj|jr)tjj|js+t d|jt dd|_y t d|jt|j}t d|jtd|j|}t d |jt|j}t|d tjtj}t||t!d d |_d|_t dy#t$$r}t d|d|_Yd}~yd}~wwxYw)z Inizializza il retriever caricando il database RAG se esiste. Returns: True se inizializzazione ha successo, False altrimenti z[RAG] Database non trovato in: z][RAG] Esegui indicizzazione con: python scripts/indicizza_documenti.py data/marco_aurelio.pdfFz[RAG] Caricamento embeddings: ) model_namez"[RAG] Caricamento vectorstore da: split_parents)collection_namepersist_directoryembedding_functionz[RAG] Caricamento docstore da: c|S)N)keys rz)RAGRetriever.initialize..Assri() chunk_size chunk_overlap) vectorstoredocstorechild_splitterTu.[RAG] ✅ Retriever inizializzato con successou+[RAG] ❌ Errore durante inizializzazione: N)ospathexistsr rprintrrr rrrpickledumpsloadsrr r Exception)r embeddingsr%fsstorees r initializezRAGRetriever.initialize$sYww~~d334BGGNN4K]K]<^ 3D4I4I3JK L q r"DN#  243G3G2HI J.$:N:NOJ 6t7L7L6MN O /"&"7"7#-K 3D4F4F3GH I 2 23B&r?FLL&,,WE5'=""$ DN"DN B C  ?sC D"DN s?C&E&& F/F  Fquery max_resultsc|jr |js y |jj|}|s yt}g}|d|D]i}|jxsd}dj |j j}|sC||vsH|j||j|k|sydj |} | S#t$r} td| d | cYd} ~ Sd} ~ wwxYw) aF Cerca nei documenti indicizzati. Args: query: Query di ricerca max_results: Numero massimo di risultati da ritornare Returns: Testo formattato con i chunk rilevanti trovati, oppure messaggio di errore se RAG non disponibile o nessun risultato ujLa memoria stoica non è disponibile. Esegui: python scripts/indicizza_documenti.py data/marco_aurelio.pdfz`Nessuna informazione trovata nelle Meditazioni per questa domanda. Prova a riformulare la query.N z7Nessun contenuto rilevante trovato dopo deduplicazione.z --- u![RAG] ❌ Errore durante search: z-Errore durante la ricerca nelle Meditazioni: ) rrinvokeset page_contentjoinsplitloweraddappendr/r+) rr5r6docsseenunique_contentsdoccontent content_normresultr3s rsearchzRAGRetriever.searchVs~~T^^W   G>>((/D4 5D OL[) 4**0b"xx 8>>@ L$<HH\*#**73  4#P#''8FM G 5aS9 :B1#F F Gs5CACC&C;C C4C/)C4/C4c|jS)u<Ritorna True se il retriever è disponibile e pronto all'uso)r)rs r is_availablezRAGRetriever.is_availables ~~rN)) __name__ __module__ __qualname____doc__strrboolr4intrIrKrrrr r sXC  S SV 0D0d/GC/Gc/G#/Gbdrr )rPr(r,typingrrlangchain_chromarlangchain.retrieversrlangchain.storagerrlangchain.text_splitterr langchain_community.embeddingsr r rrrrZs0  !#8@B@wwr