SihndZddlZddlmZmZddlmZddlmZiaeGddZ Gdd Z y) z@ RAGDocumentManager - Business logic per gestione documenti RAG N)ListOptional) dataclass)datetimecXeZdZUdZeed<eed<eed<eed<eed<eed<eed<y ) DocumentInfozInfo documento RAGfilenametitleauthor chunk_count file_size indexed_date source_pathN)__name__ __module__ __qualname____doc__str__annotations__intfloat+services/ragservice/rag_document_manager.pyrrs+M J KNrrcTeZdZdZdedefdZdZdeefdZ dede fd Z de fd Z y ) RAGDocumentManagerz8Gestisce operazioni CRUD su documenti RAG per un profilo profile_name project_rootc||_||_tjj |dd|d|_tjj |dd|d|_tjj |dd|d|_d|_y)Ndataagents chroma_db doc_store source_docs) rrospathjoin chroma_path docstore_pathsource_docs_path _embeddings)selfrrs r__init__zRAGDocumentManager.__init__s((77<< &(L+  WW\\ &(L+ !# &(L-!   rcb|jtvrt|jS|jV ddlm}t d|j|d|_|jt|j<|jS|jS#t $r}t d|d}~wwxYw)z(Lazy load embeddings (cache per-profile)Nr)HuggingFaceEmbeddingsz9[RAGDocumentManager] Caricamento embeddings per profilo: z&sentence-transformers/all-MiniLM-L6-v2) model_namezdDipendenze RAG non installate. Installa con: pip install langchain-huggingface sentence-transformers)r_EMBEDDINGS_CACHEr+langchain_huggingfacer/print ImportError)r,r/es r_get_embeddingsz"RAGDocumentManager._get_embeddings1s    1 1$T%6%67 7    # GQRVRcRcQdef#8G$ 8<7G7G!$"3"34 t  !\ sA B B. B))B.returnc tjj|jsgS ddlm}|d|j|j }|j}|jdg}|dsgSi}|dD]!}|jdd}|s||vs|||<#g}|jD]\}}|jdd |iig } d} d} tjj|r>tjj|} tjj|} tjj|} d | vr| jd d d n| } |jt| |jd d|jddt!| d| | |t#|ddS#t$$r}t'd|gcYd}~Sd}~wwxYw)u Lista tutti i documenti indicizzati per il profilo Returns: Lista DocumentInfo ordinata per data (più recenti prima) Lista vuota se nessun documento o ChromaDB non esiste rChroma split_parentscollection_namepersist_directoryembedding_function metadatas)includesource$eqwhererA__r r ids)r r r r r rrc|jSN)r)ds rz3RAGDocumentManager.list_documents..s 1>>rT)keyreversez,[RAGDocumentManager] Errore list_documents: N)r%r&existsr(langchain_chromar:r6 _collectiongetitemsgetsizegetmtimebasenamesplitappendrlensorted Exceptionr3)r,r: vectorstore collectionresultsunique_sourcesmetar documents doc_resultsr rrWr r5s rlist_documentsz!RAGDocumentManager.list_documentsJsww~~d../I;  /! /"&"2"2#'#7#7#9K %00J nnk]n;G;'  N , 7"hhx4 ;n#D26N;/ 7 I%3%9%9%; ! T(nn#e[%9:-   77>>+. " >$215x  %((7B/88Hb1 #K$6 7'!- +"% :))A4P P  @D EI s1AG<GG D0G G4G/)G4/G4rc ddlm}|d|j|j}|j}|j dd|iidg}|dr0|j |d td t|dd d}|dD]f}tjj|j|}tjj|sMtj||d z }htd |d tjj|r#tj|td|y#t$r} td| Yd} ~ yd} ~ wwxYw)z Elimina documento e tutti i suoi chunks Rimuove: 1. Vectors da ChromaDB 2. Parent chunks da doc_store 3. File originale da source_docs Returns: True se successo, False altrimenti rr9r;r<rBrDrIrE)rIz[RAGDocumentManager] Deleted z vectors from ChromaDBrHz doc_store filesz%[RAGDocumentManager] Deleted source: Tz-[RAGDocumentManager] Errore delete_document: NF)rQr:r(r6rRrSdeleter3rZr%r&r'r)rPremover\) r,rr:r]r^r_deleted_chunkschunk_iddoc_filer5s rdelete_documentz"RAGDocumentManager.delete_documents_(  /! /"&"2"2#'#7#7#9K %00J nn%!56%G u~!!gen!55c'%.6I5JJ`abN#EN (77<<(:(:HE77>>(+IIh'"a'N  ( 1.1AAQR Sww~~k* +&=k]KL  A!E F sCEA-E E'E""E'c|j}td|D}td|D}t|||t|dz ddS)z&Statistiche knowledge base del profiloc34K|]}|jywrK)r .0rLs r z/RAGDocumentManager.get_stats..s33c34K|]}|jywrK)r rns rrpz/RAGDocumentManager.get_stats..s7Q1==7rqi)document_count total_chunkstotal_size_bytes total_size_mb)rdsumrZround)r,docs total_sizerus r get_statszRAGDocumentManager.get_statssX""$3d33 7$77 "$i( *":#=qA   rN)rrrrrr-r6rrrdboolrkdictr|rrrrrsQB S  $ 2F\ 2FP43444l  4  rr) rr%typingrr dataclassesrrr1rrrrrrsE !!   x x r