# Ingestion du matériel de cours Architecture détaillée : `rag-architecture.md`. Dernier rapport d'exécution : `ingestion-report.md`. ## Exécution ```bash pnpm ingest # incrémentale (sommes de contrôle SHA-256 — seuls les fichiers modifiés sont retraités) pnpm reindex # complète (--force) ``` Ou depuis l'admin : Cours & contenu → « Relancer l'ingestion ». ## Ce qui est ingéré | Source | Type | Espace | Fragmentation | |---|---|---|---| | `slides/seanceNN*.tex` | Diapositives beamer | `official-*` | 1 frame = 1 fragment, numéroté comme le PDF (frames `noframenumbering` exclues), boîtes sémantiques étiquetées (Définition/Important/Exemple/Note/Question éclair), tableaux aplatis | | `plan_de_cours.tex` | Plan | `official-*` | Par section/sous-section (+ redécoupage > 1 800 caractères avec chevauchement) | | `exercices/enonce_*.tex`, `solution_*.tex` | Ateliers | `official-*` | Par section/exercice | | `aide_memoire.tex`, `glossaire.tex` | Références | `official-*` | Par section (entrées de glossaire en lignes de tableau) | | `README.md`, `description_moodle.md` | Infos | `official-*` | Par titre | | `examen*`, `*_exam*`, `*solutionnaire*`, `*blueprint*`, `*grille_correction*`, `output/course-analysis/*.md` | Matériel d'évaluation | **`instructor-private`** (invisible aux étudiants) | Par section | | Téléversements étudiants (chat) | PDF/DOCX/XLSX/CSV/TXT | `student-temporary-upload` (lié à la conversation et au propriétaire) | Par page/bloc | **Exclus** : artefacts LaTeX (`.aux`, `.log`…), images, scripts Python/JS, `plateforme_ateliers/` (contient `submissions.db` avec données étudiantes), `.git`. ## Métadonnées par fragment cours, espace, document, type de référence (slide/section/exercise/glossary/page), numéro (diapositive/page), libellé (« Séance 4 — Diapositive 18 »), section courante, titre, types de boîtes, semaine, somme de contrôle du document parent, date d'ingestion, propriétaire éventuel. ## Indexation 1. **FTS5** (`unicode61 remove_diacritics 2`) — « depreciation » trouve « dépréciation ». 2. **Embeddings locaux** `Xenova/multilingual-e5-small` (384 d, préfixes E5 `passage:`/`query:`), stockés en blob ; premier lancement : téléchargement ~120 Mo dans `data/models/`, ensuite hors-ligne. Mesuré sur le corpus réel : 52 fichiers → 2 065 fragments en ~70 s (Apple Silicon). ## Rapport et erreurs Chaque exécution est journalisée (`ingestion_runs`) avec rapport détaillé par fichier (✓/⚠/✗), consultable dans l'admin, et écrite dans `docs/ingestion-report.md` par le script CLI. Un fichier en erreur n'interrompt pas le lot ; il apparaît en statut `error` avec son message.