diff --git a/index.py b/index.py index 0faab64..595d9b8 100644 --- a/index.py +++ b/index.py @@ -1,8 +1,8 @@ #!/usr/bin/env python3 """ Indexation du répertoire Fiches avec BGE‑M3 (FlagEmbedding) + FAISS. -Découpe les documents markdown en blocs de ~800 tokens, génère les embeddings, -et écrit corpus.idx et corpus.meta.json à la racine. +Parcourt récursivement tous les fichiers markdown / texte (extensions .md, .MD, .markdown, .txt), +découpe en blocs de ~800 tokens, génère les embeddings, et écrit corpus.idx + corpus.meta.json. """ from pathlib import Path @@ -13,12 +13,13 @@ import numpy as np from FlagEmbedding import BGEM3FlagModel # --- Paramètres ------------------------------------------------------------- -ROOT = Path("/app/Fiches") # dossier monté contenant les fiches .md -MODEL_NAME = "BAAI/bge-m3" # embedding multilingue, licence MIT +ROOT = Path("/app/Fiches") # dossier monté contenant les fiches +MODEL_NAME = "BAAI/bge-m3" # embedding multilingue, licence MIT CHUNK = 800 # taille cible (≈600 mots) OVERLAP = 100 # chevauchement pour la cohésion INDEX_FILE = "corpus.idx" META_FILE = "corpus.meta.json" +EXTENSIONS = ["*.md", "*.MD", "*.markdown", "*.txt"] # --- Fonctions utilitaires -------------------------------------------------- @@ -37,14 +38,22 @@ def split(text: str, chunk_size: int = CHUNK, overlap: int = OVERLAP): # --- Pipeline principal ----------------------------------------------------- +def gather_files(root: Path): + for pattern in EXTENSIONS: + yield from root.rglob(pattern) + def main(): docs, meta = [], [] - for fp in ROOT.rglob("*.md"): + + for fp in gather_files(ROOT): text = fp.read_text(encoding="utf-8", errors="ignore") for i, chunk in enumerate(split(text)): docs.append(chunk) meta.append({"file": fp.relative_to(ROOT).as_posix(), "part": i}) + if not docs: + raise SystemExit("Aucun fichier trouvé dans /app/Fiches. Vérifiez le montage ou les extensions.") + print(f"Découpé {len(docs)} passages, génération des embeddings…") model = BGEM3FlagModel(MODEL_NAME, device="cpu")