File size: 2,461 Bytes
9884ff8
 
 
 
 
 
b7de8bc
9884ff8
b7de8bc
9884ff8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c7793f6
 
 
 
 
 
 
9884ff8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import os
import time
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings

# Paramètres
DB_PATH = os.path.abspath("../../db")
EMBEDDING_MODEL = "sentence-transformers/paraphrase-multilingual-mpnet-base-v2"
ARCHIVE_DIR = os.path.abspath("../../data/archives_mails")

print("[INFO] Chargement des mails depuis :", ARCHIVE_DIR)
mail_files = [f for f in os.listdir(ARCHIVE_DIR) if os.path.isfile(os.path.join(ARCHIVE_DIR, f))]
print(f"[INFO] {len(mail_files)} fichiers trouvés.")

documents = []
metadatas = []

for idx, filename in enumerate(mail_files):
    file_path = os.path.join(ARCHIVE_DIR, filename)
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()
    except Exception as e:
        print(f"[WARN] Impossible de lire {filename} : {e}")
        continue
    if not content.strip():
        print(f"[WARN] Fichier vide ignoré : {filename}")
        continue
    # Pas de découpage pour les mails : chaque mail = 1 document
    documents.append(content)
    metadatas.append({
        "source": "archive_mail",
        "filename": filename
    })
print(f"[INFO] {len(documents)} mails ajoutés (1 document par mail, pas de découpage).")

print(f"[INFO] Chargement des embeddings ({EMBEDDING_MODEL})...")
embeddings = HuggingFaceEmbeddings(model_name=EMBEDDING_MODEL)

# Charger ou créer la base Chroma existante
if os.path.exists(DB_PATH):
    print(f"[INFO] Ouverture de la base vectorielle existante : {DB_PATH}")
    db = Chroma(persist_directory=DB_PATH, embedding_function=embeddings)
else:
    print(f"[INFO] Création d'une nouvelle base vectorielle : {DB_PATH}")
    os.makedirs(DB_PATH, exist_ok=True)
    db = Chroma(persist_directory=DB_PATH, embedding_function=embeddings)

# Ajout des nouveaux documents
print("[INFO] Ajout des nouveaux mails à la base vectorielle...")
t0 = time.time()
db.add_texts(documents, metadatas=metadatas)
db.persist()
t1 = time.time()
print(f"[SUCCESS] {len(documents)} chunks de mails ajoutés à la base vectorielle en {t1-t0:.1f} secondes.")

# Affichage du total de documents dans la base
try:
    total_docs = db._collection.count()
    print(f"[INFO] Total de documents dans la base vectorielle après ajout : {total_docs}")
except Exception as e:
    print(f"[WARN] Impossible de compter le nombre total de documents : {e}")

print(f"[INFO] La base vectorielle est prête dans : {DB_PATH}")